Multicurrency
You can invoice a customer in USD, be billed by a supplier in EUR, and hold a foreign currency bank account, while your reports stay in your own base currency.
Every transaction stores two amounts: what actually changed hands, and what it was worth in your base currency at that moment. Reports read the base amount, so figures in different currencies are never added together as if they were the same thing.
Realized gain and loss
Exchange movement becomes real when a foreign balance is settled.
A worked example, with a base currency of KES:
15 March Invoice a customer USD 1,000 at 130.00 recorded as KES 130,000 receivable
20 April They pay USD 1,000, the rate is now 134.00 you receive KES 134,000
You are 4,000 better off. The customer paid exactly what they owed, so this is not extra income from the sale. It is exchange gain, and it is posted separately to Exchange Gain or Loss.
The critical detail: receivables are relieved at the invoice's own rate, not at the payment's. The invoice put 130,000 into receivables, so 130,000 comes out. Anything else would leave the customer showing a balance after they had paid in full, which is the most common multicurrency bug in accounting software.
The same applies in reverse on the purchase side, and a rate that moves against you posts a loss on the same account.
Unrealized gain and loss
At period end you may still be holding foreign balances that have not settled: unpaid foreign invoices, unpaid foreign bills, money sitting in a foreign currency account.
Those balances are still carried at the rate that applied when they arose, which is no longer what they are worth. Revaluing them brings the carrying value up to date and posts the difference.
This is unrealized. Nothing has settled and the rate may move back before it does. Upscale records it as unrealized so your profit and loss can present the two separately. Some products label this movement "realized", which overstates how certain it is.
Two things follow, and both matter:
- A second revaluation posts only the movement since the first one, not the whole difference from the original rate.
- When the balance eventually settles, the realized gain is computed against the revalued carrying amount, so the movement is never counted twice.
Revaluing is a deliberate act, not something that happens quietly. You choose the currency, the rate and which balances to include, and you see every line before anything posts.
Rates
You enter the rate on each transaction. There is no rates table to maintain and no automatic feed, because a wrong automatic rate is harder to notice than a wrong typed one, and Kenyan bank rates differ from published mid-market rates anyway.
The rate you used is stored on the transaction. It is never recalculated later.
Foreign currency accounts
A bank account can be denominated in a foreign currency. Its statement must be in that same currency too: Upscale refuses a statement whose currency does not match the account rather than silently converting it.
The account register shows both columns, the currency the account holds and its base currency value, so the running balance stays readable.