Payment Checkout & Ledger Service · View 04 of 24 · People and journeys
The trough
- The sentiment line bottoms at 'See the outcome' because the phase before it is a spinner with no deadline, and a buyer's response to a spinner is to press again.
- That is not a UX complaint. It is the unknown provider outcome (view 14), and it is why `processing` is a first-class state and the idempotency key is at the API edge (ADR-03, ADR-04).
What answers each phase
- Press Pay → server-created intent, so the amount is never client-controlled.
- Prove it is them → the intent survives the redirect, because state lives on the server and not in the session.
- Wait → an 8-second hard deadline and an honest `processing`, rather than an optimistic success.
- Ask for it back → a refund object with its own pending state, shown as pending.
Assumptions
- A few unknown outcomes per thousand attempts, concentrated in one rail.
- Double-charge tolerance ≤ 1 per 1,000,000 attempts — the number that makes 'never retry after unknown' non-negotiable.