Polymr
EngineeringMay 18, 202617 min readPolymr engineering

BOM genealogy under revision (and why the chain snaps at the ERP boundary)

A bill of materials is not a list. It is a versioned tree where every node carries a history of substitutions, revisions, and rolled-up decisions. The chain reads fine on one side of the ERP boundary and reads as a flat list on the other.

A bill of materials is not a list

The first time you read an ERP bill of materials report, it looks like a list. Parent item on top, child items beneath it, quantities in the right column. The screen does not lie. It shows you exactly what the database has. The problem is that the database is showing you a snapshot, and a bill of materials is not a snapshot. It is a versioned tree with a history of substitutions, revisions, and rolled-up decisions, every one of which can be the answer to a question that arrives months later from the shop floor or a customer.

The standard ERP item master stores the current BOM. The PLM system upstream stores the full genealogy. The handoff between them is where the chain breaks. PLM pushes the latest effectivity. The ERP receives it as a flat list of children under a parent. The fact that rev 12 existed last quarter, was consumed on three production runs, and matters for the field rework query that arrives in October is a fact that lives nowhere in the ERP record.

This piece is about why that boundary is structural, what it costs in the real plant, and the four specific moves we have watched fix it without ripping out either system.

CAD
rev source
PLM
tree of record
Engineering
rev approver
ERP
item master
Shop floor
WO consumer
  1. rev 12 → rev 13
    day 0
    chamfer geometry update
  2. rev 13 review
    day 1
    parent assembly affected
  3. approved + effectivity
    day 2
    effective 2026-06-01 forward
  4. BOM push
    day 2
    flat list, parent reset to current
  5. WO release
    day 3
    BOM v-current, no genealogy
  6. field rework query
    day 90
    which units built on rev 12?

Figures illustrative · drawn from observed pattern, not a named deployment

The genealogy walk from CAD revision to a field rework query 90 days later. The chain is intact through the PLM-to-ERP push and then collapses. The shop floor builds against a flat list. The engineer trying to answer which units used rev 12 has no record of which WOs consumed it.

What the boundary costs
Engineering hours
6 hrs
median time to answer which units shipped on which revision
target ≤ 15 min
Rework misses
28%
rework campaigns that missed at least one in-field unit
rev-set incomplete
Audit trail gaps
41%
WO records that cannot prove which parent rev they built against
effectivity unstated

A representative mid-market discrete manufacturer with PLM upstream and a tier-one ERP downstream. Numbers sampled across three quarters of rework and engineering change queries. Pattern repeats across roughly every plant we have walked through this loop with.

Figures illustrative · drawn from observed pattern, not a named deployment

The two structural reasons the boundary is hard

People assume the BOM genealogy boundary is a tooling problem. Buy the right PLM connector, route the right fields, the chain stays intact. We have seen four tooling generations cross this boundary in production environments. The chain breaks every time. Not because the connector is buggy. Because the two systems were designed to answer different questions.

Reason 1 · scope of identity

PLM identifies an item by part-revision. ERP identifies an item by part-number.

In the PLM, the identity of a part is the tuple (part_number, revision). Rev 12 and rev 13 of the same part number are different items. They have different drawings, different effectivity windows, different downstream children. A query against PLM that asks for the BOM walk of PMR-2810 requires an effectivity date to return a unique answer.

In the ERP, the identity of a part is the part number alone. The revision is a field on the item master record. When the revision changes, the field is overwritten. The history of revisions is recoverable only if the ERP was configured to keep a revision history table, and even then the table records what the current revision was on a given date, not which consuming work orders built against which past revision.

The mismatch is not at the wire. The mismatch is at the conceptual level. PLM thinks of an item as a sequence of revisions over time. ERP thinks of an item as a single identity whose attributes change over time. You can map them across a connector but the mapping is lossy in one direction.

Reason 2 · scope of consumption

PLM tracks which parts exist. ERP tracks which parts were built. Neither tracks the join.

The PLM knows that PMR-2810 rev 12 was the released revision from 2026-02-15 to 2026-05-31. It does not know which work orders consumed rev 12 during that window. That is not its job.

