Menu
Maintenance Kitting Data Model: Fields, Reservations, Returns

Maintenance Kitting Data Model: Fields, Reservations, Returns

Reference data model for maintenance kitting: kit header, kit line, reservation and return fields, the reserved stock state, lifecycle and a worked month.
Maintenance Kitting Data Model: Fields, Reservations, Returns

Key takeaways

  • A kit is three things in one record: a reservation against stock, a physical pick, and a container tied to one planned job.
  • Issuing parts early instead of kitting them corrupts stock value and consumption history, because the parts are still on site and some come back.
  • Reserved is a third stock state. Available to promise is on hand minus reserved, and it stops a second planner promising the same last part.
  • The same 140 kit lines below honestly report 70.0% readiness by kit and 93.6% by line, a gap of 23.6 percentage points.
  • Across those 20 kits 55 of 486 units came back, and a plant that never records returns overstates its parts consumption by 10.5%.

What a kit actually is as a record

A maintenance kit is the set of parts staged for one planned job before the job starts.

As a record it is three assertions made at once, against one planned work order.

The kit assertsAgainst what
These units are spoken forThe stock record (a reser­vation)
These units have left the shelfThe bin and the picker
These units are together, hereA con­tainer at a staging place

Drop any one of the three and the record stops being a kit.

Why a kit is not an issue

An issue is the transaction where stock leaves the storeroom and its cost lands on a job.

It is final: the units are consumed, the stock value drops, and the consumption history for that part gains a line.

A kit is none of that yet. The parts are still owned by the plant, still countable and still returnable.

QuestionKit vs issue
Can it be undone?Kit yes, issue no
Does stock value drop?Kit no, issue yes
Does the job own the cost?Kit no, issue yes
Is the part still counted?Kit yes, issue no
Is it a demand signal?Kit yes, issue yes

The last row fools people: a kit and an issue both say "this part is wanted". The other four say one cannot stand in for the other.

What treating a kit as an early issue costs

Most plants without a kit record fake one by issuing the parts a week early and leaving them in a corner.

Stock value. The parts are physically in the building, the ledger says they are gone, and the understatement never returns to zero on a busy line.

Consumption history. The issue date becomes the staging date, not the fitting date, and quantity issued becomes quantity staged, not quantity used.

The second one compounds. A min level raised because "we use four a month" when the plant fits three and returns one is a permanent 33% overstock on that part.

How much to hold and when to order sit in our guide to spare parts inventory management, and they only work on honest consump‑tion data.

What this page covers, and what it does not

This is the only page in this series about staging parts for a job that has not started yet.

The reservation, the pick, the container, the kit lifecycle and the return live here and nowhere else in the set.

Owned elsewhereWhich page
Wait reason codes, downtime linkSpare parts and downtime
Storeroom, part master, stock policySpare parts management
The planned job a kit servesPM plan data model
Purchasing and goods receiptMRO purchasing
Serial­ised repairable unitsRotable spare data model

A rotable unit is kitted differently, because the serial number travels with it and a return is a repair induction, not a restock.

Reserved is a third stock state

Almost every storeroom system carries two numbers per part per location, on hand and on order.

Two numbers cannot express the most ordinary situation in planned maintenance, a part that is physically present and already spoken for.

The arithmetic

Add one field, reserved, and one derived figure, available to promise.

FigureDefinition
On handUnits physically in the bin
ReservedOn hand units com­mitted to open kits
Avail­able to promiseOn hand minus reserved
On orderUnits on a purchase order
Pro­jected at date DAvail­able plus on order due by D
  • Reserved never exceeds on hand. A claim you cannot satisfy from the shelf is a shortage, and it belongs on the kit line as a short.
  • Available to promise is never negative. Below zero means the reserved total has floated free of the physical count.

Available to promise is the number a planner should see. On hand should never be shown alone.

Two planners, one last part

Part SEAL‑40‑VT, one storeroom, on hand 3 units, on order 4 units due 18 June.

StepOn handReserved
Monday 8 June30
Job A reserves 333
Job B asks for 233
Pick for job A00

