BOQ & Estimation in OpenConstructionERP
Workflow
- Pick a cost base — load it (see
oce-load-cost-bases) so items are searchable.
- Create the BOQ —
POST /api/v1/boqs with project, currency, classification standard (DIN 276 / NRM / MasterFormat / regional).
- Find items —
GET /api/v1/costs/?region=TR_NATIONAL&q=duvar (SQL search) or the semantic path (/qdrant-search when Qdrant is on). Every item carries a components[] breakdown (labour/material/machine with norm quantities and unit prices).
- Link quantities — either manual entry, BIM bulk-link (
POST /api/v1/bim/elements/bulk-link style endpoints aggregate area/volume/length per element), or PDF/DWG takeoff measurements.
- Validate —
POST /api/v1/boqs/{id}/validate/ runs rule packs (BOQ quality, DIN276, NRM, GAEB) and returns violations; quality score updates live.
- Export — GAEB X83/X84, XLSX, JSON for tendering.
Cost item anatomy (what the platform stores per item)
{
"code": "15.115.1008",
"description": "El veya kompresörle ... yumuşak kaya kazılması",
"unit": "m³",
"rate": 1044.5,
"currency": "TRY",
"classification": {"collection":"İnşaat","department":"İnşaat","section":"15.115","category":"CONSTRUCTION WORK"},
"components": [
{"name":"Kompresör","type":"equipment","quantity":0.2,"unit_rate":1991.73,"cost":398.35},
{"name":"Düz işçi","type":"labor","quantity":1.25,"unit_rate":165.0,"cost":206.25}
],
"metadata": {"labor_cost":437.25,"equipment_cost":398.35,"labor_hours":3.83}
}
Estimation inputs the platform supports
| Input |
Path |
Notes |
| Natural language |
POST /api/v1/costs/match (or AI estimate) |
multi-lingual matching |
| Photo |
AI photo-to-BOQ (GPT-4o + YOLO) |
returns scoped BOQ with confidence |
| BIM model |
element → cost matching (/suggest-for-element) |
uses volume/area from the model |
| DWG/PDF |
takeoff measurement |
vectors/rooms detected, pushed into BOQ |
Pricing notes (honest rules)
- National bases are priced in their home currency; markets are PPP-repriced upstream (no FX inside the platform).
- Coefficient bases (Vietnam Dinh Muc, Indonesia AHSP) import with
rate = 0 — attach a market resource price sheet before estimating.
- Turkey positions carry the source book's markup (e.g. 25% contractor profit) inside
total_cost_per_position; resource sums reconcile to total_resource_cost_per_position.
Best practices
- Always verify
unit matches your takeoff quantity (m²/m³/m/kg).
- Check the
components[] sum against rate before committing a binding estimate.
- Keep the region currency on the BOQ; never blend currencies in one total.
- Re-run validation after every bulk edit — the quality score is the fastest signal.
1---2name: oce-estimate-boq3description: Create bills of quantities and estimates in OpenConstructionERP: search cost items, build BOQ sections, link BIM elements in bulk, validate the BOQ, and export GAEB/XLSX/JSON. Use for any estimating workflow on the platform.4---5
6# BOQ & Estimation in OpenConstructionERP
7
8## Workflow
9
101. **Pick a cost base** — load it (see `oce-load-cost-bases`) so items are searchable.
112. **Create the BOQ** — `POST /api/v1/boqs` with project, currency, classification standard (DIN 276 / NRM / MasterFormat / regional).
123. **Find items** — `GET /api/v1/costs/?region=TR_NATIONAL&q=duvar` (SQL search) or the semantic path (`/qdrant-search` when Qdrant is on). Every item carries a `components[]` breakdown (labour/material/machine with norm quantities and unit prices).
134. **Link quantities** — either manual entry, BIM bulk-link (`POST /api/v1/bim/elements/bulk-link` style endpoints aggregate area/volume/length per element), or PDF/DWG takeoff measurements.
145. **Validate** — `POST /api/v1/boqs/{id}/validate/` runs rule packs (BOQ quality, DIN276, NRM, GAEB) and returns violations; quality score updates live.
156. **Export** — GAEB X83/X84, XLSX, JSON for tendering.
16
17## Cost item anatomy (what the platform stores per item)
18
19```json
20{
21 "code": "15.115.1008",
22 "description": "El veya kompresörle ... yumuşak kaya kazılması",
23 "unit": "m³",
24 "rate": 1044.5,
25 "currency": "TRY",
26 "classification": {"collection":"İnşaat","department":"İnşaat","section":"15.115","category":"CONSTRUCTION WORK"},
27 "components": [
28 {"name":"Kompresör","type":"equipment","quantity":0.2,"unit_rate":1991.73,"cost":398.35},
29 {"name":"Düz işçi","type":"labor","quantity":1.25,"unit_rate":165.0,"cost":206.25}
30 ],
31 "metadata": {"labor_cost":437.25,"equipment_cost":398.35,"labor_hours":3.83}
32}
33```
34
35## Estimation inputs the platform supports
36
37| Input | Path | Notes |
38|---|---|---|
39| Natural language | `POST /api/v1/costs/match` (or AI estimate) | multi-lingual matching |
40| Photo | AI photo-to-BOQ (GPT-4o + YOLO) | returns scoped BOQ with confidence |
41| BIM model | element → cost matching (`/suggest-for-element`) | uses volume/area from the model |
42| DWG/PDF | takeoff measurement | vectors/rooms detected, pushed into BOQ |
43
44## Pricing notes (honest rules)
45
46- National bases are priced in their home currency; markets are PPP-repriced upstream (no FX inside the platform).
47- Coefficient bases (Vietnam Dinh Muc, Indonesia AHSP) import with `rate = 0` — attach a market resource price sheet before estimating.
48- Turkey positions carry the source book's markup (e.g. 25% contractor profit) inside `total_cost_per_position`; resource sums reconcile to `total_resource_cost_per_position`.
49
50## Best practices
51
521. Always verify `unit` matches your takeoff quantity (m²/m³/m/kg).
532. Check the `components[]` sum against `rate` before committing a binding estimate.
543. Keep the region currency on the BOQ; never blend currencies in one total.
554. Re-run validation after every bulk edit — the quality score is the fastest signal.