The ERP knows that WO-44291 consumed eight units of PMR-2810 on 2026-04-12. It does not know, three months later, what revision of PMR-2810 was released on that date. The field-on-the-item-master got overwritten when rev 13 went live.

The fact that you need to recover (which WOs built against which revisions) is the join of two facts neither system stores. Producing it requires reconstructing the released revision as a function of the WO release date, then joining to the WO consumption ledger. Most plants do this by hand, one engineering change at a time, when a field defect lands.

We can tell you what was in the warehouse last March. We cannot tell you what we shipped to a customer in March, which revision of the housing, against which engineering note.
Field observation, discrete electromechanical manufacturer

Five places we see the chain snap in practice

When we audit the BOM genealogy of a plant that is two to four years into a stable ERP deployment, the chain breaks in five recognisable places. They are not bugs. They are the consequence of the two structural mismatches above showing up at specific transition points.

Snap 1 · the effectivity push

The PLM ships effectivity. The ERP overwrites the field.

PLM pushes the BOM for PMR-2810 rev 13 with an effectivity of 2026-06-01. The ERP connector reads the effectivity, applies the BOM change with an effective date, and overwrites the parent revision field. If the connector is configured to maintain a revision history table, the prior revision is captured. If it is configured for current state only (which is the default in three of the four tier-one ERPs we have wired), the prior revision is lost as a queryable record. The PDF release record exists in PLM. The link from a WO record to that PDF does not exist anywhere.

Snap 2 · the silent substitution

A buyer substitutes a child. The substitution lives in the PO history, not the BOM.

Mid-quarter, the buyer substitutes child component PMR-3104-CL-A with vendor V-218's equivalent PMR-3104-CL-B because the original part is on a four-week back-order. The substitution is approved. The PO is issued against the substitute. The WO consumes the substitute. The BOM in the ERP still lists the original. The genealogy record for that WO requires you to join the BOM (which lists A) to the actual PO consumption (which lists B) to know what actually went on the floor that day.[1]

Snap 3 · the engineering note that lives outside the BOM

A field tweak gets recorded as an inspection note, not a revision bump.

Engineering decides that on rev 13, the chamfer tolerance should be enforced at incoming inspection at +/- 0.02mm instead of the drawing-stated +/- 0.05mm. The decision is recorded as an inspection plan note in the quality module. The BOM is unchanged. Two quarters later, a field failure analysis goes looking for units built against the tighter tolerance and cannot tell from the BOM walk which units were inspected under the note and which were inspected under the drawing.

Snap 4 · the phantom assembly

A WO uses a phantom intermediate that has no item master record.

Discrete manufacturers commonly use phantom assemblies: an intermediate that exists on paper for BOM-walking purposes but never carries inventory. The ERP knows the phantom. The PLM thinks the phantom is a real assembly. The drawings for the phantom carry revisions. The ERP record of the phantom has no revision field because the phantom does not stock. When the WO releases against the phantom, the engineering revision of the phantom at WO release time is recorded nowhere.

Snap 5 · the consolidated parent

Two SKUs consolidate to one parent. The pre-consolidation history fragments.

Engineering decides that PMR-2810-A and PMR-2810-B can be consolidated into a single parent PMR-2810 because the only difference was a marketing label that no longer applies. The PLM rolls the two into one going forward. The ERP item master gets a new parent and the old SKUs are flagged inactive. WO history referring to the old SKUs still resolves correctly in isolation. The query "all units shipped of the consolidated family in the trailing 12 months" now requires the analyst to know about the consolidation and union three tables. Most analysts do not know.

PatternEvery one of these snaps is the same shape at a different point in the workflow. The PLM is recording revisions and intent. The ERP is recording state and consumption. The join that produces the answer to a real-world question lives in neither system and is reconstructed by humans on demand.

Why the standard fixes do not fix it

When a plant hits this boundary the first time, the recommendations are predictable. Buy a more expensive PLM connector. Configure the ERP to keep a revision history. Train engineering to bump revisions for every change. Standardise the substitution approval flow so the BOM gets updated when a buyer substitutes. Each of these mitigations is correct and each of them is insufficient.

