DocMake
The PDF DocMake makes from the Non-Conformance Report template

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.

  1. 01 Sign up free and duplicate this template into your workspace.
  2. 02 Adjust the wording and branding in the visual editor.
  3. 03 Fill it in the app, share it as a form link, or call the API.
sample-data.json
{
  "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.

make-non-conformance-report.sh
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".

How the MCP server works →

More compliance templates