Work Orders
A work order drives a manufacturing run from scheduling through completion — tracking the Product being built, planned and produced quantities, materials consumed, operations performed, and quality checks recorded along the way.
A work order is the unit of production in the Manufacturing module. You create one when you need to build a quantity of a composite Product — the order tracks everything from the initial plan through the last quality check: who is working on it, which materials are required, how many units were actually produced, and what each step cost. Work orders consume inventory units as materials and produce finished units that land in your chosen output location.
Work orders can only target composite Products — Products with a bill of materials (BOM). If a Product is not marked composite, it will not appear in the Output Product picker. See Products for details on the BOM flag.
Creating a work order #
New work orders are created from Manufacturing → Work Orders → New Work Order. The form asks for:
- Output Product — the composite Product you are producing. Required. Only Products marked as composite (Has Bill of Materials) appear in the list.
- Planned Quantity — how many units you intend to produce. Must be greater
than zero. Defaults to
1. - Status — one of the lifecycle statuses listed below. Defaults to Draft.
- Due Date — optional target completion timestamp.
- Scheduled Start — optional timestamp for when production is planned to begin.
- Output Location — the inventory location where finished units will land when the order is completed. Optional; if omitted the units must be placed manually.
- Assigned To — a user responsible for the order. Optional.
- Notes — free-form text for any additional context.
When a work order is saved, it is automatically assigned a sequential
number prefixed WO- (e.g. WO-0042).
Work order statuses #
A work order moves through a defined lifecycle. The status badge is visible in the list and on the order's page:
- Draft — created but not yet scheduled. Can move to Scheduled, In Progress, or Cancelled.
- Scheduled — planned and queued for production. Can move to In Progress or Cancelled.
- In Progress — actively being produced. Can move to Quality Check, Completed, or Cancelled.
- Quality Check — production is done; output is awaiting inspection. Can move back to In Progress, forward to Completed, or Cancelled.
- Completed — finished. The quantity produced is recorded. Terminal — cannot be changed further.
- Cancelled — stopped before completion. All non-terminal operations are automatically skipped. Terminal.
When you cancel a work order from the UI, all pending and in-progress operations are skipped automatically so the order closes cleanly.
The work order list #
Manufacturing → Work Orders shows each order's number, output Product, planned and produced quantities, status badge, assigned user, and due date. Filter by status (multi-select) or by Product, and sort by any column. Trashed orders can be restored via the Trashed filter.
Materials #
The Materials tab on a work order lists the components required to build it. Each material line records:
- Material Product or Material Category — either a specific Product or any unit from a category qualifies. Category-based lines are useful when any equivalent substitution is acceptable.
- Planned Qty — how much is needed per the BOM.
- In Stock — a live count of available units for that Product, color-coded green (sufficient), amber (partial), or red (none).
- Consumed Qty — how much was actually drawn from inventory.
- Planned Cost and Actual Cost — derived from the material's unit cost
in cents (stored in the database as an integer, e.g.
1500= $15.00). - Status — Pending, Issued (pulled from inventory and on the production floor), or Consumed.
Materials can be added and edited manually. You can add a line for any Product or category in your catalog. When a work order is completed the consumed-qty entries serve as the record of what left inventory.
Operations #
The Operations tab lists the production steps for the order, in sequence order. Each operation records:
- Step # — the sequence position (1, 2, 3…).
- Name — a description of the step (e.g. Cut, Assemble, Paint).
- Work Center — the work center where the step is performed. Drives labor cost calculation via the work center's cost per hour.
- Status — Pending, In Progress, Completed, or Skipped.
- Est. Minutes — planned duration, used for planned labor cost.
- Assigned To — the user responsible for this step.
- Started At / Completed At — timestamps set when an operation is started or completed. Actual minutes (and therefore actual labor cost) are computed from the difference.
From the operations table you can Start, Complete, or Skip an individual step without leaving the work order page. Operations sourced from a routing template (see Routings & Operations) are pre-populated when the order is created from a BOM that references a routing; you can still add ad-hoc steps at any time.
Cost roll-up: planned total cost = sum of planned material costs + sum of planned labor costs. Actual total cost uses consumed quantities and actual operation minutes. Both figures are visible on the work order's detail page.
Quality checks #
The Quality Checks tab is where inspection results are logged. A quality check records:
- Result — Pass, Rework, or Reject.
- Checked At — the timestamp of the inspection (defaults to now).
- Qty Inspected and Qty Passed — raw numbers; the difference implies the rejection count.
- Inspector — the user who performed the check.
- Defect Notes — description of what was wrong.
- Corrective Action — what was done to address the defect.
Each inspection is stored as a separate row with its own result; you can edit or delete individual check records after the fact. When a work order is in Quality Check status you can record results here and then advance the order to Completed once it passes.
Relationship to inventory #
Completed work orders produce units: when you record quantity_produced on
completion, the finished units appear in the output location as new
inventory units. On the material side, consumed units are marked used and their
movement history records the work order as the source. This keeps the full
audit trail intact across both the work order and the inventory unit.
For the Product's BOM see Products; for the location the output lands in see Locations & Bins.
Doing it from the API #
# Create a work order
curl -X POST "https://your-domain.com/api/v1/manufacturing/work-orders" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "<product-id>",
"quantity_planned": 10,
"output_location_id": "<location-id>",
"due_at": "2026-07-01T08:00:00Z"
}'
# List work orders filtered by status
curl "https://your-domain.com/api/v1/manufacturing/work-orders?status=in_progress" \
-H "Authorization: Bearer $TOKEN"
# Record a quality check result
curl -X POST "https://your-domain.com/api/v1/manufacturing/quality-checks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"work_order_id": "<work-order-id>",
"result": "pass",
"quantity_inspected": 10,
"quantity_passed": 10,
"inspector_id": "<user-id>"
}'
Material and operation records are also available at
/api/v1/manufacturing/work-order-materials and
/api/v1/manufacturing/work-order-operations — filter both by work_order_id
to scope them to a specific order. See the full
API reference for all available
filters and fields.