Rails — Transactions Explorer

What this sheet teaches. The L2 (Flow Tracing) dashboard's Rails sheet is a transactions explorer — a ledger dump where you look up individual transfer legs by date, rail, status or embedded metadata. Every row is one posting; the sheet's filters push down into the SQL so you narrow to the exact slice you need.

What you're looking at

A KPI row at the top orients you to the data window: Legs in Window (count of postings matching all current filters) and Largest Leg (the single biggest amount_money in that window). Below sit six filter controls: two date pickers (Date From / Date To), three categorical dropdowns (Rail, Status, Bundle) and a cascading metadata pair (Metadata Key / Metadata Value). The Transactions table below renders one row per leg, showing posting date, rail name, transfer ID, account, amount, direction (debit/credit), status, bundle status and parent transfer ID.

The metadata cascade lets you narrow by embedded leg properties: pick a Metadata Key (e.g., customer_id), then type the Metadata Value you want to filter by. With no key picked, every leg in the date window appears; with a key selected, only legs whose metadata carries that key=value pair show. This is the same cascade the Chains and Transfer Templates sheets use.

How to read the numbers

The Transactions table reads from the <prefix>_current_transactions matview (materialized view), parameterized on metadata key/value and date range. The KPIs and table filters all push down into the dataset SQL via parameter substitution so the ledger narrows at query time.

The Legs in Window KPI counts all rows passing the six filters. Note: this is a windowed count for the current date range only; the Executives dashboard's "Total Transactions" KPI and the App Info matview row count show all-history rows. The gap between this number and those is legs outside your date picker's window.

Common patterns

High volume on a single rail in a short window

The Transactions table shows hundreds of rows, all with the same rail_name, clustered on a single day or range. This is normal during batch posting windows — ACH originates hundreds of debit legs across customer DIAs in parallel. If the volume is unexpected, drill into the metadata: pick the rail + a specific customer_id or batch identifier to see whether one upstream system is over-firing or whether the load is distributed as expected.

Legs with status='Other' that you don't recognize

The status column collapses the open-set of possible raw statuses (Failed, Rejected, Cancelled, etc.) into three buckets (Pending, Posted, Other). If you see a status that should have its own meaning — say, "Recall" is a distinct operational state on your wire rail — raise it with the L2 instance owner. The status mapping in build_postings_dataset is a constant, not data-driven, so adding a new first-class status requires a redeployment.

Unbundled legs hanging around past their rail's aggregation window

Pick a rail from the Rail dropdown, then filter Bundle to Unbundled. Sort the table by posting date and look for Posted legs that are far older than a few minutes. The institution's aggregator should bundle these within its configured max_unbundled_age window; if older ones are showing as unbundled, either the aggregator is behind or the bundle-completion signal never fired. Cross-check the App Info sheet's Matview Status row to confirm the current_transactions view is fresh — if it's stale, the unbundled status may have been remedied since the last refresh but not yet visible.

Looking for a specific transfer's legs

Paste the transfer_id into the table's search / filter row (most renderers support column-level text search). If the transfer belongs to a declared chain, the transfer_parent_id column will show you the initiating parent's ID.

What "no rows" means

An empty Transactions table can happen for two reasons:

If App Info shows latest_date as null across the board, the L2FT pipeline didn't run — that's an ops alert, not a "system is clean" signal.

Cross-sheet drills

The Transactions table on this sheet does not have row-level right-click drills. Navigation to other sheets happens via the filter controls: pick a Rail and cross to the Chains sheet to see which parent transfers are firing that rail as a child, or navigate to Transfer Templates to see multi-leg flow.

If you arrived at this Rails sheet from a right-click on the L2 Exceptions sheet's table (via "View in Rails"), the source row's entity_a (a rail name) is pre-populated in the Rail filter, narrowing the table to legs on that rail.


First time here? See the Vocabulary for rail, chain, matview, transfer and other project-specific terms.