A Dollar Invoice in a Shilling Ledger
A USD 1,000 invoice used to reach a shilling ledger as 1,000. Since 14 October every foreign-currency invoice and supplier bill carries its exchange rate, posts in your base currency at that rate, and books the difference as a realised gain or loss when it is paid at another. Without a rate, nothing posts at all.
A Nairobi logistics company invoices a Kampala client in US dollars and buys spares from a Dubai supplier in dollars too. Its books are in Kenya shillings, because that is what KRA, the bank and the board read. Somewhere between the dollar document and the shilling ledger, a number has to be multiplied by a rate — and the question that decides whether the accounts are right is not how, but which rate, recorded where, and when.
Our take
A ledger in one currency needs one conversion per document, at a rate somebody recorded and can defend, and a gain or loss booked when the money actually moves at a different one. That is what AWRA does now. If your workspace has dollar or euro invoices or bills from before 14 October, open them this week: any that show the rate-needed panel are not in your books yet, and recording the rate puts them there.
What used to happen
Journal lines in AWRA carry an amount, and every statement — trial balance, profit and loss, balance sheet — adds those amounts up. Before this release a document in another currency posted its own figure. A USD 1,000 invoice put 1,000 on the receivables line of a ledger kept in shillings, and the balance sheet then understated that receivable by a factor of about 130.
Most workspaces never saw it, because most invoice only in their base currency. The ones that did were exactly the ones for whom the accounts mattered most: exporters, regional distributors, NGOs paid by donors in dollars, firms buying in from abroad.
The rate lives on the document
A foreign-currency invoice or supplier bill now carries the exchange rate it is booked at: shillings, or whatever your base currency is, per one unit of the document’s currency, on the document’s date. It is recorded on the document itself — from its page on the web, through the API or in the app — and once saved it cannot be changed. A rate that could be edited after the fact would let anyone move a figure already in the books.
Everything that posts from that document uses that one rate: the invoice and its credit notes, the bill with its expense and tax lines, withholding booked against it. POS sales and online collections through M-Pesa, Paystack or IntaSend carry their own recorded rate in the same way. Each journal line keeps the document’s currency, the rate and the original foreign figure beside the converted amount, so the conversion can always be read back.
One case is handled for you. A bill against a purchase order whose goods were already received in dollars takes the rate those receipts were booked at, unless someone records a different one on the bill. The goods reached the books at that rate when they arrived, and clearing the payable at any other would leave a residue nobody owes.
Paid at a different rate, a gain or a loss
A dollar invoice raised on the first of the month is rarely paid at the same rate three weeks later. The payment form asks for the rate on the day paid, and leaving it empty uses the document’s. The receivable or payable clears at the document’s rate, exactly what was put on it; the cash moves at the payment’s; and the difference goes to an Exchange Gains and Losses account, so the entry balances by construction.
A USD 1,000 invoice, paid three weeks later
The customer paid every dollar they owed. The shillings were worth less on the day, and the ledger now says so in a named account rather than leaving 700 stranded on the receivable.
A supplier bill runs the other way: paying a dollar bill when the shilling has strengthened costs fewer shillings than the payable carried, and that difference is a gain. Same account, same mechanism.
No rate, no posting
The decision that matters most is what happens when the rate is missing. There were two tempting answers and both are wrong. Posting the raw figure is wrong by the whole exchange rate. Fetching today’s rate at the moment of posting looks helpful and is wrong in a quieter way: it is the rate of the day somebody clicked, not the day the document was raised, and nobody chose it.
So a foreign document with no recorded rate does not post, and neither do its payments. The document shows that it is waiting for a rate, the refusal is written to the audit log, and the moment someone records the rate the document and its payments go to the ledger together. A payment that arrives in a third currency — a euro payment against a dollar invoice — is held and flagged in the same way rather than guessed at.
A figure missing from the ledger shows up as a question. A figure posted at the wrong rate shows up as nothing at all.
Journals from before 14 October
Foreign-currency documents that posted their own figure before this release are re-posted in base currency by a correction run, at the rate recorded on each document. Any that have no rate stay off the books, show the rate-needed panel, and wait for one.
What the reports still will not do
This is a change to the ledger, not to how AWRA shows money elsewhere. The ledger converts once, at the rate on each document, and statements read the ledger in base currency. Operational reports that show document figures — an ageing list, a sales summary — still never add shillings to dollars, and never convert at a rate nobody recorded. Where a total spans currencies, it shows the largest currency and says what else is there. The display rule is set out on multi-currency.
| Where | What you see |
|---|---|
| General ledger and statements | Base currency, each document converted at its own recorded rate |
| Exchange Gains and Losses | Realised differences, booked when a payment settles at another rate |
| A document with no rate | Off the ledger, marked as waiting for a rate, refusal in the audit log |
| Operational reports across currencies | Never summed across currencies; one currency at a time, the rest disclosed |
How invoices and bills reach the ledger generally is on the general ledger and supplier bills and payables.
The rest of the foreign-currency books
Rates on documents, base-currency posting and realised gain or loss are in place on the web, the app and the API. These are the next pieces for organizations that carry foreign balances across a month end.
Period-end revaluation
Open dollar receivables and payables restated at the closing rate, with the unrealised difference posted and reversed on the first of the next month.
Daily rate capture
A rate table filled each day from a source you choose, offered as the default when a document is raised so nobody types it.
Accounts in their own currency
A dollar bank account that holds dollars in the ledger, rather than every account being kept in base currency.
A rate on the purchase order
Agreed when the order is placed, so receipts value at it instead of at the spot rate on the day goods arrive.
Tell us which currencies you trade in and how you close the month, and we will return a written scope and cost.
Scope multi-currency booksWhat AWRA OpsHub does today
- An exchange rate recorded on each foreign-currency invoice and supplier bill, on the web, through the API and in the app, fixed once saved.
- Base-currency posting at the document’s rate for invoices, credit notes, customer payments, supplier bills, supplier payments, withholding, online collections and POS sales.
- Realised exchange gain or loss booked to Exchange Gains and Losses when a payment settles at a rate other than the document’s.
- No posting without a rate: the document shows it is waiting for one, the refusal is audited, and recording the rate posts the document and its payments.
- A correction run for older journals that posted a foreign figure as if it were base currency.
More we can add to your workspace
- Unrealised revaluation at period end, restating open foreign balances at the closing rate.
- Accounts kept in their own currency, such as a dollar bank account held in dollars.
- Automatic daily rate capture from a published source.
- Settlement in a third currency, such as a euro payment against a dollar invoice, which is held and flagged today.
- A rate agreed on the purchase order, so receipts value at it rather than at the spot rate.
Where we point you to a specialist
- We will not convert at a rate nobody recorded. A rate fetched at posting time is the wrong day’s rate, and a figure posted at it looks right and is not.
- We will not add different currencies together in a report. A total in two currencies is not a number, and printing one would be inventing it.
Revaluation, daily rates and accounts in their own currency build on the rate, the conversion and the gain-or-loss account that now exist — each is a written specification and a price.
Ask any system that takes a foreign invoice
Which rate does a foreign invoice post at, and where is it recorded?
A good answer sounds like
A rate on the document, from its date, kept on the journal line.
What it tells you
If the answer is today’s rate, the ledger moves every time someone re-posts.
What happens when it is paid at a different rate?
A good answer sounds like
The receivable clears at the invoice rate and the difference goes to a gain or loss account.
What it tells you
Otherwise the difference sits on the receivable for ever.
What happens when no rate is available?
A good answer sounds like
Nothing posts, and the document says why.
What it tells you
A system that posts anyway has chosen a wrong number over a missing one.
See how other currencies are shown and posted
Documents in the currency you trade in, a rate on each one, a ledger in your base currency, and reports that never add one currency to another.
Explore multi-currencyFrequently asked questions
How does a US dollar invoice post to a Kenya shilling ledger?
At the exchange rate recorded on the invoice. Every journal line from it is converted into your base currency at that one rate, and the dollar figure and the rate are kept on the line beside the shilling amount.
Can the exchange rate on an invoice or bill be changed later?
No. Once a rate is recorded on the document it is fixed, because the ledger was posted at it. A payment can carry its own rate on the day paid, and the difference is booked as an exchange gain or loss.
What happens to a foreign-currency document with no exchange rate?
It does not post to the ledger, and neither do its payments. The document shows that it is waiting for a rate and the refusal is written to the audit log. Recording the rate posts the document and its payments.
Does AWRA revalue open foreign balances at month end?
Not yet. Realised gains and losses are booked when a payment settles; unrealised revaluation at period end is something we can add for your workspace.
Do reports add amounts in different currencies together?
No. The ledger and statements are in your base currency because each document was converted once at its own rate. Operational reports that show document figures never add different currencies or convert at an invented rate.