Reconciliation Certification & Adjustment Items
| Owner | Classification | Version | Effective | Next review | Status |
|---|---|---|---|---|---|
| Platform Engineering | Internal | 0.1 | 2026-09-13 | 2026-12-13 | Draft |
Purpose. Reference for how a reconciliation clears a mismatch and reaches a certified state, and — the common point of confusion — when a reconciling item is sufficient and when a journal voucher (JV) is required. Covers the variance formula, the three item classes, the certification threshold gate, and the open-adjustment risk.
The variance formula
The reconciliation engine (runreconciliation) derives the mismatch per account/period:
unidentifieddifference = glbalance − bankbalance − subledgerbalance − reconciliationitembalancereconciliationitembalance is the sum of all active periodreconciliationitem rows for the summary. The rollup applies no itemclass filter — Timing, Substantiation, and Adjustment items reduce the variance identically. itemclass therefore classifies intent; it is not a mechanical control.
Item classes and JV implications
| Item class | What it asserts | JV required |
|---|---|---|
| Substantiation | The GL balance is correct; the item proves its composition (e.g. a prepaid made up of N contracts). | No |
| Timing | The GL is correct; a legitimate timing difference will self-resolve (deposits in transit, outstanding cheques, unswept subledger items). | No — clears in a later period |
| Adjustment | The GL is wrong; a correction is owed. | Yes — only a posted JV corrects the GL |
An Adjustment item documents that a correction is needed, but posting the item does not change the GL. The Create adjustment journal action turns that documented intent into a posted JV.
Certification gate
The engine sets a tolerance flag, not a status:
iswithinthreshold =
|unidentifieddifference| ≤ certificationthresholdamount (amount check)
|unidentifieddifferencepercentage| ≤ certificationthresholdpercent (percent check)
combined per certificationthresholdandor ('AND' = both; otherwise OR)
→ NULL when no threshold is configuredClean means within tolerance, not zero. Status is advanced separately:
- Auto-certification (
autocertifyaccounts) stagesstatus = 'System Certified'for accounts matching an active ruleset — query, manual-mapping, or criteria-based (rule engine). The variance/risk bar lives inside the ruleset, not in code. Accounts withaccountsettings.excludefromautocertification = true, or already inApproved/Reviewed/System Certified, are skipped. - Manual certification — accounts matching no ruleset are certified by the preparer and approved by the reviewer.
- Decertification — a later run that detects a changed GL balance returns the account to
System Decertified, reopening the mismatch.
The open-adjustment risk
Because the variance math counts Adjustment items, an account can reach reconciled / within-threshold / System Certified while still carrying an un-posted Adjustment — a known misstatement documented but never corrected. No current link binds an Adjustment item to its JV. The Create-adjustment-journal back-link (journalvoucherheader carrying sourcemodule / sourcereferencetype / sourcereferenceid to the periodsummary) closes this gap so an open adjustment cannot present as clean.
Revision history
| Version | Date | Author | Change |
|---|---|---|---|
| 0.1 | 2026-09-13 | Platform Engineering | Initial draft — variance formula, item classes, certification gate, open-adjustment risk. |
Finaisse Internal — Confidential. Not for external distribution.