Daily balance reconciliation against source-of-truth ledger
Why it matters
Without automated daily reconciliation, a discrepancy between the account balance table and the transaction ledger can persist indefinitely — and under SOX §404 that is a material weakness in internal controls over financial reporting. NIST 800-53 AU-2 requires that the organization identify events significant enough to warrant auditing; a mismatch between the authoritative ledger and running balances is exactly that event. FINRA Rule 4370 (Business Continuity Planning) requires that firms be able to reconstruct financial records. An ad-hoc or weekly reconciliation job means errors introduced by bugs, failed transactions, or double-credits can compound for days before detection, making remediation far more expensive and regulatorily exposed. A $0.01 tolerance threshold is the industry standard — anything larger conceals rounding errors that can be systematically exploited.
Severity rationale
High because without daily automated reconciliation, balance discrepancies from bugs, race conditions, or fraud can accumulate for days before detection, multiplying remediation cost and regulatory exposure.
Remediation
Add a cron job that runs every day at a fixed UTC time in src/jobs/reconciliation.ts:
import cron from 'node-cron';
async function reconcileBalances() {
const accounts = await db('accounts').select('id', 'user_id', 'balance');
for (const acct of accounts) {
const { ledger_total } = await db('transaction_logs')
.where({ user_id: acct.user_id })
.sum('signed_amount as ledger_total')
.first();
const discrepancy = Math.abs(acct.balance - (ledger_total ?? 0));
if (discrepancy > 0.01) {
await db('reconciliation_issues').insert({
account_id: acct.id, system_balance: acct.balance,
ledger_balance: ledger_total, discrepancy,
discovered_at: new Date()
});
}
}
}
// Fires at 02:00 UTC every day
cron.schedule('0 2 * * *', reconcileBalances);
Persist each run's status to reconciliation_runs so the quarterly compliance assessment (see finserv-audit-trail.tamper-evidence.compliance-gap-assessment) can count failures.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Financial Audit Trail Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- nist:rev5 · AU-2 — Event Logging
- sox · Section 404 — Management Assessment of Internal Controls — financial accuracy and completeness
- external · FINRA-Rule-4370 — FINRA Rule 4370 — Business Continuity Plans and Emergency Contact Information
- iso-25010:2011 · functional-suitability.functional-correctness
Taxons
History
- 2026-04-18·v1.0.0·Initial import from finserv-audit-trail·automated