Skip to content

Bills of materials

A bill of materials (BOM) lists the components and per-unit quantities needed to make one finished product. It’s the single definition your factory orders and costing draw from.

  1. Open the product and choose Define BOM.
  2. Add each component item with its quantity per unit and unit of measure. Components are real items, raw materials, semi-finished goods, or another product that has its own BOM (making a multi-level structure).
  3. Save and activate the BOM.

Rules to know:

  • Only one BOM per product can be active at a time. Activating a new one deactivates the previous one.
  • A BOM cannot reference itself, directly or through its components, cycles are rejected.
  • Components must exist as items for your organisation; unknown items are rejected.
  • Quantities must be positive: zero or negative is refused with a friendly message.

The BOM tree shows a product’s full component hierarchy at a glance:

  • The root product, its child components, and sub-components for any component that has its own BOM.
  • Each node shows the item, quantity per parent, and unit of measure.
  • Nodes with children expand and collapse.

A product with no BOM configured shows a clear empty state.

The cost rollup gives you a lite product cost built up from the BOM tree:

  • Each leaf component’s cost = its Inventory moving-average valuation rate × quantity per unit.
  • A sub-assembly’s cost = the sum of its components’ rolled-up costs, recursively up the tree.
  • The product’s total material cost = the sum across all components.

The rollup is material only: labour and overhead are excluded (and noted in the UI). It’s computed on demand and rounded to two decimal places. A component with no valuation rate is flagged in the rollup rather than silently counted as zero, so a missing cost never hides in the total.

Beyond the single active BOM, Villva also supports:

  • Versioning with effective dates: every BOM carries a version number and effective-from/effective-to dates. Today’s date selects the active version by default, and you can view the tree as of any past date. Creating a new version copies the prior one and shows a diff (added, removed and changed components) before you commit. Deleted components are flagged but kept visible for historical reference, and you can capture a scrap/wastage percentage per component and alternative-component routing per node. The tree can be exported to CSV/Excel.
  • Routing and work centres: where you need a defined sequence of operations (for example cast → machine → assemble → test), you can define routings and the work centres they run at (with capacity, cost rate and default equipment), standard and setup times per operation, and alternates. Routings are versioned with effective dates, roll up an operation cost (standard time × rate), and feed production-order planning. A work centre or routing that’s referenced by open production orders can’t be deleted.