The PLM connector fix addresses the effectivity push but not the silent substitution. The ERP history-table fix addresses the revision overwrite but not the phantom assembly. The training fix addresses the engineering note but assumes engineering will reliably remember to bump a revision for changes they currently do not consider revision-worthy. The substitution fix addresses the buyer substitution but requires the buyer to interrupt the PO flow to update the BOM, which they will skip when they are under pressure.

The structural reason these mitigations are insufficient is that they each address one snap point with a workflow change. The boundary itself is unchanged. A new snap point will appear the next time engineering invents a new change shape that does not fit the existing process.

ERP BOM record

What the item master knows

  • Parent PMR-2810
    rev current · v13
  • Child PMR-3104-CL-A
    qty 2
  • Child PMR-7720
    qty 1
  • Effective date
    2026-06-01
  • Last update
    user 4031, 2026-06-01
Genealogy record

What an ops layer reconstructs

Parent
PMR-2810 · rev 13
Effective from
2026-06-01
Prior rev
v12 · 2026-02-15 to 2026-05-31
WO consumption
14 WOs on rev 12, 6 on rev 13
Child substitution
PMR-3104-CL-B on WO-44291
Inspection note
+/- 0.02 chamfer from 2026-05-22
PLM drawing link
rev13.pdf · CAD-linked
Audit trail
full provenance

The BOM line is the same parent and child. The genealogy record carries what was actually built, what was substituted, and what tolerance was applied at production time.

Figures illustrative · drawn from observed pattern, not a named deployment

What an ERP BOM record contains vs. what a complete genealogy record contains. The ERP record is correct for current-state planning. The genealogy record answers questions about what was built, what was substituted, what tolerance was applied, and which revisions were effective at production time.

Where this hurts most · discrete electromechanical
Operations director, contract manufacturer of mechanical sub-assemblies
Situation
Drawings landed from three customer engineering teams across the week. Each revision triggered a full BOM re-type into the ERP, an RFQ packet build, and a sweep of open POs for downstream impact.
What was breaking
Of every ten revisions, two missed an affected open PO. Those misses surfaced 3–5 weeks later as the wrong rev shipped to a customer, a scrap event on the floor, or a vendor invoice that no longer matched the PO.
  • BOM extraction + RFQ
  • Engineering revisions
  • Quote-to-procure
Outcome · 6 weeks
100%
Revision-to-PO coverage
was 78%+22 pts
Illustrative, reflects this specific deployment. Outcomes vary by plant, stack, and scope.

What an operations layer changes at this boundary

The operations layer approach is to stop forcing one of the two systems to also be the other. Leave the PLM as the source of revisions and intent. Leave the ERP as the source of state and consumption. Add a thin layer between them that records the join continuously, against the same events the two systems are already emitting.

The mechanics are not complicated. The layer subscribes to three event streams. PLM publishes revision releases and effectivity. ERP publishes WO releases and consumption. The PO flow publishes substitutions when a buyer accepts an equivalent. The layer writes one row per join: which WO consumed which parent revision, which children were substituted, what inspection notes were active at the time. The row is keyed by the WO and the released parent revision. The row never gets overwritten when the parent revision rolls forward.

When the rework query arrives ninety days later, the answer is a single SQL query against the join table, not an engineering reconstruction. The engineer pulling rework targets gets a clean unit-by-unit list with the revision, the substitution flag, and the inspection note state, all recorded at WO release time, not reconstructed after the fact.

The four specific changes Polymr makes

