Function 11 ยท controls and data
Can every other number here be trusted?
The general ledger rebuilt from its postings ties to the reported balances in 786 of 792 account months, to the cent. The rest are one break, planted to prove the control works: account 2010, $4,217.36, first in 2026-03 and carried into 6 month ends because nothing later corrects it. Every sub ledger check ties (216 of 216), every data quality defect that was injected was caught at its injected count, and the warehouse passes 210 of 210 tests.
Reported balance against the sum of postings, by account and month
Each square is one account at one month end: pale is tied, a solid square with a cross is a break.
Source: generated, Harborline general ledger, 22 accounts by 36 months, seed 20260831, as of 2026-08-31.
Account 2010: reported balance less the sum of its postings
Reported less postings
Source: generated, Harborline general ledger, 22 accounts by 36 months, seed 20260831, as of 2026-08-31.
Every data quality rule, with its hits
Three defects were injected into the generated data at known counts; each rule that should find one must find exactly that many. The real datasets' own issues are counted by the same rules and left in view rather than cleaned away.
| Rule | Table | Severity | Rows checked | Rows hit | Injected | Finding |
|---|---|---|---|---|---|---|
| application income missing | loan applications | flag | 36,210 | 0 | ||
| loan opened after as of | loans | quarantine | 40,288 | 0 | ||
| loan balance negative | loan performance | quarantine | 854,389 | 0 | ||
| transfer without counterparty | deposit entries | flag | 8,229,331 | 1,721 | 1,721 | โ caught at the injected count |
| entry after as of | deposit entries | quarantine | 8,229,331 | 0 | ||
| balance does not roll | deposit balances | flag | 2,127,521 | 212 | 212 | โ caught at the injected count |
| posting duplicate | gl postings | quarantine | 17,990,726 | 7,193 | 7,193 | โ caught at the injected count |
| posting zero amount | gl postings | quarantine | 17,990,726 | 0 | ||
| card txn nonpositive | card transactions | quarantine | 1,077,220 | 0 | ||
| hmda exempt value | hmda lar | flag | 609,413 | 9,864 | ||
| hmda income not available | hmda lar | flag | 609,413 | 49,974 | ||
| hmda ltv not available | hmda lar | flag | 609,413 | 171,322 | ||
| cfpb response in progress | cfpb narratives | flag | 46,084 | 2 | ||
| uci undocumented code | uci default | flag | 30,000 | 399 | ||
| baf missing marker | baf | flag | 600,000 | 564,284 | ||
| bls month unavailable | macro monthly | flag | 116 | 1 |
Source: mixed, every staged table, as of 2026-08-31.
The break, as the control reports it
| Account | First month | Amount | Months carried | Comparison | Finding |
|---|---|---|---|---|---|
| 2010 | 2026-03 | $4,217.36 | 6 | reported vs postings | the injected break, located |
Method and limitations
- The ledger and its sub ledgers are generated, so the control is proved on a known answer: the planted break's account, month and amount are in the truth tables, and the test fails if the control reports anything else.
- Reconciliation compares balances at month end. An offsetting pair of errors inside one month would tie; the sub ledger checks and the unsourced posting count are there for that.