Order lifecycle and statuses
This page describes how orders are structured and managed in Djust OMS, with a focus on lifecycle progression, key statuses, and operational transitions.
📦 Order Structure Overview
Each order in Djust OMS follows a structured lifecycle composed of several phases. It can contain:
- One or multiple order lines (products)
- Optional delivery splits (for multi-shipment flows)
- Related documents (quotes, invoices, delivery notes)
- Linked approval and shipment statuses
Orders progress through the lifecycle based on configured business rules, user actions, and external system events (e.g. approval, shipment, or cancellation).
🧭 Main Order Lifecycle Phases
The following statuses define the typical flow of a B2B order in Djust OMS:
1. Draft (DRAFT_ORDER)
DRAFT_ORDER)- The order is being created and not yet submitted.
- Still editable by the buyer.
- Next states: DRAFT_ORDER_ON_HOLD, ORDER_CREATED, CANCELED.
2. On Hold (DRAFT_ORDER_ON_HOLD)
DRAFT_ORDER_ON_HOLD)- This is an optional intermediate status that can be triggered during checkout.
- It allows a third party (e.g., a procurement manager or finance controller) to review and verify the order before submission.
- Useful in workflows where manual validation, rechecking, or internal coordination is required before the order proceeds.
- Next states: ORDER_CREATED, CANCELED.
3. Blocked By Policy (BLOCKED_BY_POLICY)
BLOCKED_BY_POLICY)- Order cannot progress due to Buying Policies checks (e.g., credit control, quotas).
- When it happens: at placement/validation time or later validations, if the policy engine flags the order as non-compliant.
- How to resolve: adjust account limits/quotas or use an operator override per your governance (see Buying Policies docs).
- Next states: back to DRAFT_ORDER (after fix) then CREATED on successful re-validation.
4. Blocked By Payment (BLOCKED_BY_PAYMENT)
BLOCKED_BY_PAYMENT)- Payment authorization failed for this Logistic Order.
- When it happens: during/after the authorization step for the order (PCard L3 payment method only); if the provider returns a refused/declined result for this split.
- How to resolve: retry authorization, change payment method, or handle per your escalation rules.
- Next states: CREATED after a successful retry; remains BLOCKED_BY_PAYMENT otherwise.
5. Created (ORDER_CREATED)
ORDER_CREATED)- The order has been submitted by the buyer.
- It awaits the next approval steps.
- Next states: WAITING_CUSTOMER_APPROVAL, WAITING_SUPPLIER_APPROVAL, BLOCKED_BY_POLICY, BLOCKED_BY_PAYMENT, CANCELED.
6. Waiting Customer Approval (WAITING_CUSTOMER_APPROVAL)
WAITING_CUSTOMER_APPROVAL)- An internal approval step is required from the customer (e.g., purchase manager validation).
- Configurable per client and order type.
- Next states: WAITING_SUPPLIER_APPROVAL, DECLINED_BY_CUSTOMER, CANCELED.
7. Waiting Supplier Approval (WAITING_SUPPLIER_APPROVAL)
WAITING_SUPPLIER_APPROVAL)- The order is awaiting review and confirmation by the supplier.
- The supplier can accept or decline based on stock or commercial conditions.
- Next states: ACCEPTED_BY_SUPPLIER, DECLINED_BY_SUPPLIER, CANCELED.
8. Declined By Customer (DECLINED_BY_CUSTOMER)
DECLINED_BY_CUSTOMER)- The customer has refused or withdrawn the order after submission.
- The process stops unless re-submitted.
9. Declined By Supplier (DECLINED_BY_SUPPLIER)
DECLINED_BY_SUPPLIER)- The supplier has refused the order (e.g. stock unavailability, pricing issue).
- The order cannot proceed further.
10. Accepted By Supplier (ACCEPTED_BY_SUPPLIER)
ACCEPTED_BY_SUPPLIER)- The supplier has confirmed the order and is ready to fulfill it.
- It transitions to the fulfillment phase.
- Next states: WAITING_SHIPMENT.
11. Waiting Shipment (WAITING_SHIPMENT)
WAITING_SHIPMENT)- The order is ready to be shipped, either partially or in full.
- Warehouse or supplier actions are expected.
- Next states: PARTIALLY_SHIPPED, SHIPPED, CANCELED.
12. Partially Shipped (PARTIALLY_SHIPPED) (Mirakl Only)
PARTIALLY_SHIPPED) (Mirakl Only)- Some order lines have been shipped, others are still pending.
- The order remains open until all items are fulfilled or canceled.
- Next states: SHIPPED, CANCELED.
13. Shipped (SHIPPED)
SHIPPED)- All items have been shipped.
- Delivery may be confirmed by carrier integration or manually.
- Next states: COMPLETED, CANCELED.
14. Partially Canceled (PARTIALLY_CANCELED) (Mirakl Only)
PARTIALLY_CANCELED) (Mirakl Only)- Some order lines have been canceled, other are still active.
- The order remains open until all items are canceled.
- Next states: SHIPPED, CANCELED.
15. Canceled (CANCELED)
CANCELED)- The order was canceled before full shipment.
- Can be triggered by the customer, supplier, or system rules.
- Only
DRAFT_ORDER_ON_HOLDandWAITING_SHIPMENTare eligible to cancelation.
16. Completed (COMPLETED)
COMPLETED)- The order has been fully processed: all shipments completed, and the flow is finalized.
- The order is archived operationally.
🧾 Status Types
Djust OMS tracks multiple layers of order status:
| Status Type | Description |
|---|---|
Order Statuses | Main lifecycle status described above |
Order Line Statuses | Status per line (can be different across lines), for example, when an incident occurs |
Approval Statuses | Tracks buyer or supplier decision states |
Shipment Statuses | Captures delivery progress (partial/full) |
Cancellation Statuses | Used if canceled by either party or auto-rules |
Payment Statuses | All payment integration with PSP actions and events |
⚙️ Status Transition Logic
Status changes can be triggered by:
- Customer or supplier actions
- Admin operations via backoffice
- Data Hub jobs and or Webhooks from logistics or external systems
- Automated rules (e.g., timeout or rejection fallback)
All transitions are logged as events and auditable through the OMS.
🔁 Example Lifecycle Flow
flowchart LR %% Nodes DRAFT[📝 DRAFT_ORDER]:::draft --> HOLD[⏸️ DRAFT_ORDER_ON_HOLD]:::pause DRAFT --> PLACE[✅ ORDER_CREATED]:::created HOLD --> PLACE PLACE --> CAPP[🧾 WAITING_CUSTOMER_APPROVAL]:::approval PLACE --> SAPP[🧑🏭 WAITING_SUPPLIER_APPROVAL]:::approval CAPP --> ACC[👍 ACCEPTED_BY_SUPPLIER]:::progress CAPP --> DCUS[✋ DECLINED_BY_CUSTOMER]:::terminal SAPP --> ACC SAPP --> DSUP[❌ DECLINED_BY_SUPPLIER]:::terminal %% Buying Policies & Payment gates PLACE --> BPOL[🛑 BLOCKED_BY_POLICY]:::blocked PLACE --> BPAY[💳 BLOCKED_BY_PAYMENT]:::blocked %% Unblocks BPOL -->|Fix & re-validate| PLACE BPAY -->|Retry auth OK| PLACE %% Fulfillment ACC --> WAITSHIP[📦 WAITING_SHIPMENT]:::progress WAITSHIP --> PARTSHIP[📦➗ PARTIALLY_SHIPPED <i>Mirakl only</i>]:::progress WAITSHIP --> PCAN[❎ PARTIALLY_CANCELED <i>Mirakl only</i>]:::progress PARTSHIP --> SHIP[🚚 SHIPPED]:::progress PARTSHIP --> PCAN PCAN --> SHIP SHIP --> DELIV[📬 COMPLETED]:::success %% Global cancel path HOLD --> CANCEL[🗑️ CANCELED]:::terminal WAITSHIP --> CANCEL %% ---------- Styles ---------- classDef draft fill:#e8f1ff,stroke:#2f6feb,stroke-width:2px,color:#0b3d91; classDef pause fill:#fff4e5,stroke:#f59e0b,stroke-width:2px,color:#7a3e00; classDef created fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d; classDef approval fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b; classDef progress fill:#e0f7fa,stroke:#06b6d4,stroke-width:2px,color:#0c4a6e; classDef blocked fill:#fee2e2,stroke:#ef4444,stroke-width:2px,color:#7f1d1d; classDef success fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b; classDef terminal fill:#f2f4f7,stroke:#475569,stroke-width:2px,color:#111827; style DRAFT rx:8,ry:8 style HOLD rx:8,ry:8 style PLACE rx:8,ry:8 style CAPP rx:8,ry:8 style SAPP rx:8,ry:8 style ACC rx:8,ry:8 style WAITSHIP rx:8,ry:8 style PARTSHIP rx:8,ry:8 style PCAN rx:8,ry:8 style SHIP rx:8,ry:8 style DELIV rx:8,ry:8 style BPOL rx:8,ry:8 style BPAY rx:8,ry:8 style DCUS rx:8,ry:8 style DSUP rx:8,ry:8 style CANCEL rx:8,ry:8
Updated 4 days ago
