When a customer wallet is credited, the customer’s digital balance changes. The cash may still sit at a bank. A payout partner may hold a separate prefunded balance in another currency. These are related positions, but they are not interchangeable.
Model the positions explicitly.
Keep customer liabilities, bank assets, partner prefunding, clearing balances, fees, and revenue in distinct accounts. Define the account currency and the event that allows each account to be posted. The exact chart of accounts should follow the business model and its accounting policy.
A customer balance is one view of those postings. It is not a replacement for the complete record of the financial event.
Post an event atomically.
Use a controlled posting path that validates the entries and commits the financial event consistently. External transaction identifiers should protect against duplicate webhooks. An immutable posted journal and explicit reversal entries preserve the financial history.
Any cached or displayed balance should remain reconcilable to posted entries. If one part succeeds while another fails, the system needs a defined recovery path.
Keep currencies honest.
Do not add CAD, USD, and EUR amounts together to make a total. A cross-currency event needs explicit conversion legs, rate references, amount precision, rounding rules, and accounting treatment. Use fixed-precision amounts and make the treatment of rounding differences visible.
A CAD reporting view needs a defined valuation method and rate policy. It should not quietly treat a dashboard conversion as realized profit.
Revenue needs its own evidence.
Separate the customer fee, provider fees, FX result, refunds, adjustments, and operational costs included in the calculation. Record enough context to reproduce the result after a provider correction or a reversal.
Revenue recognition and realized FX treatment depend on the agreed accounting policy. Engineering makes that policy traceable through data and implementation.
Reconcile the outside world.
An internally balanced journal can still disagree with a bank or provider statement. Reconciliation must compare external evidence with ledger records, explain timing differences, and route real exceptions to an owner.
- Which funding event has no matching statement line?
- Which partner position is awaiting confirmation?
- Which clearing balance has aged beyond its normal window?
- Can finance reproduce the reported profit for one transaction?
Those questions make the difference between a balance display and an operational financial system.