Try five live demosdemo.gravixar.com

Module library

Multi-currency finance

Every amount is saved in its own currency, along with the exchange rate it was recorded at. Reports use that saved rate, never today's, so a report you rerun tomorrow matches the original line for line.

"Approximately right" is the wrong default for finance. A business with a US company and a team in Pakistan can keep both sides in one system, and last year's report still gives the same numbers when you open it again.

Under the hood

Off-the-shelf tools treat multi-currency as a configuration setting and produce reports that drift over time as exchange rates move. The pattern I ship treats currency as a first-class field on every monetary row.

Each row stores: native amount, native currency code, an FxRateSnapshot foreign key pointing to the rate that was current when the row was created. Reports compute convertedAmount = nativeAmount * snapshotRate rather than calling live FX, so they reconcile both sides retroactively, without time-machine bugs. The cost at the schema level is one column. The benefit is audit-ready reproduction by design.

Related modules

Also in Finance

Bring me a real operations problem. I will show you the system running before you sign anything.

The Ops Leak Audit is the fixed-price first step: I count the hours your tools cost your team, then price the fix. Rather talk first? Book a 30-minute call. If it is not a fit, you still leave with notes you can use.