figma guide

Designing breach settlement returned payment and reissue UI in Figma: RET-* bounces, PAY-* recall, and claimant reissue flows

Design breach settlement returned payment and reissue UI in Figma with RET-* bounce alerts, PAY-* recall states, claimant bank updates, and check reissue workflows.

Published
Updated
Aug 30, 2026
Read time
7 min
Level
Intermediate

Quick answer

Returned payment UI keeps settlement disbursement honest when ACH rejects, checks bounce, or mail is undeliverable—without trapping claimants in dead-end “payment failed” screens. Design RET- bounce records* linked to original PAY-* disbursements, recall and void states for in-flight payments, and claimant-facing reissue flows that collect corrected bank details or mailing addresses before a new PAY-* is issued. Admins see return reason codes (R01, R02, undeliverable mail); claimants see plain-language next steps. Connect to payment disbursement, status portal, saved addresses, fraud holds, and unclaimed funds. Start from the Figma guides hub and pair with forms, alerts, and Dev Mode handoff.


Who this is for

  • Product designers building settlement administrator consoles and claimant portals where payments fail after approval.
  • Disbursement operations teams reconciling returned checks, ACH returns, and stale payment methods before court accounting.
  • Class counsel and claims administrators who need audit-ready reissue trails tied to original PAY-* records.

Returned payment lifecycle overview

ReturnEvent — RET-992-0088 · Original PAY-992-22014 · Status: Awaiting claimant action
├── Return triggers:
│   ├── ACH return (R01 insufficient funds, R02 closed account, R03 no account)
│   ├── Check void/uncashed expiry · Stop payment
│   ├── Mail undeliverable (bad address on file)
│   ├── Payee name mismatch · Bank rejects wire
│   ├── [Foreign payment](/designing-breach-settlement-foreign-claimant-and-international-payment-ui-in-figma/) SWIFT rejection
│   └── Fraud recall after [FRD-* hold](/designing-breach-settlement-duplicate-claim-detection-and-fraud-prevention-ui-in-figma/) (admin-initiated)
├── ID namespace:
│   ├── RET-* (return/bounce record) · PAY-* (original disbursement)
│   ├── REI-* (reissue attempt) · CLM-* (claim context)
│   └── AUD-* (audit entries for every state change)
├── Outcomes:
│   ├── Reissued → New PAY-* or REI-* linked to RET-*
│   ├── Escheat → Route to [UCF workflow](/designing-breach-settlement-unclaimed-funds-and-escheatment-ui-in-figma/)
│   ├── Cancelled → Counsel-approved write-off (rare)
│   └── Blocked → Active FRD-* or [dispute](/designing-breach-settlement-claims-dispute-and-appeals-ui-in-figma/)
└── Claimant messaging: What failed + one clear CTA to fix
Return typeAdmin seesClaimant seesTypical fix
ACH R02/R03Bank return code + last4”Bank could not accept payment”Update bank in portal
Check uncashedVoid after 90 days”Your check expired—request reissue”Choose e-check or ACH
Undeliverable mailUSPS scan / NCOA flag”We couldn’t deliver your check”Confirm address
Name mismatchBank rejection detail”Name on account must match claim”Upload ID + correct payee
Fraud recallFRD-* referenceNeutral review messageWait or upload docs

Verdict: Every RET- must trace to exactly one PAY- and produce either REI-* or documented escheatment**—never a silent duplicate payout.


RET-* record structure and admin queue

ReturnRecord — RET-992-0088 · pay_id: PAY-992-22014 · clm_id: CLM-992-44102
├── Core fields:
│   ├── return_type_enum (ach_return · check_void · mail_undeliverable · wire_reject · admin_recall)
│   ├── return_reason_code (NACHA R-codes · internal enums)
│   ├── returned_at · original_pay_amount · currency
│   ├── reissue_eligible (bool) · escheat_eligible_after (date)
│   └── status: new · notified · awaiting_update · reissue_queued · reissued · escheated · closed
├── Admin queue columns:
│   ├── RET-* ID · CLM-* · Claimant name · $ amount · Age · Return type
│   ├── Reissue count (REI-* attempts) · FRD-* hold flag
│   └── Assigned ops · SLA (days until escheat clock)
├── Bulk actions:
│   ├── Send reminder email · Export for counsel
│   ├── Queue batch reissue (after claimant updates)
│   └── Route to UCF review (threshold met)
└── Filters: return_type · amount band · foreign · minor/guardian · deceased/heir

Use tables for the ops queue and detail drawer for PAY-* ↔ RET-* ↔ REI-* chain—operators should never hunt across screens.


Claimant reissue flow (portal)

