Accounts · Compliance · Money

The journal balanced and was still wrong

Our bookkeeping export posted VAT on £4 a customer had been handed back. Both sides agreed to the penny, so the balance check missed it. Now it refuses.


The accounting export is the document a bookkeeper posts to a real ledger and files a return from. It has a check built in: debits must equal credits, or it refuses. That check caught a real problem the same week. It could not catch this one, because this one balanced.

Two cash sales of twenty pounds, and four pounds of one handed back without a line being returned. The receipt stays open, the order stays paid, and the whole sale is still posted. Cash taken forty pounds. Sales thirty-three pounds thirty-four. VAT six pounds sixty-six. Forty against thirty-three thirty-four plus six sixty-six is a perfect balance. It is also sixty-six pence of output VAT on money the business no longer has.

Two sides agreeing with each other

The chart of accounts had sixteen accounts and not one of them was refunds. A full refund netted to nothing by exclusion, because both sides left a fully refunded order out. A partial refund did not, and partial refunds are the common kind: a dish was wrong, a customer was given a few pounds back, the rest of the bill stood.

The right decision had already been made one file away. When our refund route hands back an amount against a bill of mixed VAT rates, it deliberately records no tax figure, with the reason written beside it: a refund of two pounds cannot say which rate it came off without guessing, and a guessed VAT figure is worse than a missing one on the return somebody files from these numbers. The journal is those numbers. The consequence had never been carried across.

Refuse, and name the way out

Netting the refund off in the export would be exactly the guess the refund route refused to make. So the export now refuses when the window holds a refund it cannot place, and says what would make it exportable: a refunds account in the chart. That is a decision about somebody's bookkeeping, not a line of code, so it is reported rather than invented.

We measured the before-state with the new refusal switched off, and two of the three cases were not what we assumed. A refund dated in a later month than its sale exported clean and empty: the money that left the business was in no journal at all, that window having no sales to be out of balance with. Nothing we could have reasoned our way to. Two of the refusal's own sentences were wrong before they shipped, caught the same way, by running them against windows they were not written for.


Try it on tonight’s service.

Nothing to install, no card. Not better by the weekend? Close the tab.