Balances as of Wed, Aug 19 · 2:14 AM PT

Escrow & banking

What the firm is holding, where it sits, and where the bank and the ledger disagree — the three console sections that answer one question, on one screen. Every dollar carries the moment it was measured. A balance that has never been measured is never shown as zero.

Read-only registry

Recon exceptions

Where the bank statement and the ledger do not agree · resolving records a decision, it never moves money
1 unexplained debit 3 open 2 investigating

$482,600.00 left this escrow account and no approved disbursement matches it

Escrow ····5001 · Meridian Trust · Qualified Escrow — Operating assigned to EX-2024-0147 — Belcher Family Trust

Unmatched debit · open Balance drift · open Detected today, 2:14 AM
Bank statement
$1,367,400.00
Closing balance, Mon Aug 18 · pulled in run BSR-2026-08-19-01
Ledger snapshot
$1,850,000.00
escrow_accounts.current_balance_cents_snapshot · measured Aug 18, 11:58 PM
Unexplained
−$482,600.00
26.1% of the ledger balance · one bank line, exactly this amount
What the run has already established — state derived from the matching, not from a flag
41 of 42 statement lines matched a recorded receipt or an executed disbursement, to the cent and within one business day.
The 42nd line is an outgoing wire of $482,600.00 posted Mon Aug 18, bank reference FED-IMAD-20260818-3391, description “OUTGOING WIRE — REF 8841”.
No disbursement_proposals row on this exchange, in any state, carries that amount or that reference. The last approved disbursement on this file settled Aug 4 for $214,900.00 and is matched.
The drift is exactly the unmatched debit. The two exceptions are one event: the drift is the symptom, the debit is the cause. Closing either without the other is an incomplete disposition.
The exchanger’s statutory clocks are untouched: 45-day identification satisfied Jun 2, 180-day close due Nov 15. Nothing on this page can move either date.
What must not proceed while this is open
  • Any disbursement drawn on ····5001. Today the approval guard compares the request against current_balance_cents_snapshot — the very figure in dispute — so a $1.5M release would be allowed against a bank that holds $1,367,400.00.
  • Closing the account. A closed status would take the delta out of every list that surfaces it.
  • A single-officer write-off. See the countersignature note below — the endpoint closes on one signature today.
What deliberately keeps running
  • The exchanger’s file. Deadlines, documents and signatures are unaffected, and the 45- and 180-day dates are not administrable from this surface at all.
  • The other seven accounts, which reconciled cleanly through Aug 18. This is one account, not the escrow programme.
  • Incoming receipts to ····5001. Blocking deposits would strand a wire in transit and help nobody.
Waiting on you. No officer has claimed this in the 6 hours since detection. Claiming it sets assigned_to, moves the status to investigating, and writes admin.reconciliation_exception.assigned to the audit log. Unassigned · 6h
Two authorized officers — the approver is never the proposer
Freezing an account, or closing an exception whose amount exceeds the firm’s write-off threshold, is a decision about money. It takes two authorized officers of this organization: one proposes, a second and different officer approves. A proposer’s own submission is not an approval and is never counted as one. Today neither control exists — PATCH …/resolve closes on a single signature, and there is no freeze endpoint at all.
Sandra Osmanproposer · you Priya Ramaneligible approver Tom Bottenbergcoordinator — not an authorized officer Matt Belcherexchanger — never in a fund path
Freeze requires dual control — raise it with the holding institution
Record a disposition — a decision, not a transaction Notes required
Create retroactive proposal · refused by the server

Why “create retroactive proposal” is refused: that option would mint a fund-movement record to explain money that already left, turning a reconciliation note into an authorization after the fact. The server answers 409 and writes admin.reconciliation_exception.resolution_denied. It is shown, struck through, with the reason — a control the user can see is a control the user trusts. This is shipped behaviour today.
Countersignature. A closure above the firm’s write-off threshold should require a second authorized officer who is not the resolver. Today one signature closes any amount.

