Payment Checkout & Ledger Service  ·  View 15 of 24  ·  Runtime

Money Going Back

Refunds, voids, chargebacks and dispute wins — four different objects, never a negative payment.

Editable source SVG draw.io All views
Raise Merchant refund idempotent Dispute notice from network Admit Captured amount check under concurrency Void if uncaptured not a refund Liability assignment Reserve Debit merchant balance Negative balance → receivable never rejected Execute Provider refund call State: pending not success Confirm Provider confirmation Reversing entry new, opposite sign Resolve Dispute won → reverse debit Dispute lost → stands Statement line reason code uncaptured await second reversal Money Going Back — Refunds, Reversals and Disputes Interface / broker External / third party Decision point Application we own Data store Risk / gap Opportunity synchronous failure / alternate event / async No ledger entry is ever reduced. A refund, a dispute debit and a dispute win are three new transactions referencing the original. v 1.0 · owner Payments Platform Architecture · date 2026-10

Decisions

  • No ledger entry is ever reduced. A refund, a dispute debit and a dispute win are three new transactions referencing the original (ADR-02).
  • A void of an uncaptured authorization is a different operation from a refund, with a different provider call and different ledger accounts.
  • A refund is accepted even when the merchant's available balance is insufficient; the negative balance is recorded as a receivable rather than the refund being rejected (ADR-13).

Why that last one

  • Refusing a refund because a merchant is out of funds pushes a platform problem onto a buyer who has already been charged. The receivable is the platform's credit risk, taken knowingly.
  • The sum of refunds can never exceed the captured amount under concurrent requests — enforced in the payment shard, which is why refunds stay inside one merchant's shard (ADR-08).

Risks

  • A chargeback can arrive after the merchant has been paid out. The dispute reserve account exists for that, and it is sized by a risk policy this design does not set.