Skip to content

L1 Reconciliation Dashboard

Generic SHOULD-constraint visualization for any L2-modeled institution. Currently rendered against Your Institution (spec_example).

The L1 Reconciliation Dashboard visualizes every L1 SHOULD-constraint declared by the SPEC against the data of one L2 instance — descriptions, account universe, rail topology, posting requirements, limit caps, aging windows. It's the canonical L1 surface, configured by the L2 instance you point it at. Switch the L2 → switch the persona, prose, and scenario coverage without changing a line of dashboard code.

Screenshot

Today's Exceptions — the morning landing page

Account topology backing this render

What the L1 dashboard reconciles

Five L1 invariant views (always present) plus two aging-watch invariants (per-rail opt-in). Every row in any of these views IS a SHOULD-constraint violation; healthy = empty.

A separate Supersession Audit sheet surfaces logical keys with more than one entry — the audit trail for TechnicalCorrection / BundleAssignment / Inflight rewrites. Diagnostic, not a SHOULD constraint.

The analyst journey

The dashboard is structured top-down for a 9am morning routine. Open Today's Exceptions first. The KPI answers "did anything break overnight?" The bar chart breaks today's count down by check_type so you see the error class shape immediately. The detail table sorts by violation magnitude, biggest first.

From there:

  • Left-click an account_id in any Today's Exceptions row → narrows the per-invariant sheets (Drift / Overdraft / Limit Breach) to that account so you can see its specific violations in context.
  • Right-click → "View Daily Statement" on any row → opens the per-account-day walk: opening balance, debits, credits, closing stored, drift KPI, plus the every-leg detail table.
  • From any per-invariant detail row, right-click → "View Daily Statement" for the same drill-forward.
  • From any Daily Statement leg, right-click → "View Transactions" for the raw posting ledger filtered to that transfer's legs.

That's the canonical drill chain: Today's Exceptions → per-invariant narrowing → Daily Statement → Transactions. Every sheet is also filterable independently — date range pickers (Date From / Date To, default 7 days), per-sheet category dropdowns (Account, Account Role, Transfer Type, Rail, Status, Origin), and parameter pickers on Daily Statement (Account + Business Day).

The L2-instance contract

Everything the dashboard knows about your institution comes from the L2 instance YAML. The instance declares:

  • Accounts + their roles, scopes (internal / external), parents
  • Account templates (role classes that materialize at runtime)
  • Rails (the canonical patterns by which transfers get posted — one-leg, two-leg, aggregating; per-rail aging caps)
  • Transfer templates (multi-leg shared transfers with closure rules)
  • Chains (transfer-of-transfers ordered flows; XOR groups)
  • LimitSchedules (per-(parent_role × transfer_type) daily caps)
  • A description field on every primitive

The schema emitter common.l2.emit_schema(instance) produces a prefixed PostgreSQL DDL that creates the base tables + every L1 invariant view + every dashboard-shape matview. The dashboard reads those spec_example_* views directly. The descriptions surface as TextBox prose on each sheet — the "Configured Caps" block on Limit Breach lists every L2 LimitSchedule with its cap and prose; the "Internal Accounts in Scope" block on Drift lists every internal account's role + L2-supplied prose; the Today's Exceptions footer embeds the L2's top-level institution description.

Switching the L2 instance switches the prose. The same dashboard renders against any L2 — that's the M.2a "L1 dashboard configured by an L2 instance" promise.

Sheet inventory

11 sheets in display order. Click each name to jump to its walkthrough.

Dataflow — which datasets feed which sheets

Cross-app integration

The L1 dashboard is intentionally L2-agnostic. Other dashboards that specialize the L1 surface (e.g., Investigation, Executives) can drill into L1 as a back-stop view: "any anomaly the specialized analysis flags can be checked against the institution's L1 invariants without leaving the same data plane." The shared prefix story (M.2d.3 follow-up) extends this — multiple dashboards rendering against one L2 instance's matviews, each highlighting a different question.

Generation + deployment

# Generate JSON for all four bundled apps to run/out/
quicksight-gen json apply -c run/config.yaml -o run/out

# Same emit, then deploy to AWS (delete-then-create)
quicksight-gen json apply -c run/config.yaml -o run/out --execute

The L2 instance defaults to the bundled spec_example fixture. To target a different L2 instance, see the customization handbook.