Skip to content

Purchase Order Lifecycle

Models the lifecycle of a Purchase Order (PO) raised by the retailer to a supplier, from initial draft through approval, fulfilment, and three-way match closure (PO + Goods Receipt + Invoice). Covers partial deliveries, amendments, and cancellations.

Object: purchase-order · States: 8 · Transitions: 10


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 ───────────────────────────────────────────────
    draft(["Draft"])
    submitted["Submitted"]
    acknowledged["Acknowledged"]
    partially_delivered["Partially Delivered"]
    delivered["Delivered"]
    invoiced["Invoiced"]
    closed[["Closed"]]
    cancelled[["Cancelled"]]

    %% ── transitions ─────────────────────────────────
    draft -->|"order-created"| submitted
    submitted -->|"order-confirmed"| acknowledged
    acknowledged -->|"inventory-adjusted"| partially_delivered
    partially_delivered -->|"inventory-adjusted"| delivered
    acknowledged -->|"inventory-adjusted"| delivered
    delivered -->|"payment-captured"| invoiced
    partially_delivered -->|"payment-captured"| invoiced
    invoiced -->|"payment-settled"| closed
    draft -->|"order-cancelled"| cancelled
    submitted -->|"order-cancelled"| cancelled

    %% ── class assignments ───────────────────────────
    class draft stInit
    class submitted,acknowledged,partially_delivered,delivered,invoiced stNorm
    class closed stOk
    class cancelled stFail

States

State Label Description Initial Terminal
draft Draft PO created but not yet submitted to supplier. Can be modified freely.
submitted Submitted PO sent to supplier. Awaiting supplier acknowledgement.
acknowledged Acknowledged Supplier confirmed receipt and intent to fulfil. Delivery date agreed.
partially-delivered Partially Delivered Some PO lines received. Remaining items expected.
delivered Delivered All PO lines physically received and goods receipt created.
invoiced Invoiced Supplier invoice received and matched to PO and goods receipt.
closed Closed Three-way match complete. Payment authorised. PO archived.
cancelled Cancelled PO cancelled before full delivery (stock no longer needed, supplier unable to fulfil).

Transitions

From To Trigger Guards
draft submitted order-created All mandatory lines and supplier details complete; Buyer approval obtained (if required by spend threshold)
submitted acknowledged order-confirmed Supplier sends acknowledgement with confirmed quantities and delivery date
acknowledged partially-delivered inventory-adjusted Goods receipt created for partial quantities
partially-delivered delivered inventory-adjusted Final outstanding lines received
acknowledged delivered inventory-adjusted All PO lines received in a single delivery
delivered invoiced payment-captured Supplier invoice matches PO and goods receipt (three-way match)
partially-delivered invoiced payment-captured Invoice covers delivered quantities only; Partial invoice agreed with supplier
invoiced closed payment-settled Invoice paid; No open discrepancies
draft cancelled order-cancelled No goods received yet
submitted cancelled order-cancelled Supplier agrees to cancellation before dispatch