Skip to content

Map Bill of Materials

Map raw rows into the scenario's bill of materials table: the recipe for each finished product, which components it consumes, and how many of each per unit of output.

A bill of materials is the structural backbone of production. Pair it with Map Production Policy, which says where a recipe can run and at what cost, and Map Production State, which records what was produced.

When to use this

  • Your network makes products rather than only moving them. Components are assembled into finished goods
  • You want Network Optimization and Cost to Serve to account for component consumption and the cost of finished goods

What you need

  • An upstream Import Data node with one row per (recipe, component) pair
  • The finished product, its components, and how many of each component go into one unit of output

Each recipe produces exactly one output product. The output columns repeat on every component row of the same recipe. Rows are grouped by recipe name.

Field mapping

Auto-detection is all or nothing. With no explicit mapping on the node, every field is matched against the headers listed below, case-insensitively, and a space in your header reads as an underscore, so Site Name matches site_name. Set even one field explicitly and detection switches off for the whole node: only the fields named in the mapping are filled, and the rest arrive empty.

Set mappings in the node's panel. Connect an upstream table and select the mapping node to see automatic matches. Choosing a column saves all displayed matches as an explicit mapping. Use Use automatic detection to return to header detection. Required fields without a match are marked in the panel.

Field Type Required Example What it is Auto-detected headers
Bom Name text Yes City Bike BoM Recipe name. All rows sharing this name form one Bill of Materials. bom_name
Output Product text Yes City Bike The finished product this recipe produces. Must be the same on every row of the recipe. output_product
Component Product text Yes Wheel A component consumed by this recipe. Must match a product used elsewhere in the scenario. component_product
Quantity per Output number Yes 2.0 How many units of the component go into one unit of the output product. quantity_per_output
Output Unit text No bike Unit the output product is counted in. Repeated on every row of the recipe. output_unit
Component Unit text No piece Unit the component is counted in. component_unit

How it works

Rows are grouped by Bom Name into one recipe each. The per-unit coefficients tell the optimizer how much of each component a unit of the finished product consumes. Cost to Serve uses the same coefficients to roll component cost up into the finished good.

Workflow wiring

flowchart LR
    n1["Import Data (bom.csv)"] --> n2["Map Bill of Materials"]
    n4["Import Data (production.csv)"] --> n5["Map Production Policy"]
    n2 --> n3["Create Scenario"]
    n5 --> n3

Common mistakes

  • Several outputs in one recipe. Each recipe makes one finished product. Co-products are not modelled. Give each output its own recipe.
  • Disagreeing output columns within a recipe. Every row sharing a Bom Name must name the same Output Product.
  • Putting the production cost here. The per-unit conversion cost belongs on Map Production Policy, not on the recipe.