When a plant's BOM genealogy moves to an operations layer, four concrete things change. None of them require ripping out the PLM, the ERP, or the connector between them.

  1. 1
    Every WO release is recorded with the released parent revision and a snapshot of the resolved child list
    At WO release time, the layer resolves the BOM walk for the parent revision that is currently released, joins to the buyer's active substitutions, and records the snapshot as a single immutable row keyed by the WO. Future revision bumps on the parent do not affect this row.
  2. 2
    Buyer substitutions update the WO snapshot at PO acknowledgement time, not at BOM-update time
    When the buyer accepts an equivalent child, the acceptance is recorded on the open WOs that have not yet consumed the original. The ERP BOM is left alone. The genealogy row is updated. The substitution is queryable from a single column the next time someone asks "was the original or the equivalent built on this WO?".
  3. 3
    Inspection notes and tolerance overrides are recorded against the released revision they apply to, not against the inspection plan
    When engineering tightens an inspection tolerance, the tightening is recorded against the released revision range it applies to. Units inspected during that window are queryable as a subset. The inspection plan note is still maintained for the quality module's own purposes. The genealogy layer reads it and pins it to the revision.
  4. 4
    Phantom assemblies get a synthetic revision identity that the layer keeps in sync with the drawing source
    Phantom assemblies are given a synthetic genealogy identity even though they do not stock. The layer watches the drawing source for the phantom and publishes a revision event whenever the phantom drawing changes. WO snapshots include the phantom revision at release time. The phantom is no longer a hole in the genealogy.
released revWO triggersubstitution
  • PLM stream
    rev release events
  • ERP stream
    WO release events
  • PO stream
    substitution events
  • BOM walk
    resolve at release
  • Snapshot writer
    one row per WO
  • Genealogy join
    immutable table
  • Rework query
    single SELECT
  • Audit query
    pinned to WO

Figures illustrative · drawn from observed pattern, not a named deployment

The PLM stream, ERP stream, and PO stream fan into a single immutable join writer. WO releases produce one row per release with the resolved BOM walk pinned at that moment. Future revision bumps do not overwrite the row. Field rework queries are a single SELECT against the join.

What this looks like in week one

The shape of the first deployment is narrow. Pick one product family that has had a rework campaign in the last year. Wire the PLM revision events read-only into the layer. Wire the ERP WO release events read-only. Wire the PO substitution events read-only. Run the snapshot writer for two weeks against live WOs. Compare the snapshot rows against the genealogy the engineers reconstructed by hand during the recent rework campaign. The first comparison will surface roughly three substitutions per hundred WOs that the engineers missed and that the snapshot captured. That is the calibration moment.

By the end of the second week, the layer is running on the full plant. Engineers stop reconstructing genealogy by hand for new queries. The reconstructions for historical WOs (pre-snapshot) are still manual, and you walk those one quarter at a time.

The shape of the bet

The boundary between PLM and ERP is a structural mismatch, not a tooling gap. The right move is not to make either system carry the other's questions. The right move is to record the join, continuously, where the events fan in, and let both systems keep doing what they are designed for.

The objections we hear most often

Three objections come up when we walk a plant through this boundary for the first time. None of them are wrong. All of them have specific answers.

The first objection is duplication of data. "You are writing the BOM into a third place. Now there are three sources of truth." The genealogy join is not a third source of truth for the current state of the BOM. The PLM remains the source of truth for revisions. The ERP remains the source of truth for consumption. The join records what was true at WO release time and is immutable thereafter. The question "what is the current BOM?" still has one answer (the PLM). The question "what BOM did this WO build against?" now has one answer (the join). Each question goes to the system designed for it.

The second objection is the cost of write-time computation. "Walking the BOM at every WO release is expensive." The walk is the same walk the ERP performs at WO release for its own MRP purposes. The layer subscribes to the same event and records the result, instead of recomputing it. There is no additional walk.

The third objection is the operational cost of yet another system. "We already have to maintain PLM and ERP." The layer is read-only against both. It does not change the item master, the BOM, or the WO. It records a join table that the existing systems do not record. The maintenance burden is the layer's own snapshot writer, which is a single service watching three event streams. The systems it reads from are unaware of its existence.

Footnotes

  1. [1]
    The buyer substitution case is the one that surprises engineering teams most often. The BOM looks correct on the screen, the PO history shows the equivalent was ordered, the WO consumption ledger shows the equivalent was consumed, and yet there is no single record that joins the WO to the substitution decision. Reconstruction requires walking the open POs at the time of WO release. Most plants give up and assume the BOM is what was built.