Work snippetMulti-currency

Multi-currency invoices, payments and revaluation from Jobber to Xero

How I would approach CAD and GBP clients for a 12-tech installer with a USD ledger, so each invoice and payment carries a stored rate, the difference is posted as a realised gain or loss, and open items are revalued at month end.

Work snippet with example figures.

Area
Multi-currency
Tools
Jobber · Xero
Typical scope
US$2,000–3,600
Timeline
About 5 weeks · 4 fixed milestones

Context and systems map

A 12-tech specialist installation business based in one country that also serves clients in two others. The ledger is in USD, the client base is billed in CAD and GBP, and Jobber holds the clients and invoices. Today the foreign invoices are keyed into Xero by hand at whatever rate the bookkeeper remembers.

The systems in play

In the example each client carries a currency, invoices reach Xero in that currency at a defined rate, payments are recorded at the rate on the day, and the difference is posted to a gain or loss account instead of vanishing into a rounding line.

Systems map: who uses what
SystemWhat it does for the business
JobberClients, quotes, jobs and invoices. The currency is held as a field on each client in the example.
XeroLedger in USD with CAD and GBP enabled, foreign currency invoices, payments and a revaluation at month end.
Rate sourceOne published daily rate table used for every conversion, saved with each document.
Sync flowA scheduled flow that creates invoices and payments in Xero in the client’s currency.
BookkeeperWorks the exceptions list and posts the month-end revaluation.
AccountantApproves the gain and loss accounts and the revaluation method.

How the data moves

  1. Client currency set in Jobber
  2. Invoice in client currency
  3. Invoice in Xero with the day’s rate
  4. Payment at the payment-day rate
  5. Realised gain or loss
  6. Month-end revaluation of open items

Problem

What the owner sees

  1. Invoices in foreign currency that arrive in the ledger as one lump of US dollars
  2. Customers who underpay by the bank fee and nobody knows why
  3. Month-end balances that do not move with the exchange rate
  4. A reconciliation difference every month that nobody can explain

Foreign currency adds two moving parts: the rate when the invoice is raised and the rate when it is paid. If the job system and the ledger disagree on either, the balance is wrong in at least one currency. The fix is a single rate source and a defined treatment for every document type.

Where the drift starts
Everyday situationWhat goes wrong
Invoice keyed in USDThe CAD amount the customer sees and the ledger amount do not match
Payment at a different rateThe difference lands in a rounding account or in sales
Credit note in a foreign currencyConverted at today’s rate instead of the original invoice rate
Bank fee deducted by the customer’s bankThe invoice stays open for a few dollars forever
Open balances at month endReceivables are never revalued
Client with two currenciesInvoices end up in the wrong one

Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookReview of the clients, invoices and payments in each currency for the last 12 months, with the rates actually used.
  2. Agree the rulesRate source, rate timing, gain and loss accounts, credit note treatment and revaluation method are written down.
  3. Build and testThe flow is tested on past invoices in each currency with the results compared to a hand calculation.
  4. Go live and closeThe flow goes live for new documents. Month-end revaluation is run with the accountant for the first two months.
Rules agreed in writing (example settings)
ItemExample setting
Client currencyOne currency per client, set in the client record, with an exception list for clients with two
Rate sourceOne daily rate table; the rate is stored on every document
Invoice rateThe rate on the invoice date
Payment rateThe rate on the payment date; the difference goes to a realised gain or loss account
Credit notesAt the rate of the original invoice, so the credit nets to zero
Bank feesCustomer short payments up to 15.00 in the ledger currency are posted to a bank charges account with the invoice reference
RevaluationOpen foreign currency items revalued at month end and reversed on the first day of the next month
ApprovalRate overrides need the finance lead and a reason

Flow and data mapping

The first table follows a foreign currency invoice from the job to the bank. The second maps the fields, including the rate, between Jobber and Xero.

Foreign currency flow from job to bank
StageIn JobberIn XeroRate used
InvoiceAmount in client currencyInvoice in the same currencyRate on the invoice date
Part or full paymentPayment in client currencyPayment against the invoiceRate on the payment date
Short payment (bank fee)Balance remainsSmall difference to bank chargesPayment-day rate
Credit noteCredit in client currencyCredit at the original rateRate of the original invoice
Month endNot applicableOpen items revaluedMonth-end rate
First day of the next monthNot applicableRevaluation reversedNot applicable
Field mapping (example settings)
JobberXeroRule
Client currency fieldContact default currencyMust exist in Xero or the document is held
Invoice totalInvoice total in the document currencyEqual to the cent
Line taxTax on each lineSame code and rate as the base rules
Invoice dateInvoice date and rate dateRate looked up in the rate table
Payment amount and datePayment and rate dateRate stored with the payment
Credit amountCredit noteRate copied from the invoice
Client referenceReferenceJob number and invoice number

Edge cases handled

Agreed in advance with the finance lead and the operations manager, and tested before go-live.

