Invented order and the four ways to get the base total wrong
One invented order of 100.00 USD is invoiced in a GBP file at an invented 1.25 USD per 1 GBP, so the correct base total is 80.00 GBP. Xero expresses a rate as foreign per one unit of base, and QuickBooks Online expresses it as home units per one foreign unit, so the stored numbers differ. The lower block shows source amounts in the smallest currency unit.
If the matrix is wider than the box, scroll horizontally to read every column. Keyboard: focus the matrix and use Left/Right.
invented order: 100.00 USD, home currency GBP, 1.25 USD per 1 GBP
target style stored rate base total check
Xero (foreign per base) 1.25 100.00 / 1.25 = 80.00 correct
QuickBooks (home/foreign) 0.80 100.00 x 0.80 = 80.00 correct
Xero, copied 0.80 0.80 100.00 / 0.80 = 125.00 WRONG, +45.00
QuickBooks, copied 1.25 1.25 100.00 x 1.25 = 125.00 WRONG, +45.00
default rate of one 1.00 100.00 / 1.00 = 100.00 WRONG for a real conversion
source amounts in the smallest unit (Stripe style)
currency source amount decimals correct value if divided by 100
GBP 1099 2 10.99 10.99
USD 10000 2 100.00 100.00
JPY 5000 0 5,000 50 (WRONG)Checks this gives you
For each foreign test invoice recompute the base total from the stored rate in the target's documented direction and compare it with the expected base total; a mismatch of this size is never rounding. Assert that no foreign invoice carries a rate of one unless an agreed rule names it. For each source field state whether it is in minor or whole units and test one zero-decimal currency.
- An inverted rate gives a base total wrong by a factor equal to the rate squared (here 1.5625, so 80.00 becomes 125.00), which is never rounding.
- A value wrong by exactly 100 is typical of a minor-unit mistake in a zero-decimal currency.
- An order in a currency not enabled in the file should be held, not posted in the home currency.
What was and was not exercised
The arithmetic was recomputed independently. No exchange-rate source, Xero organisation, QuickBooks company or payment account was used, and 1.25 is not a market rate. Xero documents its direction and says never to default a rate of one; Intuit documents the opposite direction and that multicurrency cannot be disabled once enabled; Stripe documents smallest-unit amounts and zero-decimal currencies.
Using the example
The fixed-price job "Make foreign-currency orders create invoices in the right currency, with the right rate" is from £395 for up to three currencies, an untested published price confirmed after your enquiry, with payment after the agreed checks pass and you sign off. Its acceptance tests are these checks on your invented orders. Which rate to use remains your accountant's decision. Send invented examples and counts first, never credentials, bank details, invoices or customer records; real records are handled only after written agreement through a secure handoff.
Sources and limits
- Xero: multicurrency best practice Checked 2026-10-11.
- A CurrencyRate is expressed as foreign currency per one unit of base currency, and Xero says many integrations send the inverse.
- A rate of one should never be defaulted; the rate may be omitted so Xero picks one, and should be set only when a real foreign-exchange transaction took place.
- Currencies must be added to the organisation before multicurrency documents can use them, and currencies cannot be removed once added.
- Xero returns non-blocking validation warnings for rates that look inverted or out of range.
- Intuit: manage multiple currencies Checked 2026-10-11.
- Multicurrency can only be enabled in the QuickBooks Online product, not through the API, and cannot be disabled once enabled.
- Exchange rates are recorded as the number of home-currency units that equal one foreign-currency unit.
- Stripe: supported currencies Checked 2026-10-11.
- All API amounts are in the currency's smallest unit, so 1000 is 10.00 for a two-decimal currency, while for a zero-decimal currency such as JPY 10 means 10 yen.
- ISK and UGX must be represented as two-decimal values with the decimals always 00, and HUF and TWD are zero-decimal for payouts.