Ask AwraIQ about features, pricing, onboarding, login, integrations, security, demos, mobile apps, automation, reports, or support.
We never invent a rate.
We never add.
Trade in three currencies and most systems will hand you one number, silently summed at some rate, from some day, reconciling to nothing. We show you the largest real total, labelled with its code, and tell you what else is there.
Three real balances. There is no honest single number that combines them without naming a rate and a date — so we do not print one.
One number, two ways to produce it.
This is the AR aging report. On the left, what most systems print. On the right, what we print instead.
- It needs a rate, and nothing on the page says which one.
- It needs an as-at date, so the same closed period reads differently next week.
- It ties to no ledger, so nobody can check it.
- It needs no rate, so there is nothing to argue about.
- It is true at every viewing, including a year from now.
- It reconciles, and it tells the reader there is more to look at.
Where it applies
Everywhere a single figure is shown: the aging report, the dashboard, the top-customers report and credit-hold exposure all read their totals through the same rule, so none of them can sum dollars into shillings or print a total with no currency label. Each one also takes its decimal places from the currency rather than assuming two.
The books convert once — at the rate on the document.
The rule above is about totals a person reads. The ledger is different: it holds one currency, your base, so a foreign document has to be converted to reach it. It is converted exactly once, at the rate recorded on that document — never today’s rate, and never again later.
01 · Recorded
The rate lives on the document
Enter the exchange rate on a customer invoice or a supplier bill — on the web, through the API or in the app. It is set once: a rate that has already posted cannot be edited, because the postings would no longer agree with the document.
02 · Posted
It posts in your base currency
Invoices, credit notes, customer payments, supplier bills, supplier payments, withholding, online collections and POS sales all post in your base currency at the document’s rate. Each ledger line keeps the document’s own currency, rate and figure beside the converted amount.
03 · Settled
Realised gain or loss on payment
When a payment settles at a different rate from the document, the difference is booked to an exchange gains and losses account, so the receivable or payable clears to exactly nothing.
04 · Refused
No rate, no posting
A foreign document with no rate is never posted at a guess. It shows that it is waiting for a rate, the refusal is in the audit log, and recording the rate makes the postings that were waiting.
Being built: period-end revaluation of open balances (unrealised gain or loss), automatic daily rate capture, a currency per ledger account, and a rate on purchase orders — goods received against one are valued at the spot rate today. A collection paid in a third currency stays flagged for review rather than guessed at.
UGX 1,234.56 is not a rounding quirk.
It is an amount that cannot exist, printed as though it does. Two decimal places is a habit, not a rule — across the 137 currencies in the 188 shipped country rows, 26 are written with none and 6 with three.
The bigger half, and the easier one to miss. XOF alone covers the eight UEMOA states and XAF the six of CEMAC, so a single line in this list reaches fourteen countries.
A Tunisian tax total of 201.900 is stored and shown with all three places; a two-place system prints 201.90. The missing digit is a millime, and it is the difference between a figure that foots and one that does not.
Where the answer comes from
ICU, not a list we keep
The framework already ships the minor units, and measured against all 137 currencies in the shipped rows there are zero unknowns. A hand-kept table would be a second copy of a fact somebody else maintains — and second copies are how these things drift.
The honest wrinkle
ICU is not ISO 4217
ICU gives the digits a currency is written with in practice, which for a subunit inflated into disuse is fewer than ISO still assigns. The sharpest case is IQD — three places by ISO, zero by ICU. For display, practice is the answer we want, and we would rather tell you than have you find it.
“Largest” is weaker than it sounds.
Without a rate, the only ordering available is by nominal amount — and nominal amounts are not comparable across currencies. Watch:
So a surface with a base currency passes it, and that currency leads whenever it is present — it is the one you think in, and it does not reshuffle as balances move. Nominal ordering only ever arranges the disclosed remainder; it is never used to claim one exposure is bigger than another. Where a whole report needs one basis, scope it to one currency rather than asking a mixed figure to carry the weight.
Asked by finance.
- Does AWRA OpsHub convert currencies on reports?
- Not a report total, and that is deliberate. A total converted for display needs a decision about which rate and as at when, it moves between two viewings of the same closed period, and it ties to no posting. Instead a single figure shows the largest single-currency total with its code, and names how many other currencies sit behind it. Conversion happens in one place only: the ledger, once, at the rate recorded on each document.
- What happens when a report mixes currencies?
- It shows the largest single-currency total, labelled with its code, plus an affordance naming the remainder. Unlike currencies are never added together. Where a whole report needs one basis, scope it to one currency instead.
- How are decimal places decided?
- From ICU, through Symfony's Intl component, which already ships with the framework. Of the 137 currencies across the shipped country rows, 26 are written with no decimal places and 6 with three. A hand-kept table would be a second copy of a fact somebody else already maintains.
- Why does my currency show no decimal places?
- Because it is written that way in practice. Shillings in Uganda, francs across UEMOA and CEMAC, yen, won and 20 others carry no minor unit in daily use, so a figure like UGX 1,234.56 describes an amount that cannot exist. Six currencies go the other way and carry three places, including the Tunisian dinar.
- Is the exchange rate used anywhere?
- Yes, in your ledger. You record the rate on a foreign-currency invoice or supplier bill, and the document posts in your base currency at that rate — as do its credit notes and payments. When a payment settles at a different rate, the difference is booked as a realised exchange gain or loss. The document itself keeps its own currency and figure. Separately, your AWRA subscription is priced in Kenyan shillings and shown in dollars at a live rate.
- What happens to a foreign invoice with no exchange rate?
- It is not posted. Posting it at its face value would be wrong by the whole exchange rate, and fetching a rate at posting time would use the wrong day. The invoice or bill shows that it is waiting for a rate, the refusal is in the audit log, and recording the rate makes the postings that were waiting. A rate is set once; a rate that has already posted is changed by a credit note and a new invoice.
- Does AWRA OpsHub revalue open foreign balances at period end?
- That is being built, together with automatic daily rate capture. Today the realised gain or loss is booked when a payment settles; an open receivable or payable stays at its document rate until then.
- Which currency leads when several are present?
- A surface with a base currency passes it, and that currency leads whenever it appears — it is the one the reader thinks in and it does not reshuffle as balances move. Without one, ordering falls back to nominal amount, which is why passing a base currency is worth doing.
Help Center
Need a quick answer while you read?
Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.