Status
Sorted newest first · 200-row page, as the endpoint returns
Balance drift Open Same event as the debit above
Ledger $1,850,000.00 against a bank close of $1,367,400.00. Rolled up here so the drift is never resolved on its own.
Waiting on you — unassigned, 6h
−$482,600.00today, 2:14 AM
Unmatched credit Investigating
Credit posted Aug 18, description “INTEREST CREDIT Q3”, bank reference MT-INT-0818-77. No ledger entry. Interest on qualified escrow belongs to the exchanger under the exchange agreement, so this is a posting question, not a shortfall.
Waiting on Priya Raman — claimed today, 8:12 AM
$12,500.001 day
Date mismatch Investigating
Bank posted Aug 15; the matching approved disbursement executed Aug 14. Amount and reference agree exactly — a one-business-day settlement lag, not a money question.
Waiting on Priya Raman — claimed Aug 18
$326,000.002 days
Duplicate Open
Reference SFT-88431 appears in two consecutive statement pulls with the same amount and posting date — almost certainly a re-delivered file, but the bank has to confirm before it is dropped.
Waiting on Sound Federal Trust — ticket SFT-88213 filed Aug 16, no response in 3 days
$8,400.003 days
Recently closed · last 30 days Loading — a second request with status=resolved
Statement runs. reconciliation_exceptions.bank_statement_run_id is free text with no table behind it, so a run cannot be opened, re-pulled, or shown with its coverage window. Until a bank_statement_runs table and the nightly job exist, the run identifier is a label, not a link — and this section will stay permanently empty in production, which is a worse failure than an alarming one because it looks like health.

Escrow accounts

Every qualified-escrow account this organization holds · balances are snapshots, each stamped with the moment it was measured
8 accounts 1 never measured 1 frozen · 1 closed
Account Assigned to Segregation Balance · as measured Account state Reconciliation
····5001
Meridian Trust · ····4821
EX-2024-0147
Belcher Family Trust
Segregated
$1,850,000.00
Aug 18, 11:58 PM
Open
Opened Apr 2, 2026
Bank disagrees · −$482,600.00
Last clean reconciliation Aug 17
····5044
Meridian Trust · ····4821
EX-2026-000203
Delgado, Maria & Luis
Segregated
$1,094,000.00
Aug 19, 2:14 AM
Open
Opened Jul 9, 2026
1 credit under review
Balance itself agrees with the bank
····5052
Meridian Trust · ····4821
EX-2026-000177
Hargrove Industrial LP
Segregated
$326,000.00
Aug 19, 2:14 AM
Open
Opened Jun 21, 2026
Timing exception
One-day settlement lag, amount agrees
····5061
Sound Federal Trust · ····9140
EX-2026-000212
Okonkwo Holdings LLC
Segregated
$2,410,000.00
Aug 19, 2:14 AM
Open
Opened May 30, 2026
Duplicate line, with the bank
Waiting on Sound Federal Trust, 3 days
····5087
Meridian Trust · ····4821
EX-2026-000188
Ravensworth Trust
Segregated
$742,500.00
Aug 12, 9:41 AM · 7 days old
Frozen Aug 12
Compliance hold · Sandra Osman
Reconciled through Aug 11
Frozen funds are still funds held
····6120
Cordova Bank & Trust · ····2255
No exchange assigned
exchange_id is null
Pooled
Inferred, not attested
$58,240.00
Aug 19, 2:14 AM
Open
Opened Jan 14, 2026
Reconciled through Aug 18
Rolls up to no exchange — see the cross-check
····7702
Sound Federal Trust · ····9140
EX-2026-000241
Vasquez Commercial Group
Segregated Never measured
No balance has ever been reported
Open
Opened Aug 15, 2026
Absent from 3 statement pulls
Waiting on Sound Federal Trust
····3390
Meridian Trust · ····4821
EX-2026-000158
Nakashima Family Trust
Segregated
$0.00
Measured Jul 30, 4:02 PM
Closed Jul 30
Exchange completed · Sandra Osman
Final reconciliation Jul 30
A measured zero, not an unknown
Measured total — 7 of 8 accounts $6,480,740.00 As of the stalest contributing snapshot, Aug 12, 9:41 AM. ····7702 has never been measured and is excluded — it is not added in as $0.00.
The same money, computed two ways — where the two nav sections can disagree

escrow_accounts.current_balance_cents_snapshot is the account-level truth. A database trigger recomputes exchanges.exchange_funds_held from the sum of an exchange’s accounts — but only for accounts that carry an exchange_id. Two figures, two paths, and three ways to differ. This panel exists so a QI officer never has to discover that in a spreadsheet.

