The Parts Ready Build Standard
Second visit because of one part? This standard checks tomorrow’s jobs the afternoon before: what each one needs, against what the tech’s van and your shelf hold. A part you have is reserved, a part you do not is ordered through Material Order or put in front of a person, and the tech is told before they leave. Nothing is swapped without a person. Written so you can build it yourself.
Used by
- Operations Manager
- Scheduling Coordinator
- Purchasing Officer
- Service Manager
9 min read · Published by AI Pathway
Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.
How to get this live in your business
Build it for mePick a time and we set up the afternoon check against your board, your vans and your shelf, with shortfalls going through Material Order.What this is
An open build standard for the afternoon before. Each of tomorrow's jobs is checked against what it needs and what the tech's van and your shelf hold, so a missing part is found at 2pm today, not at the customer's door tomorrow.
The core rule
What a job needs comes from the record: the accepted quote, the job's materials, or a written list per job type (a template, like "a hot water swap needs the unit, two flexis and a tempering valve"). No list on the record, no guess: a person is asked.
What it does not do
It never swaps a part for one it thinks will do, never trusts a van count from last week, and never writes a purchase order itself. Ordering goes through the Material Order standard, with its limits.
The hard part
Not the comparison. Keeping the van count honest, and making sure a second run at 2.30pm does not order the valve twice or text the tech again.
The tech gets to the job, opens the van, and the valve is not there. The customer gets a second visit, and you pay for two trips and bill one. The valve was on the quote the whole time. Nobody checked the quote against the van before the tech left, because at 3pm everybody is busy with today.
Tomorrow's board, checked the afternoon before
- Tomorrow's board is read after dispatch.
- Each job is taken by its job id, with the tech from its slot.
- What the job needs comes from the accepted quote, the job's own materials, or a written template for its type. A job with none of these is flagged, never guessed.
- The tech's van is read with the time it was counted. A count older than the limit is flagged as unknown rather than trusted.
- Does a fresh van count or the shelf cover the line? If yes, it is on the van, or reserved on the shelf, and the tech is told where to pick it up.
- If no, find the supplier that holds it and its lead time.
- Will it arrive before the slot? If yes, it is ordered through Material Order, one request per supplier per run, and a re-run orders nothing again. If no, it is flagged with the reason and a person moves the job or sources the part. An equivalent part is only ever a suggestion on the flag.
- The run publishes its result by the cut-off, whether or not it found anything.
Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.
1. What this standard covers
Any trade business that sends techs out with stock on the van: plumbers, electricians, air conditioning, appliance repair, pest control. Each afternoon, before the cut-off you set (3pm unless you choose another), every job on tomorrow’s board is checked: what it needs, what the assigned tech’s van holds, what is on the shelf. Each part ends up on the van, picked from the shelf, ordered, or flagged to a person, and the tech hears about it once.
It sits beside two standards that exist. The Dispatch Board standard puts the job on tomorrow’s board with a tech and a slot; that board is where this one starts. The Material Order standard turns a job’s list into purchase orders, priced from the supplier’s catalogue, with a threshold a person releases. Parts Ready decides which lines need an order at all, and hands those to it. It is one step on the field service automation roadmap.
What is out of scope. Pricing and sending the purchase order, which is Material Order. Matching the delivery docket, also Material Order. Moving a job to another day when the part cannot arrive: this standard flags it, and a person moves it on the board.
What can meet it, and what cannot. The board and the needs have to be readable by job id. ServiceM8, Simpro, AroFlo and Fergus each have an API a build can read jobs and their materials through; check your plan includes API access. Tradify has no public API, so the board and each job’s parts come in by export into the sheet or the lists, and the build’s own record is what stops a second order. Van stock is the weak input: most small trades do not keep it in the job system at all. Simpro and AroFlo can hold stock by location, and a van can be a location if you set it up that way; elsewhere the van count lives in the sheet. A van nobody counts cannot meet check 3, and the standard says so rather than pretending.
2. Where the needs and the stock come from, and why nobody guesses
The needs, in this order. The accepted quote’s lines, because that is what the customer agreed to. If the quote has none, the materials on the job itself. If the job has none, a template you write once per job type: a hot water swap needs the unit, two flexi hoses and a tempering valve. A job with none of the three is flagged needs_list_unknown, and a person looks at it. The build never reads the job description and decides what the job probably needs: a guessed list looks finished, and the tech trusts it.
The van, with when it was counted. Every van count carries the time it was taken. A count older than your limit (24 hours unless you set another) is stock_unknown: none of that van’s parts are reported as on the van, and each of the job’s lines is flagged so a person can ask the tech. Keeping the count cheap is the whole game: a weekly count on Friday afternoon, and each finished job’s parts taken off the van as the job is closed.
The shelf, reserved first. A part the shelf holds is reserved to the job before anything is ordered, the same reserve as Material Order’s check 2, so two jobs cannot both be promised the last tempering valve.
3. The records it keeps, in the shape your developer needs
One run per date, keyed so a second run can see what the first one did. Note what is missing: there is no purchase order here. Orders live in Material Order, and this record holds only the id that came back.
For your developer. Show the fields for your developer
Run # one per date; re-runs add to it
- for_date # tomorrow, in the business's timezone
- cutoff # default 15:00
- van_stale_hours # default 24
- published_at
Slot # theirs, from the board (Dispatch Board)
- job_external_id, tech_id, start, job_type
# matched on job id, never an address
Needs
- job_external_id
- source (quote | job | template)
- lines[] { catalogue_code, qty }
VanStock # one per tech
- tech_id, as_of # when it was counted
- lines[] { catalogue_code, qty }
ShelfItem
- catalogue_code, on_hand, reserved, location
Result # unique on (for_date, job, catalogue_code)
- job_external_id, catalogue_code
- status (on_van | pick_from_shelf | ordered | flagged)
- location # for pick_from_shelf
- po_external_id, eta # from Material Order, for ordered
- reason (not_in_stock | lead_time_after_job |
needs_list_unknown | stock_unknown | order_failed)
TechMessage # unique on (for_date, tech, job)
- tech_id, job_external_id, sent_at
Exception # on the business's one queue
- job_external_id, catalogue_code, reason, owner
- suggestion # an equivalent part, for a personA second Result or a second TechMessage for the same date, job and part is the defect a re-run must not create. A Result of on_van from a van counted last week is the other.
4. The checks, in order
The order is the claim. The board and the record come before any stock is read, because a part list nobody wrote is not worth checking. The shelf comes before any order, because the cheapest part is the one you already own. The lead time comes before the order, because an order that arrives after the job is a second visit with extra steps.
- Tomorrow's jobs come from the dispatched board, by job id, and a job added later re-runs for that job only. The run reads tomorrow's board and works from each slot's job id and assigned tech, never from an address or a customer name. A job added to the board after the first run is checked on the next run on its own: the jobs already checked are not re-ordered, re-reserved or re-sent.
- What a job needs comes from the record, and a job with no needs list is flagged, never guessed. A job's needs are the accepted quote's lines, the job's own materials, or a written template for its job type, in that order. A job with none of these is flagged needs_list_unknown to a person with an owner. The build never works out from the job's description, or from what is usual, what a job needs.
- Van stock is read with the time it was counted, and a count older than the limit is flagged, not trusted. Van and shelf stock are read on every run, each with an as-of time. Van stock counted longer ago than the business's limit (24 hours unless it sets another) is stock_unknown: no line is reported as on the van from it, and each of that job's lines is flagged to a person.
- Shelf stock is reserved to the job before anything is ordered. Before any order is requested, the shelf is read. A line the shelf covers is reserved against that job, the same reserve as Material Order's check 2, and is not ordered. The tech is told where to pick it up.
- A shortfall is ordered only through Material Order, one request per supplier per run, and a second run orders nothing again. Parts Ready never writes a purchase order. A part held nowhere is handed to Material Order's path, grouped into one request per supplier per run, so that standard's threshold and approved-supplier rules decide the release. A second run on the same board with nothing changed requests nothing.
- A part that cannot arrive before the job is flagged with the reason, not ordered and hoped for. Each supplier's lead time is read as data. A part whose arrival would land after the job's slot is flagged lead_time_after_job, naming the job, so a person can move the job or source the part. It is not ordered.
- An equivalent part is a suggestion on the flag, never a change to the order, the reservation or the tech's list. When a part cannot be supplied in time and another part in stock would do the same job, the build may say so on the flag. It never reserves, orders or lists the other part for the tech, and never changes the job's parts list. A person decides.
- Each tech is told once per job, with the job id: what is on the van, what to pick up and where. Each tech with a job tomorrow gets one message for that job, carrying the job id: the parts on the van, the parts to pick up and the shelf location, and anything flagged. A second run with nothing changed sends nothing.
- The run publishes by the cut-off whether or not it found anything, and every flag goes to the exceptions queue with an owner. Every run publishes a result for tomorrow's date by the business's cut-off (15:00 unless it sets another), including when every part is already on a van. A quiet afternoon is a result, not silence. Every flag is written to the business's one exceptions queue with an owner.
- The pass test passes. On tomorrow's real board: one job whose part is on the van, one whose part is only on the shelf, and one whose part is held nowhere. By the cut-off each tech is told correctly, the shelf shows the reservation, and the third job has a purchase order through Material Order or a flag naming it. A re-run orders nothing again.
5. What each job gets, and what the tech is told
Every part on every job ends in one of four states:
| Status | What it means |
|---|---|
| on_van | A van count newer than your limit shows the part. The tech is told it is on the van. |
| pick_from_shelf | The shelf holds it. It is reserved to the job and the tech is told where to pick it up. |
| ordered | Held nowhere, and it can arrive before the slot. Ordered through Material Order, with the purchase order id. |
| flagged | A person decides. The reason says why, from the closed list below. |
A flag carries one reason, from a closed list:
| needs_list_unknown | No quote lines, no materials on the job, and no template for its type |
| stock_unknown | The van was last counted longer ago than your limit |
| lead_time_after_job | The supplier cannot get it there before the slot |
| not_in_stock | Not on the van, not on the shelf, and no supplier you buy from lists it |
| order_failed | The order went to Material Order and no purchase order id came back |
Each tech gets one message per job, with the job number on it: “Tomorrow, job 4471 at 8am: tempering valve is on your van. Job 4473 at 11am: pick up the 315L unit from Bay 3, it is reserved for you.” A flagged part says so, and says a person is on it. A second run that finds nothing new sends nothing. A job added to the board at 4pm gets its own message on the next run, and nobody else hears again.
The run publishes its result for the date by the cut-off, every time, including the afternoons when every part is already on a van. Silence and “all clear” look the same to the office unless the run says which. Every flag goes onto the business’s one exceptions queue with an owner, the same queue every other standard on the roadmap writes to.
6. Ordering through Material Order, once
A part held nowhere is not ordered by this standard. It is handed to Material Order, grouped into one request per supplier per run, each line naming its job. Material Order prices it from the supplier’s catalogue, holds anything over your threshold or to a supplier you have not approved for a named person, and gives back a purchase order id. Parts Ready records that id against the job and part. A second run reads its own record first, finds the id, and orders nothing.
Before handing anything over, the supplier’s lead time is read. If the part cannot arrive before the job’s slot, it is not ordered and hoped for. It is flagged lead_time_after_job, naming the job, so a person can move the job, send a different tech, or ring the wholesaler. If another part in stock would do the same job, the flag can say so. It is a suggestion for a person, never a change to the order, the reservation or the tech’s list: the part on the quote is the one the customer agreed to.
7. What stays with a person
- Moving a job, or sourcing a part another way, when the lead time misses the slot.
- Accepting an equivalent part. The build may name one on the flag; a person decides.
- Writing the template for each job type. The build reads it and never invents one.
- Counting the van. The build reads the count and its time; it cannot count for you.
- Releasing any order over the threshold, which Material Order holds for a named person.
- Every flag on the exceptions queue.
8. Run it your way
Same checks and the same pass test, five ways. Pick one per business: two of them checking the same board at once would order twice.
- Done for you, on Office Voice. Not today. Office Voice has no step in this standard yet. Purchase order tools for it are on its backlog and are coming, not available; until they ship, the order write is Material Order’s, built on your own systems. If you want it set up for you, that is a scoped build.
- Google Workspace, the default. A copyable Google Sheet (built, with its copy link coming soon) with Board, Needs, Templates, Van, Shelf and Suppliers tabs, and a run each afternoon at 2pm. It writes Results, Orders (one draft per supplier for a person to place through Material Order), Messages and Flags, and emails each tech once per job if you turn that on. It calls nothing outside the spreadsheet.
- Microsoft 365. The Microsoft 365 plan lays out the SharePoint lists, a scheduled flow that orders only through the Material Order flow, and one Teams message per tech and job.
- Your own bot. A Grok Bot or Claude task scheduled for 2pm that reads the sheet’s tabs, writes the results and drafts the orders for a person to approve, held to the same checks. It reads its own earlier results before writing, so a second run orders nothing. There is no recipe page for it yet; start from how to use Grok Bot.
- Your own code. This page: the records, the checks in order, the stub and the pass test. Hand it to a coding agent and run the conformance kit until the stub checks pass.
How to run any standard each of these ways is in run a standard anywhere.
Facts that can change, and when we checked them
Checked as at 1 November 2026
Office Voice lists read_purchase_order and draft_purchase_order tools on its backlog. Neither has shipped, so this standard names no Office Voice step, and the provider block below says the order write is the builder’s.
Tradify has no public or partner API, confirmed in writing by their support on 10 April 2026.
Check these against the primary instrument before you rely on them, and store the date you checked beside the value rather than hard-coding it. This standard tells you the shape and where to look. It is not legal advice and it does not tell you that anything complies.
9. What your developer builds, and the step that needs care
No step here passes the twelve-month test on its own: the purchase order write belongs to Material Order. What a coding agent builds against the stub is the board read, the as-of rule, the reservation, the lead-time decision, one message per tech and job, and a run that publishes by the cut-off.
For your developer. Show the setup for your developer
provider:
stub: local.mock_parts_board
production: none # no hosted step; runs on your own systems
the stub # local.mock_parts_board
- tomorrow's board, with a job the runner adds after the first run
- quote lines, job materials and templates per job type
- vans with the time each was counted, one of them days old
- a shelf that refuses to reserve what it does not hold
- suppliers with lead times, one too slow for the slot
- a Material Order path that does NOT deduplicate:
two requests are two purchase orders
stays local # yours, and the standard
- the board read, the needs, the as-of rule, the reservation,
the lead-time decision, the messages, the flags, the result
the order write
- Material Order's, through its threshold and approved suppliers.
Office Voice's purchase order tools are on its backlog, not
shipped; until they are, the write is built on your systems
cannot meet the standard
- a van nobody counts, and a job with no quote, no materials
and no templateAnyone selling van stock automation should be able to answer two questions: what does it do with a van count from last week, and what happens to the order when it runs twice.
The pass test. On tomorrow’s real board. Set one job whose quote needs a part you hold on the van, one whose part is only on the shelf, and one whose part you hold nowhere. By the cut-off: the first tech’s message lists the part as on the van; the second says pick it up from the shelf, and the shelf shows it reserved to that job; the third has a purchase order drafted through Material Order or, if the lead time misses the slot, a flag naming the job. Change nothing and run it again: no second order and no second message. Each of these takes a minute to stage. A stub cannot pass this, because a stub van holds whatever was seeded into it; only a van somebody counted proves the tech will find the part.
10. A checklist to hold any build or supplier to
Hold a DIY build or a vendor to this. If a box is empty, it is not in production.
- 1. Tomorrow's jobs come from the dispatched board, by job id, and a job added later re-runs for that job only. The run reads tomorrow's board and works from each slot's job id and assigned tech, never from an address or a customer name. A job added to the board after the first run is checked on the next run on its own: the jobs already checked are not re-ordered, re-reserved or re-sent.
- 2. What a job needs comes from the record, and a job with no needs list is flagged, never guessed. A job's needs are the accepted quote's lines, the job's own materials, or a written template for its job type, in that order. A job with none of these is flagged needs_list_unknown to a person with an owner. The build never works out from the job's description, or from what is usual, what a job needs.
- 3. Van stock is read with the time it was counted, and a count older than the limit is flagged, not trusted. Van and shelf stock are read on every run, each with an as-of time. Van stock counted longer ago than the business's limit (24 hours unless it sets another) is stock_unknown: no line is reported as on the van from it, and each of that job's lines is flagged to a person.
- 4. Shelf stock is reserved to the job before anything is ordered. Before any order is requested, the shelf is read. A line the shelf covers is reserved against that job, the same reserve as Material Order's check 2, and is not ordered. The tech is told where to pick it up.
- 5. A shortfall is ordered only through Material Order, one request per supplier per run, and a second run orders nothing again. Parts Ready never writes a purchase order. A part held nowhere is handed to Material Order's path, grouped into one request per supplier per run, so that standard's threshold and approved-supplier rules decide the release. A second run on the same board with nothing changed requests nothing.
- 6. A part that cannot arrive before the job is flagged with the reason, not ordered and hoped for. Each supplier's lead time is read as data. A part whose arrival would land after the job's slot is flagged lead_time_after_job, naming the job, so a person can move the job or source the part. It is not ordered.
- 7. An equivalent part is a suggestion on the flag, never a change to the order, the reservation or the tech's list. When a part cannot be supplied in time and another part in stock would do the same job, the build may say so on the flag. It never reserves, orders or lists the other part for the tech, and never changes the job's parts list. A person decides.
- 8. Each tech is told once per job, with the job id: what is on the van, what to pick up and where. Each tech with a job tomorrow gets one message for that job, carrying the job id: the parts on the van, the parts to pick up and the shelf location, and anything flagged. A second run with nothing changed sends nothing.
- 9. The run publishes by the cut-off whether or not it found anything, and every flag goes to the exceptions queue with an owner. Every run publishes a result for tomorrow's date by the business's cut-off (15:00 unless it sets another), including when every part is already on a van. A quiet afternoon is a result, not silence. Every flag is written to the business's one exceptions queue with an owner.
- 10. The pass test passes. On tomorrow's real board: one job whose part is on the van, one whose part is only on the shelf, and one whose part is held nowhere. By the cut-off each tech is told correctly, the shelf shows the reservation, and the third job has a purchase order through Material Order or a flag naming it. A re-run orders nothing again.
- 1
Hold the build to the checklist
The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.
- 2
Do not hand-roll
There is no product for this step. Highest option: none. Checklist plus a build.
- 3
If you are stuck
Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.
Related reading
- The Material Order Build Standard: where a shortfall is ordered
- The Dispatch Board Build Standard: tomorrow’s board this one reads
- The field service automation roadmap: every handover on the job, and its standard
- The Quote Out Build Standard: where the quote lines came from
- Van Stock on Microsoft 365: the lists and the flow
Want the whole thing by email?
This paper, plus the rest of the library. One click to stop them.