Order Lifecycle
Orders follow a strict state machine with defined transitions.
State Machine
Transitions
| From | To | Action | Who |
|---|---|---|---|
pending | in_progress | claimOrder() | Employee |
in_progress | pending | unclaimOrder() | Same employee |
in_progress | ready | markReady() | Same employee |
ready | completed | completeOrder() | Any employee |
| Any | cancelled | Direct DB update | Admin |
Validation
Each transition is validated:
claimOrder: Must bepending, must not already haveassigned_tomarkReady: Must bein_progress, must be assigned to the current usercompleteOrder: Must bereadyunclaimOrder: Must be assigned to the current user
Invalid transitions throw OrderQueueError.invalidStatusTransition.
Timestamps
| Field | Set When |
|---|---|
created_at | Order placed |
claimed_at | Order claimed by staff |
completed_at | Order completed (picked up) |
updated_at | Any status change |
Order Number Format
Generated by OrderService.generateOrderNumber():
SC-{Letter}{3 digits}Examples: SC-A042, SC-M371, SC-K899