Skip to content
Firmspace
Back to blog

The Rate Frozen on the Invoice: Why the Assistant Reports Four Totals

A small firm with customers in two countries asks its assistant a simple question: how much money is owed to us right now. The answer that comes back is not one figure. It is several lines, each in its own currency, with no grand total underneath. That is not a missing feature. It is the accounting position of the product, and it is worth understanding before you trust a number.

Start with the document. A Firmspace invoice has a currency field, and everything inside it is counted in that currency: quantity times price for each line, tax for each line at its own rate, then net, tax and gross. The arithmetic function that does this has no currency parameter at all — it adds numbers that already belong to one document. Nothing inside a single invoice is ever converted.

The firm itself has a home currency. It comes from the finance settings if the owner chose one, otherwise from the market the account belongs to: a German firm gets the euro, a Ukrainian firm the hryvnia, an Uzbek firm the sum. When the assistant drafts an invoice from a conversation, it takes that currency unless the owner names another one in the same sentence.

A document in another currency carries a rate, and that rate is a snapshot, not a live value. The code asks the central bank — the NBU for Ukrainian firms, the central bank of Uzbekistan for Uzbek firms — takes the published rate for the document date, applies the firm's own margin from the settings, and stores base, margin, value and date on the document itself.

Why store it? Because an invoice is a record, not a calculator. If the PDF is reopened in a year, it must show the same figures it showed on the day it was issued. When the document is rendered, the stored rate wins over the current one; the live rate is only a fallback for documents that never got a snapshot.

And when no rate can be found — the bank did not answer, the currency is not in the list, the connection is down — the snapshot stays empty. Zero in the rate field, no invented figure. The assistant says the rate is unavailable rather than quietly picking a number out of the air. The same discipline runs through the product: a number without a source is not a number.

The overview tool the assistant uses for money questions returns counts and maps. Counts are safe across currencies: an unpaid invoice is an unpaid invoice. Amounts are not: the result carries unpaid by currency, overdue by currency, received this month by currency, spent this month by currency. Four maps, no total field. There is simply nowhere to put a single figure.

The same rule holds one level down. In a list of invoices, each row carries its own currency, and the amount still open is computed inside that currency: gross minus whatever has already been recorded as paid. A partial payment does not close an invoice — it reduces the open amount, and the invoice becomes paid only when the received sums cover the gross.

Overdue days are the exception that proves the rule: a day is a day in every currency. That is why the assistant can rank overdue invoices in a mixed portfolio without converting anything, and why it cannot rank them by size without asking which currency you mean.

Expenses follow the same pattern: a list of expenses comes back with a total per currency, not a total. The bank side is consistent too — an imported statement row is written in the currency of the account it came from, and the account knows its currency from the bank.

So what should a person do with the answer? Read it as a portfolio, not as a balance. If the owner needs one number in one currency, the honest path is to choose the rate and the date: the rate of the invoice date, today's rate, the central bank rate or the firm's rate with margin. Each choice gives a different total, and every one of them is a decision, not a fact.

On the PDF of a Ukrainian firm there is a hryvnia line next to the document total. It is a reference printed at the frozen rate for the reader's convenience, not a second payable amount. The invoice is still settled in the currency written at the top.

What this article does not claim: how many firms actually keep multi-currency books, what share of invoices are foreign, or what conversion costs a bank charges. Those figures require access to real books, and they are not in the code. What is in the code is the rule: the assistant reports what the documents say, currency by currency, and leaves the conversion to the person who owns the risk.

The practical takeaway is short. When the assistant answers a money question with several currencies, it is not being difficult. It is refusing to make an exchange-rate decision on your behalf — and that refusal is the most useful part of the answer.

Let us automate your next process together.

Describe a recurring workflow to us. Together we will check whether and how it can be automated sensibly.