01.
STATION 01 Survey
Read the model, price nothing. One scan seam feeds every station — the ledger on the right keeps the running totals wherever you work.
MODEL ELEMENTS
1,904
pipe · duct · tray · fitting · equip
WILL CLASSIFY
1,713
material + fitting + size resolved
VIA DX LIBRARY
71
empty SPEC backfilled LIB
NEEDS MAPPING
177
material / fitting / size unmapped
▤ SEGMENT LEDGER — coverage per material system, click to filter Classify
xx.xx.
Stainless coated (E-CTFE)641
xx.xx.
Stainless V4A488
xx.xx.
Galvanized402
xx.xx.
Stainless V2A237
xx.xx.
Insulation / surfaces98
—
Out of catalogue (Alu, PPR, PE…)38
Preview only — nothing is written until Run BOQ Lookup (footer). Rows are the catalogue's material segments; the bar is classify-coverage inside that segment.
↳ CLASSIFICATION PIPELINE (with the round-24 library pre-step)
DX BOM LIBRARYFamily & Type fills empty SPEC LIB
→
MATERIALSPEC_MATERIAL_TEXT_EN → XX.XX.
FITTINGSPEC_NAME_EN / Fam&Type → XX.XX.YY.
→
SIZESPEC_SIZE → NW leaf XX.XX.YY.ZZZ
SPEC_DESIGNATION + SPEC_DESCRIPTIONwritten on Run · name wins over family · mismatches flag, never guess
The library step runs ONLY when SPEC params are empty and the Family & Type has exactly one library record — ambiguous families never backfill. Greys out loudly if bom_library.json is unavailable.
⚙ MATCHING OPTIONS
02.
STATION 02 Classify
1,904 elements · click an ID to select + zoomProblems sort first. Uncheck a row to exclude it from the next Run. Linked-safe.
Matched 1,713
via library 71
Needs mapping 177
Read-only 14
Shared icz.review_grid (populate / summary strip / remove-checked); navigation via _row_nav → _nav_ev. The LIB tag reads
diag["lib_fill"] — library-dependent classifications are marked, never silently blended.03.
STATION 03 Bill unit-aware · contract Δ
The bill itself — modeled quantities in each code's OWN BOQ unit, priced against the contracted figures promoted from the source BOQ.
Unit = boq_data.unit_for(atomic), contract = contract_qty(atomic) — promoted from the contract BOQ. Modeled figure follows the unit: m → Σ CURVE_ELEM_LENGTH (ft→m via icz.units) · St → count · m² → Σ area. A v1 catalogue (no units) renders the classic Count/Length/Area table — columns appear only when the catalogue carries them.
04.
STATION 04 Reconcile NEW station
Audit the model against the firm DX BOM library: FILLED SPEC params that contradict the library record are findings. Read-only — correcting a filled param stays a human decision.
MODEL FAMILIES IN LIBRARY
212
of 287 model families
ELEMENTS CHECKED
1,641
filled SPEC + uniform record
CONFORM
1,632
model matches library
CONFLICTS
9
param ≠ library record
9 conflicts1,632 conform
Findings render through the shared review grid — clickable IDs, modeless select + zoom. Ambiguous library families (45) are excluded from both backfill and conformance; they're listed in the Library station.
05.
STATION 05 DX Library promoted r24
The firm's ducting and piping BOM — 4,007 deduped records, browsable by family, material, manufacturer, source.
All 4,007Ducting 359Piping 3,648Ambiguous 45
Read-only reference (ships with the tool, regenerated from the DX xlsx exports — never hand-edited). Uniform families feed the Classify backfill; ambiguous ones are visible here and excluded everywhere else.
06.
STATION 06 Catalogue Data
Search this project's active catalogue — material, fitting name, atomic number. Leaf rows carry unit + contract when the catalogue is v2.
MATERIALS
95
material_to_segment
FITTING RULES
144 + 61
name · family fallback
CATALOGUE LEAVES
855
672 sized · 33 non-NW
UNITS + CONTRACT
855 + 855
catalogue v2 (r24)
Read-only browse (_section_header / _data_row). To change data use Setup — no raw JSON editing (suite Interactive-Config rule).
07.
STATION 07 Setup
Catalogue source, firm library health, the eight editable tables, and the classifier guide.
▤ CATALOGUE SOURCE project-aware
Active: …\RO1_BOQLookup.pushbutton\boq_data.json v2
Remembered for this project · configstore boq_catalogues.json
◫ DX BOM LIBRARY round 24
bom_library.json · available 4,007 rows · 1,415 families · 45 ambiguous
Firm-wide, ships with the tool. Missing/corrupt → this card goes red with the reason (bom_available), the pipeline's library node greys out, classification continues catalogue-only.
Materials (95)Fitting Names (144)Family Fallback (61)Full Index (855)Size Index (672)Non-NW (33)Units (855)Contract Qty (855)
? How the classifier works (the former How-It-Works page, folded into Setup)
0 · Library backfill (r24): empty SPEC_NAME/MATERIAL + uniform Family & Type library record → values filled, element tagged LIB. Filled params are never overwritten; ambiguous families never backfill. 1 · Material: SPEC_MATERIAL_TEXT_EN → segment XX.XX. (exact, then substring). 2 · Fitting: SPEC_NAME_EN → XX.XX.YY. (144 rules); Family & Type fallback + cross-check (61) — name wins, disagreement flags. 3 · Size: SPEC_SIZE / RBS_CALCULATED_SIZE → NW parse → atomic leaf; sized types refuse fallback (loud size-miss). 4 · Bill (r24): unit + contract per atomic from the source BOQ → totals in the code's own unit, Δ against contract.