BOM and Routing

The BOM says what goes into a product. The routing says how it’s made. Together they define the product’s cost and its manufacturing lead time. Everything downstream — MRP, costing, scheduling, shop-floor execution — depends on their accuracy.

Bill of Materials

Chair (FG-1000)
├── 4 × Leg (CP-100)
├── 1 × Seat assembly (SA-200)
│   ├── 1 × Seat frame (CP-201)
│   ├── 1 × Foam pad (CP-202)   0.8 m²
│   └── 1 × Fabric (RM-300)     1.2 m   (5% scrap)
├── 1 × Backrest (CP-300)
├── 8 × Screw M6 (CP-400)
├── 1 × Assembly instructions (DOC-100)   [text item]
└── 1 × Carton (PK-100)

BOM item fields

bom_header(
  id, material_id, plant_id, bom_usage, alternative_bom,
  base_quantity,          -- BOM is "for 1 unit" or "for 100 units"
  base_uom,
  valid_from, valid_to,
  status, change_number
)
bom_item(
  bom_id, item_number, component_material_id,
  quantity, uom,
  item_category,          -- STOCK | NON_STOCK | VARIABLE_SIZE | TEXT | DOCUMENT | CLASS
  component_scrap_pct,
  fixed_quantity,         -- doesn't scale with order size (e.g. one label per batch)
  operation_number,       -- which routing step consumes it
  backflush_flag,
  phantom_flag,
  bulk_material_flag,
  alternative_group, usage_probability_pct,
  valid_from, valid_to, change_number
)

Concepts that matter

Base quantity. A BOM “for 100 units” avoids rounding disasters on tiny component quantities. 0.0034 m of wire per unit is better expressed as 0.34 m per 100.

Fixed vs variable quantity. Most components scale with order size. Some don’t — one setup sheet per batch, one machine cleaning kit per run. Fixed-quantity items break the “cost per unit is constant” assumption and are a common source of costing errors.

Component scrap %. Expected loss during production, built into the required quantity:

Required = order qty × BOM qty × (1 + component scrap %)

Assembly scrap % (on the header) inflates the whole order quantity because some finished units will fail.

Phantom assembly. A logical grouping that is never stocked or produced separately — MRP “explodes through” it straight to its components. Used to structure a BOM for engineering clarity without creating a real production step. If you see a sub-assembly with no lead time and no stock, it’s probably a phantom.

Bulk material. Glue, solvent, thread. Consumed but not tracked per order — issued to the cost centre and treated as overhead.

Alternative items. Two components that can substitute for each other, with a usage probability so planning can forecast both:

Alternative group A1:
  CP-500 (preferred)   70%
  CP-501 (substitute)  30%

Operation assignment. Which routing step consumes each component. Critical for staging materials at the right work centre and for WIP valuation — components consumed at operation 10 are in WIP even if operations 20–50 haven’t started.

BOM types by purpose

Type Owner Contents
eBOM (engineering) Engineering/PLM Design structure, functional grouping, no packaging
mBOM (manufacturing) Production/ERP Assembly sequence, includes consumables, packaging, phantom structure
sBOM (service) Aftermarket Spare parts, serviceable assemblies, kits
Sales BOM Sales What the customer sees on the order (a kit)
Costed BOM Finance The BOM with cost rolled up at every level

The eBOM → mBOM transformation is a real project. Engineering says “one wiring harness”; manufacturing needs “cut wire, crimp terminals, apply labels, insert into connector” plus the packaging that engineering never thinks about. PLM–ERP integration is largely about managing this gap.

BOM variants

  • Multiple alternatives — different BOMs for the same product, selected by lot size, production version, or plant
  • Multi-plant — the same product made differently in different factories
  • Variant/configurable BOM — a super-BOM with object dependencies that select components based on chosen characteristics:
    IF colour = 'RED'   THEN include paint RM-RED
    IF engine = '2.0L'  THEN include engine ENG-20 and gearbox GB-B
    
  • Order BOM — a copy of the BOM modified for one specific sales order (ETO)

Engineering Change Management (ECM/ECO)

A change to a BOM or routing is not a database update. It’s a controlled process:

Change request → impact analysis → approval (engineering, production, quality,
purchasing, costing) → change number issued → effective date set → release

The change number carries: effective date (or effective serial number, or effective order number), reason, approver, and affected objects. All BOM/routing records are validity-dated against it.

Effectivity types:

  • Date effectivity — applies from a date
  • Serial number effectivity — from unit #4501 onwards (aerospace, automotive)
  • Lot/order effectivity — from production order X