At step three the second planner asks: can I promise two units for 15 June?

Available to promise = 3 minus 3 = 0, so the answer is no, and the planner sees it seven days before the job.

Projected available on 18 June = 0 plus 4 = 4, so job B is schedulable from 18 June with two units to spare.

Now run the same week without a reserved field. Both planners see on hand 3, both promise, and total demand reaches 3 plus 2 = 5 units against 3 on the shelf.

The shortfall is 2 units, discovered by a technician standing at a machine that is already stopped.

That is not a stock level failure. The stock was correct and the plant sold it twice.

What a reservation holds

A reservation is a claim on a quantity of a part in one location, owned by one kit, with an expiry.

Reservations without an expires_at accumulate against cancelled and forgotten jobs until available to promise is permanently wrong and everybody ignores it.

The four records

Four tables carry the whole model: a kit header, a kit line, a reservation, and a return.

The kit header

One row per kit, one kit per planned work order.

FieldType, requiredWhy
kit_idtext, yesPrinted on the con­tainer label
wo_notext, yesThe one job this kit serves
asset_idtext, yesMachine the job is on
kit_statusenum, yesWhere it is in the life­cycle
store_idtext, yesWhich store­room reserves
requested_byuser, yesWho asked, for questions
requested_attime, yesStart of the readi­ness clock
required_attime, yesPlanned job start
container_reftext, noTrolley, bin or pallet code
staging_loca­tiontext, noWhere the picker left it
staged_attime, noWhen it became ready
closed_attime, noWhen recon­ciliation finished

requested_at and required_at are the pair that makes readiness measurable at two moments, which the worked example uses.

The kit line

One row per part number on the kit. This is where completeness lives.

FieldType, requiredWhy
kit_line_idtext, yesKey for returns to point at
kit_idtext, yesParent kit
part_notext, yesYour part number
qty_requirednumber, yesWhat the task calls for
qty_reservednumber, yesWhat stock agreed to hold
qty_pickednumber, noWhat left the bin
qty_issuednumber, noWhat the job consumed
qty_returnednumber, noWhat came back
line_blockingboolean, yesCan the job start without it
bin_loca­tiontext, noWhere the picker goes
line_statusenum, yesShort, reserved, picked, staged
plan_task_reftext, noWhich task step needs it

Required 4, reserved 4, picked 4, issued 3, returned 1 is an ordinary row, and collapsing it to a single "quantity" throws away every fact worth having.

The reservation

One row per claim on stock, kept separate from the kit line because a reservation has a life the line does not.

FieldType, requiredWhy
reser­vation_idtext, yesAudit key for the claim
part_notext, yesWhat is held
store_idtext, yesWhich location is held
kit_idtext, yesWho owns the claim
qty_reservednumber, yesUnits held
reserved_attime, yesWhen avail­able dropped
reserved_byuser, yesWho made the claim
expires_attime, yesWhen the hold releases itself
reser­vation_statusenum, yesOpen, con­sumed, released

Make expires_at mandatory and default it to required_at plus seven days, long enough for a job that slips a week.

Reserved per part is then a sum of open reservations, not a stored counter, and a sum cannot drift.

The return record

One row per quantity coming back, pointing at the kit line it left on.

FieldType, requiredWhy
return_idtext, yesKey for the movement
kit_line_idtext, yesWhat it is coming back from
qty_returnednumber, yesUnits handed back
dispo­sitionenum, yesDecides stock and cost
returned_attime, yesWhen the shelf got it back
returned_byuser, yesWho handed it over
con­dition_notetext, noWhy it is not restock­able
restock_bintext, noWhere it actually went back
cost_to_jobmoney, yesWhat the job still pays

cost_to_job stops a return from quietly refunding a job that genuinely destroyed a part.

The kit lifecycle

Eight statuses cover every kit anybody has ever staged.

Each one needs an actor, a record, and a defined effect on stock.

Who moves it and what gets recorded

