What a bank reconciliation statement has to prove, as a data object
In short
A bank reconciliation statement is an assertion, not a printout: at a stated instant, the bank's balance and the ledger's differ by exactly the sum of a named list of reconciling items, each carrying a type, an age and evidence. Store it that way and it can be re-derived. Store it as a screenshot and you kept the conclusion and threw away the proof.
Key takeaways
- The statement links 2 balances at one instant. Neither is the truth; the item list is what makes them consistent.
- Only timing differences may be carried. An error is never a reconciling item — it is a correction nobody made.
- Every item needs a type, an age and an evidence link, because age is what says it stopped being timing.
- A difference of zero proves arithmetic, not accuracy: plugs, offsetting mismatches and machine ticks all produce zero.
- Store the matched transaction identifiers, or nothing can be recomputed when the feed revises history.
A bank reconciliation statement asserts one thing: at a stated instant, the balance the bank reports and the balance the ledger reports differ by exactly the sum of a named list of items, each with a reason to exist. It is not a report you print at month end. It is a claim with 2 sides and a list, and everything useful about it — reviewability, re-derivation, an audit trail — follows from storing it as that claim.
Neither balance is the truth. The bank's figure reports what the bank booked, excluding anything not yet processed. The ledger's includes payments issued that nobody presented. They are 2 partial views, and the reconciling list is the function mapping one onto the other.
Both sides must be as at the same instant, and usually are not
The commonest defect in a stored reconciliation is that its 2 sides were captured at different moments. A statement closing balance is as at the end of a banking day; a ledger balance pulled from Xero or QuickBooks Online 3 hours later includes that morning's postings. The difference then holds real activity, and the list absorbs it.
- Pin the as-at instant and store it. Both balances are then defined against one point, not against whenever a query ran.
- Snapshot the ledger side at that instant rather than querying live at review time, or the object changes whenever somebody opens it.
- Use the bank's booked balance, never its available balance. Available includes holds and pending items, so reconciling against it is not reconciling.
Four kinds of item explain the gap, and only three may be carried
| Item | Where it sits | What it means once it ages |
|---|---|---|
| Deposit in transit | In the books, not on the statement | Past a few working days it is a receipt that never banked |
| Unpresented payment or cheque | In the books, not on the statement | Past the bank's staleness period it cannot present; the entry must be reversed |
| Bank-originated item not recorded | On the statement, not in the books | It ages only because nobody coded it: charges, interest, returned debits |
| An error on either side | Whichever side made it | Nothing. It was never timing, and must be corrected, not carried |
The fourth row quietly ruins reconciliations. An error parked on the list balances the arithmetic perfectly and sits there for a year, because nothing in the object distinguishes waiting from wrong. Type the item and the distinction becomes queryable. Confirm row 2's staleness period with the bank rather than assuming a number: it follows local practice and the instrument, not accounting convention.
An item's age is the only field that says whether it is still timing or has quietly become an error.
The fields that let someone else recompute it months later
- Identity. Account, as-at instant, period, version — a corrected attempt is a new version, not an edit.
- The bank side. Closing balance, currency, and a reference to the source artefact.
- The ledger side. Balance at the same instant plus the lock state, so a later reader knows whether the period could still move.
- The item list. Per item: type, amount, sign, first-seen date, age in days, evidence link, and an expected clearance date that makes an overdue item detectable without anyone reading it.
- The residual after items, which must be 0, stored explicitly.
- The match set — the identifiers matched — which allows recomputation, and why what a tickmark means when a machine put it there matters as much as the match.
- Preparer, reviewer, both timestamps. A reconciliation with 1 name on it is a calculation, not a control.
A difference of zero is not the same as a reconciled account
Zero proves arithmetic. It says nothing about whether the right transactions were matched, and there are 3 ordinary ways to reach it wrongly.
- A plug. Someone posted a balancing entry to force agreement, detectable because it has no evidence and no counterparty — which is why the evidence link is required.
- Offsetting mismatches. Two transactions matched to the wrong partners for the same amount net to nothing — reading a recurring difference by its shape is the separate diagnostic in the reconciliation out by the same small amount.
- A clean zero over a rotting list. Every item ticks, the residual is nil, and the list holds 14 unpresented payments older than 6 months. Impeccable arithmetic; unreconciled account.
Completeness therefore needs a second test beyond the residual: nothing past its expected clearance date, nothing without evidence. Both are computable, so both can be a gate rather than a review comment. That is what makes reconciliation state usable at close beside flux analysis and the thresholds that make it useful — one control proves the cash, the other explains the movements.
Modelling the assertion properly is a bounded build: one object, a typed item list, 2 computed gates, a version history — the sort of narrow first system we scope as an MVP and product build, inside the reconciliation and close topic for accounting and tax practices.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
What counts as a reconciling item, and what does not?
Only timing differences count: something recorded on one side that the other has not yet seen. Deposits in transit, unpresented payments and uncoded bank-originated entries all qualify. An error does not, even though it makes the arithmetic work — it is a correction nobody made, and typing it as one stops it living on the list for a year.
Why is a difference of zero not proof that an account is reconciled?
Because zero is an arithmetic result and reconciliation is a claim about which transactions correspond. A plug produces zero, 2 transactions matched to the wrong partners produce zero, and a list of items that should have been written off produces zero. Completeness needs 2 further tests: nothing past its clearance date, nothing without evidence.
Why store a reconciliation as a record rather than a saved report?
Because a saved report keeps the conclusion and discards the proof. Storing both balances, the typed item list and the matched transaction identifiers lets the assertion be recomputed later, which matters because bank feeds revise history. A failed recomputation says the data moved; a saved report keeps showing March's answer.
- bank reconciliation
- close
- data model
- controls
The work behind this page
Builds from our portfolio that this page draws on.
AP Copilot
An AI accounts-payable copilot that reads invoices, matches them to POs, and routes clean approvals
FintechAskVault
An AI internal knowledge-search platform that answers employee questions from your own docs — grounded in citations, with knowledge gaps surfaced and deflection tracked.
Productivity AIRead next
- The suspense account, and why an automated coder must be barred from itA suspense account holds an amount whose treatment a named person has not yet established. It is a human instrument, which is exactly why an automated coder must not write to it.definition
- Flux analysis, and the thresholds that stop it being noiseEvery account compared against a prior period or a budget, with a written explanation required past a threshold — and the threshold has to be two numbers, not one.definition
- A bookkeeping pilot passed, then the team went back to the spreadsheetQuiet abandonment after a successful trial is almost never a training problem. It is a placement problem, and there is a usage measurement that tells you which of four causes you have.diagnostic
- A credit note is not a negative invoice: where the sign really livesModel it as an invoice with a minus in front and three things break: allocation, tax reporting, and every aging report that reads the ledger afterwards.definition
- A two-hundred-page client scan splits into the wrong number of documentsBoundary errors are wildly uneven across document types, so an overall accuracy figure hides them. Count documents in against documents out, per type, and fix the cause where the pages are produced.diagnostic
- Clients answer the first document reminder and ignore every one after itReminder decay is a content and addressing fault rather than a frequency fault, and one split of your own send data tells you which of the two you have.diagnostic
Related across the site
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation