Production Orders
The production order is simultaneously a work instruction, a material reservation, a capacity booking, and a cost object. That quadruple role is what makes it complex.
Lifecycle
Planned order ──▶ Production order ──▶ Released ──▶ In process ──▶ Confirmed
(from MRP) (created) (REL) (partially/fully)
│ │
Materials issued Goods receipt of FG
Capacity booked │
Technically complete
│
Settled
│
Closed
Status management
Orders carry system statuses (set by the system) and user statuses (customer-defined):
| Status | Meaning | Effect |
|---|---|---|
| CRTD Created | Exists, not released | No goods movements allowed |
| REL Released | Approved for execution | Material issue, confirmations, printing allowed |
| PCNF Partially confirmed | Some operations done | — |
| CNF Confirmed | All operations confirmed | — |
| DLV Delivered | Full quantity received into stock | — |
| PDLV Partially delivered | — | — |
| TECO Technically complete | Production finished | Open reservations and capacity deleted; costs still collectable |
| SETC Settled | Costs transferred | — |
| CLSD Closed | Fully done | No further postings at all |
| DLFL Deletion flag | Marked for deletion | Excluded from reports |
TECO vs CLSD is a distinction people get wrong. TECO stops production and frees capacity and material reservations but still allows late invoices and cost postings to land. CLSD stops everything. Closing too early strands costs; never closing leaves orders open for years, which distorts WIP.
Order creation
production_order(
id, order_number, order_type, plant_id,
material_id, target_quantity, uom,
production_version, bom_alternative, routing_group,
basic_start_date, basic_finish_date,
scheduled_start, scheduled_finish,
actual_start, actual_finish,
delivered_quantity, scrap_quantity,
status, mrp_controller, production_supervisor,
sales_order_id, wbs_element_id, -- for MTO
settlement_rule, costing_variant,
created_from_planned_order
)
production_order_component(
order_id, item, material_id, required_quantity, withdrawn_quantity,
requirement_date, storage_location, batch,
operation_number, backflush_flag, bulk_flag, item_category
)
production_order_operation(
order_id, operation_number, work_center_id, control_key,
setup_time, machine_time, labour_time,
earliest_start, latest_finish, scheduled_start, scheduled_finish,
confirmed_yield, confirmed_scrap, confirmed_activities,
status
)
Note: components and operations are copied from the BOM and routing at order creation, not referenced. The order is a snapshot. If the BOM changes tomorrow, running orders keep the old structure — which is correct, because that’s what the shop floor is actually building. A “read master data” function re-copies deliberately when you do want the change.
Order types
| Type | Purpose |
|---|---|
| Standard production order | Normal make |
| Process order | Process industries; phases, recipes, control recipes to the DCS |
| Rework order | Fix defective units; consumes labour, maybe extra parts, no new base material |
| Refurbishment order | Repair a returned serialised unit — receives a damaged unit, issues a good one |
| Maintenance order | Not production; equipment maintenance (EAM/PM) |
| Make-to-order | Linked to a sales order; stock is segregated as sales-order stock |
| Engineer-to-order | Linked to a WBS element |
Release and availability check
Releasing an order checks:
- Material availability — are the components there?
- Capacity availability — is the work centre free?
- PRT availability — production resources/tools (jigs, moulds, fixtures)
- Batch determination — which specific batches to consume (FEFO, characteristics)
Configuration decides whether a missing component blocks release, warns, or is ignored. Releasing orders that can’t be built is the classic cause of shop-floor chaos — the order enters the queue, hits operation 20, and stops. A “no partial release without full material availability” policy is usually right.
Release also triggers: shop papers printing, material staging (transfer requests to the warehouse), and capacity confirmation.
Material issue
Three mechanisms:
1. Manual goods issue
Storekeeper issues against the order reservation. Accurate, labour-intensive.
2. Backflushing
Components are consumed automatically when output is confirmed:
Confirm 100 units produced
→ system issues 400 legs, 100 seats, 800 screws (per BOM)
Fast, no paperwork. Requires accurate BOMs, because errors are invisible until a physical count reveals a big discrepancy. Best for stable, high-volume production with reliable BOMs.
3. Pull list / staging
Warehouse stages material to the line based on the order’s requirements; consumption is backflushed from the line stock.
Post-processing of backflush errors is a real operational queue: backflush fails when there’s insufficient stock in the issuing location, and the order proceeds while the consumption sits unposted. Monitor that queue; a growing backlog means inventory and WIP are both wrong.
Confirmations
Reporting progress from the shop floor:
confirmation(
id, order_id, operation_number,
confirmation_type, -- PARTIAL | FINAL | AUTOMATIC
yield_quantity, scrap_quantity, rework_quantity,
scrap_reason_code,
setup_actual, machine_actual, labour_actual,
personnel_number, work_center_id,
posting_date, execution_start, execution_finish,
reversed_by
)
Confirmation triggers:
- Activity cost posted to the order (hours × activity rate)
- Backflush of components assigned to that operation
- Automatic goods receipt at the last operation (if configured)
- Capacity load reduction
- Status update
Confirmation is the shop floor’s only interface with the ERP for most workers, so it must be fast and forgiving. Barcode scanning, tablet UI, or MES integration — never a 40-field SAP screen for a machine operator. If confirmation is painful, operators batch it up and confirm a week’s work on Friday, and every WIP number you produce is fiction.
Milestone confirmation
Confirm only at key operations; the system auto-confirms all preceding ones. Reduces data entry dramatically at the cost of intermediate visibility.
Goods receipt of finished goods
Finished goods inventory Dr (quantity × standard cost)
Production order (WIP) Cr
Options: automatic at final confirmation, or a separate manual receipt (better when QC must pass first). Over/under delivery tolerances apply, same as purchasing.
The receipt captures: batch number (assigned or generated), serial numbers, production date, expiry date, and the storage location.
WIP — Work in Process
At period end, orders that are started but not finished hold value:
WIP = actual costs debited to the order − value of goods already received
Order 4711:
Materials issued 45,000
Activities confirmed 18,000
Overhead applied 9,000
Total debits 72,000
Goods received (50 of 100 units × 500 std) (25,000)
─────────────────────────────────────────────────
WIP 47,000
WIP calculation is a period-end job that posts:
WIP (balance sheet asset) Dr 47,000
WIP change (P&L) Cr 47,000
…and reverses it next period. When the order completes, WIP goes to zero and the remaining difference becomes a variance.
Two methods:
- WIP at actual cost — total debits minus credits, as above. Simple.
- WIP at target cost — value the confirmed operations at standard. More accurate, separates WIP from variance earlier.
Order settlement
Order costs (actual) 72,000
Goods received at standard (70,000)
─────────────────────────────────────
Variance 2,000 → settled to COGS / price difference
Settlement:
Production variance Dr 2,000
Production order Cr 2,000
Order balance now zero.
Settlement runs monthly. An order that never settles keeps a balance forever and inflates WIP. A standard report is “orders with a balance, technically complete, not settled” — chase it every month.
Order changes
Real production changes constantly:
- Quantity increase/decrease → components and operations rescale
- Date change → reschedule
- Component substitution → material shortage workaround
- Operation added (unplanned rework)
- Split into two orders
Every change is logged. Change logs on production orders are audit evidence in regulated industries and the raw material for “why did this order cost 40% more” analysis.
Metrics
| Metric | Meaning |
|---|---|
| Schedule adherence | Orders finished on the planned date |
| Order cycle time | Release to completion vs planned |
| First pass yield | Good units first time, no rework |
| Scrap rate by reason | Where material is lost |
| Confirmation lag | Time between actual work and its confirmation — measures data trustworthiness |
| Open orders past due | Backlog health |
| WIP value and ageing | Stranded value |
| Cost variance by category | Where the standard is wrong or execution failed |
Developer notes
- Orders snapshot the BOM and routing. Don’t join to master data at runtime.
- Status is a set of flags, not one enum. An order can be REL + PCNF + PDLV simultaneously.
- Confirmations are append-only; a wrong confirmation is cancelled with a reversal confirmation.
- Backflush failures need a visible queue and an owner.
- Settlement is a period job with the standard requirements: idempotent, restartable, test mode.
- The shop-floor confirmation UI is the most important UI in the module. Optimise it ruthlessly.
- Never delete an order. Deletion flag, then archive.