VAT and foreign currency are where a lot of otherwise-solid bookkeeping systems quietly go wrong — not because the arithmetic is hard, but because it's easy to compute the same figure two different ways in two different places and never notice they've drifted apart. The rules here are mostly about preventing that specific failure.
VAT: net on the P&L, gross on one control account
Every VAT-inclusive transaction — an invoice, a bill, a categorised bank line — is split at the point it's posted: the underlying amount, net of VAT, goes to the relevant income or expense account, and the VAT itself goes to a dedicated VAT control account. VAT is never treated as revenue and never as an expense; it sits on its own balance-sheet line, because it isn't money you've earned or spent — it's money you're collecting or paying on HMRC's behalf.
The one deliberate exception is a treatment where the amount was never VAT-inclusive to begin with — reverse charge and postponed import VAT, for instance — where there's no real balance-sheet position to carry, so the VAT figure exists as reporting metadata rather than a posted control-account leg.
One calculation, read everywhere
There is exactly one piece of logic in the system that answers "how much VAT do we owe this period." Your VAT dashboard reads it. The check before you actually file reads it. Your VAT return reads it. This sounds like an obvious property for software to have, and it's exactly the property that's easiest to lose over time in a system that grew its VAT reporting, its dashboard, and its filing path as three separate pieces of work — each individually reasonable, each computing the number slightly differently, and each one confidently telling you a figure that doesn't quite match the other two.
Filing settles the control account. A submitted VAT return posts the net amount due against the VAT control account, dated at the period end, exactly once per period — which is what keeps that account meaningful as "what we currently owe or are owed" rather than a number that just keeps growing with no connection to what's actually been filed.
Foreign currency: translated at transaction date, split into realised and unrealised
Your books are kept in one functional currency — normally GBP. A transaction in another currency is translated using the exchange rate on its own transaction date, sourced from a bank feed or recorded manually; a missing rate is left missing, not silently defaulted to a rate of 1. Every stored rate carries a note on where it came from, so a converted figure can always be traced back to the rate behind it.
When a foreign-currency balance is genuinely settled — you're paid, or you pay — the difference between the rate it was booked at and the rate on the day it settled becomes a realised gain or loss: a real change in what you actually received or paid, in pounds. When the same balance is still open at a reporting date, comparing its booked rate against the closing rate produces an unrealised gain or loss instead — a paper movement reflecting what the balance would be worth today, which reverses the moment it's actually settled. Keeping these two apart matters because they answer different questions: "did currency movement make or cost us real money" versus "what would happen if we settled today."
Reports are read-outs of the same postings, not separate calculations
Your P&L, your balance sheet, your trial balance and your VAT return are all built from the same underlying journal entries — none of them re-derive figures independently. That's the point of everything described above and in the Ideal Ledger's core rules: the split between net and VAT happens once, at posting; the FX translation happens once, at the transaction's own rate; and every report is a projection of that same, single set of facts, rather than its own separate interpretation of what the numbers should be.
What this looks like day to day
If you're VAT-registered, the figure on your dashboard and the figure you actually submit will be the same number, because they're the same calculation. If you trade internationally, your reports will show you realised currency gains and losses separately from the unrealised ones sitting on open balances, so you can tell the difference between money you've actually made from a rate move and money you'd make only if you cashed out today. Our VAT calculator and Corporation Tax calculator use the same underlying UK tax rules this reporting is built on, if you want to sanity-check a figure outside your own books.