figma guide
Designing breach settlement fund reconciliation and bank matching UI in Figma: REC-* periods, BNK-* imports, and PAY-* variance resolution
Design breach settlement fund reconciliation and bank matching UI in Figma with REC-* reconciliation periods, BNK-* statement imports, PAY-* variance queues, and court-ready fund reports.
- Published
- Updated
- Sep 01, 2026
- Read time
- 7 min
- Level
- Intermediate
Quick answer
Fund reconciliation UI proves settlement money in the bank matches what your system says was disbursed—before counsel signs final accounting or a court asks why $47,000 is unaccounted for. Design REC- reconciliation periods* that lock a date range, BNK- bank statement imports* that map to PAY-* disbursement rows, and variance queues where finance resolves timing differences, voided checks, and processor fees. Admins see ledger vs bank side-by-side; auditors export matched/unmatched lists without spreadsheet archaeology. Connect to payment disbursement, counsel approval, returned payments, final accounting, and compliance exports. Start from the Figma guides hub and pair with tables, badges, and Dev Mode handoff.
Who this is for
- Product designers building settlement administrator finance consoles where trust-account balances must reconcile to the cent.
- Settlement fund accountants and claims administrators who match bank CSVs to PAY-* records weekly or before court filings.
- Class counsel and auditors who need REC-* sign-off trails showing when the fund was last balanced.
Reconciliation lifecycle overview
ReconciliationFlow — REC-992-0033 · Period: 2026-07-01 → 2026-07-31 · Status: Variances open (3)
├── Inputs:
│ ├── System ledger: PAY-* sent · RET-* returned · FEE-* processor fees · ADJ-* manual adjustments
│ ├── [Bank import](/designing-breach-settlement-fund-reconciliation-and-bank-matching-ui-in-figma/) BNK-* lines from trust account CSV/OFX
│ ├── Opening balance (prior REC-* closed balance)
│ └── Expected closing = opening + deposits − disbursements − fees
├── ID namespace:
│ ├── REC-* (reconciliation period) · BNK-* (imported bank line)
│ ├── PAY-* · RET-* · FEE-* · ADJ-* (ledger entries)
│ ├── VAR-* (variance item) · MTCH-* (match record)
│ └── AUD-* (import · match · resolve · close)
├── Match types:
│ ├── Auto-match: amount + date window + reference (check #, ACH trace)
│ ├── Suggested match: fuzzy amount · user confirms
│ ├── Split match: one BNK-* → multiple PAY-* (batch ACH)
│ └── Manual link: VAR-* resolved with reason_enum
├── Outcomes:
│ ├── Closed REC-* → Signed by finance + optional counsel attestation
│ ├── Open VAR-* → Blocks [final accounting](/designing-breach-settlement-final-accounting-and-court-closure-ui-in-figma/) close
│ └── Escalated → [Compliance export](/designing-compliance-exports-and-legal-hold-ui-in-figma/) for external audit
└── Claimant impact: None—this is admin-only; never expose REC-* on [status portal](/designing-breach-settlement-claim-status-portal-and-claimant-dashboard-ui-in-figma/)
| Reconciliation state | Finance sees | Blocks |
|---|---|---|
| Draft | Import in progress | Nothing |
| Matching | Auto + suggested queue | REC-* close |
| Variances open | VAR-* list with aging | Final accounting sign-off |
| Pending sign-off | Summary totals balanced | Court filing export |
| Closed | Locked period · read-only | Re-open requires ADJ-* + audit |
Verdict: Every disbursement batch should be reconcilable within one REC- period—design imports before you scale to 100k PAY- rows.**
REC-* period structure and dashboard
ReconciliationPeriod — REC-992-0033 · settlement_id: SET-992 · trust_account_id: TRUST-001
├── Core fields:
│ ├── rec_id (REC-*) · period_start · period_end
│ ├── opening_balance · closing_balance_system · closing_balance_bank
│ ├── variance_total (must → 0 to close)
│ ├── status: draft · matching · variances · pending_signoff · closed
│ ├── closed_by_user_id · closed_at
│ └── linked_bnk_import_ids[] · linked_pay_batch_ids[]
├── Dashboard cards:
│ ├── Ledger disbursements (period): $2,847,392.18
│ ├── Bank outflows (matched): $2,847,340.00
│ ├── Unmatched bank lines: 12 · Unmatched ledger: 8
│ ├── Known timing (in transit): $52.18 · Fees: $847.00
│ └── Variance remaining: $0.00 ✓ or $X.XX ⚠
├── Side-by-side table (primary UI):
│ ├── Left: Ledger rows (PAY-* · RET-* · FEE-* · ADJ-*)
│ ├── Right: BNK-* lines with match_status chip
│ ├── Center: Link action · Split · Ignore with reason
│ └── Filters: date · amount range · payment_method · batch_id
└── Actions:
├── Import BNK-* CSV · Re-run auto-match · Export unmatched
├── Create ADJ-* for legitimate difference · Close REC-* (disabled if VAR-* open)
└── Link to [audit log](/designing-audit-log-and-security-activity-ui-in-figma/)
Use tables with sticky totals row—finance users scroll thousands of lines during month-end.
BNK-* import and auto-match rules
BankImport — BNK-992-0088 · rec_id: REC-992-0033 · Source: Trust ACH · 4,821 lines
├── Import wizard:
│ ├── Step 1: Upload CSV/OFX · Map columns (date · amount · description · reference)
│ ├── Step 2: Preview dedupe (hash date+amount+ref) · Skip duplicates from prior REC-*
│ ├── Step 3: Run auto-match rules · Show match rate before commit
│ └── Step 4: Commit → BNK-* rows created · AUD-* import logged
├── Auto-match rule priority:
│ ├── Exact: PAY-* check_number === BNK-* reference
│ ├── ACH: trace_id in BNK-* memo matches PAY-* processor_ref
│ ├── Amount+date: same $ ±$0.00 within ±3 business days
│ ├── Batch: sum(BNK-*[]) === sum(PAY-*[]) for batch_id
│ └── Fee: FEE-* template matches processor fee pattern
├── Suggested match UI:
│ ├── Confidence score (high · medium · low)
│ ├── Side preview: PAY-992-22014 ↔ BNK-* line
│ ├── Accept · Reject · Defer to manual
│ └── Bulk accept high-confidence (with undo window)
└── Unmatched BNK-* reasons (common):
├── Wire fee not modeled → Create FEE-*
├── [Returned check RET-*](/designing-breach-settlement-returned-payment-and-reissue-ui-in-figma/) credit not linked
├── Interest on trust balance → ADJ-* income
└── Bank error → VAR-* escalate
Pair import errors with inline alerts—a malformed CSV should not silently drop 200 rows.
VAR-* variance resolution
VarianceItem — VAR-992-0041 · rec_id: REC-992-0033 · Amount: $52.18 · Status: Open
├── Variance types (reason_enum):
│ ├── timing_in_transit — PAY-* sent · BNK-* posts next period
│ ├── processor_fee_unmapped — Create FEE-* from template
│ ├── partial_return — Link RET-* + remaining PAY-*
│ ├── duplicate_import — Dedupe BNK-* · no ledger impact
│ ├── manual_adjustment — ADJ-* with approver (dual control)
│ └── unknown — Escalate · legal hold on close
├── Resolution UI:
│ ├── Assignee · Due date · Notes (internal)
│ ├── Link to BNK-* and/or PAY-* · Or carry forward to next REC-*
│ ├── Resolve → VAR-* closed · AUD-* captured
│ └── Cannot close REC-* while VAR-* unknown type open
├── Carry-forward:
│ ├── timing_in_transit → Auto-reappear in REC-*+1 with link
│ ├── opening_balance adjustment on next period
│ └── Claimant-neutral—no status portal copy
└── Integration with [counsel approval](/designing-breach-settlement-counsel-review-and-payout-approval-ui-in-figma/):
├── Large ADJ-* may require APR-* before REC-* close
└── Export VAR-* summary for counsel review on final fund report
Comparison: reconciliation vs adjacent settlement finance surfaces
| Surface | Focus | This UI adds |
|---|---|---|
| Payment disbursement | Execute PAY-* | Prove bank matches ledger |
| Counsel approval | Gate release | Post-release balance proof |
| Returned payment | RET-* credits | Match return deposits to RET-* |
| Final accounting | Court close | Requires closed REC-* |
| Tax reporting | 1099 totals | Reconciled disbursement basis |
Handoff checklist (Dev Mode)
- ReconciliationPeriod — rec_id (REC-*), period_start, period_end, opening_balance, variance_total, status_enum.
- BankImport — bnk_import_id, rec_id, source_format, line_count, committed_at.
- BankLine — bnk_id (BNK-*), date, amount, reference, match_status_enum, linked_pay_ids[].
- VarianceItem — var_id (VAR-*), rec_id, amount, reason_enum, assignee_id, resolved_at.
- MatchRecord — mtch_id (MTCH-*), bnk_id, ledger_ref_type, ledger_ref_id, match_type_enum.
- ReconciliationDashboard — side_by_side_layout, auto_match_rules[], close_disabled_reasons[].
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Reconcile in Excel only | No AUD-* · court discovery gap | BNK-* import + match in product |
| Single global REC-* for all time | Unmanageable at scale | Monthly or batch-aligned periods |
| Auto-match without preview | Wrong PAY-* links | Commit wizard with match rate |
| Ignore processor fees | Persistent VAR-* | FEE-* templates on import |
| Close REC-* with open unknown VAR-* | Audit finding | Hard block on close CTA |
| Show bank balance to claimants | Trust account exposure | Admin-only surface |
| No carry-forward for in-transit | Duplicate VAR-* every month | timing_in_transit → next REC-* |
| Split match without batch hash | Unaudited partial links | MTCH-* records both legs |
| Re-open closed REC-* silently | Tampering risk | ADJ-* + dual approval + AUD-* |
| Missing link to unclaimed funds escheat outflows | Fund leak | Map escheat BNK-* to UCF-* |
Recommended workflow
- Define REC- period cadence* (monthly vs per disbursement batch) with finance and counsel.
- Prototype BNK- import wizard* with column mapping and dedupe preview.
- Design side-by-side match UI with auto, suggested, split, and manual paths.
- Build VAR- queue* with reason enums and carry-forward to next period.
- Gate final accounting close on last closed REC-*.
- Export reconciliation package for compliance exports and court filings.
FAQ
One BNK-* line for a 10,000 PAY-* ACH batch?
Split match UI · Link batch_id · Show sum validation · MTCH-* with pay_ids[] hash · Same pattern as counsel batch COUN-*.
RET-* posted in a different month than PAY-*?
Create VAR- timing* or link RET-* in the REC-* when credit appears · Common with returned payment flows.
Trust account earns interest?
ADJ- income row* · Match BNK-* credit · Document in REC-* notes · May affect residual fund reporting.
Counsel must sign REC-* close?
Configurable · High-variance or ADJ-* above threshold → attestation checkbox · Export for final accounting.
Real-time reconciliation during disbursement?
Operational dashboard separate from period close · REC-* still locks for audit · Don’t mix live queue with closed REC-* edits.
Next steps
- Design breach settlement payment disbursement and payout tracking UI in Figma — Ledger source for PAY-* matching
- Design breach settlement final accounting and court closure UI in Figma — Requires closed REC-*
- Design breach settlement returned payment and reissue UI in Figma — RET-* bank credits
- Design compliance exports and legal hold UI in Figma — Reconciliation audit packages
- Design audit log and security activity UI in Figma — REC-* and MTCH-* trail
§ Keep reading