Skip to content

Voucher Lifecycle

Models the lifecycle of a Voucher (gift card, store credit, promotional code, or discount voucher) from issuance through validation, redemption, and closure. Covers partial redemptions, expiry, and cancellation.

Object: voucher · States: 6 · Transitions: 8


State Diagram

flowchart LR

    %% ── classDef palette ─────────────────────────────────────
    classDef stInit  fill:#0d9488,stroke:#0f766e,color:#fff,font-weight:bold
    classDef stNorm  fill:#3b82f6,stroke:#2563eb,color:#fff
    classDef stOk    fill:#16a34a,stroke:#15803d,color:#fff,font-weight:bold
    classDef stFail  fill:#dc2626,stroke:#b91c1c,color:#fff,font-weight:bold
    classDef stHold  fill:#d97706,stroke:#b45309,color:#fff

    %% ── nodes ───────────────────────────────────────────────
    issued(["Issued"])
    validated["Validated"]
    partially_redeemed["Partially Redeemed"]
    redeemed[["Redeemed"]]
    expired[["Expired"]]
    cancelled[["Cancelled"]]

    %% ── transitions ─────────────────────────────────
    issued -->|"voucher-validated"| validated
    partially_redeemed -->|"voucher-validated"| validated
    validated -->|"voucher-redeemed"| partially_redeemed
    validated -->|"voucher-redeemed"| redeemed
    partially_redeemed -->|"voucher-redeemed"| redeemed
    issued -->|"voucher-cancelled"| expired
    partially_redeemed -->|"voucher-cancelled"| expired
    issued -->|"voucher-cancelled"| cancelled

    %% ── class assignments ───────────────────────────
    class issued stInit
    class validated,partially_redeemed stNorm
    class redeemed stOk
    class expired,cancelled stFail

States

State Label Description Initial Terminal
issued Issued Voucher created and assigned to customer. Full value available.
validated Validated Voucher presented and verified as valid at checkout. Value locked pending transaction.
partially-redeemed Partially Redeemed Portion of voucher value used. Remaining balance available for future use.
redeemed Redeemed Full voucher value consumed. No remaining balance.
expired Expired Voucher reached its expiry date without being fully redeemed.
cancelled Cancelled Voucher manually voided by retailer (fraud, error, refund reversal).

Transitions

From To Trigger Guards
issued validated voucher-validated Voucher code valid; Not expired; Not previously cancelled; Minimum spend met (if applicable)
partially-redeemed validated voucher-validated Remaining balance > 0; Not expired
validated partially-redeemed voucher-redeemed Redemption amount less than available balance
validated redeemed voucher-redeemed Redemption amount equals available balance
partially-redeemed redeemed voucher-redeemed Remaining balance fully used
issued expired voucher-cancelled Expiry date passed; No remaining balance redemption attempted
partially-redeemed expired voucher-cancelled Expiry date passed with remaining balance
issued cancelled voucher-cancelled Manual cancellation by authorised operator