Production Reference Public

Quality Control

Advanced Manufacturing Quality Control Define what to check, record the checks, and manage failures — the full quality chain from a reusable QC Plan, through inspections and…

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 18 min 1 views
Advanced Manufacturing

Quality Control

Define what to check, record the checks, and manage failures — the full quality chain from a reusable QC Plan, through inspections and per-parameter measurements, to Non-Conformance Reports and Corrective & Preventive Actions.

ℹ️
Where it lives. Quality Control is part of Advanced Manufacturing at production/QualityControl. Access requires the Manufacturing module enabled and the manufacturing_quality permission — otherwise you are redirected. Inspections and NCRs link to Work Orders; see the FAQ for the most common quality questions.

The quality chain at a glance

Quality Control has five connected parts. You build the template first (Plan + Parameters), then execute (Inspection + Measurements), then handle problems (NCR → CAPA). Every record is numbered automatically (QCP- / INS- / NCR- / CAPA- prefixes) and everything is soft-deleted.

QC Plan
reusable template
Parameters
what to measure
Inspection
an actual check
Measurements
pass/fail per parameter
NCR
on failure
CAPA
fix & prevent
????
QC Plan

A reusable inspection template tied to an inspection type/stage. Parameters hang off it.

????
QC Parameter

A single characteristic checked under a plan, with target / min / max spec and a unit.

????
Inspection

An actual inspection event against a plan, with quantities, a status, and an overall result.

????
Measurement

A recorded value for one parameter; pass/fail is auto-computed from the parameter's min/max.

⚠️
NCR

A Non-Conformance Report for a defect, with severity, disposition, and status.

????️
CAPA

A Corrective and/or Preventive Action, usually tied to an NCR.

⚠️
No stock movement. Quality Control is record-keeping only. Recording a failure, or setting a disposition of scrap / rework / return-to-supplier, does not automatically adjust Inventory — you must adjust stock separately. There is no write-back from QC to items or variants.

QC Plans

A QC Plan is a reusable inspection template. It says where in the flow the plan is used (Incoming, In-Process, Final, Periodic), how samples are chosen, and — through its parameters — exactly what gets measured. You build a plan once and run many inspections against it.

The QC Plans list (production/QualityControl) is the landing page. Use Add QC Plan to open the plan modal; each row's cog menu offers View, Parameters, and (below a divider) Edit and Delete. Columns 0–6 export to Excel.

QC Plan fields

FieldMeaningRequiredNotes
plan_code — Plan CodeUnique code identifying the QC plan.RequiredAuto-suggested next code on add (prefix qc_plan_prefix, default QCP, e.g. QCP-000001). Unique per plan.
plan_name — Plan NameHuman name of the plan.RequiredFree text.
product_id — Product IDOptional product this plan applies to; blank = general / all products.OptionalPlain number input — not a product picker. Stored as null when blank; the list shows the raw ID or -.
inspection_type — Inspection TypeWhere in the flow this plan is used.OptionalDropdown: Incoming, In-Process, Final, Periodic. Defaults to In-Process.
inspection_stage — Inspection StageFree-text label for the stage / step inspected.OptionalFree text.
sampling_method — SamplingHow samples are chosen.OptionalDropdown: Random, 100%, Statistical. Defaults to Random.
sample_size — Sample SizeNumber of units to sample.OptionalNumeric; null when blank.
is_active — StatusWhether the plan is available for use.OptionalDropdown Active / Inactive; defaults Active. Only Active plans appear in the inspection plan dropdown.

QC Plan view & legends

Opening View shows a read-only summary — Plan Code, Type, Stage, Status badge, Sampling Method, Sample Size — plus the parameters table (Parameter, Type, Target, Min, Max, UOM, Critical) and a Manage Parameters button. If the plan has none, it shows "No parameters defined".

ActivePlan usable in inspections.
InactivePlan hidden from the inspection dropdown; not usable for new inspections.

Inspection Type colours on the plan list:

