A unified product catalog with supplier prices, brands, categories and normalized UOMs. Drop in an invoice or price sheet — Tier-0 supplier-code matching auto-creates products and prices.
Products, supplier prices, categories & UOMs
A small, clean data model. One product can hold many supplier prices over time; one subcategory hangs many products. Brand and supplier are first-class objects, not strings.
Excel, PDF, or photo of a printed list. The vision pipeline OCRs & structures the rows.
Supplier code hit? Product + price auto-create. Container pricing flags for one-tap review.
Deferred batch jobs fill in dimensions, match_text, subcategory, and embeddings.
Every import sharpens search. Brand canonicalisation merges "Gyproc Plc" and "Gyproc" into one record.
Every ProductPrice stores the supplier's quoted UOM and the per-unit normalized price. The rate library always shows €/m, €/m², €/nr — no mental gymnastics, no spreadsheet conversions.
The Imports pipeline runs Tier-0 supplier-code matching first — if a code resolves, the product and price are created without review. Only container pricing or ambiguous rows need a human.
Every supplier import refreshes the price history. Old prices stay queryable — never overwritten.
Bill rows match products by semantic similarity. "100mm dense block" finds A206003 even without exact wording.
Filter by trade, manufacturer system, fire rating, U-value. Power-user filters live where you need them.
A1-A3 kgCO₂e per UOM lives on the product, auto-linked at import from a recognised seed library — MPA Fact Sheet 18 (UK cement), CARES UK avg (rebar), BCSA (structural steel), ÖKOBAUDAT 2024-I (concrete, plasterboard, mineral wool, timber, glass, blockwork). Manufacturer EPDs override; tenants can pin a custom factor. The citation — source + version + RICS data-quality tier — travels with the factor.
Drop in a price sheet, an invoice, or a photo of a printed list. The library does the parsing, matching and normalisation.