The first page of the document DocMake makes from the sample values on this page.
Operations
Work Instruction
A work instruction sits at the narrow end of the documentation set. A procedure describes activities that cross functions; an instruction describes how one task is done inside one function, in enough detail that a trained person who last did the job two months ago still gets the same result.
No hierarchy is required. ISO 9001:2015 replaced documents, records and the quality manual with the single idea of documented information, and ISO 10013:2021, the guidance published alongside it, states plainly that a documented information hierarchy is not required and that organizations may define their own. Policy, procedure, instruction, form survives as one worked example rather than as an obligation.
That same guidance is unusually specific about content: a work instruction describes the materials, equipment and documented information to be used, and where relevant it includes acceptance criteria. Which is the step table below. Each row carries the action, the role that performs it, and the criterion that says when the step has been done correctly, and that last column is what turns a description into something a new starter or an auditor can check against.
The header exists for the same reason. When documented information is created or updated, clause 7.5.2 asks for identification and description, a suitable format, and review and approval, so identifier, revision, effective date, owner and approver belong in the printed header rather than in a file name, with the change history at the foot. Protective equipment is on the form because a real instruction at a bench carries it, not because a quality standard asks for it. Generating the instruction from the register whenever it changes keeps the laminated copy at the bench and the register entry describing the same revision.
Blanks to fill
| doc_title | Title |
| doc_id | Document ID |
| revision | Revision |
| effective_date | Effective date |
| supersedes | Supersedes |
| department | Department |
| workstation | Workstation or area |
| process_owner | Process owner |
| approved_by | Approved by |
| approval_date | Approval date |
| purpose | Purpose |
| scope | Scope |
| competence_required | Who may do this work |
| safety_notice | Safety notice |
| related_documents | Read with this |
| company_name | Company |
| protective_equipment[] | One per item, so a row is added for every item in the list |
| equipment[] | One per item, so a row is added for every item in the list |
| steps[] | One per item, so a row is added for every item in the list |
| records[] | One per item, so a row is added for every item in the list |
| revisions[] | 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": "Ellerby Precision Engineering",
"doc_id": "WI-CNC-07",
"doc_title": "Setting and running the CNC lathe, cell 3",
"revision": "4",
"effective_date": "1 September 2026",
"supersedes": "Revision 3 of 14 February 2025",
"department": "Machining",
"workstation": "Cell 3, CNC lathe LT-220",
"process_owner": "Cell Leader, Machining",
"approved_by": "Verity Ashgate, Production Manager",
"approval_date": "28 August 2026",
"purpose": "Set and run the CNC lathe in cell 3 so that every part leaves the machine within drawing, and so that anybody on any shift sets it the same way.",
"scope": "Turned parts made on the LT-220 in cell 3, from the setting sheet to the first part being passed. It does not cover programming, tool grinding or the yearly machine service.",
"competence_required": "Trained on the LT-220 and signed off on the training record by the cell leader. An apprentice may set the machine only with a signed off operator at the cell.",
"safety_notice": "The door interlock is never bypassed. The spindle is stopped and the isolator locked before anybody reaches into the work area. Swarf is cleared with the hook and the brush, never by hand.",
"protective_equipment": [
{
"protective_equipment": "Safety glasses",
"when": "At all times in the cell"
},
{
"protective_equipment": "Cut resistant gloves",
"when": "Handling bar stock and clearing swarf, never with the spindle running"
},
{
"protective_equipment": "Safety boots",
"when": "At all times in the cell"
},
{
"protective_equipment": "Ear defenders",
"when": "While the bar feeder is running"
}
],
"equipment": [
{
"equipment_or_material": "CNC lathe",
"identifier": "LT-220, asset 3114",
"check_before_use": "Daily check card signed, guards and interlock working"
},
{
"equipment_or_material": "Tool holder set",
"identifier": "TH-3 to TH-9",
"check_before_use": "Inserts free of chips, clamp screws to 4 Nm"
},
{
"equipment_or_material": "Digital micrometer",
"identifier": "MIC-0442",
"check_before_use": "In calibration date, reads zero on the standard"
},
{
"equipment_or_material": "Bar stock",
"identifier": "As the works order",
"check_before_use": "Grade and heat number match the order"
}
],
"steps": [
{
"action": "Read the works order and the drawing, and take the setting sheet for the part number.",
"done_by": "Operator",
"checked_against": "Setting sheet matches the drawing issue"
},
{
"action": "Load the program from the cell folder and check the program number against the setting sheet.",
"done_by": "Operator",
"checked_against": "Program number and issue agree"
},
{
"action": "Fit the tools listed on the setting sheet and set the offsets.",
"done_by": "Operator",
"checked_against": "Offsets written on the setting sheet"
},
{
"action": "Load the bar, set the stop and run one part in single block at 25 per cent feed.",
"done_by": "Operator",
"checked_against": "No alarm, no rub, chips breaking"
},
{
"action": "Measure the first part on all drawing dimensions and record them on the first off sheet.",
"done_by": "Operator",
"checked_against": "Every dimension inside the drawing limits"
},
{
"action": "Have the first part passed before the run starts.",
"done_by": "Cell leader or inspector",
"checked_against": "First off sheet signed"
},
{
"action": "Run the batch, measuring one part in ten and writing it on the run chart.",
"done_by": "Operator",
"checked_against": "Run chart inside the limits"
},
{
"action": "Stop the machine and tell the cell leader if any reading moves outside the limits.",
"done_by": "Operator",
"checked_against": "Machine stopped, parts held"
}
],
"records": [
{
"record": "First off sheet",
"form": "F-QA-12",
"kept_for": "3 years"
},
{
"record": "Run chart",
"form": "F-QA-15",
"kept_for": "3 years"
},
{
"record": "Daily machine check card",
"form": "F-MA-02",
"kept_for": "1 year"
}
],
"related_documents": "Drawing DR-4471 issue C, setting sheet SS-4471, the calibration schedule, and the procedure for output that does not meet the requirement.",
"revisions": [
{
"revision": "2",
"date": "3 June 2024",
"change": "Bar feeder added to the equipment list.",
"approved_by": "V. Ashgate"
},
{
"revision": "3",
"date": "14 February 2025",
"change": "Measuring rate changed from one in twenty to one in ten.",
"approved_by": "V. Ashgate"
},
{
"revision": "4",
"date": "28 August 2026",
"change": "First part now passed by the cell leader, and the wording brought to plain words.",
"approved_by": "V. Ashgate"
}
]
} 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 work-instruction.pdf \
--data-binary @- <<'JSON'
{
"template_id": "tmpl_your_template_id",
"format": "pdf",
"data": {
"company_name": "Ellerby Precision Engineering",
"doc_id": "WI-CNC-07",
"doc_title": "Setting and running the CNC lathe, cell 3",
"revision": "4",
"effective_date": "1 September 2026",
"supersedes": "Revision 3 of 14 February 2025",
"department": "Machining",
"workstation": "Cell 3, CNC lathe LT-220",
"process_owner": "Cell Leader, Machining",
"approved_by": "Verity Ashgate, Production Manager",
"approval_date": "28 August 2026",
"purpose": "Set and run the CNC lathe in cell 3 so that every part leaves the machine within drawing, and so that anybody on any shift sets it the same way.",
"scope": "Turned parts made on the LT-220 in cell 3, from the setting sheet to the first part being passed. It does not cover programming, tool grinding or the yearly machine service.",
"competence_required": "Trained on the LT-220 and signed off on the training record by the cell leader. An apprentice may set the machine only with a signed off operator at the cell.",
"safety_notice": "The door interlock is never bypassed. The spindle is stopped and the isolator locked before anybody reaches into the work area. Swarf is cleared with the hook and the brush, never by hand.",
"protective_equipment": [
{
"protective_equipment": "Safety glasses",
"when": "At all times in the cell"
},
{
"protective_equipment": "Cut resistant gloves",
"when": "Handling bar stock and clearing swarf, never with the spindle running"
},
{
"protective_equipment": "Safety boots",
"when": "At all times in the cell"
},
{
"protective_equipment": "Ear defenders",
"when": "While the bar feeder is running"
}
],
"equipment": [
{
"equipment_or_material": "CNC lathe",
"identifier": "LT-220, asset 3114",
"check_before_use": "Daily check card signed, guards and interlock working"
},
{
"equipment_or_material": "Tool holder set",
"identifier": "TH-3 to TH-9",
"check_before_use": "Inserts free of chips, clamp screws to 4 Nm"
},
{
"equipment_or_material": "Digital micrometer",
"identifier": "MIC-0442",
"check_before_use": "In calibration date, reads zero on the standard"
},
{
"equipment_or_material": "Bar stock",
"identifier": "As the works order",
"check_before_use": "Grade and heat number match the order"
}
],
"steps": [
{
"action": "Read the works order and the drawing, and take the setting sheet for the part number.",
"done_by": "Operator",
"checked_against": "Setting sheet matches the drawing issue"
},
{
"action": "Load the program from the cell folder and check the program number against the setting sheet.",
"done_by": "Operator",
"checked_against": "Program number and issue agree"
},
{
"action": "Fit the tools listed on the setting sheet and set the offsets.",
"done_by": "Operator",
"checked_against": "Offsets written on the setting sheet"
},
{
"action": "Load the bar, set the stop and run one part in single block at 25 per cent feed.",
"done_by": "Operator",
"checked_against": "No alarm, no rub, chips breaking"
},
{
"action": "Measure the first part on all drawing dimensions and record them on the first off sheet.",
"done_by": "Operator",
"checked_against": "Every dimension inside the drawing limits"
},
{
"action": "Have the first part passed before the run starts.",
"done_by": "Cell leader or inspector",
"checked_against": "First off sheet signed"
},
{
"action": "Run the batch, measuring one part in ten and writing it on the run chart.",
"done_by": "Operator",
"checked_against": "Run chart inside the limits"
},
{
"action": "Stop the machine and tell the cell leader if any reading moves outside the limits.",
"done_by": "Operator",
"checked_against": "Machine stopped, parts held"
}
],
"records": [
{
"record": "First off sheet",
"form": "F-QA-12",
"kept_for": "3 years"
},
{
"record": "Run chart",
"form": "F-QA-15",
"kept_for": "3 years"
},
{
"record": "Daily machine check card",
"form": "F-MA-02",
"kept_for": "1 year"
}
],
"related_documents": "Drawing DR-4471 issue C, setting sheet SS-4471, the calibration schedule, and the procedure for output that does not meet the requirement.",
"revisions": [
{
"revision": "2",
"date": "3 June 2024",
"change": "Bar feeder added to the equipment list.",
"approved_by": "V. Ashgate"
},
{
"revision": "3",
"date": "14 February 2025",
"change": "Measuring rate changed from one in twenty to one in ten.",
"approved_by": "V. Ashgate"
},
{
"revision": "4",
"date": "28 August 2026",
"change": "First part now passed by the cell leader, and the wording brought to plain words.",
"approved_by": "V. Ashgate"
}
]
}
}
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 Work Instruction template with document ID "WI-CNC-07" and revision "4".
More operations templates
Change Order
The instructed change, where it came from, what it costs line by line, what it does to the programme, and the contract sum it leaves behind.
View template →Daily Site Report
The day on site in one sheet: weather, crew, plant, work done, deliveries and what held the job up.
View template →Field Service Report
One engineer visit written down: the fault, the time on site, the parts fitted, the tests that proved it and the customer signature.
View template →