Built-Up Resources
A built-up resource is a resource whose rate is derived from component resources. The canonical example is a "package" rate: formwork per m² made of timber, labour and fasteners.
When to Use
Use a built-up resource when:
- Several resources are always combined in a known proportion.
- You want a single line on estimates instead of three.
- Rate-review cascades should flow through automatically (change the timber price → package rate updates).
Creating a Built-Up Resource
- Open Resources → New Resource.
- Tick Is Built Up.
- Enter Name, Unit. Do not enter a Base Rate — it will be calculated.
- In the detail pane, open Built-Up Breakdowns.
- Add component rows; each row is a
BuiltUpResourceBreakdown.
A Breakdown Row
| Field | Purpose |
|---|---|
| Item | Description of the component. |
| ComponentResource | Link to an existing resource. |
| Quantity | How many component units are consumed per 1 unit of this package. |
| Unit | Inherited from the component resource. |
| ResourceRate | Pulled from the component resource's DirectRate. |
| Total | Quantity × ResourceRate |
| Formula | Optional; see section 07 for formula syntax. |
Example: Formwork Package (per m²)
| Component | Qty | Rate | Total |
|---|---|---|---|
| Timber (m) | 3.0 | 12.00 | 36.00 |
| Formply (m²) | 0.5 | 45.00 | 22.50 |
| Nails (kg) | 0.25 | 8.00 | 2.00 |
| Labour (hr) | 0.9 | 65.00 | 58.50 |
| BuiltUpTotal | 119.00 |
The resource's rate becomes $119.00 / m². Any item using the resource pays $119/m² × its quantity.
Nesting
Built-up breakdowns themselves have indent levels (0–4) so you can group components (e.g. "Labour" header row with sub-crews).
Cascading Updates
Changing a component resource's rate triggers:
- Recalculation of the built-up resource's
BuiltUpTotal(viaCalculateBuiltUpTotalAsync). - Re-pricing of every item using the built-up resource.
- Re-allocation of markup, margins and sell rates.
Warning — Circular References
A built-up resource cannot include itself, directly or transitively. The engine raises an error and rejects the breakdown if a cycle is detected.