OrderService owns transitions: place, approve, reject, cancel (customer), applyPayment. Statuses include pending, awaiting_payment, confirmed, dispatched, delivered, pickup_dispatched, picked_up, completed, rejected, cancelled.
Approval requires asset_id matching asset_specification. Company rejects pending orders; customers cancel with guards on paid/dispatched states.
Lifecycle workflow
01
Place order
Customer or company calls OrderService::place. Status pending, pricing snapshot and line items written.
Customer or company calls OrderService::place. Status pending, pricing snapshot and line items written.
02
Approve
Company assigns asset_id. If upfront payment required β awaiting_payment, else approved.
Company assigns asset_id. If upfront payment required β awaiting_payment, else approved.
03
Pay & confirm
OrderService::applyPayment updates totals. awaiting_payment β confirmed when paid.
OrderService::applyPayment updates totals. awaiting_payment β confirmed when paid.
04
Dispatch delivery
Driver job assigned β order status dispatched β delivered on completion.
Driver job assigned β order status dispatched β delivered on completion.
05
Pickup & complete
Pickup job β pickup_dispatched β picked_up β completed.
Pickup job β pickup_dispatched β picked_up β completed.
text
pending β approve β awaiting_payment|approved β confirmed β dispatched β delivered β pickup_dispatched β picked_up β completed