StatusWho moves it inMust record
RequestedPlannerLines, qty, required_at
ReservedStore­keeperQty per line, expiry
PickedPickerQty picked, bin scanned
StagedPickerCon­tainer, staging place
IssuedTechni­cianCollection, time, job
Par­tially returnedTechni­cianQty back, dispo­sition
ClosedStore­keeperRecon­ciliation, vari­ances
Can­celledPlannerReason, what to do with stock

What each transition does to stock

StatusOn handReserved
RequestedNo changeNo change
ReservedNo changeUp by qty
PickedDown by qtyDown by qty
StagedNo changeNo change
IssuedNo changeNo change
Par­tially returnedUp by returnedNo change
ClosedNo changeNo change
Can­celledUp by pickedDown by open

On hand drops at picking, not at issuing, because picking is the moment the units physically leave the bin.

Issuing then carries the cost to the job without moving a unit, and that split is what an issue-only system cannot express.

The two transitions people get wrong

Cancelled rots a storeroom quietly.

It must put back whatever was picked and release whatever was reserved, or the parts stay in a trolley for a year.

Closed gets skipped under pressure.

A kit that reaches issued and never reaches closed leaves its returns unrecorded, the largest source of overstated consump‑tion in the whole model.

Require that required minus issued minus returned equals zero on every line, or the kit stays open with a named var‑iance.

What comes back

Most kits return something, because planners round up and a spare seal is carried for every job that might need one.

A model that cannot record a return cannot be trusted on consumption, which every stock policy is built from.

The four dispositions

Dispo­sitionStock effectCost effect
Unused, goodBack on handJob refunded
Wrong partBack on handJob refunded
Opened, unusableNoneJob pays
Damaged in the jobNoneJob pays

A wrong part return moves the same stock as an unused one, but it says the kit line was built from a bad bill of materials.

The part that cannot go back on the shelf

A seal kit opened to check a size, a length of hose cut to fit, a bearing dropped on a concrete floor: none of them can go back.

The honest record has three parts: the units are not added back to on hand, the cost stays on the job, and condition_note says why in one line.

Recording it as a good return is worse than recording nothing: it adds a phantom unit the next planner will confidently reserve.

One month of returns

Dispo­sitionUnits
Fitted on the job431
Unused, good41
Wrong part5
Opened or damaged9
Staged486

Check the column: 431 plus 41 plus 5 plus 9 = 486, which is what left the shelf.

Units that came back at all = 41 plus 5 plus 9 = 55, which is 55 ÷ 486 × 100 = 11.3% of everything staged.

True consumption is staged minus the units that went back on the shelf: 486 minus 41 minus 5 = 440 units.

A plant that stages 486 and never records a return books 486, overstating consumption by 486 minus 440 = 46 units.

As a share of the truth that is 46 ÷ 440 × 100 = 10.5%, enough to move a reorder point in the expensive direction on every part in the kit.

Those 46 units at an illustrative average standard cost of 24 EUR are 46 × 24 = 1,104 EUR of stock on a shelf the ledger says is empty.

Separately, the 9 opened or damaged units at an average standard cost of 27 EUR are 9 × 27 = 243 EUR that correctly stays on the jobs.

Use your own standard costs. Those two averages are the only judgement figures in the example.

Kit completeness and the go or no-go decision

Two rates and one rule come out of the same kit lines, and only the rule is a decision.

Two denominators, two questions

MetricDenom­inator
Kit fill rate, by lineKit lines
Kit fill rate, by kitKits
  • Kit fill rate by line = kit lines staged complete at job start ÷ total kit lines × 100.
  • Kit fill rate by kit = kits with every line staged at job start ÷ total kits × 100.

By line tells you how well the storeroom is performing. By kit tells you how many jobs could actually start.

Our study of spare parts availability and downtime argues the same about fill rate denominators for unplanned work, and its wait reason codes classify a kit line that could not be filled.

The short-line rule

A fill rate by line is an average, and averages are the wrong shape for a decision. The rule with the right shape is one test on the line_blocking flag.

A job starts only when every blocking line on its kit is staged.

Non-blocking lines can be short, and the job goes ahead without them.