IncomingIncoming inspection.
In-ProcessIn-process inspection.
FinalFinal inspection.
PeriodicPeriodic inspection.

QC Parameters

A QC Parameter is a single characteristic checked under a plan — a dimension, a visual check, an attribute, or a functional test. Open a plan's Parameters screen (production/QualityControl/parameters/{qc_plan_id}) and use the inline add-parameter row to add each one. The list is ordered by sort order then name.

⚠️
Parameters cannot be edited. There is only Add and Delete — to change a parameter you delete it and re-add it. Adding a parameter reloads the whole page.

QC Parameter fields

FieldMeaningRequiredNotes
parameter_name — ParameterName of the characteristic being measured.RequiredFree text, entered on the inline form.
parameter_type — TypeKind of check.RequiredDropdown: Measurement, Visual, Attribute, Functional.
target_value — TargetThe ideal / nominal value for the parameter.OptionalDecimal (step 0.0001); shown to 4 decimals. Not used in the pass/fail check.
specification_min — MinLower acceptable spec limit.OptionalDrives auto pass/fail: a value below Min = FAIL.
specification_max — MaxUpper acceptable spec limit.OptionalDrives auto pass/fail: a value above Max = FAIL.
uom_id — UOMUnit of measure for the parameter.OptionalDropdown of active Manufacturing UOMs, shown as name (symbol).
is_critical — CriticalMarks the parameter as a critical characteristic.OptionalCheckbox; defaults off. Shows a red Critical badge vs. a grey Standard badge.
measurement_method — Measurement MethodHow the parameter is measured.OptionalAccepted by the save action but has no input field in the current form (blank in practice).
tolerance_percentage — Tolerance %Percent tolerance for the parameter.OptionalAccepted by the save action but has no input field; not used in pass/fail.
sort_order — Sort OrderDisplay order of parameters.OptionalNo input field; defaults 0. The list orders by sort order then name.

Parameter type & criticality legends

MeasurementA numeric measurement against Target / Min / Max.
VisualA visual pass/fail check.
AttributeAn attribute (present/absent) check.
FunctionalA functional test.
CriticalA critical characteristic — flagged in red.
StandardA non-critical parameter.
No Min/Max means everything passes. Auto pass/fail uses only specification_min and specification_max. If a parameter has neither, every measured value is recorded as PASS. Set Min/Max on any parameter you actually want the system to judge.

Inspections

An Inspection is an actual inspection event executed against a QC plan. It carries the material identifiers (lot / batch), the quantities inspected / passed / failed, a workflow Status, and a final Overall Result. Open the Inspections list (production/QualityControl/inspections) and click New Inspection; the list has a Status filter and exports columns 0–8 to Excel. Each row's cog menu offers View, Measurements, and (below a divider) Edit and Delete.

Inspection fields

FieldMeaningRequiredNotes
inspection_number — Inspection #Unique code for the inspection event.RequiredAuto-suggested (prefix inspection_prefix, default INS, e.g. INS-000001).
qc_plan_id — QC PlanPlan this inspection is performed against.RequiredDropdown of ACTIVE plans only, shown code - name. Determines which parameters can be measured.
order_id — Work OrderThe manufacturing work order being inspected.OptionalDropdown of work orders shown order_number - product_name. Nullable. See Work Orders.
operation_id — OperationSpecific operation within the order.OptionalAccepted by the save action but no input field in the form; stored null.
inspection_date — DateDate the inspection was performed.RequiredDate input; defaults to today on new.
lot_number — Lot NumberLot identifier of inspected material.OptionalFree text.
batch_number — Batch NumberBatch identifier of inspected material.OptionalFree text.
quantity_inspected — InspectedQuantity of units inspected.OptionalNumeric (step 0.01); defaults 0. Drives Pass Rate = passed ÷ inspected × 100.
quantity_passed — PassedQuantity that passed.OptionalNumeric; defaults 0. Manually entered — not auto-summed from measurements.
quantity_failed — FailedQuantity that failed.OptionalNumeric; defaults 0. Manually entered.
status — StatusWorkflow state of the inspection.OptionalDropdown Pending / In Progress / Passed / Failed / Conditional; defaults Pending. Free-set — no enforced transitions.
overall_result — Overall ResultFinal verdict of the inspection.OptionalDropdown Select / Pass / Fail / Conditional. Drives the Result Summary badge and pass-rate panel. Manually chosen.
notes — NotesFree-text inspection notes.OptionalTextarea; shown with line breaks on the view.

