← Docs / Guides
Bills of materials
Recipes for produced items — components, scrap, routings, production orders and the costs they post.
A bill of materials is the recipe for one produced item: which components go into it, how much of each, and how much of each you expect to waste. Production orders are created from a bill of materials, and completing an order moves stock and posts the cost.
Everything below lives under Production in the app: the Overview tab holds the bills of materials and the orders, the Routings tab holds the work steps, and the Work centers tab holds the places where those steps happen.
The header fields
| Field | What it is |
|---|---|
| Code | Your own short identifier, unique inside the company. A second bill of materials with the same code is rejected. |
| Name | Readable description. Lists show the two together as code — name. |
| Finished item | The catalogue item produced. It cannot also appear as a component of the same recipe. |
| Output quantity | How many finished units one run of the recipe produces. Defaults to 1. |
| Routing | Optional work steps, see below. "No routing" means the recipe only consumes materials. |
A bill of materials needs between 1 and 200 component lines.
Component lines
Each line names a component item, the quantity per finished unit, and a scrap percentage.
Scrap % is the share of that component you expect to lose during production, so the order consumes more than the pure recipe amount:
consumed = quantity per unit × order quantity × (1 + scrap % / 100)
Two components per unit, an order for ten, and 5 % scrap consume 21 units. Zero means no expected waste. The value may not exceed 100.
Scrap on a line is about material lost while producing. It is separate from the scrapped quantity you may report when completing an order, which is about finished units that failed.
Routings and work centers
A routing is the ordered list of work steps for making the item. Each step has a sequence number, a name, the work center that performs it, setup minutes, run minutes per unit, and an optional quality check name.
A work center is where a step happens — a machine, a bench, a team. It carries a cost per hour and, optionally, its own cost account.
Attaching a routing to a bill of materials means every production order made from it also carries those steps. At order creation each step gets planned minutes:
planned minutes = setup minutes + run minutes per unit × finished quantity
You may record what a step actually took (production/orders/record-operation) while the order is still a draft; completion then uses the actual minutes instead of the planned ones. Labour cost per step is minutes ÷ 60 × cost per hour. Steps that named a quality check create a pending check on the order, and an order with a pending check cannot be completed.
A routing applies to assembly only. It must be active and have at least one operation.
Production orders
An order names the bill of materials, the warehouse, the quantity and the date. The finished quantity is order quantity × output quantity. An order is a draft until you complete it, and completion requires the accounting period to be open.
Assembly consumes the components and produces the finished item:
- Each component line is consumed from the warehouse, including its scrap percentage. The material cost comes from the stock the order actually consumed.
- Labour cost is added per routing step.
- The total must be greater than zero, otherwise completion is refused with "Components have no cost".
- You may report a scrapped quantity of finished units. Their share of the total cost,
total × scrapped ÷ finished, becomes scrap cost and is not carried into stock. The good units are received at(total cost − scrap cost) ÷ good quantityper unit.
Disassembly does the opposite: it consumes the finished item and receives the components back into stock. The cost of the consumed item is spread across the components in proportion to their quantities. Neither a routing nor a scrapped quantity applies to a disassembly order.
What completion posts
Completing an assembly order writes one journal entry:
| Side | Account | Amount |
|---|---|---|
| Debit | Finished goods, 2030 by default |
Total cost minus scrap cost |
| Debit | Scrap account, from the production.scrap posting rule |
Scrap cost, when any |
| Credit | Components, 2040 by default |
Material cost |
| Credit | The work center's cost account, or the production.laborApplied posting rule |
Labour cost per step |
The two stock accounts are parameters on the completion call, so a company using a different chart can override them. No journal entry is written when the components and finished accounts are the same and there is neither labour nor scrap — the stock movements alone already describe the run.
Disassembly reverses the two stock accounts: debit components, credit finished goods, for the cost of the item taken apart.
Endpoints
| Endpoint | Scope | Purpose |
|---|---|---|
production/boms/create, boms/get, boms/list |
production:write / production:read |
Manage recipes |
production/work-centers/create, update, list |
production:write / production:read |
Manage work centers |
production/routings/create, get, list |
production:write / production:read |
Manage work steps |
production/orders/create, get, list |
production:write / production:read |
Manage orders |
production/orders/record-operation |
production:write |
Report actual minutes on a step |
production/quality-checks/add, record, list |
production:write / production:read |
Manage checks that gate completion |
production/orders/complete |
production:write |
Move stock and post the cost |
Order of setup
- Create the component items and the finished item in the catalogue.
- Create a warehouse and put the components in stock, otherwise completion has nothing to consume.
- Create work centers, then a routing, if you want labour cost and quality checks. Skip this for material-only recipes.
- Create the bill of materials with its component lines.
- Create a production order, record actual minutes and quality results if you use them, then complete it.