BlockingNot blocking
The bearing being replacedSpare gasket carried just in case
The matched belt setCable ties and wipes
The gearbox oilA second filter for next time

Setting the flag is a maintenance judgement, made once per task in the plan library, not by a picker under time pressure.

It belongs beside the task in the preventive maintenance plan, copied onto the kit line when the kit is requested.

Why nine of ten lines is usually a no

A kit at 9 of 10 lines reports 90.0% on a line basis, which reads like a near miss. It is not, because the missing line is not a random tenth of the work.

  1. The machine is opened and cannot be closed. The window is spent, the asset is stripped, and the plant owns a stopped machine.
  2. Somebody improvises. A part comes off a standby unit, trading a planned delay for an unplanned failure later.
  3. The record lies afterwards. The job closes as complete, the substitution is in nobody's history, and the next failure is unexplainable.

The second is the expensive one, and the equipment failure record is where it belongs.

A job held two days costs two days. A job started short can cost a shutdown window and a second machine.

Worked example: one month of planned jobs on line 3

One filling line, 1 to 30 June 2026, planned maintenance only. No unplanned work is in these figures.

1. The month

InputValue
Planned jobs, each kitted20
Kit lines across them140
Units staged486
Short lines at plan date18
Short lines at job start9

Average lines per kit = 140 ÷ 20 = 7.0, a normal size for planned work on a filling line.

Plan date here means requested_at, seven days before the job. Job start means required_at.

2. Readiness by kit and by line

At job start, 9 of the 140 lines were short, and those 9 shorts fell across 6 kits.

So 140 minus 9 = 131 lines were staged, and 20 minus 6 = 14 kits were complete.

Kit fill rate by line = 131 ÷ 140 × 100 = 93.6%.

Kit fill rate by kit = 14 ÷ 20 × 100 = 70.0%.

The gap is 93.6 minus 70.0 = 23.6 percentage points from the same 140 rows, read two defensible ways.

In counts it is 9 short lines against 6 jobs that could not start, and the second is what a production manager cares about.

3. The same month at plan date

Measured seven days earlier, at requested_at, the same 140 lines looked worse.

At that moment 18 lines were short, across 9 kits.

MomentBy kitBy line
At plan date55.0%87.1%
At job start70.0%93.6%

At plan date, 140 minus 18 = 122 lines and 20 minus 9 = 11 kits were complete.

That is 122 ÷ 140 × 100 = 87.1% by line and 11 ÷ 20 × 100 = 55.0% by kit.

The shortfall shares are the complements: 18 ÷ 140 × 100 = 12.9% of lines short at plan date, and 9 ÷ 140 × 100 = 6.4% at job start.

Between the two moments the storeroom closed 18 minus 9 = 9 lines and rescued 9 minus 6 = 3 kits.

Four honest numbers from one month: 55.0, 87.1, 70.0 and 93.6.

The widest pair, 93.6 minus 55.0, is 38.6 percentage points apart, and both ends are correctly computed from the same rows.

So the reporting rule is a sentence, not a number: readiness is x percent, by kit or by line, measured at plan date or at job start.

4. The six short kits

KitLines shortOf those, blocking
KIT-2026-060411
KIT-2026-060910
KIT-2026-061211
KIT-2026-061721
KIT-2026-062110
KIT-2026-062833
Total96

Of the 9 short lines, 6 were blocking and 9 minus 6 = 3 were not.

Kits carrying at least one blocking short are 0604, 0612, 0617 and 0628, which is 4 kits.

5. Go or no-go under each rule

RuleJobs that start
Every line staged14 of 20
Every blocking line staged16 of 20

Under the complete-kit rule, 14 ÷ 20 × 100 = 70.0% of jobs start.

Under the short-line rule, 20 minus 4 = 16 jobs start, which is 16 ÷ 20 × 100 = 80.0%.

The two rules differ by 80.0 minus 70.0 = 10.0 percentage points, which is 2 jobs in this month.

The short-line rule releases 2 jobs a naive rule holds, and it holds 4 jobs on evidence a line average of 93.6% hides completely.

6. The job that started short

