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 |