ExchangeFrom accountsExchange funds heldReading
EX-2024-0147 · Belcher Family Trust $1,850,000.00 $1,850,000.00 Agree — and both are wrong against the bank. Agreement between two ledger paths is not agreement with the bank.
EX-2026-000241 · Vasquez Commercial Group Never measured Never measured Correct. Neither path invents a zero, and the approval guard refuses to release against it.
No exchange · pooled account ····6120 $58,240.00 Not represented Visible only here. An unassigned account rolls up to no exchange, so any figure built from exchanges alone understates held funds by this amount.
Two of these columns are inferences and must be labelled as such. Segregation is read from whether exchange_id is set — there is no segregation attestation field, no state-of-record column, and nothing that records who attested to it. For a California file under SB 1007 that inference is not evidence. add escrow_accounts.segregation_basis and attested_by / attested_at, and stop inferring. Custodian, funded date and interest terms are not tracked anywhere in the schema; the shipped card says so in words and this table does the same rather than leaving a blank that reads as “none”.

Bank & escrow registry

The relationships the accounts sit on · connection health is derived from what has actually happened, not from the status column
3 reporting 1 verification overdue 1 pending · 1 archived
Read-only by construction There is no write endpoint on bank_connections or escrow_accounts. Credentials, routing numbers and full account numbers live in the workflow vault and never reach this repository — this console holds last-4 only. Everything below is provisioned by workflow; the console can read it, cite it, and chase it, and can do nothing else to it.
Meridian Trust ····4821
Qualified Escrow — Operating · connected Jan 8, 2026 · added by Sandra Osman
Active · reporting 5 accounts
Last verified
Aug 12, 2026
7 days ago · inside the 90-day cadence
Last balance check
Today, 2:14 AM
All 5 accounts present in the pull
Held at this bank
$4,012,500.00
4 open accounts · 1 closed
Open exceptions
3
Including the unexplained debit on ····5001
Accounts
Sound Federal Trust ····9140
Qualified Escrow — Segregated · connected Mar 19, 2026 · added by Sandra Osman
Active · one account not reporting 2 accounts
Last verified
Jul 2, 2026
48 days ago · inside the 90-day cadence
Last balance check
Today, 2:14 AM
····7702 absent from the last 3 pulls — the feed ran, the account was not in it
Held at this bank
$2,410,000.00
Measured on 1 of 2 accounts
Open exceptions
1
Duplicate line, waiting on the bank 3 days
Accounts
Cordova Bank & Trust ····2255
Escrow — pooled / sweep · connected Nov 4, 2025 · added by Sandra Osman
Active · verification overdue 1 account
Last verified
Feb 3, 2026
198 days ago · 108 days past the 90-day cadence
Last balance check
Today, 2:14 AM
Balance feed is healthy — verification is the gap
Held at this bank
$58,240.00
Pooled, assigned to no exchange
Open exceptions
0
Reconciled through Aug 18
Accounts “Active” is a status column, not a health reading. This connection is active and 108 days past re-verification — a single flag would have shown it green.
Alder Creek Savings ····7715
Qualified Escrow — Operating · requested Aug 14, 2026 · added by Sandra Osman
Pending verification Waiting on the bank · 5 days
No escrow accounts here yet — and none can be opened from this console
Accounts appear under a connection once the bank confirms the micro-deposits and the provisioning workflow opens the first one. Micro-deposits were sent Aug 14 and have not been confirmed; the next automated chase goes out Aug 21. Nothing is blocked by this — no exchange is assigned to this bank yet.
Harbor Point Savings ····0031
Archived Jun 2, 2026 · all accounts closed and finally reconciled before archival
Archived 0 open accounts
Who can even open this surface. All three endpoints sit behind requireOrgAdmin, so org_owner, org_admin and platform admins pass and an org_staff coordinator receives a 404 — while the database policy on bank_connections grants SELECT to any org member. The API gate is stricter than row-level security, which is the right direction, but it leaves two rough edges: the nav item renders for a role that cannot load it, and PATCH …/assign validates the assignee as any active org member, so an exception can be assigned to a coordinator who cannot open the page it lives on. Pick one boundary and put both sides on it.
Build contract — escrow & banking
1 · A balance is a measurement, and it carries the moment it was taken. Every dollar figure on this surface renders with an as-of stamp beside it, and a figure with no stamp is not a figure. An escrow_accounts row that has never received a balance webhook has current_balance_cents_snapshot = 0 because that is the column default and balance_snapshot_at IS NULL — that is unmeasured, and rendering it as $0.00 is a factual claim the platform cannot support. It renders as Never measured, it is excluded from every total, and the exclusion is stated on the total. The shipped BankConnectionsSection currently formats it straight to $0.00; that is the first defect to fix.
2 · A total is only as fresh as its stalest input. A sum over accounts is stamped with the earliest contributing snapshot, never the latest — mirroring earliestSnapshotAt in admin.ts and the bool_or(balance_snapshot_at is null) test in the escrow-sufficiency guard. If any contributing account is unmeasured, the total says so rather than quietly shrinking.
3 · Status is derived from evidence, never read off a single column. A connection whose status = 'active' but whose last_verified_at is 198 days old is not healthy, and the health cell says which of the two facts is wrong. An account that is open with an unexplained bank delta is never green. An unmatched debit and its matching balance drift are rendered as one event, because they are one event. State comes from dates, statement lines, receipts, counts and signatures — never from one boolean.
4 · No fund movement exists on this surface, in any form. Nothing here proposes, approves, releases, redirects or reverses a payment. Resolving an exception records a decision and writes an audit row; it moves nothing. The one resolution kind that would create a fund-movement record — created_retroactive_proposal — is refused by the server with 409 and admin.reconciliation_exception.resolution_denied, and the UI shows it struck through with the reason rather than hiding it. A refusal a user can see is a control a user trusts.
5 · Four eyes, and the approver is never the proposer. Any control that could stop, release or write off money — a freeze, a closure above the write-off threshold — takes two authorized officers of the owning organization: one proposes, a second and different officer approves. A proposer’s own submission is not an approval and is never counted, displayed or aggregated as one. The exchanger appears nowhere in this chain: an exchanger in a fund-movement approval or initiation path is constructive receipt under Treas. Reg. §1.1031(k)-1(g)(6) and would fail the exchange. An exchanger notice about an escrow review is permitted only as explicitly non-authorizing, non-gating information.
6 · Two projections of one number, shown side by side. escrow_accounts.current_balance_cents_snapshot is account truth; exchanges.exchange_funds_held is a trigger-maintained rollup that only sees accounts carrying an exchange_id. They can disagree, and a pooled account is invisible to the second one entirely. The cross-check panel is not a nicety — it is the reason these three nav sections belong on one screen.
7 · Segregation is currently an inference and must be labelled as one. The console reads it from whether exchange_id is set. That is not an attestation, and under CA SB 1007 and the other state QI statutes an inference is not evidence. Add segregation_basis, attested_by and attested_at, or keep saying inferred, not attested on every row. Do not quietly promote the inference to a claim.
8 · An overdue or unmet obligation never resolves to a satisfied appearance. An unexplained delta stays alarming until it is explained on the record — it does not go neutral because it was acknowledged, claimed, snoozed or scrolled past. The same rule that governs a passed 45-day deadline governs a bank that is short: the alarm state is a fact about the world, not a notification the user can dismiss.
9 · Every row carries its real action and deep-links to the section it concerns. An account row opens that exchange’s Escrow hub, an exception opens the Disbursements or Identity & AML section it turns on, a bank row opens the chase. Nothing on this surface drops a user on an Overview to hunt.
10 · Exactly one next step. One filled primary button exists in this document — Claim and investigate, on the unexplained debit. Everything else is a secondary or ghost affordance. Five exceptions across eight accounts is a workload; the surface's job is to name which one is first.
11 · One boundary, both sides of it. All three endpoints require org_owner or org_admin; row-level security on bank_connections is looser than that. Either widen the API to org_staff or hide the nav item from them and restrict assigned_to to roles that can actually open the page — an exception assigned to someone who receives a 404 is a queue item that can never be worked.
12 · Provenance is stated, not implied. The read and triage endpoints are shipped; the detection that fills them is not. No nightly bank-statement job, no bank_statement_runs table, and no code path anywhere in the repository writes a reconciliation_exceptions row. Until that lands, this queue is permanently empty in production, and an empty exception queue reads as health — which is why the banner and the markers stay, and why no screenshot of this surface may be narrated as a running reconciliation.
Fully tokenized against ../tokens.css — no raw hex, and no new token was required: the console rail, admin, escrow-hub, identity and good/warn/bad roles already carried every job on this page. Light and dark are both designed. All organizations, banks, accounts, people, references and amounts are synthetic demo data.