figma guide
Designing breach settlement wire and check fallback disbursement UI in Figma: WIR-*, CHK-*, and ACH-failed rail switching
Design breach settlement wire and check fallback UI in Figma with WIR-* wire instructions, CHK-* mail tracking, ACH-failed rail switches, and claimant-safe delivery status.
- Published
- Updated
- Sep 27, 2026
- Read time
- 6 min
- Level
- Intermediate
Quick answer
Wire and check fallback UI is how programs pay people when ACH is impossible, rejected, or non-compliant—not a “legacy mode” hidden from product specs. Design WIR- wire disbursement* with beneficiary bank capture, CHK- paper check* with mail tracking and stop/reissue, and rail switch workflows that preserve pay_id history when moving from ACH to alternate rails after returns or sanctions clearance. Treasury needs one payment_rail_enum visible on pre-export validation, NACHA preview (ACH-only rows), and status portal timelines. Claimants choosing wire or check need different proof artifacts than TRACE-* ACH—link proof of payment variants. International paths extend foreign claimant without duplicating SWIFT forms on every screen. Start from the Figma guides hub and use forms, saved addresses, and Dev Mode handoff.
Who this is for
- Product designers where engineering only built ACH FILE-NACHA-* and ops pays wires manually in email.
- Claims ops reissuing after R03/R04 returns when the claimant cannot fix ACH but can accept a check.
- Compliance ensuring sanctions screening runs on WIR-* and CHK-* beneficiaries, not only ACH batches.
Rail switch: ACH → WIR-* or CHK-*
PaymentRailSwitch — RSW-992-055 · pay_id: PAY-992-4412 · from: ach · to: wire | check
├── Preconditions:
│ ├── Prior leg: RET-* max retries | VAL-FAIL-* | claimant_elected_alt_rail
│ ├── [Payee correction](/designing-breach-settlement-payee-correction-and-beneficiary-update-ui-in-figma/) complete for new rail
│ ├── SAN-* cleared for updated BENE-* ([sanctions UI](/designing-breach-settlement-sanctions-screening-and-ofac-payment-hold-ui-in-figma/))
│ └── [GATE-PAY-*](/designing-breach-settlement-disbursement-hold-release-and-payment-gate-ui-in-figma/) allows new submission
├── States:
│ ├── requested → bene_data_collected → approved → submitted → confirmed | failed
│ ├── Never delete ACH SUB-* row—append RSW-* event
│ └── New IDMP-* on submit ([idempotency](/designing-breach-settlement-payment-idempotency-and-duplicate-submission-prevention-ui-in-figma/))
├── Artifacts:
│ ├── WIR-* or CHK-* leg id · LOG-RSW-*
│ ├── Counsel flag if amount > threshold
│ └── Fee disclosure (wire fee deducted vs gross)
└── Portal:
├── “Payment method updated to {wire|check}”
└── Timeline omits SWIFT/account numbers
| Trigger | Typical rail | Avoid |
|---|---|---|
| Repeated ACH return | CHK-* | Silent wire without claimant consent |
| No ACH in country | WIR-* | Fake US address for ACH |
| OFAC hold cleared with wire path | WIR-* | Skipping re-screen |
| Claimant prefers check | CHK-* | Mailing to unverified address |
Verdict: Rail switch is a first-class workflow, not a support macro—spec RSW-* before check stock runs out mid-wave.
WIR-* wire disbursement workspace
WireDisbursement — WIR-992-883 · pay_id · bene_id: BENE-992-118
├── Beneficiary capture ([forms](/designing-forms-in-figma-inputs-states-and-handoff/)):
│ ├── Legal name match [eligibility](/designing-breach-victim-eligibility-verification-portal-ui-in-figma/) · address
│ ├── Bank name · SWIFT/BIC · IBAN or account+ABA rules by corridor
│ ├── Intermediary bank optional · purpose of payment code (internal)
│ └── Upload voided check / bank letter ([document upload](/designing-breach-settlement-claim-document-upload-and-evidence-management-ui-in-figma/))
├── Validation ([pre-export queue patterns](/designing-breach-settlement-pre-export-payment-validation-and-exception-queue-ui-in-figma/)):
│ ├── Format validators · country allowlist
│ ├── Duplicate BENE fingerprint vs [fraud](/designing-breach-settlement-duplicate-claim-detection-and-fraud-prevention-ui-in-figma/)
│ └── FX estimate display (internal)—not a guaranteed rate in portal
├── Submission:
│ ├── WIR-SUB-* · processor reference WIR-TRACE-*
│ ├── Fee line item · RES-OP-* bucket ([replenishment](/designing-breach-settlement-escrow-replenishment-and-disbursement-reserve-ui-in-figma/))
│ └── [Bank confirmation](/designing-breach-settlement-bank-confirmation-and-trace-matching-ui-in-figma/) match type = wire
├── Failure handling:
│ ├── beneficiary_rejected · swift_invalid · compliance_reject
│ └── Reopen [payee correction](/designing-breach-settlement-payee-correction-and-beneficiary-update-ui-in-figma/)—do not re-ACH automatically
└── Claimant status:
├── “International transfer sent” · expected delivery window
└── Link [where-is-my-payment](/designing-breach-settlement-payment-inquiry-and-where-is-my-payment-ui-in-figma/) with WIR-* category
Domestic USD wires reuse the same WIR-* frame with domestic routing fields—do not fork unrelated UI; use corridor_enum to show fields.
CHK-* check disbursement workspace
CheckDisbursement — CHK-992-224 · pay_id · mail_to_address_id
├── Address source:
│ ├── [Saved addresses](/designing-saved-addresses-and-address-book-ui-in-figma/) · [payee correction](/designing-breach-settlement-payee-correction-and-beneficiary-update-ui-in-figma/)
│ ├── Undeliverable flag from prior CHK-UND-*
│ └── PO Box rules (program policy banner)
├── Check lifecycle:
│ ├── CHK-PRINT-* · CHK-MAIL-* · tracking optional
│ ├── CHK-CASH-* when deposited (bank file or manual)
│ ├── CHK-STOP-* · CHK-REISS-* ([stop payment patterns](/designing-breach-settlement-stop-payment-void-and-in-flight-recall-ui-in-figma/) adapted)
│ └── Stale date · escheat link [UCF](/designing-breach-settlement-unclaimed-funds-and-escheatment-ui-in-figma/)
├── Admin queue ([tables](/figma-tables-and-data-ui-rows-columns-and-handoff/)):
│ ├── Print batch · mail house export
│ ├── Exception: address failed validation · deceased [heir flow](/designing-breach-settlement-deceased-claimant-and-heir-designation-ui-in-figma/)
│ └── Link [tax 1099](/designing-breach-settlement-tax-reporting-and-1099-ui-in-figma/) when check is reportable event
└── Portal:
├── “Check mailed on {date}” · no check number in public API
└── Reissue copy when CHK-UND-* after [timeline notification](/designing-breach-settlement-hold-release-notifications-and-claimant-payment-timeline-ui-in-figma/)
Checks overlap returned payment emotionally for claimants—use calm copy: “We’re sending payment by mail” not “ACH failed.”
Comparison table: ACH vs wire vs check
| Rail | Confirmation artifact | Typical delay | Claimant data burden |
|---|---|---|---|
| ACH | TRACE-* · NACHA | 1–3 business days | Routing + account |
| WIR-* | WIR-TRACE-* · SWIFT ack | 1–5+ days | SWIFT/IBAN, bank docs |
| CHK-* | CHK-MAIL-* · CHK-CASH-* | Mail + deposit | Mailing address only |
Best for: Distribution schedule—split WAVE- by rail* so FILE-NACHA-* batches do not block wire rows.
Status portal timeline (multi-rail)
ClaimantTimeline — pay_id scoped
├── EVT-RSW-* “Payment method changed”
├── EVT-WIR-SUB-* / EVT-CHK-MAIL-* (rail-specific copy keys)
├── EVT-PAID-* uses generic “Payment completed” internally mapped
├── [REV-*](/designing-breach-settlement-payment-reversal-chargeback-and-unauthorized-debit-dispute-ui-in-figma/) rare on wires—show “Contact us” not chargeback jargon
└── Download [proof](/designing-breach-settlement-proof-of-payment-and-remittance-advice-ui-in-figma/) PDF variant by rail
Use progress steppers for wire (“Submitted → Sent → Received by bank”)—checks use mail-centric steps instead.
Handoff checklist (Dev Mode)
- PaymentRailSwitch — rsw_id (RSW-*), pay_id, from_rail, to_rail, reason_enum, state_enum, requested_at.
- WireDisbursement — wir_id (WIR-*), pay_id, corridor_enum, bene_bank_json, fee_amount, wir_trace_id, state_enum.
- CheckDisbursement — chk_id (CHK-*), pay_id, mail_address_id, mail_date, tracking_token optional, state_enum.
- RailSpecificProof — proof_id (PROOF-*), pay_id, rail_enum, download_url_policy, issued_at.
- ClaimantRailPreference — pref_id (PREF-RAIL-*), claim_id, allowed_rails_json, elected_rail optional.
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Wire UI only in ops runbook | Wrong BENE in prod | WIR-* in product specs |
| Reuse ACH TRACE copy for wire | Support confusion | WIR-TRACE-* labels |
| Mail check without address verify | Fraud / loss | Validation + IDV for changes |
| Skip SAN-* on rail switch | Compliance gap | Re-screen on RSW-* |
| Single NACHA export for mixed wave | Wires dropped | Per-rail batch views |
| Show full bank details in portal | Account takeover risk | Admin-only bene_bank_json |
| No CHK-STOP-* linkage | Double payment | Stop/recall patterns |
| Ignore wire fees in RES-OP-* | Surprise shortfall | Escrow reserve |
Recommended workflow
- Add payment_rail_enum to pay_id header across treasury and portal.
- Design RSW- wizard* after ACH failures with claimant consent step.
- Spec WIR- and CHK- lifecycles** with distinct confirmation ids—not shared “paid” boolean.
- Split wave planning by rail before NACHA export.
- Align proof PDFs and WIMP inquiry categories per rail.
FAQ
Same as foreign claimant post?
Foreign claimant focuses on eligibility and tax W-8; this post focuses on operational WIR- / CHK- rails and ACH fallback**—cross-link, do not merge specs.
Minor claimant paid by check?
Payee must match guardian designation—CHK-* mail_to locked until guardian BENE approved.
Wire and idempotency?
New IDMP- per WIR-SUB-**—SWIFT retries are not ACH re-export duplicates.
Check reissue after REV-*?
Rare for checks—use CHK-REISS-* with new chk_id; link REV-* if check was cashed fraudulently.
Escrow replenishment for wire fees?
Deduct from award vs escrow fee bucket—disclose in portal only if plan requires.
Next steps
- Design breach settlement foreign claimant and international payment UI in Figma — eligibility and tax
- Design breach settlement returned payment and reissue UI in Figma — common ACH → CHK trigger
- Design breach settlement payee correction and beneficiary update UI in Figma — before WIR-* / CHK-*
- Design breach settlement proof of payment and remittance advice UI in Figma — rail-specific artifacts
- Design breach settlement payment inquiry and where-is-my-payment UI in Figma — WIR/CHK categories
§ Keep reading