Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

09 — User Behaviour (Payments)

Expected behaviour, mistakes, fast paths, and how the UX resolves them.


Expected behaviour

  • Accountant records a counter payment in < 60 s and sees a receipt instantly.
  • Refunds are deliberate: reason required, exact amount shown, confirmation.
  • Gateway outcomes surfaced as PENDING/PROCESSING/COMPLETED/FAILED, reconciled by the accountant, not auto-patched by clients.
  • Invoice due amounts always reflect latest paidAmount (pull-to-refresh).

Common mistakes

MistakeUX mitigation
Wrong payer selectedPayer search prefilled from invoice; editable before submit; detail shows full payer context
Wrong amountDecimal formatter + min 0 + server validation; no silent rounding
Double-tap Submit → double paymentSubmit disabled while pending; but no idempotency key server-side — flag OQ
Refunding too muchClient max = amount − refundedAmount; server 409 backstop
Recording gateway payment without gateway referenceOptional field lent; reconcile path exists
Reconciling with wrong status stringRadio limits choices; server maps unknown → pending

Fast paths

  • Invoice detail → "Record payment" prefills amount + payer.
  • FAB from list → new payment.
  • Recent payment repeated → copy previous (payer + description) (proposed).

Power users

  • Keyboard-first desktop: / focus, Enter submit, ESC cancel, tab order fixed.
  • Keyboard shortcuts: N new payment; Ctrl/Cmd+F filter.

New users

  • First-time empty state explains "record your first payment"; help text on refund sheet explains guards.

Expert users

  • Reconcile screen aggregates PENDING payments count; bulk-eligible design (proposed) — today one PATCH per payment.

Accessibility users

  • Money values spoken fully; statuses icon+label; focus order logical; large type reflows (no fixed heights).

Interrupted sessions & retries

  • Interrupted mid-submit: button pending until server responds; on failure keep form intact; never half-write locally.
  • Retries: exponential backoff for 5xx/network; 429 → countdown, no auto-retry.

Abandonment

  • Close form → confirm discard (if touched); refund sheet discard without warning (non-destructive until submit).

Frustration points + fixes

FrustrationFix
"Where did my payment go?"Traceable: payment → invoice → receipt links; search
Invoice status stale after paymentAuto-link to invoice updates PAID/PARTIAL; pull-to-refresh
Can't fix a wrong gateway outcomeReconcile screen sets status explicitly
Money precision doubtTabular figures + 2-decimal format; show refundedAmount explicitly
Two payment modules confusing (fees payments vs payments_v2)Cross-module inconsistency flagged OQ-1 (see 12); UI shows canonical payments module records
404 instead of validation on business ruleClient pre-validates marks/amounts; 404s handled as not-found UI when weird codes arrive—log + report