figma guide
Designing breach settlement inter-account sweep and escrow funding transfer UI in Figma: SWEEP-*, XFER-ESC-*, and controlled moves between program accounts
Design breach settlement inter-account sweep UI in Figma with SWEEP-* rules, XFER-ESC-* funding transfers, dual approval, and liquidity impact on CASH-POS before disbursement waves export.
- Published
- Updated
- Sep 30, 2026
- Read time
- 5 min
- Level
- Intermediate
Quick answer
Inter-account sweeps move money between program buckets—operating escrow, disbursement sub-account, fee hold, tax withholding—without treating a transfer like a claimant payment. Design SWEEP- rule definitions* (threshold-based, scheduled, or manual) and XFER-ESC- transfer requests* with dual approval, liquidity preview against CASH-POS-*, and hard blocks during EOD close or export freeze. Sweeps feed escrow replenishment and supplemental injection workflows but are internal ledger moves—claimants should never see “transfer pending” instead of payment timeline states. Every XFER-ESC must emit bank reference ids that fund reconciliation can match separately from PAY-* exports. Start from the Figma guides hub and reuse forms, inline alerts, and Dev Mode handoff.
Who this is for
- Product designers when finance has five escrow accounts and ops “sweeps” via phone to the bank.
- Treasury aligning sweeps with distribution waves without double-counting in LIQ-* forecasts.
- Claims administrators who confuse internal transfers with returned payment reissues.
Account topology (design fixtures)
ProgramAccounts — ACCT-MAP-992
├── escrow_operating (master) — inbound settlement funding, interest
├── escrow_disbursement — outbound NACHA/wire/card load funding pool
├── fee_hold — [administrator fee](/designing-breach-settlement-claims-administrator-fee-and-expense-recovery-ui-in-figma/) + [attorney fee](/designing-breach-settlement-attorney-fee-allocation-and-incentive-award-ui-in-figma/) accrual
├── tax_withholding — [1099](/designing-breach-settlement-tax-reporting-and-1099-ui-in-figma/) reserve
└── contested_reserve — ties to [contested escrow](/designing-breach-settlement-contested-claim-escrow-and-dispute-reserve-ui-in-figma/) (may be sub-ledger only)
UI shows directed edges (from → to) with policy labels—not a generic “move money” form without account purpose copy.
SWEEP-* automated sweep rules
SweepRule — SWEEP-992-701 · name: nightly_disbursement_funding
├── Trigger:
│ ├── schedule: business_days 06:00 program_tz
│ ├── threshold: disbursement_available < min_disbursement_cushion
│ └── manual_fire_allowed: treasury_primary
├── Logic:
│ ├── source_account: escrow_operating
│ ├── target_account: escrow_disbursement
│ ├── amount_mode: fixed | fill_to_target | min(needed_for_WAVE, available)
│ └── wave_ref optional — link [distribution schedule](/designing-breach-settlement-distribution-schedule-and-tranche-disbursement-planning-ui-in-figma/)
├── Guardrails:
│ ├── Never sweep below operating_minimum_cents
│ ├── Respect [sanctions hold](/designing-breach-settlement-sanctions-screening-and-ofac-payment-hold-ui-in-figma/) on operating credits
│ ├── Skip if [appeal stay](/designing-breach-settlement-appeal-and-mandamus-review-ui-in-figma/) blocks outflows
│ └── Skip if FREEZE-EOD active ([close](/designing-breach-settlement-treasury-end-of-day-close-and-liquidity-certification-ui-in-figma/))
├── Execution:
│ ├── Creates XFER-ESC-* draft → auto-submit or await approval per policy
│ └── bank_initiated_wire | ACH internal transfer | book transfer (vendor enum)
└── Audit:
├── LOG-SWEEP-* rule version · inputs at fire time
└── Alert if sweep failed — route like [liquidity alerts](/designing-breach-settlement-intraday-liquidity-and-cash-position-dashboard-ui-in-figma/)
| amount_mode | Best for | Risk |
|---|---|---|
| fixed | Predictable daily prefund | Under-funds big wave |
| fill_to_target | Keep disbursement cushion | Drains operating |
| wave-linked | Tranche prefund | Wrong WAVE id |
Verdict: Preview sweep impact on available_to_pay before save—sweeping 100% of operating is a tabletop failure, not a edge case.
XFER-ESC-* manual funding transfer
EscrowTransfer — XFER-ESC-992-188 · state: pending_approval
├── Request:
│ ├── source_account_id · target_account_id · amount_cents
│ ├── reason_code: wave_prefund | fee_settlement | tax_remittance | correction
│ ├── free_text_note (required for correction)
│ └── attachments[] for wire instructions if external ([foreign](/designing-breach-settlement-foreign-claimant-and-international-payment-ui-in-figma/) corridors rare on internal)
├── Approval:
│ ├── maker_checker: requester ≠ approver
│ ├── optional counsel_notify for correction reason_code
│ └── [Break-glass](/designing-break-glass-emergency-access-and-account-recovery-ui-in-figma/) path with LOG-BRK-* for after-hours
├── Liquidity preview panel:
│ ├── Before/after CASH-POS-* buckets (read-only)
│ ├── Impact on [solvency check](/designing-breach-settlement-intraday-liquidity-and-cash-position-dashboard-ui-in-figma/) for pending NACHA batch
│ └── Warn if transfer conflicts with [replenishment TOP-UP-*](/designing-breach-settlement-escrow-replenishment-and-disbursement-reserve-ui-in-figma/) in flight
├── States:
│ ├── draft → pending_approval → submitted_to_bank → settled | failed
│ └── failed → retry | cancel (idempotent retry ids)
└── Reconciliation:
├── bank_trace_id required on settled
└── Appears in RECON-DAY-* as XFER line, not PAY-*
Use progress steppers on claimant-facing flows only by mistake—XFER-ESC is admin-only.
Relationship to replenishment and injection
TransferTypeRouting — policy hint for designers
├── Operational drift (pay tomorrow, disbursement low):
│ └── [Escrow replenishment](/designing-breach-settlement-escrow-replenishment-and-disbursement-reserve-ui-in-figma/) + SWEEP fill_to_target
├── Plan-level shortfall ([pro rata](/designing-breach-settlement-fund-shortfall-and-pro-rata-reduction-ui-in-figma/) candidate):
│ └── [Supplemental fund injection](/designing-breach-settlement-supplemental-fund-injection-and-top-up-approval-ui-in-figma/) — external credit, not sweep
├── Fee remittance to counsel:
│ └── XFER-ESC fee_hold → operating or outbound fee wire (separate screen)
└── Correction after [reconciliation break](/designing-breach-settlement-fund-reconciliation-and-bank-matching-ui-in-figma/):
└── XFER-ESC reason correction + link BREAK-*
Nav copy should not label injection as “sweep”—claimants and junior ops already confuse rails.
UI surfaces and permissions
TreasuryTransferHub — layout
├── Tabs: Active XFER-ESC | SWEEP rules | History
├── [Tables](/figma-tables-and-data-ui-rows-columns-and-handoff/) with filters: account, reason_code, state, business_date
├── Row actions: approve · cancel · view bank trace
├── Role matrix:
│ ├── treasury_primary — create, approve (if not maker)
│ ├── treasury_readonly — view + export CSV
│ ├── claims_admin — view only (no create)
│ └── external_auditor — read-only history ([auditor portal](/designing-breach-settlement-external-auditor-access-and-read-only-review-portal-ui-in-figma/))
└── Empty state:
└── Link [liquidity dashboard](/designing-breach-settlement-intraday-liquidity-and-cash-position-dashboard-ui-in-figma/) when no transfers today
Handoff checklist (Dev Mode)
- SweepRule — rule_id (SWEEP-*), trigger_json, amount_mode, source/target account ids, guardrails_json, active_bool.
- EscrowTransfer — xfer_id (XFER-ESC-*), amount_cents, reason_code, state_enum, approver_ids[], bank_trace_id.
- LiquidityPreview — preview_id, xfer_draft_id, before_after_buckets_json, solvency_warning_bool.
- ProgramAccounts — account_id, purpose_enum, minimum_balance_cents, visible_in_sweep_bool.
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Sweep shown in claimant portal | Wrong expectations | Admin-only hub |
| No maker-checker | Fraud / error | Dual approval |
| Transfer without bank trace | Recon breaks | Require trace on settled |
| Double-count in LIQ-* | False shortfall | Internal xfer net zero at program level |
| Sweep during export | Race conditions | Respect FREEZE-EOD + batch locks |
| Same UI as PAY-* export | Ops confusion | Distinct XFER-ESC visual language |
| fee_hold sweep undocumented | Court questions | reason_code + PDF note |
Recommended workflow
- Fix account map in fixtures with finance labels on every node.
- Design XFER-ESC create + liquidity preview before automation rules.
- Add SWEEP rule editor with simulation (“fire now” dry run).
- Connect settled XFER to reconciliation row template.
- Tabletop wave day + manual correction transfer—verify LIQ-* and solvency drawer update.
FAQ
Same as escrow replenishment?
Replenishment is often external inbound wire; XFER-ESC is internal between program accounts—link them in copy, separate ids.
NACHA export funding?
Prefund disbursement via SWEEP before export—solvency drawer should treat disbursement available, not only operating balance.
Interest allocation?
Interest credits hit operating first—SWEEP rules may follow credit with delay_hours to avoid sweep-before-post.
Check positive pay?
Unrelated rail—but fee_hold sweeps that fund check stock are still XFER-ESC, not check issuance.
Audit sampling (QA)?
QA samples PAY- exports, not XFER-ESC*—unless policy audits treasury controls separately (FIND-TRE-* class).
Next steps
- Design breach settlement intraday liquidity and cash position dashboard UI in Figma — bucket definitions
- Design breach settlement treasury end-of-day close and liquidity certification UI in Figma — freeze interaction
- Design breach settlement escrow replenishment and disbursement reserve UI in Figma — external cure
- Design breach settlement fund reconciliation and bank matching UI in Figma — XFER line matching
- Design breach settlement distribution schedule and tranche disbursement planning UI in Figma — wave-linked sweeps
§ Keep reading