Stored vs computed balance disagreements at end-of-day. Leaf table covers individual posting accounts (computed = cumulative net of every Money record through that BusinessDay's end). Ledger table covers parent accounts (computed = sum of child accounts' stored balances). Both tables only show rows where stored ≠ computed — every row is one SHOULD-constraint violation.
Internal Accounts in Scope Accounts where drift is checked — drift surfaces where stored balance disagrees with the cumulative net of posted Money records (leaf) or the sum of child stored balances (parent):
CashDueFRB (gl-1010-cash-due-frb) — SNB's master settlement balance with the Federal Reserve. Every net-settled flow (ACH origination, wire settlement, daily cash concentration sweep, card-acquiring net settlement) ultimately credits or debits this account. Drift here means SNB's view of its FRB balance and the Fed statement disagree — a regulatory exposure.
ACHOrigSettlement (gl-1810-ach-orig-settlement) — Holding account for the daily ACH origination batch before it sweeps to the Fed. Activity nets to zero each cycle; a non-zero EOD balance means a batch leg failed to settle as scheduled.
CardAcquiringSettlement (gl-1815-card-acquiring-settlement) — Pass-through GL for daily card-processor settlements. Card authorizations debit here when the processor force-posts; the offsetting credit lands on the customer's DDA when SNB matches the auth to a card transaction.
WireSettlementSuspense (gl-1820-wire-settlement-suspense) — Holding account for inbound wires awaiting Fedwire confirmation and outbound wires awaiting beneficiary bank acknowledgment. A wire is fully reconciled when both legs have posted; rows stuck here past the same-day cutoff are reconciliation work.
InternalTransferSuspense (gl-1830-internal-transfer-suspense) — Two-step suspense for on-us transfers. The source DDA debits here, then the destination DDA credits from here, allowing the two halves to be authorized independently. A non-zero balance means a credit-half is stuck — the source-DDA owner's money is in flight.
MerchantPayableClearing (gl-1840-merchant-payable-clearing) — Holding GL for merchant-acquiring settlement. Card sales (every MerchantCardSale firing) credit here as the card network delivers the funds; merchant payouts (one of MerchantPayoutACH / Wire / Check, per the XOR chain) debit here when SNB releases the held balance to the merchant. Per-merchant balance equals sales-not-yet-paid-out.
ConcentrationMaster (gl-1850-cash-concentration-master) — Concentration target for SNB's ZBA (zero-balance account) operating sub-accounts. Every operating sub-account sweeps its EOD balance to this master; the master then makes a single aggregate transfer to the Fed. Reduces wire and ACH count vs. settling per sub-account.
InternalSuspenseRecon (gl-1899-internal-suspense-recon) — General-purpose suspense GL for entries that don't fit a more specific suspense account. Manual reconciliation entries (research adjustments, stale-suspense reclassifications) flow through here. Should be empty or near-empty on any given day.
DDAControl (gl-2010-dda-control) — Aggregate GL for all customer demand-deposit accounts. The customer DDA template (`CustomerDDA` role) rolls up to this control account. SNB's regulatory deposits balance is the sum of the children minus float in the suspense GLs.
MerchantDDAControl (gl-2020-merchant-dda-control) — Aggregate GL for all merchant demand-deposit accounts. Mirrors the customer DDA control but tracks the merchant-acquiring book (merchants who hold an SNB DDA receive ACH payouts directly to it; merchants banking elsewhere get wire / check payouts to external counterparties). Per-merchant LimitSchedules cap outbound payout flow per type.
CustomerDDA (template) — Per-customer demand-deposit account. One runtime instance per retail or commercial customer; the account number and name are supplied by SNB's onboarding ETL. Balance and transaction activity are reconciled per-customer; the DDA Control GL is the aggregate roll-up.
MerchantDDA (template) — Per-merchant demand-deposit account. Merchants who bank at SNB receive their card-sales payouts directly via the MerchantPayoutACH rail (one of the XOR payout vehicles). Merchants banking elsewhere get MerchantPayoutWire / Check to an external counterparty instead.
ZBASubAccount (template) — Operating sub-account under the cash-concentration master. Each ZBA location (a customer's main location, a separate operating site, etc.) has its own sub-account; nightly sweeps zero them and consolidate the balance at the master.
Leaf Accounts in Drift
Count of leaf-account day-rows where stored balance disagrees with the cumulative net of posted Money records.
Parent Accounts in Drift
Count of parent-account day-rows where stored balance disagrees with the sum of child accounts' stored balances.
Leaf Account Drift
Each leaf account's stored vs computed balance per BusinessDay. Computed = cumulative Σ signed Money through that day's end. Drift = stored − computed; non-zero ⇒ feed diverged from the underlying ledger. Right-click any row → View Daily Statement to open that account-day.
Parent Account Drift
Each parent account's stored vs computed balance per BusinessDay. Computed = Σ stored balances of its child accounts on that day. Drift = stored − computed; non-zero ⇒ a child posting didn't roll up correctly. Right-click any row → View Daily Statement to open that account-day.
**Sub-ledger drift**
> For every CurrentStoredBalance where `Account.Scope = Internal` and `¬IsParent(Account)`, `Drift(Account, BusinessDay)` SHOULD equal 0.
Each leaf-account day where the stored balance disagrees with the cumulative net of every Posted Money record posted to that account through the BusinessDay's end. The disagreement is the *drift*; a non-zero value signals the feed diverged from the underlying ledger.
**Action.** Diff the day's transactions for `account_id` against the stored balance — the gap is missing or duplicated postings on that account-day. Re-load the source feed for the account-day and refresh matviews.
**Parent-account roll-up drift**
> For every CurrentStoredBalance where `Account.Scope = Internal` and `IsParent(Account)`, `LedgerDrift(Account, BusinessDay)` SHOULD equal 0.
Each parent-account day where the stored balance disagrees with the sum of its child accounts' stored balances. Surfaces a child posting that didn't roll up correctly to its parent.
**Columns:** same as `_drift` minus `account_parent_role` (parents ARE the parents).
**Action.** Sum the child accounts of `account_id` on `business_day_start` and compare to the parent's stored balance. The gap is a child posting that didn't propagate to the parent — usually a missing FK in the feed. Fix the parent link upstream, re-load, refresh.