Three of the four blocked kits were rescheduled to a date when the part was in, costing only a calendar change.

The fourth, KIT‑2026‑0628 with three blocking lines short, went ahead because the shutdown window was already agreed with production.

The planned window was 180 minutes. The job took 420 minutes.

The overrun is 420 minus 180 = 240 minutes, which is 240 ÷ 60 = 4.0 hours taken out of production time.

At an illustrative 180 EUR per hour of lost contribution, that is 4.0 × 180 = 720 EUR from one go decision.

Get the rate from finance and publish it beside the figure. It is the one input here that is a judgement, not a record.

One of the three missing lines was solved by taking the part off a standby unit.

That is a second machine down and a stockout in no stockout report, a trap our study of parts and downtime found on unplanned work too.

7. What the month says to do

Rank by blocking shorts, not by short lines, and the list is four kits long instead of six.

Behind those four sat three distinct part numbers, because 0604 and 0612 were short the same item.

Five questions to ask a vendor about kitting data

  1. Is reserved a real stock state? Ask to see on hand, reserved and available to promise as three figures on one screen, and which one a planner sees by default.
  2. Can a kit exist without consuming stock? Stage one in front of them, then check that stock value has not moved and the parts are still countable.
  3. Does a reservation expire on its own? Ask what happens when the job is cancelled, and what happens when it simply never occurs.
  4. Can a return be recorded as unusable? Ask them to return one unit that does not go back on the shelf, then show the stock figure and the job cost.
  5. Can a line be marked blocking, and does a report use it? Ask for readiness by kit and by line, at plan date and at job start, from the same data.

Question two separates the tools, because few systems can hold parts in a state that is neither on the shelf nor consumed (equipment maintenance software).

How Fabrico helps

Fabrico is an OEE platform with a full CMMS built in, and its inventory module holds a catalogue, min and max levels, deliveries, stock-takes and a supplier listing.

The part that matters most here: Fabrico ties parts consumption to the work order that used them, which is exactly the record a kit reconciles against when the job is closed.

QR codes on parts and machines are what make a physical pick fast, because a picker with a phone confirms a bin and a part without typing a code.

Work orders with task detail, approvals, work shifts and notifications carry the planned job, and a work order in Fabrico is always created and confirmed by your team.

Analytics with Excel export, a REST API, webhooks and SAP or ERP connectors let you join Fabrico's consumption data to whatever holds your stock movements.

What Fabrico does not do: it has no kit record, no reservation, no reserved stock state, no picking or staging workflow and no available to promise figure.

Treat the model on this page as a specification to test a shortlist against, Fabrico included, and check the five questions above against what you are shown.

Want to see how your planned jobs and your parts consumption line up today? Book a 30 minute demo with a Fabrico consultant, no commitment, or contact us with your questions.

For the stock policy underneath all of this, start with spare parts management and the MRO purchasing data model.

Frequently asked questions

What is kitting in maintenance?

Kitting is staging every part a planned job needs into one container before it starts, tied to that work order. As a record it is a reservation, a pick and a container reference.

Is a kit the same as issuing parts to a job?

An issue consumes stock and lands the cost on the job. A kit holds parts the plant still owns, still counts and can still take back.

What is available to promise for spare parts?

Available to promise is on hand minus the units reserved for open kits. On hand alone lets two jobs promise the same last part.

How do you measure kit readiness?

Compute it two ways from the same rows: lines staged ÷ kit lines, and kits with every line staged ÷ kits. Always state which moment you measured at.

Should a job start with an incomplete kit?

Only if every line flagged as blocking is staged. That flag is set with the task when the plan is written, never by a picker on the day.

Lo último de nuestro blog

Defina su hoja de ruta de confiabilidad
Valida tu retorno de inversión potencial: Reserva una demostración en vivo.
Defina su hoja de ruta de confiabilidad
Al hacer clic en el botón Aceptar, usted da su consentimiento para el uso de cookies al acceder a este sitio web y utilizar nuestros servicios. Para obtener más información sobre cómo se utilizan y gestionan las cookies, consulte nuestra Política de privacidad y Declaración de cookies