What this sheet teaches. Drift over time — the accumulated magnitude of sub-ledger disagreements per business day, broken down by account role, so you can spot whether a drift violation is a one-off event or a recurring failure in a particular family of accounts. Every row in the underlying dataset is one (day, role) bucket carrying Σ |drift| for all accounts in that role on that day.
A strip of two KPIs runs across the top — Largest Leaf
Drift Day (peak business day) and Largest Parent Drift Day (peak
business day). Below sit two side-by-side line charts: Leaf Account
Drift Over Time (showing Σ |drift| per business day for leaf accounts,
with one line per account_role) and Parent Account Drift Over Time
(the same shape for parent accounts). A universal date-range filter
(shared across the L1 (account-integrity)
app) and an Account Role dropdown let you narrow by date window and role. Healthy days sit
on the zero baseline; spikes mark when a role's feed or parent rollup diverged.
Both charts read from the L1 invariant matviews
<prefix>_drift (leaf) and <prefix>_ledger_drift (parent). The
datasets pre-aggregate via GROUP BY business_day_end, account_role,
producing one row per (day, role) pair carrying SUM(ABS(drift)) (in
dollars, converted from the matview's native cents).
The Largest Leaf Drift Day KPI computes MAX(abs_drift) over all
leaf-account (day, role) buckets in the current date window — the worst
single business day for leaf violations. The Largest Parent Drift Day
KPI does the same for parent-account (business_day_end, account_role)
buckets in the parent matview.
Each line chart plots business_day_end (x-axis, date grain) against
SUM(ABS(drift)) per (day, role), with one line per distinct
account_role value. The Y-axis is currency ($). The account_role
dropdown narrows both charts before aggregation, so selecting a role
filters both timelines to that role only. A zero line across the window
means that role's stored balances agreed with postings every day in the window.
Both matviews filter WHERE stored_balance <> computed_balance and
account_scope = 'internal',
so external accounts (banks, payment networks) never appear — the
institution only audits its own books' integrity.
A role's line spikes every Monday but not other days. This is a weekly batch process running into trouble — a feed that emits balances on Mondays only is hitting a carry-forward mismatch or a processing order bug. The Drift sheet (sister to this one) breaks the same timeframe by account, so narrow the Drift sheet to the same role + day and drill into individual accounts to see which leaf or parent is actually drifting.
One line spikes sharply once, then returns to zero. This is a one-off event — a posting rejection, a balance-emission skip or a deploy-time correction. Unlike the recurring spike (which signals an ongoing feed problem), a single spike may be expected if you know a data correction happened that day. Check the posting timestamps and the Daily Statement for that role / account to confirm the cause.
One role's line sits above zero across the entire window, never dropping.
This is a carry-forward of a prior incident — a posting was missed
weeks ago, the stored balance was never adjusted and the mismatch
locked in. The magnitude may be constant or grow if more postings land
on non-emit days. Cross to the Drift sheet with the same role and date
filters to find the specific account, then drill to Supersession Audit
to look for a supersedes metadata tag that signals an attempted
correction.
The leaf chart is clean (zero across the window) but the parent chart spikes. Leaf accounts agree with their postings, but the parent control account's stored rollup does not sum to the children. This is a parent-rollup emission bug — a batch process that emits parent balances did not run correctly, or ran before the leaves were ready. The children's feeds are honest; the problem is in the consolidation layer.
Both charts show identical spike patterns on the same day. This usually means the same feed or posting source diverged at multiple levels — a batch job that writes both child and parent postings either re-ran with stale input or dropped entries that should have fired on both sides.
A clean drift timeline means every internal account's stored balance agreed with its postings on every day in the current window. That is the steady-state expectation. If you see zero baseline across the window:
drift and ledger_drift rows. If their
latest_date lags the base tables' latest_date (both sit
side-by-side on that table), the base tables moved forward on the last
ETL load but the matviews never got refreshed — the data is clean as
of the matview's latest_date but stale relative to the books.? those sheets
next.If App Info shows the matview row count as zero across the board, the
L1 invariant pipeline didn't run. That's an ops alert, not a "clean"
signal. A NULL latest_date by itself is NOT staleness — it just flags
a matview with no date dimension (or a custom matview added without a
date column), so don't read it as a broken pipeline.
The Drift Timelines sheet has no cross-sheet drills. Use the companion Drift sheet (which breaks violations by individual account-day) to narrow to a specific account and drill from there into Daily Statement or Transactions.
stored < 0); a chronically-negative but internally-consistent
account appears there but NOT in Drift.First time here? See the Vocabulary for L1,
matview, account_role and the other project-specific terms.