The big picture
One loop, three pillars, and where each screen lives.
Production Control turns a demand (a sales order or a low-stock trigger) into finished goods you can sell, and records the money and the quality evidence along the way. It rests on three pillars: engineering (the Bill of Materials), execution (Work Orders and their stages), and quality (control points, inspections, and non-conformance). Everything is multi-tenant — all of it lives under your own company's data.
Where the screens live
Production Control occupies two sections of the left sidebar: Bill of Materials (recipes and work centres) and everything under Work Orders / Quality. Below is the full map — the route is what you'd type after /# in the address bar.
Bill of Materials
Recipes: components, wastage, routing, revisions, approval, rolled cost.
/bomWork Centres
Where operations run — rate/hr and daily capacity that drive cost and load.
/bom/work-centresWork Orders
The jobs. Lifecycle, materials, stages, sub-assemblies, completion.
/productionControl Points
The five quality gates — what is checked, how often, and what a fail does.
/production/control-pointsQuality Templates
Reusable inspection specs with a sampling plan and parameter classes.
/production/quality-templatesInspection Worklist
The numbered inspection register — assign, execute, pass/fail.
/production/inspectionsQuality (NCR)
Non-conformance reports, dispositions, CAPA and rework.
/production/ncrQuality Overview
KPIs: first-pass yield, QC-HOLD, pass-by-gate, supplier scorecard.
/production/qualityLot Traceability
Trace a lot / batch / serial — where it was received, inspected, used.
/production/lot-traceTwo permission flags gate the whole module: canManageBom opens the BOM screens, and canManageWorkOrders opens Work Orders and every quality screen (control points, templates, inspections, NCR, lot trace). There is no separate "quality" permission — quality rides on Work Orders. Owners have both by default.
Bill of Materials — the recipe
Nothing enters production without an approved BOM.
A BOM (Bill of Materials) is the recipe for one product: the components it consumes, the operations (routing) that transform them, and the work centres those operations run on. A product can have many BOM revisions, but only an approved one is buildable.
Four kinds of BOM
| Type | What it means | Behaviour |
|---|---|---|
manufacture | Made in-house (default) | Its own work order, stages, and stock line. |
phantom | A sub-assembly that is never stocked on its own | Explodes straight into the parent WO's material list — no phantom stock line. |
kit | A bundle shipped together | Grouped for sale; components stay individually tracked. |
subcontract | Made by an outside vendor | Drives job-work: you send components out and receive the made item back (ITC-04). |
Revision & approval lifecycle
A BOM moves through states, and only an approved BOM can be revised or built:
Revise writes the next revision as a draft and leaves the current one approved. Approving the new revision obsoletes the old one in the same step. Letters run A → B → … → Z → AA. There is one pending revision at a time. Effectivity dates and substitute parts are not part of this.
Cost, wastage & where-used
- Wastage % — each component can carry a scrap allowance; the effective quantity consumed is
qty × (1 + wastage%). - Rolled make cost — the total is built bottom-up: sub-assemblies are costed by their own make cost, guarded against cycles (A↔B can't loop). Cost = rolled material + operation (labour) cost.
- Operation-level consumption — a component can be tied to a specific routing step, so it is issued (backflushed) exactly when that stage completes.
- Where-used — open any component to see every parent BOM that consumes it, with quantity and revision.
Work centres
Operations run on work centres. Each carries a rate per hour (which flows into routing labour cost) and a daily capacity in hours (which drives the weekly load view). A paused centre is skipped by the scheduler.
Work Orders — the job
A work order is one build of one product, with its own lifecycle, materials, and stages.
Create a work order from a sales-order line, from a BOM ("Create work order"), or as a stock-intent job. The order then walks a strict lifecycle — you can't skip states, and each transition has consequences for reservations, stock, and the ledger.
A short part with its own approved manufacture BOM is a Child WO, not a purchase. A raw material is Request or Raise PO. Replenish uses the same split: Make becomes a draft work order, Buy becomes a purchase.
| What changed | What the planner does |
|---|---|
| Sales quantity or date moved, nothing issued yet | Update plan on the work order, or leave it. Issued material is not rewritten. |
| The saved plan finishes after the promised date | The sales order and the work order name the machine, the centre, and the day it runs past its shift. |
| Two jobs want the same machine | Production plan → Board: one row per machine. A sub-assembly that ends after its parent starts is marked. |
| Good quantity plus scrap is more than what is left to receive | Receive is refused. There is no Receive anyway. |
| Cancel with material still issued | That quantity goes back to stores in the same step. Issue and Report output disappear. |
Planning review lists the four things that have moved since the plan was made: a sales line that no longer matches its work order, an open order still on an old BOM, a placement that will miss its date, and an approved purchase that arrives too late for the order it was raised for.
| State | Meaning | What it does |
|---|---|---|
| draft | Planned, not committed | Reserves no stock. Cannot issue material or run stages. |
| released | Committed to the floor | Reserves each component's remaining qty atomically. Spawns the first-article inspection. |
| in_progress | Work has started | Entered automatically when the first stage starts. |
| on_hold | Paused | Deliberately still allows material moves; resume returns it to in_progress. |
| completed | Finished & received | Finished goods received; residual reservations released; ledger cleared. Terminal. |
| cancelled | Abandoned | Releases all reservations. Issued material and completed stages are not reversed. Terminal. |
Anatomy of the work-order screen
The detail screen is the operator's cockpit. The header shows live counters — good output, scrap, WIP, material value, due date. Tabs break the job into Production (stages), Materials, Quality Inspection, Costing, Timeline, and Discussion. A "What's holding this up" panel surfaces shortages and stalled stages with one-click fixes.
Pressing Release flips the status and reserves stock in the same transaction — for every component it adds the remaining quantity to that product's reservedQty. That reservation is what protects one job's materials from another (see §04). It also auto-spawns the first-article quality inspection.
Running the floor — stages & operations
Routing steps executed in sequence, each with a clock, a work centre, and an optional QC gate.
A work order's routing becomes an ordered list of stages. Each stage runs on a work centre, tracks planned vs actual minutes, and can require a quality check before the next stage may start. Stages are executed one screen at a time.
The stage lifecycle
awaiting_inspection is deliberately not "finished": the sequencing guard treats anything not completed-or-skipped as a blocker, so a stage waiting on QC holds the next stage. When you report output you enter good and scrap quantities; a qcRequired stage additionally forces a Pass / Fail verdict before it can be marked complete.
Time, downtime & backflush
- Run segments — the clock is made of start/pause spans; each pause records a downtime reason, which is the raw material for OEE later.
- Backflush — components tied to a stage are automatically consumed (issued) when the stage completes; the ledger records them as
wo_issue. - Scrap → NCR — reporting scrap on a stage raises a non-conformance so the defect is dispositioned, not silently absorbed into yield.
- Manual vs Auto — the Production tab lets you run stages one-by-one or auto-run the remaining stages.
Material & stock control
Reservation-aware issue, and a stock ledger that names every movement.
Material can be issued to a work order manually, backflushed at a stage, or backflushed at completion. The important safeguard is the reservation-aware issue check: a released work order reserves its components, and another order can't quietly issue the units your job is holding. Asking again for a shortage that is already on a requisition or purchase order for this job does not raise a second full quantity. The purchase stays linked to the work order, so the Materials section can show it.
What a work order may actually draw
A WO's own outstanding reservation (required − issued) never counts against itself — only other released orders reduce what it can draw. Over-issue is possible only with an explicit confirmation.
The stock ledger
Every quantity change writes one row to the product's stock history with a signed change and a reason code. Those codes are the audit trail for the whole system — learn to read them:
| Reason | When it's written | Δ |
|---|---|---|
grn | Goods received against a PO, no incoming QC hold | + |
grn_qc_hold | Receipt held by a blocking incoming gate (→ QC-HOLD) | +* |
grn_qc_release | Incoming inspection submitted — the accepted qty released from hold to good stock | + |
qc_quarantine | Units rejected at inspection (out of QC-HOLD, or out of good stock on a non-blocking gate) / NCR quarantine | − |
ncr_use_as_is | "Use-as-is" disposition returns units to good stock | + |
wo_issue | Material consumed into a WO (manual, stage & completion backflush) | − |
wo_return | Unused issued material returned | + |
wo_receipt | Finished goods received from a WO | + |
job_work_out | Material sent out to a subcontract vendor | − |
job_work_received / job_work_produced | Subcontract inward — same item back, or a made item | + |
invoice / invoice_cancel | Sale ships goods / cancellation restocks | − / + |
credit_note | Sale-return credit note restocks | + |
purchase · damage · correction · openingStock · saleReturn · other | Manual stock adjustment (reason chosen by the user) | ± |
* grn_qc_hold adds to the countable qcHoldQty balance, not to sellable on-hand stock. Location moves — store_transfer, job_work_move, job_work_loss — write a zero-quantity ledger row on purpose.
Quality gates
Five gates, reusable templates, a numbered inspection register — and a real block that holds the line.
Quality in Deetzo is driven, not documentary. You define control points (the gates), bind reusable templates (the checklist + sampling rule), and the system spawns numbered inspections at the right moment. A gate set to Block genuinely holds the next step until the inspection passes. While that hold is open, completing the work order is refused. Someone who can approve quality can override it, and must write the reason. That reason stays on the order.
The five gates
Control points are organised across five stages of the flow. Each binds a template, a frequency, and a fail behaviour (Block holds the next step; Warn logs and lets it proceed).
Which gate fires when
| Gate (stage) | Runs under | Spawns at |
|---|---|---|
| Receipt | receipt | GRN — goods received against a PO |
| First article | manufacturing | Work-order release (first piece) |
| In-process | manufacturing | A qcRequired stage completes |
| Final | manufacturing | FG receipt at work-order completion |
| Pre-dispatch | delivery | Creating a delivery order |
Templates & sampling
A quality template is a reusable spec — the checklist and its acceptance rule — bound to products, categories, or control points. It carries a sampling plan (sample size + allowable failures, each as a percentage or an absolute count) and parameter classes (Critical / Major / Minor). Templates are versioned: once active, a version is immutable.
The inspection register
Spawned inspections land on the Worklist — a numbered register (QINS/FY/NNN) with a status lifecycle, an assignable inspector, a due date, and overdue ageing.
A record is "closed" once it is passed or failed.
Opening an inspection gives the inspector everything on one screen: the source, the sample plan resolved from the template, the parameters to measure or pass/fail, an accepted / rejected split, evidence (photo + gauge), a required lot number, and the submit action. Any rejected quantity raises a linked NCR — whether the verdict is a pass or a fail.
A control point set to Block is enforced, not advisory. Completing a work order with an open blocking inspection opens Quality hold. Someone who cannot approve quality sees Review inspection only. An owner, an admin, a manager, or someone who can approve quality can Override and complete only after writing a reason. There is no Complete anyway. A blocking receipt gate holds incoming goods in QC-HOLD. Report output stays available while an inspection is only pending; it is refused when that inspection is On hold.
QC-HOLD — the two-phase incoming receive
When a blocking receipt gate is active, incoming goods do not go straight into sellable stock. They land in a countable QC-HOLD balance (qcHoldQty) and stay there until the incoming inspection is submitted. This is how you stop unverified material from being consumed or sold.
Receive → hold
- GRN accepts the quantity, but a blocking receipt gate diverts it to
qcHoldQty. - On-hand sellable stock does not move.
- Ledger row:
grn_qc_hold(+). - The In QC-HOLD KPI on Quality Overview goes up; an incoming inspection is spawned.
Inspect → release or reject
- Submitting the inspection releases the accepted qty: hold → good stock — on a pass or a fail.
- Ledger row:
grn_qc_release(+); on-hand rises. - The rejected qty leaves the hold and an NCR is raised for it (ledger
qc_quarantine−). It never entered good stock, so on-hand is not deducted twice. - Release is clamped to what's on hold, so it can never over-release.
A gate set to Warn is advisory: incoming goods enter stock immediately and the inspection is just logged. QC-HOLD only applies to blocking receipt gates.
Non-conformance & CAPA
When something fails, it becomes a tracked report with a disposition and a corrective-action trail.
A rejected inspection, a scrapped stage, a bad GRN line, or a job-work reject all raise a Non-Conformance Report (NCR). The report quarantines the affected quantity out of good stock and drives it to a decision.
Disposition — the five decisions
| Disposition | What happens |
|---|---|
rework | Spins up a linked rework WO; the NCR stays open at Re-inspection. When the rework WO completes, a re-inspection is spawned; its result is recorded on the NCR, and an approver verifies and closes it. |
use_as_is | Accept with concession — the quantity returns to good stock (ncr_use_as_is). |
scrap | Write off — the units are already out of good stock, so this is a record of the decision. |
returnToVendor | Return to supplier (documentary today). |
open | Not yet decided. |
Dispositions can be split — e.g. rework 8, scrap 2 on a 10-unit report.
The CAPA pipeline
Beyond the immediate disposition, an NCR carries a corrective/preventive-action workflow — root cause, corrective and preventive actions with owners and due dates, and verification — driven by a five-step stepper:
Completion & cost
Finished goods received, WIP relieved, and the ledger posted automatically.
Once all stages are done, the completion screen runs a readiness check (stages complete? materials issued?), captures the final inspection (accepted vs rejected), and — on confirm — receives good units into finished-goods stock (wo_receipt) and optionally backflushes any remaining materials. If any blocking inspection on the job is still open, completion stops. Only someone who can approve quality can override that, and they record a reason. Unfinished stages raise a "Stages still open" confirmation. Replenish shows a planning-readiness note when a manufacture BOM on an open order is not approved, a buy has no lead time, or an open work order has no due date, and links to the buy-side reorder list.
What the ledger posts
A Cloud Function posts the WIP → COGM journals automatically as the job moves (it activates once a WIP account is configured in the chart of accounts):
| Event | Journal |
|---|---|
| Material issued to WO | Dr WIP inventory · Cr Inventory asset |
| Stage completed (labour / subcontract) | Dr WIP inventory · Cr Labour absorbed |
| WO completed | Dr Inventory asset (good) + Production scrap (scrap) · Cr WIP inventory |
| WO cancelled | Dr Production scrap · Cr WIP inventory (whole balance) |
Good-unit cost is capitalised to inventory (perpetual — relieved as COGS on later sale) and the finished good's moving-average cost is updated at completion. The Costing tab on the WO shows standard vs actual material and labour live.
Traceability & metrics
Follow a lot both ways, and read quality at a glance.
Lot traceability
Enter any lot / batch / serial and trace it Where used (forward — where it went) or Where from (backward — where it came from). The timeline stitches together receipts, inspections, production consume/produce, and usage.
Quality Overview
The dashboard rolls up the last 30 days: first-pass yield, inspections done, rejected qty, quarantined (open NCRs), In QC-HOLD, pass-rate by inspection type and by QC gate, top defect codes, and a supplier scorecard.
- First-pass yield is true first-pass: inspections are grouped by lot (then source + product), and only the earliest attempt per group counts — a lot that failed, was reworked, then passed scores as its first (fail) attempt. Rework can't inflate FPY.
- Pass rate by QC gate groups by the stage the inspection stored (first-article / in-process / final), so you can see where quality slips, not just the overall number.
- Supplier scorecard scores incoming quality per supplier — pass rate, open NCRs, and top defect — and sorts worst-first. It also surfaces on the supplier profile, RFQ comparison, and the PO picker.
Scenarios — end-to-end playbooks
The common routes through the module, start to finish.
Sales order through shipment replenish
Make-to-stock, clean run happy path
Incoming reject supplier issue
Blocking incoming gate QC-HOLD
In-process fail → rework defect recovery
Subcontract / job-work outside vendor
Quick reference
The tables to keep open while you learn.
Routes
| Screen | Route | Needs |
|---|---|---|
| Work Orders | /production | canManageWorkOrders |
| Bill of Materials | /bom | canManageBom |
| Work Centres | /bom/work-centres | canManageBom |
| Control Points | /production/control-points | canManageWorkOrders |
| Quality Templates | /production/quality-templates | canManageWorkOrders |
| Inspection Worklist | /production/inspections | canManageWorkOrders |
| Quality (NCR) | /production/ncr | canManageWorkOrders |
| Quality Overview | /production/quality | canManageWorkOrders |
| Lot Traceability | /production/lot-trace | canManageWorkOrders |
Key states, at a glance
| Concept | Values |
|---|---|
| Work-order status | draft · released · in_progress · on_hold · completed · cancelled |
| Stage status | pending · in_progress · awaiting_inspection · completed · skipped |
| BOM status | draft · under_review · approved · rejected · obsolete |
| BOM type | manufacture · phantom · kit · subcontract |
| Inspection status | draft · pending · in_progress · passed · failed · on_hold |
| QC gate (stage) | receipt · firstArticle · inProcess · final · preDispatch |
| QC operation | receipt · manufacturing · delivery |
| Fail behaviour | block · warn (there is no "none") |
| NCR disposition | open · rework · scrap · useAsIs · returnToVendor |
| NCR severity | minor · major · critical |
Reserve → consume → inspect → receive. Releasing reserves; issuing consumes; every gate inspects; completion receives. The stock ledger names each step, and quality can hold any of them. Master those four verbs and the rest is detail.