The part isn't consumed. It's in a van.
Almost every maintenance system can take stock off a shelf and has no way at all to put it back. What follows is a chain nobody watches: parts drawn and not used are recorded as used, consumption overstates, reorder points are set from the overstatement, and the room fills with something nobody is using at the rate the system believes. Zenith closes that loop — and every balance along the way is folded from one ledger, never stored beside it.
Bilingual EN / FR · Multi-site · WCAG 2.2 AATwo registers, on purpose
The item master answers what a part is. The storerooms answer where it is and how many there are. Merging them is how an item master turns into a stock ledger with a name field — and how every picker, model page and purchase order ends up answering a question it never asked.
What a part is
Identity, type, the manufacturer's own number — which is what appears on the box and in a quote — hazard class, and whether the organization stocks it at all. It carries nothing about quantity on hand.
Two units and a number
Gaskets are bought by the box of fifty and issued one at a time. A single “unit” field forces somebody to pick which of those the number means, and whichever they pick, half the system is then wrong by a factor of fifty.
What fits what
Fitment lives on the part, once, with how many a model takes — and a separate flag for whether it is worth stocking. A bolt fits, and nobody holds one against this machine; those are different claims.
Where it is held
Main stores, a satellite room, an unstaffed crib, a truck, quarantine, consignment. A vehicle is a room — stock on a truck is real stock, and it is the stock most routinely forgotten.
Bins that read like a shelf
Unique within their room rather than globally, because every room has an A-01 and forcing global uniqueness invents prefixes nobody says out loud.
Scope where it bites
A storeroom is a room and a room is at a site, so somebody scoped to Victoria is never offered stock in Calgary — they cannot walk to it. The item master is deliberately not scoped: it belongs to the organization, not to a campus.
There is one number, and it is folded from the rows
Storing a balance beside a movement log is the classic inventory bug: two records of the same fact, updated by different code paths, drifting apart until somebody does a count and finds the system claims eleven of something there are four of. Zenith stores no balance at all. On hand is a fold over the ledger, computed every time it is asked for.
- Nothing is ever edited or deleted — a correction is another row, because a stock history somebody can quietly rewrite is not a history.
- A transfer is two rows that sum to zero — conservation is structural: there is no separate total for the two halves to disagree with, so a transfer cannot lose or invent quantity.
- An adjustment requires a reason — an unexplained correction is the single most useful thing to find when stock goes missing, and making it optional guarantees it is blank on exactly the rows somebody later needs to read.
- The history reads backwards — because that is how anybody reads one: from “what just happened”, not from the day the room opened.
Fourteen on the shelf, twelve promised, two available
A system that answers “fourteen” will cheerfully let somebody walk off with them. Reservations are a separate claim rather than a movement, because nothing has moved — that is the whole point of a reservation, and modelling it as a movement would make the ledger lie about what is physically in the room.
- Every question that matters is asked of available — the reorder check, the issue gate, the replenishment suggestion, and the number on a machine's own parts tab.
- The same stock can't be promised twice — a reservation beyond what is available is refused at the moment it is made, not discovered later.
- The counter gives you both numbers — “4 asked for, 2 available of 14 on hand” is a sentence somebody can act on. “Insufficient stock” is not.
- What needs ordering needs both registers — the reorder point is a property of the item and the quantity is a property of the room, and neither can answer alone.
The item master refuses it, however much is on the shelf
Stock and permission are different questions, and the counter has to ask both. A solvent with no safety data sheet on file is refused at every counter in the organization — and duplicating that rule inside the storeroom would simply be a second place for it to be wrong.
- A superseded part sends you somewhere — the refusal names the replacement and follows the chain to whatever is current, so a code printed in a five-year-old manual still leads to a shelf.
- Obsolete and superseded are different statements — retiring a part with nothing to replace it must not send a storekeeper to a successor that does not exist.
- The hazard is recorded even while the paperwork is missing — refusing to record it would mean the safest information could not be entered until the file caught up.
- “Never stocked here” is not “run out” — one is a transfer and the other a purchase order. They lead different people to do different things, so they are different sentences.
Two ledgers, held next to each other
A work order records what it used. A storeroom records what left the shelf. They are the same event seen from two sides, written by two people at two times, and in most systems nothing anywhere holds them together — so they drift, and nobody finds out.
What left, less what came back, less what was used
That is what somebody still has. Issued against a job, not given back, and not recorded as used: open work is somebody about to fit it, and finished work is a part in a toolbox — the older it is, the less likely anybody remembers.
- Returns go back to the room they came from — the only answer that does not quietly move stock between sites while nobody is looking.
- A return cannot exceed what went out — returning more than was drawn is not generosity, it is a receipt wearing a return's clothes, and it is how a storeroom silently gains stock nobody bought.
- Issuing is against a job, never into the air — a movement with no reference is a number the storeroom can balance and nobody can explain.
- What did this job take? — asked often enough to deserve its own door, rather than a filter somebody rewrites at every call site.
Told there should be twelve, people find twelve
A count sheet that shows the counter what the system expects is a count that confirms the system. So the expected quantity is not revealed until the line has been recorded — the counter writes down what is on the shelf, and only then sees whether the ledger agrees.
- Variance is measured at posting, against the live ledger — freezing it when the sheet was raised would charge every mid-count issue to the variance, and the sheet would “find” losses that are sitting, correctly recorded, on this morning's work orders.
- Posting writes adjustments, not edits — one row per disagreement, carrying the sheet's own number as the reason the ledger keeps for ever. A count that silently rewrote balances would be the one place stock changes with nothing to explain it.
- One open count per room — two sheets counting the same shelf would each post the full variance, and the second would correct the correction. The refusal is structural, not procedural.
- Zero balances are counted on purpose — “the system says none and the shelf has four” is the variance most worth finding.
The cheapest purchase order is the one never raised
A line appears when a room's available stock is at or below the item's reorder point. The suggested buy fills back up to the maximum, less what is already on an issued order heading for that room — a shortage already ordered must not be ordered twice — and it rounds up to whole purchase packs, because a vendor sells cases and “order 11.7 cases” is a number nobody can act on.
- It looks across sites before it buys — if another room holds available stock, the honest suggestion is a transfer, and it is shown beside the buy rather than discovered afterwards.
- Promised stock is never offered as surplus — another room's reservations are honoured before its shelves are offered to you.
- Quarantine and closed rooms produce nothing — you cannot replenish a room whose stock could not satisfy a job in the first place.
- A part whose policy nobody has written stays silent — no maximum and no reorder point means no line at all, rather than a number invented to fill the column.
A requisition and an order are two records
They answer to different people. A requisition is a maintenance question — “we need filters” — raised by whoever saw the shelf and approved by whoever owns the budget. An order is a commercial commitment to a named vendor with prices on it. Collapse them and either every storekeeper can commit the organization's money, or every purchase needs a buyer to notice a shelf — and every real plant has learned to want neither.
You buy what the vendor sells
A case of six is ordered as one case, not as six units somebody hopes divide evenly. The item master owns the factor, and everything that projects an order into stock units converts through it — the same conversion, in the same place, as the receiving desk uses.
- A decline needs a reason — “no” with no reason teaches people to stop asking, and the next shortage is discovered by the machine that needed the part.
- “Partially received” is derived, not stored — a stored flag and a receipts log are two records of the same fact, and they would drift.
- Over-receipt is refused at the door — the difference between a generous delivery and a wrong one is somebody checking, and stock the order cannot explain must arrive as its own receipt with its own paper.
- Closing short is allowed, never silently — the outstanding quantity was a promise to a shelf, and whoever breaks it writes down why, where replenishment will see the gap again.
- A delivery arrives by the same door as everything else — receiving writes the storeroom's own receipt, referenced to the order, so the balance, the movement history and the order agree because they are reading the same rows.
Everything a shelf touches
Can we hand one over today?
A machine's own Parts tab: what fits, by way of its model, and the bold number is available at this site. A filter in another city is real stock and no help to somebody standing at the machine — so it is shown, as the second number.
Quarantine that can't be laundered
Received and not yet accepted. The stock is really there and really cannot satisfy a job — which is the only reason the room exists — and a transfer into main stores is refused rather than quietly allowed.
Truck stock is stock
A vehicle is a room. Stock on a truck is real and routinely forgotten, so it is counted, issued from, transferred and replenished like any other shelf.
A code from an old manual still works
Supersession chains are followed to whatever is current, and a loop is refused rather than walked — because two parts that replace each other is not a thing anybody means.
The storekeeper's morning page
One row per room: lines held, how many are below their line, and whether a count is in progress. It does not make the buying decision — it refuses to let a shortage hide.
Every room holding a part
One list, so “where else is there one?” has an answer instead of a phone call — with rooms you cannot issue from left out of the total rather than padding it.
Hazard classes you can query
A closed, short list rather than free text — because a free-text hazard field is one nobody can query, and “which of our stocked items are flammable?” stops being answerable on the day it matters.
Your words, everywhere
Rename Part, Storeroom or Bin and it changes what people read — never what a filter matches on.
Scoped where it counts
Storerooms are site-scoped because you cannot walk to Calgary. The item master is not, because scoping it would empty the picker for every site-scoped user — and an item is an item everywhere.
A history nobody can quietly rewrite
Inventory is the module where small dishonesties compound fastest: one edited balance, one unexplained adjustment, one return that had nowhere to go, and a year later the numbers are decoration. Everything here is built so that cannot happen by accident.
Append-only by construction
Every movement is signed, dated, referenced and permanent. A correction is a new row with a reason on it, not an edit to an old one.
Derived, never stored twice
On hand, available, below-reorder and “partially received” are all computed from the rows underneath them, so no two screens can tell different stories.
Bilingual by birth
Full en-CA / fr-CA parity on every screen, hint, empty state and refusal — plurals handled properly, not by concatenation.
Accessible to everyone
WCAG 2.2 AA as a build rule: real tab semantics, states announced in words, and focus that moves to the field an error refers to.
Before you book the demo
Does it value inventory?
Do you track serial numbers, lots and expiry dates?
Is there barcode scanning?
Why is “available” different from “on hand”?
Can we just correct a balance when it's wrong?
Is the count really blind?
Can we count a room while it's still being used?
What happens to stock of a part we've superseded?
Do you approve purchase orders?
Do you do three-way matching?
How does replenishment decide what to order?
What happens to parts a technician takes and doesn't use?
Bring the part you keep running out of.
Every storeroom has one — the filter that is always short in September, or the bearing the system swears there are eleven of. Give us its history and we'll show you what the ledger says, what the shelf says, and exactly where the gap between them was written.
Elsewhere in Zenith
Canadian industry guides
Standards and regulators
Standards are named by number, title and scope only. CSA and ULC publications are paywalled — read the standard itself before building a compliance programme on any summary.