Inspection view

Opening View (inspection_view/{id}) shows the Inspection Details panel (number, QC Plan, Work Order, Type, Date, Lot, Inspector, Status badge), three count cards (Inspected / Passed / Failed), the Result Summary badge (the overall result) and the Pass Rate %, then the Measurements section with an Add Measurement button and the measurements table (Parameter, Target Value, Actual Value, UOM, Result, Measured By, Date).

Pass Rate = quantity_passed ÷ quantity_inspected × 100, shown only when Inspected > 0.

Inspection status lifecycle

Pending
created, not started
In Progress
underway
Passed
judged passed
Failed
judged failed → NCR
Conditional
accepted with conditions
PendingCreated; not yet started.
In ProgressInspection underway.
PassedJudged passed.
FailedJudged failed — typically leads to an NCR.
ConditionalAccepted with conditions.

Overall Result (Result Summary badge)

The Overall Result is the manually chosen final verdict, shown as a large Result Summary badge on the inspection view. It is independent of Status and set by hand.

PassFinal verdict: pass.
FailFinal verdict: fail.
ConditionalAccepted with conditions.
Pending / blankNo verdict chosen yet.
⚠️
Status and Overall Result are free-choice. There are no enforced transitions — an inspection can be marked Passed even if a measurement failed. The verdict is whatever the inspector selects, so keep Status, Overall Result, and the recorded measurements consistent yourself.

Recording Measurements

A Measurement is the recorded value for one parameter during an inspection. There are two ways to enter them:

From the inspection row cog menu choose Measurements to open the bulk-entry grid (record_measurements/{inspection_id}). It lists every parameter of the inspection's plan with its Target / Min / Max / UOM and an inline row form (Measured Value + Notes + Save). Critical parameters carry a Critical badge. A Back button returns to the inspection view.

ℹ️
If the plan has no parameters, the grid shows "No parameters defined for this inspection's QC plan." Add parameters to the plan first.

