The first page of the document DocMake makes from the sample values on this page.
Compliance
Non-Conformance Report
A non-conformance report answers a narrow question: this material does not meet the requirement, so what happens to it. Scrap it, rework it, repair it, regrade it, send it back, or release it under a concession. It is a decision about physical stock, taken quickly, by somebody with the authority to take it.
That is the line between this report and a corrective action. ISO 9001 keeps them in separate clauses on purpose. Clause 8.7 covers control of the nonconforming output and asks the organization to retain a description of the nonconformity, a description of the actions taken, a description of any concession obtained, and the identity of the authority deciding what to do. Clause 10.2 is where the cause gets eliminated. The two documents are joined by a reference, not merged into one form, and merging them is why so many quality systems can produce a root cause but not a stock decision.
The vocabulary repays being used precisely, because the standard defines it. A correction removes a detected nonconformity; corrective action removes its cause. Rework brings the item into conformity, repair only makes it acceptable for its intended use, regrade moves it to a different requirement, scrap rules out its original use. A concession permits release of something already made that does not conform, whereas a deviation permit is agreed before the work starts. Use as is, return to vendor and a material review board deciding the call are all common practice rather than defined terms, which is worth knowing before an auditor asks where they come from.
Quantities are where most forms fall short. Lot size, quantity inspected and quantity affected are three different numbers, and it is the gap between them that decides whether five pieces get pulled or the whole pallet goes into quarantine. The disposition block repeats for the same reason: one lot is routinely split three ways after a sort, and each split needs its own justification, its own approver and its own date.
Blanks to fill
| ncr_number | Report number |
| raised_date | Date raised |
| raised_by | Raised by |
| raised_by_role | Role of the person raising it |
| detected_at | Found at |
| part_number | Part number |
| part_revision | Drawing revision |
| part_description | Description |
| supplier | Supplier |
| purchase_order | Purchase order |
| work_order | Works order |
| lot_number | Lot or batch |
| lot_size | Lot size |
| quantity_inspected | Quantity inspected |
| quantity_affected | Quantity affected |
| requirement | The requirement |
| actual_condition | What was found |
| nonconformity_description | Why it matters |
| evidence | Evidence held |
| immediate_containment | How it was held |
| containment_by | Held by |
| containment_date | Date it was held |
| customer_notification_note | What the customer was told |
| concession_reference | Concession or deviation permit |
| reverification | Checking the corrected pieces |
| cost_impact | What it cost |
| corrective_action_reference | Corrective action raised |
| closed_by | Closed by |
| closed_date | Date closed |
| company_name | Company |
| dispositions[] | One per item, so a row is added for every item in the list |
The data behind the preview
This is the exact JSON that produced the document above. Change the values, POST them to the API, and you get your version back as DOCX or PDF. Lists grow and shrink with your data; the layout adapts.
- 01 Sign up free and duplicate this template into your workspace.
- 02 Adjust the wording and branding in the visual editor.
- 03 Fill it in the app, share it as a form link, or call the API.
{
"company_name": "Northwind Instruments",
"ncr_number": "NCR-2026-0184",
"raised_date": "August 11, 2026",
"raised_by": "Dana Kovacs",
"raised_by_role": "Goods Inwards Inspector",
"detected_at": "Receiving inspection, incoming quality bay 2",
"part_number": "NI-4471",
"part_revision": "C",
"part_description": "Conductivity cell housing, machined PEEK, 12 mm bore",
"supplier": "Helvetia Labortechnik AG",
"purchase_order": "PO-2026-3388",
"work_order": "Not yet allocated, stock held at receiving",
"lot_number": "HL-26-0771",
"lot_size": "500 pieces",
"quantity_inspected": "32 pieces, sampled per the receiving plan",
"quantity_affected": "500 pieces, whole lot suspect pending 100 percent sort",
"requirement": "Bore diameter 12.00 mm, plus 0.05 mm and minus 0.00 mm, per drawing NI-4471 revision C, feature 3",
"actual_condition": "Five of the thirty two pieces sampled measured between 12.07 mm and 12.11 mm on the coordinate measuring machine",
"nonconformity_description": "Bore diameter above the upper limit on part of lot HL-26-0771. An oversize bore lets the cell electrode assembly move under thermal cycling, which shows up later as unstable readings rather than as an obvious defect, so the lot cannot be passed on sample evidence alone.",
"evidence": "CMM report DIM-2026-0327 with the thirty two measured values, photographs of pieces 7 and 19, supplier certificate of conformity for the lot",
"immediate_containment": "Whole lot moved to the quarantine cage and tagged. Stock record blocked for issue. Two open works orders that would have drawn this part put on hold and the planner notified.",
"containment_by": "Dana Kovacs",
"containment_date": "August 11, 2026",
"customer_notification_note": "Nothing from this lot reached a finished assembly or left the site, so no customer notification was triggered under the quality agreement.",
"dispositions": [
{
"quantity": "500 pieces",
"decision": "Segregate and sort 100 percent on the CMM",
"justification": "Sample evidence cannot separate conforming from nonconforming pieces, and the feature is not visually distinguishable.",
"authority": "Quality Manager",
"date": "August 12, 2026"
},
{
"quantity": "428 pieces",
"decision": "Accept, conforming",
"justification": "Measured inside the drawing limit during the sort. Released to stock with the sort record attached.",
"authority": "Quality Manager",
"date": "August 14, 2026"
},
{
"quantity": "61 pieces",
"decision": "Rework by reaming to nominal and re-inspecting",
"justification": "Material remains above the minimum wall thickness after reaming, so the pieces can be brought into conformity rather than scrapped.",
"authority": "Quality Manager with Design Engineering",
"date": "August 14, 2026"
},
{
"quantity": "11 pieces",
"decision": "Return to supplier as scrap credit",
"justification": "Bore beyond the reworkable range. Returned under debit note DN-2026-0059 rather than scrapped on site so the supplier holds the evidence.",
"authority": "Quality Manager with Purchasing",
"date": "August 15, 2026"
}
],
"concession_reference": "None. No concession was asked for and no deviation permit applies to this lot.",
"reverification": "All 61 reworked pieces re-inspected at 100 percent on the CMM against feature 3 and recorded on report DIM-2026-0331. All conformed and were released to stock on August 18, 2026.",
"cost_impact": "Sort labour 14.5 hours, rework 6.0 hours, 11 pieces returned. Recovered from the supplier under debit note DN-2026-0059.",
"corrective_action_reference": "CA-2026-019, raised against the supplier for the capability of feature 3 and for the final inspection record missing on this lot.",
"closed_by": "Quality Manager",
"closed_date": "August 19, 2026"
} Generate this document via the API
One template plus changing data is the whole point. The list of blanks above is the contract, and every new set of values comes back in the same layout: fill it in the app, hand someone a form link, or POST the JSON and get the file straight back.
The request below carries this page's own values, so it runs as soon as the template exists in your workspace. Swap the values for yours and the response is your document.
curl -X POST https://app.docmake.io/api/v1/render \
-H "Authorization: Bearer $DOCMAKE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--output non-conformance-report.pdf \
--data-binary @- <<'JSON'
{
"template_id": "tmpl_your_template_id",
"format": "pdf",
"data": {
"company_name": "Northwind Instruments",
"ncr_number": "NCR-2026-0184",
"raised_date": "August 11, 2026",
"raised_by": "Dana Kovacs",
"raised_by_role": "Goods Inwards Inspector",
"detected_at": "Receiving inspection, incoming quality bay 2",
"part_number": "NI-4471",
"part_revision": "C",
"part_description": "Conductivity cell housing, machined PEEK, 12 mm bore",
"supplier": "Helvetia Labortechnik AG",
"purchase_order": "PO-2026-3388",
"work_order": "Not yet allocated, stock held at receiving",
"lot_number": "HL-26-0771",
"lot_size": "500 pieces",
"quantity_inspected": "32 pieces, sampled per the receiving plan",
"quantity_affected": "500 pieces, whole lot suspect pending 100 percent sort",
"requirement": "Bore diameter 12.00 mm, plus 0.05 mm and minus 0.00 mm, per drawing NI-4471 revision C, feature 3",
"actual_condition": "Five of the thirty two pieces sampled measured between 12.07 mm and 12.11 mm on the coordinate measuring machine",
"nonconformity_description": "Bore diameter above the upper limit on part of lot HL-26-0771. An oversize bore lets the cell electrode assembly move under thermal cycling, which shows up later as unstable readings rather than as an obvious defect, so the lot cannot be passed on sample evidence alone.",
"evidence": "CMM report DIM-2026-0327 with the thirty two measured values, photographs of pieces 7 and 19, supplier certificate of conformity for the lot",
"immediate_containment": "Whole lot moved to the quarantine cage and tagged. Stock record blocked for issue. Two open works orders that would have drawn this part put on hold and the planner notified.",
"containment_by": "Dana Kovacs",
"containment_date": "August 11, 2026",
"customer_notification_note": "Nothing from this lot reached a finished assembly or left the site, so no customer notification was triggered under the quality agreement.",
"dispositions": [
{
"quantity": "500 pieces",
"decision": "Segregate and sort 100 percent on the CMM",
"justification": "Sample evidence cannot separate conforming from nonconforming pieces, and the feature is not visually distinguishable.",
"authority": "Quality Manager",
"date": "August 12, 2026"
},
{
"quantity": "428 pieces",
"decision": "Accept, conforming",
"justification": "Measured inside the drawing limit during the sort. Released to stock with the sort record attached.",
"authority": "Quality Manager",
"date": "August 14, 2026"
},
{
"quantity": "61 pieces",
"decision": "Rework by reaming to nominal and re-inspecting",
"justification": "Material remains above the minimum wall thickness after reaming, so the pieces can be brought into conformity rather than scrapped.",
"authority": "Quality Manager with Design Engineering",
"date": "August 14, 2026"
},
{
"quantity": "11 pieces",
"decision": "Return to supplier as scrap credit",
"justification": "Bore beyond the reworkable range. Returned under debit note DN-2026-0059 rather than scrapped on site so the supplier holds the evidence.",
"authority": "Quality Manager with Purchasing",
"date": "August 15, 2026"
}
],
"concession_reference": "None. No concession was asked for and no deviation permit applies to this lot.",
"reverification": "All 61 reworked pieces re-inspected at 100 percent on the CMM against feature 3 and recorded on report DIM-2026-0331. All conformed and were released to stock on August 18, 2026.",
"cost_impact": "Sort labour 14.5 hours, rework 6.0 hours, 11 pieces returned. Recovered from the supplier under debit note DN-2026-0059.",
"corrective_action_reference": "CA-2026-019, raised against the supplier for the capability of feature 3 and for the final inspection record missing on this lot.",
"closed_by": "Quality Manager",
"closed_date": "August 19, 2026"
}
}
JSON tmpl_your_template_id is
a stand-in: build this template in the visual editor and copy the id it shows, or create one with POST /api/v1/templates. Keys, formats, strict mode and batches are in the API reference.
Or let an AI assistant do it
The DocMake MCP server lets Claude and other assistants make this document the same way. Install it once:
claude mcp add docmake \
--env DOCMAKE_API_KEY=dm_your_api_key \
-- npx -y @docmake/mcp@latest Then ask for the document in plain words:
Make a PDF from my Non-Conformance Report template with report number "NCR-2026-0184" and date raised "August 11, 2026".
More compliance templates
8D Report
The eight steps a customer expects: the team, what the problem is and is not, how it was held, why it happened and what stops a repeat.
View template →Calibration Certificate
As found and as left readings with the uncertainty at every point, the standards they are traceable to, and the rule used to pass them.
View template →Corrective Action Report
What went wrong, why it happened, the actions with an owner and a date, and the check that proves it worked.
View template →