Build the whole bill of materials. Then read its whole history.
Assemblies nest as deep as your product really goes. Every part — at any level — links to the non-conformances, audits, changes and risks that touched it, so a question about one seal resolves into the full record behind it.
PRD-118 · Hydraulic manifold assembly
Nest it as deep as the product actually goes.
An assembly holds components. Those components hold their own components. There is no depth limit and no single-parent constraint — the structure is a graph, not a two-level list, so it can describe the product you actually build rather than a simplified version of it.
Every line carries a quantity and its own position in the order, so the BOM reads the way your engineering drawing does. The register and a left-hand navigator render the whole thing as an expandable tree.
One component, every assembly that uses it.
Adding a component to an assembly is a membership, not a move. The same seal kit can sit in six assemblies at once; removing it from one cuts that single BOM line and leaves the part — and its other memberships — untouched.
Which means the reverse question is answerable. Open any part and the Used In tab lists every assembly that depends on it. When that seal kit turns up in a non-conformance, you know immediately what else is affected.
A link that would make an assembly contain itself — at any depth — is refused before it is written.
Approve more than one supplier — per BOM line.
Real parts are multi-sourced. A product can carry several approved suppliers, and so can an individual line of an assembly — the spring in this sub-assembly might come from two approved vendors while the billet comes from one.
So “who supplies this?” has a real answer at every level, and a supplier problem can be traced up through the assemblies that depend on them.
A new revision carries the BOM forward.
When a part changes enough to warrant a new revision, create one. QFormance copies the details and the entire bill of materials — memberships, quantities, and the approved suppliers on each line — into a fresh entry, then chains the two so the history reads in a straight line.
Superseding the old revision is optional. Units already in the field don’t stop existing because a drawing changed, so you can leave the previous revision active alongside the new one.
Every module links to the parts it concerns.
Nine modules carry product links. Tag the record once and the connection is available from both ends — from the record, and from the part.
Link changes are captured on the audit trail like any other regulated change — so “when was this part attached to that NCR, and by whom” is a question with an answer.
Type a part number. Get everything it ever touched.
The Trace Map walks the connected graph outward from a single part and returns it as an expandable, exportable tree — the records that reference it, and the records those records connect to in turn.
That includes the paperwork that governs the part. A controlled document — your own work instruction, or a customer specification you registered — links many-to-many with products, so one document can govern several parts and one part can cite several documents. Each shows up on the other’s page.
Alongside it, every part carries a History tab: a field-level record of what changed, when, and who changed it, captured automatically rather than written by hand. Ready to hand to an auditor without assembling anything first.
Tag the part, and the supplier list narrows itself.
Raising a non-conformance against a product? The supplier picker narrows to that product’s approved suppliers — and when there’s only one, it fills itself in. Pick the supplier first and the product list narrows the other way.
Crucially it reads the whole BOM subtree, not just the top-level part, so a supplier three levels down is still offered. A “show all” escape is always there when the obvious answer is the wrong one.
Products
Supplier
Narrowed from the assembly’s full component tree · Show all
Retire a part without losing its history.
Most parts that leave service shouldn’t be deleted — they should be retired. Marking a part inactive hides it from the day-to-day catalog while keeping it fully on the record, so anything that ever referenced it still resolves. Retiring and reactivating both capture a reason on the audit trail.
A deleted part keeps its BOM memberships too, so restoring it brings the structure back intact rather than an empty shell. Deletion is recoverable for 90 days before it is purged.
Mark PRD-074 inactive?
Hidden from default catalog lists. Historical record links keep resolving. Captured in the audit trail.
Reason
End-of-life — superseded by PRD-118 on the 2026 platform.
Each site sees the parts that apply to it.
A product belongs to one or more facilities, and the catalog defaults to the parts in scope for wherever you're working — switch to All facilities to widen the view. Legible URLs mean a link to a part reads as the part, not as an identifier nobody recognises.
Built to fit how your team already works.
Your vocabulary, your numbering, your roles — the catalog adapts to you, not the other way around.
Your label, org-wide
Call them Products, Parts, or Items — set the label once and it reads consistently across the sidebar, page titles, and every button. Categories and the numbering prefix are admin-configurable too.
A graph, not a tree
A component can belong to as many assemblies as it really does. The register still renders it as an expandable tree — a shared part simply appears under each parent that uses it.
Recoverable delete
A part deleted by mistake sits in Trash for 90 days with one-click restore, BOM memberships intact. A part that's genuinely end-of-life gets marked inactive instead — retired, but never lost.
The right people, the right actions
Creating, editing, retiring, and deleting parts are each their own permission. Decide once who maintains the catalog — the role system keeps the lines clean from there.
From the smallest component to the whole history.
Build the bill of materials to full depth, link it to the work that touches it, and read the entire record back in one place.