Documentation

Multi-currency accounting and FX

How Qontab stores currency, exchange rate and base-currency amounts on every line, refreshes historical rates and books FX gains and losses.

What multi-currency accounting is

Multi-currency accounting means you record each transaction in the currency it really happened in, while your accounts still close in a single base currency. A Mauritius company billing clients in EUR, paying a supplier in USD and holding a GBP account does not keep three sets of books — Qontab stores the original currency on every line and, beside it, the same amount converted to your base currency at the rate for that date. You see real foreign amounts where they belong, and every report consolidates into one currency.

That dual record is what makes foreign trade auditable: the native amount matches the invoice or bank statement exactly, and the base amount is what flows into your profit & loss, balance sheet and tax.

What every line stores

Conversion is not a display trick layered on at report time — it is baked into each journal line when you post. Every line carries four FX fields:

  • currency — the currency the line is actually in (e.g. USD).
  • exchange_rate — the rate from that line’s currency to your base currency, fixed at the transaction date.
  • base_debit and base_credit — the debit and credit already converted into base currency, so reports never re-convert on the fly.

Because the base amounts are stored, not recomputed each time you open a report, your historical figures stay stable: a rate that moves tomorrow does not silently rewrite last quarter’s numbers. Lines already in the base currency simply carry rate 1.

Where rates come from

When you post a foreign-currency transaction, Qontab resolves the historical rate for that exact date — this is resolveExchangeRate running at posting time. It first looks for a stored rate, then fetches a missing one online and saves it, so you rarely pre-load anything. The lookup is strict: if no rate can be found it stops and asks you to enter one, and never falls back to booking a foreign amount at rate 1 (which once turned a USD 5,000 invoice into MUR 5,000).

  • Frankfurter — the free European Central Bank feed (no key, daily rates back to 1999) is tried first for the major currencies it publishes.
  • fxratesapi.com — a second free provider covers the codes Frankfurter does not, notably the Mauritian rupee (MUR).
  • Manual — for any date neither provider can serve, you enter the rate once in Settings → Currencies and it is reused everywhere.

Refreshing historical rates

The Refresh FX rates button on the Transactions and Expense reports pages re-resolves the rate — and the derived base_debit / base_credit — for every foreign-currency line, each at its own entry date. It is strict too: it auto-fetches any missing historical rate from the providers and only reports the lines where every provider failed, so you know exactly which ones still need a manual MUR rate.

Run it after a late-arriving rate, after correcting an entry’s date, or after you change your base currency — in that last case, lines that now match the new base are pinned back to rate 1. Already-correct lines are left untouched.

Tip

Posted history stays put. Refresh only updates rates and the stored base amounts — it never invents rates, so a line with no available rate is flagged rather than guessed.

FX gains and losses

A rate moves between the day you raise an invoice and the day it is paid. When you settle in a different currency, the base value received rarely equals the base value originally booked, and that difference is a real gain or loss. Qontab books it automatically on cross-currency settlement: an extra balancing line to Realised FX Gain or Realised FX Loss, so the entry stays balanced in base currency and the result lands in your P&L.

This keeps invoice settlement honest — you record what actually arrived in the bank, not a back-dated guess — and your financial reports reflect the true cost of trading across currencies.

With AI (MCP)

Connected to an AI assistant through the Qontab MCP connector, refreshing rates is a sentence. The tool recompute_fx_rates re-resolves the historical rate and the stored base amounts for every foreign-currency line, auto-fetching what it can and handing back any line that still needs a manual rate — the same strict behaviour as the button, driven in plain language.

Ask your assistant

“Refresh the FX rates on all my foreign-currency entries and tell me which ones you couldn’t find a rate for.”

FAQ

Which currency do my reports come out in?

Always your base currency. Qontab stores the original currency on every line but also keeps the base-currency amount alongside it, so the profit & loss, balance sheet and trial balance consolidate every transaction into one currency no matter how many you trade in.

Why does Qontab refuse to post and ask me for a rate?

Because rate resolution is strict: it never silently posts a foreign amount at rate 1. If no historical rate can be found for that currency and date — even after trying the online providers — Qontab stops and asks you to enter the rate in Settings → Currencies rather than booking a wrong base amount.

Does Qontab handle the Mauritian rupee automatically?

Mostly. Frankfurter, the free ECB feed Qontab uses first, does not publish MUR, so a second free provider (fxratesapi.com) covers it. When neither has a rate for a given date, you enter that one MUR rate by hand — every other major currency is fetched for you.