Where-used analysis answers “if I change this component, what’s affected?” — a recursive walk upward through BOMs. Build it early; you’ll be asked for it constantly.

Run-out strategies when a component is replaced: use up existing stock first, scrap and switch immediately, or use in specific plants only. This is a business decision with real inventory write-off consequences.

Routing

Routing for Chair (FG-1000), plant DHK1

Op  Work centre  Description        Setup  Machine  Labour  Base qty  Control key
010 CUT-01       Cut components      30m    0.5m/pc  0.5m/pc   1      PP01 (confirm, cost)
020 ASSY-01      Assemble frame      15m    —        4.0m/pc   1      PP01
030 UPHL-01      Upholster            5m    —        6.0m/pc   1      PP01
040 QC-01        Inspect              —     —        1.0m/pc   1      PP03 (confirm only)
050 PACK-01      Pack                 —     0.3m/pc  0.5m/pc   1      PP02 (auto backflush)

Routing fields

Field Meaning
Operation number Sequence, in tens for insertion
Work centre / resource Where it happens
Setup time Fixed per order, independent of quantity
Machine time Per unit (or per base quantity)
Labour time Per unit — may differ from machine time
Base quantity Times are “per N units”
Control key Whether this operation is scheduled, costed, confirmed, rate-relevant, or externally processed
Standard text key Reusable instruction text
Move/queue/wait time Non-value-added time between operations
Suitable work centres Alternatives for capacity balancing

Setup vs run time — the key distinction

Order 10 units:  30m setup + 10 × 5m = 80m  → 8.0 min/unit
Order 100 units: 30m setup + 100 × 5m = 530m → 5.3 min/unit
Order 1000 units: 30m + 5000m = 5030m → 5.03 min/unit

This is why lot size affects unit cost, why the costing lot size on the material master matters, and why “make it in smaller batches” always meets resistance from production.

Parallel and alternative sequences

  • Standard sequence — the main path
  • Parallel sequence — operations that can run simultaneously (paint the body while assembling the base)
  • Alternative sequence — a different route for a different lot size or when the primary machine is down

External processing

An operation done by a subcontractor. The routing operation carries a purchase info record; releasing the order generates a purchase requisition. See Procure to Pay → subcontracting.

Production version

The link between a specific BOM alternative and a specific routing, valid for a lot-size range and date range:

production_version(material_id, plant_id, version,
                   bom_alternative, routing_group, routing_counter,
                   lot_size_from, lot_size_to,
                   valid_from, valid_to, locked)

Example: below 500 units use the manual routing and BOM alt 1; above 500 use the automated line and BOM alt 2 (which has different packaging).

Costed BOM roll-up

Chair FG-1000
├── Leg CP-100          4 × 12.00 =  48.00   (purchased)
├── Seat assembly SA-200  1 × 46.30 = 46.30   (manufactured — rolled up)
│   ├── Frame CP-201     1 × 18.00 = 18.00
│   ├── Foam CP-202      0.8 × 9.00 = 7.20
│   ├── Fabric RM-300    1.2 × 1.05 × 8.50 = 10.71
│   └── Labour + overhead            = 10.39
├── Backrest CP-300     1 × 22.00 =  22.00
├── Screws CP-400       8 ×  0.15 =   1.20
├── Carton PK-100       1 ×  3.40 =   3.40
├── Labour (routing)     11.5 min × 8.00/min = 92.00
└── Overhead (150% of labour)      = 138.00
────────────────────────────────────────────
Total standard cost                = 350.90

The roll-up processes materials in low-level-code order (deepest first), exactly like MRP, so every sub-assembly’s cost is known before its parent is calculated. See Product Costing and Variance.

Data quality — the thing that actually matters

MRP, costing, and scheduling are all only as good as the BOM and routing. Checks worth automating:

  • BOM component with quantity zero or null
  • Component not extended to the producing plant
  • Component marked for deletion but still in an active BOM
  • Recursive BOM (A contains B contains A) — this hangs MRP
  • Routing operation with zero times but a costing-relevant control key
  • Work centre with no activity rate → zero labour cost in the standard
  • BOM with no valid production version
  • Validity gaps — no valid BOM on some future date
  • Component scrap % above a sanity threshold (someone typed 50 meaning 5.0)
  • Routing lead time wildly different from actual measured throughput

Recursion detection is not optional. A cyclic BOM will make an MRP run loop forever or blow the stack, usually at 2am on a Sunday.

Next