ReissueWizard — CLM-992-44102 · RET-992-0088 · Step 2 of 3
├── Entry points:
│   ├── Email/SMS deep link with signed token
│   ├── [Status portal](/designing-breach-settlement-claim-status-portal-and-claimant-dashboard-ui-in-figma/) banner: "Action required: payment returned"
│   └── [Call center](/designing-breach-call-center-and-agent-script-ui-in-figma/) sends ACT-* link
├── Step 1 — Understand (plain language):
│   ├── "Your $XX payment on [date] could not be delivered"
│   ├── Reason bucket (not raw R-codes): bank issue · mail issue · expired check
│   └── No blame language · No other claimants' data
├── Step 2 — Fix method:
│   ├── ACH: [Payment methods](/designing-payment-methods-ui-in-figma/) form · micro-deposit verify optional
│   ├── Check: Confirm mailing address · certified mail option
│   ├── Digital: PayPal/Venmo if settlement allows
│   └── [Foreign claimant](/designing-breach-settlement-foreign-claimant-and-international-payment-ui-in-figma/) W-8 + SWIFT re-entry
├── Step 3 — Confirm:
│   ├── Summary: old PAY-* voided · new REI-* pending
│   ├── ETA range · Support contact
│   └── Optional: opt into e-payment only (no future checks)
└── Post-submit: Status tile → "Reissue processing" · Blocks duplicate REI-* requests

Prototype mobile-first—many claimants open reissue links on phones. Use progress steppers for multi-step fixes.


PAY-* recall, void, and REI-* issuance (admin)

PaymentStateMachine — PAY-992-22014
├── States:
│   ├── sent → returned (creates RET-*)
│   ├── sent → recalled (pre-clear · admin only)
│   ├── cleared → returned (ACH late return window)
│   └── void (check uncashed · issues RET-* with check_void)
├── REI-* creation rules:
│   ├── Max 3 REI-* per CLM-* without supervisor approval
│   ├── Block if FRD-* hold active
│   ├── Block if [tax W-9](/designing-breach-settlement-tax-reporting-and-1099-ui-in-figma/) stale after payee change
│   └── Require claimant confirmation timestamp before REI-* queue
├── Accounting hooks:
│   ├── Original PAY-* marked returned_not_reissued until REI-* clears
│   ├── [Final accounting](/designing-breach-settlement-final-accounting-and-court-closure-ui-in-figma/) reports RET-* counts by reason
│   └── Link to [audit log](/designing-audit-log-and-security-activity-ui-in-figma/)
└── Notifications:
    ├── Claimant: payment returned + CTA
    ├── Admin: high-value RET-* · repeat return same CLM-*
    └── Counsel: batch summary weekly

Design state badges on PAY-* rows: Sent · Returned · Reissue pending · Reissued · Escheated.


Comparison: reissue UI vs adjacent settlement surfaces

SurfaceFocusThis UI adds
Payment disbursementFirst payoutFailure and second attempt
Status portalClaim progressAction-required payment banner
Unclaimed fundsAbandoned moneyRET-* aging into UCF
AmendmentsClaim data fixesPayee/bank correction for payout
Fraud holdsIntegrity blocksRecall vs return distinction

Handoff checklist (Dev Mode)

  • ReturnRecord — ret_id (RET-*), pay_id, clm_id, return_type_enum, reason_code, status_enum, reissue_eligible, escheat_eligible_after.
  • ReissueRequest — rei_id (REI-*), ret_id, new_payment_method_ref, claimant_confirmed_at, status_enum.
  • PaymentReturnBanner — clm_id, ret_id, reason_bucket_key, cta_href, dismissible (false).
  • ReissueWizard — step_index, return_type_enum, payment_method_form_variant, confirmation_summary_fields[].
  • AdminReturnQueue — sortable columns[], bulk_action_enums[], pay_rei_chain_view.

Common mistakes

MistakeWhy it hurtsFix
Show raw ACH R-codes to claimantsConfusion · support loadReason buckets + plain copy
Issue REI-* without voiding PAY-*Double payment · court findingState machine enforces void first
Unlimited reissue attemptsFraud · costCap REI-* · supervisor override
No link RET-* → original PAY-*Accounting nightmareMandatory pay_id foreign key
Reissue while FRD-* activePayout to bad actorBlock REI-* on hold
Check reissue to same bad addressRepeat RET-* loopForce address confirm step
Silent escheat after one bounceClaimant harmReminder series before UCF
Allow REI-* without claimant actionWrong bank on fileRequire portal confirmation timestamp
Mix returns with disputes queueWrong SLASeparate RET-* ops queue
Skip AUD-* on manual recallCounsel discovery gapLog admin_id + reason

  1. Map return types your disbursement vendor supports (ACH, check, wire, digital wallet).
  2. Design admin RET- queue* with PAY-* ↔ REI-* chain visible in one drawer.
  3. Prototype claimant reissue wizard for top three return buckets (bank, mail, expired check).
  4. Connect status portal banners to RET-* states with signed deep links.
  5. Define REI- caps and FRD- blocks** with disbursement and fraud teams.
  6. Export RET- aging report* for UCF and final accounting mockups.

FAQ

Same claimant, third return in 30 days?

Supervisor review queue · Possible FRD-* referral · Offer phone verification · Cap auto REI-*.

Deceased claimant check returned?

Route to heir designation · Do not reissue to original payee · RET-* notes decedent status.

Minor/guardian payment returned?

Guardian contact only · Guardian bank or trust account · Extra ID step if payee changed.

Partial ACH return (rare split)?

Support manual REI- for remainder* · UI shows original amount vs returned portion · Counsel rule in config.

Integration with tax 1099?

Reissue in same tax year may amend 1099 · Flag TAX-* regen when payee or amount changes on REI-*.


Next steps

Share on X

§ Keep reading

Related guides.