Status
Public API: not yet exposed. Internal HTTP surface: live at /work-orders/* (HelloBooks frontend only). gRPC layer: workOrder.grpc.controller.js in Accounting-V3.
Below is the planned curated-subset shape, extracted from the internal surface.
Lifecycle
Work Orders move through a strict state machine. Each transition has its own endpoint:
Draft ─── release ───▶ InProgress ─── complete ───▶ Completed
│ │
└──── cancel ───▶ Cancelled ◀─── cancel ────┘- Release (
Draft → InProgress): createsInventoryAllocationreservations against component stock. If insufficient stock, release fails atomically. - Complete (
InProgress → Completed): consumes the reservations and emits stock movements (component decrement, output increment). All-or-nothing inside a DB transaction. - Cancel (
Draft|InProgress → Cancelled): releases reservations. Cannot cancel a Completed Work Order — that requires a reversing entry.
Planned endpoints
| Method | Planned path | Action | Planned scope |
|---|---|---|---|
GET | /orgs/:o/entities/:e/work-orders | List | workOrder:read |
GET | /orgs/:o/entities/:e/work-orders/:id | Read one | workOrder:read |
POST | /orgs/:o/entities/:e/work-orders | Create (Draft) | workOrder:create |
PUT | /orgs/:o/entities/:e/work-orders/:id | Update (Draft only) | workOrder:update |
PUT | /orgs/:o/entities/:e/work-orders/:id/release | Draft → InProgress | workOrder:update |
PUT | /orgs/:o/entities/:e/work-orders/:id/complete | InProgress → Completed | workOrder:update |
PUT | /orgs/:o/entities/:e/work-orders/:id/cancel | → Cancelled | workOrder:update |
DELETE | /orgs/:o/entities/:e/work-orders | Soft-archive (bulk) | workOrder:delete |
PUT | /orgs/:o/entities/:e/work-orders/restore | Un-archive (bulk) | workOrder:update |
Planned webhook events
work_order.released— fired after successful release (allocations created)work_order.completed— fired after successful complete (stock movements posted)work_order.cancelled— fired after successful cancel (allocations released)
Each event payload will carry the work_order.id, the new state, and a summary of inventory impact (allocations created/released, stock movements emitted).