Edge cases and how each is handled
SituationHow it is handled
Rate missing for a weekend dateThe last published business day is used and the date noted
Client changes currencyNew currency from a stated date; open invoices stay in the old one
Payment lands in USD for a CAD invoicePaid at the bank’s converted amount; difference posted to realised loss or gain
Credit note after a rate moveOriginal invoice rate used so the credit nets to zero
Overpayment in a foreign currencyHeld as an overpayment in that currency and listed
Invoice in a currency not enabled in XeroHeld with a clear message; never posted in USD
Rate overrideReason required and approved by the finance lead
Month-end revaluation on a part-paid invoiceRevalued on the remaining balance only

Worked example

The tables below show a CAD invoice, a month-end revaluation and a GBP invoice. They show the shape of the checks, not a client result.

One CAD invoice through payment (example figures)
StepCADRateUSD
Invoice raised5,000.000.74003,700.00
Payment received5,000.000.73503,675.00
Realised loss25.00
Month-end revaluation of open CAD items (example figures)
ItemCADUSD at invoice rateUSD at month-end rateUnrealised difference
Open invoices, CAD2,000.001,480.001,458.00(22.00)
One GBP invoice, paid after a rate move (example figures)
StepGBPRateUSD
Invoice raised1,200.001.25001,500.00
Payment received1,200.001.26501,518.00
Realised gain18.00
Exceptions list at month end (example settings)
ReasonOwner
Rate missingBookkeeper
Currency not enabledBookkeeper
Short payment above 15.00Finance lead
Rate overrideFinance lead

Monitoring and alerting

Rates and revaluation fail quietly: the numbers look right until someone compares them to a bank statement. The alerts focus on missing rates and unexplained differences.

What is watched, and who hears about it
SignalThresholdAlert goes toFirst action
Rate missingAny document without a stored rateBookkeeperRate added from the source, document released
Currency mismatchClient currency not equal to the invoice currencyBookkeeperDocument held and corrected
Realised differenceAny single item above 100.00Finance leadReviewed for a wrong rate
Revaluation not runNot posted by the 3rd business dayFinance leadRevaluation run and approved
Open foreign itemsAny older than 60 daysFinance leadChased or written off with approval
Sync failureAny failed pushManaz Afzal and bookkeeperReplayed once the cause is fixed

Test plan

Every check has a written pass condition and a written fail condition before it is run. A FAIL stops the next step until it is cleared and re-run.

Test plan with PASS and FAIL conditions
IDCheckMethodPASS whenFAIL when
T1Invoice conversionInvoices in CAD and GBPUSD equals the hand calculationAny difference
T2Payment gain or lossPay at a different rateDifference in the right accountDifference in sales
T3Credit noteCredit after a rate moveCredit nets to zeroResidual balance
T4Short paymentPay 5.00 shortPosted to bank charges with the referenceInvoice left open
T5RevaluationRun on three open invoicesEquals the hand calculation; reversed next monthAny difference
T6Currency not enabledInvoice in a third currencyHeld with a messagePosted in USD
T7Rate overrideOverride without a reasonBlockedAccepted
T8ReconciliationBank account in each currencyZero unreconciled differenceAny difference

Go-live and rollback

The flow is switched on for new documents on the first day of a month. Existing open items are revalued once and then follow the same rules.

Go-live steps and rollback triggers
StepOwnerGate to continueRollback trigger
Enable currencies and accountsAccountantAccounts approvedAny account missing
Load the rate tableManaz AfzalT1 passes on past invoicesAny difference
Opening open items revaluedBookkeeperT5 passesRevaluation not accepted by the accountant
Flow live for new documentsBookkeeperT2 to T4 passAny wrong posting in the first week
First two month-endsFinance lead and accountantRevaluation approvedAny unexplained difference
RollbackOwnerFlow paused, postings from the new rules reversed from the logDecision recorded with the reason

Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Scope: what a project like this covers
AreaIncluded
Systems AuditRead-only review of 12 months of foreign currency invoices, payments and the rates used, a 45-minute call, written findings and a fixed quote
Currency rulesRate source, timing, gain and loss and credit note rules in writing
Rate tableOne source stored on every document
Sync flowInvoices, payments and credits in the client currency
Month-end revaluationA procedure and a schedule for the accountant
Exceptions listMissing rates, short payments and overrides
BacktestPast invoices in each currency recalculated and compared
HandoverWritten SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live
Not includedTax filing and statutory returns.
Also outside the scopeHedging or treasury advice. Opening foreign bank accounts. Changing price lists. Software subscriptions (billed to you by the vendors).
Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and rulesFindings, fixed quote, currency rules in writingWeek 120%
M2 Build and backtestFlow built, past invoices recalculatedWeeks 2 to 335%
M3 Live and revaluationLive for new documents, first revaluationWeek 430%
M4 HandoverSecond month-end, SOPs, handover video, 14 days of fixesWeek 515%

Typical scope for this kind of project: US$2,000–3,600

About 5 weeks across 4 fixed milestones. The Systems Audit (US$300, fixed) comes first and confirms the scope.

Describe what is going wrong between your job system and your books, and I will say where I would look first.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Audit is the right first step.

Hire me on Upwork (opens in a new tab)Hire me on Freelancer (opens in a new tab)