A BOM that looks like a car

Sample data is part of the product. Six data sets, each answering one question, and a realistic SUV whose depth comes from subassemblies carrying their own parts, the way a real BOM's does.

Project
STP: Vehicle Cost Platform, part 3 of 10
Published
October 5, 2026
Reading time
2 min read

Sample data is part of the product. A generated tree of "Part 0042" proves speed but convinces nobody, and a four-node fixture proves correctness but can't show anything else. So STP's seed ships one data set per question someone evaluating it will ask.

Data sets with a purpose

Six vehicle models, from 4 nodes to 20,000. The small ones are for checking by hand, the middle ones for showing the product on something that looks real, and the big ones for speed and limits.

Check by handreference fixture162 EUR, 30.6 kg, 13.18 kgCO₂e4electric karta BOM you can verify on paper39Tell the story, look realhybrid SUVthe margin scenario386large plug-in hybrid SUV1,139 leaves, 11 levels deep1,920Speed and limitslarge BOMover 500 leaves1,201stress testgenerated, for the limits20,0001101001k10k100knodes
The demo's vehicle models, by the question each one answers. Sizes in nodes, on a log scale.

The range is modeled on a premium hybrid carmaker:

  • a hybrid SUV, with a 1.5-litre engine, a 50 kW motor and a 1.4 kWh battery;
  • a V6 plug-in hybrid saloon;
  • an electric saloon;
  • an electric kart, small enough to check on paper.

Every part lives in one shared catalog library, used by both the backend's seed and the ERP simulator, so the two can never disagree about a part.

Where depth comes from

Generated trees get depth by nesting arbitrarily. Real BOMs get it from subassemblies that carry their own parts, and from branching at every level. In the large SUV, a seat carries its adjustment actuators, an actuator carries its geared motor, the geared motor carries its DC motor, and the motor carries its rotor, ten levels below the vehicle.

Each row is every child of the highlighted node above it. The depth comes from subassemblies that carry their own parts: the seat its actuators, an actuator its geared motor, the motor its rotor.

Electronic control units go just as deep (board, assembled board, power stage, converter, component). Built that way, 55% of all nodes and 70% of leaves sit eight levels or more below the root.

Two more traits make it a graph rather than a tree, as in a real BOM:

  • Mirrored parts get their own references. The same subassembly at several positions (left and right, front and rear) is a separate part each time.
  • Fasteners are shared. Screws and connectors stay one part across hundreds of parents.

Both exercise the partial recomputation, which has to follow every parent of a shared part.

Plausible, then calibrated

Raw, the numbers were absurd, so each model was calibrated in steps:

RawStepResultlarge generated BOM35,000,000 EUR, 1,400 tassemblies at quantity 1, one scale factor≈ 37,500 EUR, ≈ 1.4 trealistic SUV43,800 EURpremium parts priced ×1.6≈ 69,000 EUR, ≈ 2.3 tevery modelcost, no market pricemarket price set for an 8 to 15% marginhybrid SUV: 42,550 EUR
From raw generated numbers to a believable range, one step per model.
  • The generated large BOM first cost 35 million euros and weighed 1,400 tonnes, because quantities multiply across six levels. The seed sets assemblies to quantity 1, then scales every price and weight by a single factor to land on a believable compact car.
  • The realistic SUV came out at 43,800 EUR, cheap for a premium vehicle, so its parts carry a premium factor of 1.6.
  • Market prices were then set so that every vehicle shows a margin between 8% and 15%, and tests check it.

The hybrid SUV's market price is the most constrained number in the project. At 42,550 EUR it's profitable at 10,000 vehicles a year, fragile when the dollar gains 10%, and profitable again at 15,000, which makes it the model that shows what scenarios are for. Recalibrating that after any change to the range is now a step of its own.

The catalog grew from 467 to 2,389 parts along the way, and the ERP simulator serves all of them. The stress test makes the full seed about twenty seconds longer, so most seed tests skip the generated BOMs and a single test covers them.