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


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_modeBest forRisk
fixedPredictable daily prefundUnder-funds big wave
fill_to_targetKeep disbursement cushionDrains operating
wave-linkedTranche prefundWrong 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

MistakeWhy it hurtsFix
Sweep shown in claimant portalWrong expectationsAdmin-only hub
No maker-checkerFraud / errorDual approval
Transfer without bank traceRecon breaksRequire trace on settled
Double-count in LIQ-*False shortfallInternal xfer net zero at program level
Sweep during exportRace conditionsRespect FREEZE-EOD + batch locks
Same UI as PAY-* exportOps confusionDistinct XFER-ESC visual language
fee_hold sweep undocumentedCourt questionsreason_code + PDF note

  1. Fix account map in fixtures with finance labels on every node.
  2. Design XFER-ESC create + liquidity preview before automation rules.
  3. Add SWEEP rule editor with simulation (“fire now” dry run).
  4. Connect settled XFER to reconciliation row template.
  5. 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

Share on X

§ Keep reading

Related guides.