From the inspection view, Add Measurement opens a single-measurement modal (measurement_modal_form/{inspection_id}): pick the Parameter (dropdown of the plan's parameters, label includes the UOM symbol), type the Measured Value, add optional Notes, then Save.

Measurement fields

FieldMeaningRequiredNotes
parameter_id — ParameterWhich parameter this measurement is for.RequiredDropdown of the plan's parameters (label includes UOM symbol). Stored as qc_parameter_id.
measured_value — Measured ValueThe observed value for the parameter.RequiredNumeric (step 0.0001). Pass/fail is auto-computed against Min / Max.
text_value — Text ValueNon-numeric measurement value.OptionalDB column exists and displays as a fallback when Measured Value is null, but there is no input to enter it.
result — ResultPass / Fail / N/A outcome.AutoSystem-set: Fail if value < Min or > Max, else Pass. Not user-editable.
measured_by — Measured ByUser who recorded the measurement.AutoSet to the logged-in user.
measured_at — DateWhen it was recorded.AutoSet to the current UTC time.

How pass/fail is decided

When you save a measurement, the system compares the Measured Value to the parameter's spec limits:

Fail
value < Min or > Max
Pass
within Min…Max (or no limits)
PassWithin spec (≥ Min and ≤ Max, when limits are defined).
FailBelow Min or above Max.
N/AEnum value exists but is not produced by the save action.

On a successful save you see a dynamic toast: "Measurement recorded - PASS" or "Measurement recorded - FAIL", depending on the auto-computed result.

Measurements do not roll up. Recording measurements does not update the inspection — quantity_passed / quantity_failed, Status, and Overall Result are all entered manually. There is no automatic roll-up from measurement results to the inspection verdict, so edit the inspection afterwards to set the final counts and verdict yourself.
⚠️
Numeric only. Only measured_value (numeric) can be entered — there is no input for a text value. Visual / Attribute / Functional parameters must still be given a numeric value to save a measurement.

NCR — Non-Conformance Report

A Non-Conformance Report (NCR) records a defect / non-conformance — usually from a failing inspection. It captures the severity, a description, the disposition of the affected material, and a workflow status. Open the NCR list (production/QualityControl/ncr) and click New NCR; the list has Severity and Status filters. Each row's cog menu offers Edit, CAPA, and (below a divider) Delete.

NCR fields

FieldMeaningRequiredNotes
ncr_number — NCR #Unique NCR code.RequiredAuto-suggested (prefix ncr_prefix, default NCR, e.g. NCR-000001).
inspection_id — InspectionInspection the defect came from.OptionalDropdown of inspection numbers. Nullable.
order_id — Work OrderRelated work order.OptionalDropdown of work orders. Nullable. See Work Orders.
defect_type — Defect TypeShort label of the defect category.RequiredFree text. Form-required; defaults to general server-side if posted empty.
defect_description — DescriptionDetailed description of the defect.RequiredTextarea. Server-validated required.
severity — SeverityHow serious the defect is.RequiredDropdown Critical / Major / Minor. Defaults to Major if posted empty.
quantity_affected — Qty AffectedQuantity of units affected by the defect.OptionalNumeric (step 0.01).
root_cause — Root CauseIdentified root cause of the defect.OptionalTextarea.
disposition — DispositionDecision on what to do with the affected material.OptionalDropdown Select / Use As Is / Rework / Scrap / Return to Supplier.
estimated_cost — Estimated CostEstimated cost impact of the NCR.OptionalNumeric (step 0.01); defaults 0.
status — StatusWorkflow state of the NCR.OptionalDropdown Open / Investigating / Action Taken / Closed / Rejected; defaults Open. Free-set.

NCR severity legend

CriticalMost serious defect.
MajorMajor defect (the default).
MinorMinor defect.

NCR status lifecycle

Open
reported, not investigated
Investigating
root-cause in progress
Action Taken
corrective action applied
Closed
resolved
Rejected
dismissed
OpenDefect reported, not yet investigated.
InvestigatingRoot-cause investigation in progress.
Action TakenCorrective action has been applied (typically via CAPA).
ClosedNCR resolved and closed.
RejectedDismissed — not a valid non-conformance.

Disposition legend

Use As IsAccept the material despite the defect.
ReworkRepair / rework the affected units.
ScrapDiscard the affected units.
Return to SupplierSend the material back to the supplier.
⚠️
Disposition is record-only. Choosing Scrap, Rework, or Return to Supplier does not move any stock. Make the matching Inventory adjustment separately.

CAPA — Corrective & Preventive Action

A CAPA is an action to fix a problem (Corrective) and/or prevent it recurring (Preventive), usually tied to an NCR. Open the CAPA list (production/QualityControl/capa) and click New CAPA; the list has Type and Status filters. Each row's cog menu offers Edit and (below a divider) Delete. You can also reach an NCR's CAPAs contextually via CAPA for NCR (from the NCR row's CAPA action), which shows the NCR's details plus every CAPA raised against it with a New CAPA button.

CAPA fields

FieldMeaningRequiredNotes
capa_number — CAPA #Unique CAPA code.RequiredAuto-suggested (prefix capa_prefix, default CAPA, e.g. CAPA-000001).
ncr_id — Related NCRNCR this action addresses.OptionalDropdown of NCRs shown number - first 50 chars of description. Not prefilled — even from CAPA for NCR you must pick it manually.
capa_type — TypeCorrective (fix the current problem) or Preventive (prevent recurrence).RequiredDropdown Corrective / Preventive; defaults Corrective.
priority — PriorityUrgency of the action.OptionalDropdown Low / Medium / High / Critical; defaults Medium.
title — TitleShort title of the CAPA.RequiredFree text. Server-validated required.
description — DescriptionWhat the action is.RequiredTextarea. Server-validated required.
root_cause — Root CauseRoot cause being addressed.OptionalTextarea.
action_plan — Action PlanSteps to be taken.OptionalTextarea.
assigned_to — Assigned ToStaff user responsible for the action.OptionalDropdown of active staff users (first + last name).
due_date — Due DateDeadline for completing the action.OptionalDate input.
status — StatusWorkflow state of the CAPA.OptionalDropdown Open / Assigned / In Progress / Verification / Completed / Cancelled; defaults Open. Free-set.
verification_method — Verification MethodHow effectiveness will be verified.OptionalTextarea.

CAPA type & priority legends

CorrectiveFix the current problem.
PreventivePrevent the problem recurring.
LowLow urgency.
MediumMedium urgency (the default).
HighHigh urgency.
CriticalCritical urgency.

CAPA status lifecycle

Open
logged, not assigned
Assigned
owner set
In Progress
being worked
Verification
effectiveness checked
Completed
done & verified
Cancelled
cancelled
OpenAction logged, not yet assigned.
AssignedAssigned to a responsible user.
In ProgressAction being worked on.
VerificationAction done; effectiveness being verified.
CompletedAction finished and verified.
CancelledAction cancelled.
Link the NCR yourself. The New CAPA modal on the CAPA-for-NCR screen does not prefill the Related NCR. If you leave it blank, the CAPA won't be linked and won't appear in that NCR's filtered list — always select the NCR from the dropdown.

SOP — Run an inspection and handle a failure

This is the core end-to-end procedure: run an inspection, record measurements, and — when something fails — raise an NCR and open a CAPA against it.

????
Who: Inspector → QC supervisor → Quality manager. Precondition: the manufacturing_quality permission, and an Active QC plan with parameters (build one first via QC Plans and Parameters).
  1. Create the inspection

    Go to Quality Control → Inspections and click New Inspection. Accept the suggested Inspection #, choose the QC Plan (only Active plans are listed), optionally choose the Work Order, set the Date and Lot / Batch, enter Quantity Inspected, set Status to In Progress, then Save.

  2. Record measurements

    From the inspection row cog menu choose Measurements (or open View then Add Measurement). For each parameter type the Measured Value and optional Notes and Save the row. Watch the toast — "Measurement recorded - PASS" or "- FAIL" — based on the parameter's Min / Max.

  3. Finalise the inspection

    Edit the inspection to record the final Quantity Passed / Failed, then set the inspection Status (Passed / Failed / Conditional) and Overall Result manually. These do not roll up from the measurements, so set them to match what you observed.

  4. Raise an NCR on failure

    Go to Quality Control → NCR and click New NCR. Accept the NCR #, link the failing Inspection and/or Work Order, enter Defect Type, Severity, and Description; optionally set Root Cause, Qty Affected, Disposition, and Estimated Cost. Leave Status Open and Save.

  5. Investigate and dispose

    As you investigate, edit the NCR to fill Root Cause and set the Disposition (Use As Is / Rework / Scrap / Return to Supplier), moving the Status to Investigating then Action Taken. Remember to adjust Inventory separately — QC does not move stock.

  6. Open a CAPA against the NCR

    From the NCR row cog menu click CAPA to open CAPA for NCR, then New CAPA. Accept the CAPA #, manually select the Related NCR, choose Corrective (and/or add a Preventive CAPA), fill Title, Description, Action Plan, Assigned To, Due Date, and Verification Method, then Save.

  7. Close the loop

    Progress the CAPA status Assigned → In Progress → Verification → Completed. When the actions are effective, set the NCR Status to Closed.


Actions, confirmations & messages

Every list row's cog menu drives the same handful of actions. Delete is a soft delete and always asks for confirmation; other actions save directly.

ActionWhat it doesConfirmation
Save plan / inspection / NCR / CAPACreates or updates the record; on new it stamps the creator and timestamps and returns the row into the list.None
Add parameterInserts a new parameter under the plan (always an insert — never an edit). The page reloads on success.None
Add / save measurementInserts a measurement and auto-computes Pass/Fail; stamps Measured By and time. Does not update the inspection.None
Delete (any record type)Soft-deletes the record (deleted = 1).Standard delete-confirmation dialog

Validation & result messages

⚠️
Each save enforces its required fields; a missing one raises a field required validation error.
  • QC Plan: Plan Code and Plan Name required.
  • Parameter: QC Plan, Parameter, and Type required.
  • Inspection: Inspection #, QC Plan, and Date required.
  • Measurement: Inspection, Parameter, and Measured Value (numeric) required.
  • NCR: NCR # and Description required.
  • CAPA: CAPA #, Title, and Description required.
ℹ️
Result messages. Save/update/parameter-save show "Record saved successfully"; delete shows the record-deleted message; a failed save shows an error occurred message and a failed delete shows record cannot be deleted. Measurement saves are dynamic: "Measurement recorded - PASS" or "Measurement recorded - FAIL". Empty grids show "No parameters defined for this inspection's QC plan." and the plan view shows "No parameters defined".

Permissions & access

The whole Quality Control controller is gated by a single module-level permission, plus the Manufacturing module switch.

manufacturing_quality manufacturing_quality_create manufacturing_quality_update manufacturing_quality_delete
PermissionWhat it gatesNotes
manufacturing_qualityAccess to the entire Quality Control controller — plans, parameters, inspections, measurements, NCR, and CAPA.Category "Manufacturing: Quality Control", action "Manage Quality Control". Also requires the manufacturing module enabled.
manufacturing_quality_createDeclared as "Create QC Records".Not separately enforced — create runs under manufacturing_quality.
manufacturing_quality_updateDeclared as "Update QC Records".Not separately enforced.
manufacturing_quality_deleteDeclared as "Delete QC Records".Not separately enforced — delete runs under manufacturing_quality.
One key unlocks everything. Anyone with manufacturing_quality can create, edit, and delete all QC records — the create/update/delete keys are declared but not checked. Access also requires both the Manufacturing module enabled and the manufacturing_quality permission, or the user is redirected. Grant the permission only to your quality team.

Integrations & how records connect

Quality Control reads a few Manufacturing masters and links its own records into a chain.

Manufacturing UOM
Parameters and measurements reference a unit via uom_id, shown as name (symbol) from active UOMs.
Work Orders
Inspections and NCRs can link to a work order via order_id; dropdowns show order_number - product_name. See Work Orders.
Users
Inspector, Measured By, Reported By, Assigned To, Closer, Verifier, and Creator all resolve to user names. CAPA "Assigned To" lists active staff users.
Manufacturing Settings
Numbering prefixes come from settings keys qc_plan_prefix, inspection_prefix, ncr_prefix, and capa_prefix.
Product linkage
Loose: product_id on plans/NCRs is a plain integer with no product picker — easy to mistype.

The internal chain runs QC Plan → QC Parameters → Inspection → Measurements → NCR → CAPA:

FromLinks viaTo
QC Planparameters hang off the planQC Parameters
Inspectionqc_plan_idQC Plan (and its parameters)
Measurementqc_parameter_id + inspection_idParameter & Inspection
NCRinspection_id / order_idInspection / Work Order
CAPAncr_idNCR (reachable via CAPA for NCR)
⚠️
Numbering can be reused. The next code is derived from the highest existing (non-deleted) number, so soft-deleting the latest record can lead to number reuse. Deleting a QC plan is also a soft delete — historic inspections still show the now-hidden plan through joins, and there is no guard preventing deletion of a plan that already has inspections.
Was this guide helpful?

Report a content problem