SPB Git forge

spb/vrai-prix

Public

Vrai-Prix — l'évaluation du vrai prix des propriétés résidentielles au Québec.

60commits 1branches 0releases
12.3 MBsize
maindefault branch
17 days agolast push
TypeScript 90.2% JavaScript 3.5% Python 3.4% CSS 1.9% HTML 0.6%
39.0 KB · 255 lines typescript
Raw Blame History
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2/**3 * Catalogue canonique des articles (cost_items). Module PUR.4 *5 * `ref` = PRIX DE RÉFÉRENCE INTERNE (hypothèse documentée, $ CA, unité canonique,6 * niveau 2026 Québec) utilisé UNIQUEMENT quand aucune observation détaillant /7 * source officielle n'existe pour l'article. Il est toujours étiqueté8 * « ◇ référence interne (hypothèse) », réduit la couverture observée et donc9 * l'indice de confiance. Aucun prix de référence n'est présenté comme observé.10 *11 * `retail` = indice de recherche pour les connecteurs détaillants (Firecrawl) et12 * `pack` = contenu d'un emballage en unités canoniques (ex. feuille 4×8 = 32 pi²).13 */14import type { CanonicalUnit, Quality, UxCategory } from "../types";1516export interface ItemSeed {17  code: string;18  mf: string;19  cat: UxCategory;20  fr: string;21  en: string;22  unit: CanonicalUnit;23  /** prix de référence interne (hypothèse) */24  ref: number;25  refNote?: string;26  trade?: string;27  waste?: number;28  cls?: "material" | "equipment" | "service" | "rental";29  quality?: Quality;30  retail?: { q: string; pack?: number; packUnit?: string };31}3233const I = (34  code: string,35  mf: string,36  cat: UxCategory,37  fr: string,38  en: string,39  unit: CanonicalUnit,40  ref: number,41  o: Partial<Omit<ItemSeed, "code" | "mf" | "cat" | "fr" | "en" | "unit" | "ref">> = {}42): ItemSeed => ({ code, mf, cat, fr, en, unit, ref, ...o });4344const R = (q: string, pack?: number, packUnit?: string) => ({ q, pack, packUnit });4546export const ITEM_SEEDS: ItemSeed[] = [47  /* ------------------------------------------------ 06 bois de charpente */48  I("LUM-2X4-8", "06", "structure", "Épinette 2 × 4 × 8 pi (SPF, sec)", "SPF 2 × 4 × 8 ft (KD)", "unit", 3.6, { trade: "charpentier", waste: 0.07, retail: R("épinette de construction 2 po x 4 po x 8 pi sec") }),49  I("LUM-2X4-92", "06", "structure", "Montant 2 × 4 × 92 5/8 po (SPF, sec)", "SPF stud 2 × 4 × 92 5/8 in", "unit", 3.9, { trade: "charpentier", waste: 0.05, retail: R("épinette stud 2 po x 4 po x 92 5/8 po sec") }),50  I("LUM-2X6-8", "06", "structure", "Épinette 2 × 6 × 8 pi (SPF, sec)", "SPF 2 × 6 × 8 ft (KD)", "unit", 5.98, { trade: "charpentier", waste: 0.07, retail: R("épinette de construction 2 po x 6 po x 8 pi sec") }),51  I("LUM-2X6-92", "06", "structure", "Montant 2 × 6 × 92 5/8 po (SPF, sec)", "SPF stud 2 × 6 × 92 5/8 in", "unit", 6.5, { trade: "charpentier", waste: 0.05, retail: R("épinette stud 2 po x 6 po x 92 5/8 po sec") }),52  I("LUM-2X8-12", "06", "structure", "Épinette 2 × 8 × 12 pi", "SPF 2 × 8 × 12 ft", "unit", 16.0, { trade: "charpentier", waste: 0.07, retail: R("épinette 2 po x 8 po x 12 pi") }),53  I("LUM-2X10-12", "06", "structure", "Épinette 2 × 10 × 12 pi", "SPF 2 × 10 × 12 ft", "unit", 22.0, { trade: "charpentier", waste: 0.07, retail: R("épinette 2 po x 10 po x 12 pi") }),54  I("LUM-2X12-12", "06", "structure", "Épinette 2 × 12 × 12 pi", "SPF 2 × 12 × 12 ft", "unit", 30.0, { trade: "charpentier", waste: 0.07, retail: R("épinette 2 po x 12 po x 12 pi") }),55  I("LUM-1X3-8", "06", "envelope", "Fourrure 1 × 3 × 8 pi", "Furring strip 1 × 3 × 8 ft", "unit", 2.4, { trade: "charpentier", waste: 0.08, retail: R("fourrure 1 po x 3 po x 8 pi") }),56  I("LVL-1.75X11.875", "06", "structure", "Poutre LVL 1 3/4 × 11 7/8 po", "LVL beam 1 3/4 × 11 7/8 in", "pi_lin", 14.0, { trade: "charpentier", waste: 0.03, retail: R("poutre LVL 1 3/4 x 11 7/8", 12, "longueur") }),57  I("IJOIST-11.875", "06", "structure", "Poutrelle ajourée 11 7/8 po", "I-joist 11 7/8 in", "pi_lin", 5.5, { trade: "charpentier", waste: 0.03, refNote: "Prix fournisseur de structure (non vendu au détail) — référence 2026." }),58  I("OSB-7/16-4X8", "06", "structure", "Panneau OSB 7/16 po 4 × 8 pi", "OSB sheathing 7/16 in 4 × 8 ft", "pi2", 0.95, { trade: "charpentier", waste: 0.08, retail: R("panneau OSB 7/16 po 4 x 8", 32, "feuille") }),59  I("OSB-5/8-TG-4X8", "06", "structure", "OSB 5/8 po languette et rainure (sous-plancher)", "OSB 5/8 in T&G subfloor", "pi2", 1.3, { trade: "charpentier", waste: 0.06, retail: R("OSB 5/8 po languette rainure 4 x 8", 32, "feuille") }),60  I("PLY-1/2-4X8", "06", "structure", "Contreplaqué 1/2 po 4 × 8 pi", "Plywood 1/2 in 4 × 8 ft", "pi2", 1.75, { trade: "charpentier", waste: 0.08, retail: R("contreplaqué 1/2 po 4 x 8 sapin", 32, "feuille") }),61  I("PLY-3/4-TG-4X8", "06", "structure", "Contreplaqué 3/4 po L&R 4 × 8 pi", "Plywood 3/4 in T&G 4 × 8 ft", "pi2", 2.4, { trade: "charpentier", waste: 0.06, retail: R("contreplaqué 3/4 po languette rainure 4 x 8", 32, "feuille") }),62  I("TRUSS-ROOF", "06", "structure", "Fermes de toit préfabriquées (par pi² de toit)", "Prefabricated roof trusses (per sq ft roof)", "pi2", 6.5, { trade: "charpentier", refNote: "Prix d'usine de fermes (devis fournisseur) — référence 2026, non vendu au détail." }),63  I("STEEL-COLUMN-ADJ", "05", "structure", "Colonne d'acier ajustable", "Adjustable steel column", "unit", 95, { trade: "charpentier", retail: R("colonne d'acier ajustable") }),64  I("SUBFLOOR-ADHESIVE", "06", "structure", "Adhésif de sous-plancher (tube)", "Subfloor adhesive (tube)", "unit", 9.0, { retail: R("adhésif de sous-plancher PL400 tube") }),65  I("NAILS-FRAMING", "06", "structure", "Clous à charpente 3 1/4 po (lb)", "Framing nails 3 1/4 in (lb)", "lb", 3.2, { retail: R("clous à charpente 3 1/4 po 50 lb", 50, "boîte") }),66  I("SCREWS-DECK", "06", "exterior", "Vis à terrasse 3 po (lb)", "Deck screws 3 in (lb)", "lb", 9.0, { retail: R("vis à terrasse 3 po 5 lb", 5, "boîte") }),67  I("SCREWS-DRYWALL", "09", "interior", "Vis à gypse 1 1/4 po (lb)", "Drywall screws 1 1/4 in (lb)", "lb", 6.0, { retail: R("vis à gypse 1 1/4 po 5 lb", 5, "boîte") }),68  I("HANGERS-JOIST", "06", "structure", "Étrier / attache métallique", "Joist hanger / metal connector", "unit", 1.8, { retail: R("étrier de solive 2 x 10") }),69  I("SUBFLOOR-PANEL", "06", "basement", "Panneau de sous-plancher isolé 2 × 2 pi", "Insulated subfloor panel 2 × 2 ft", "pi2", 2.6, { trade: "charpentier", waste: 0.05, retail: R("panneau de sous-plancher DRIcore 2 x 2", 4, "panneau") }),7071  /* ------------------------------------------------- 03/04 béton, maçonnerie */72  I("CONC-READYMIX-30MPA", "03", "foundation", "Béton préparé 30 MPa livré (m³)", "Ready-mix concrete 30 MPa delivered (m³)", "m3", 265, { trade: "coffreur", waste: 0.05, refNote: "Béton livré par bétonnière (non vendu au détail) — référence 2026, Montréal/Québec." }),73  I("CONC-BAG-30KG", "03", "foundation", "Béton prémélangé 30 kg (sac)", "Pre-mixed concrete 30 kg (bag)", "unit", 7.5, { retail: R("béton prémélangé 30 kg") }),74  I("REBAR-10M-20FT", "03", "foundation", "Barre d'armature 10M × 20 pi", "Rebar 10M × 20 ft", "unit", 14.0, { trade: "ferrailleur", waste: 0.05, retail: R("barre d'armature 10M 20 pi") }),75  I("WIRE-MESH-6X6", "03", "foundation", "Treillis métallique 6 × 6 (pi²)", "Welded wire mesh 6 × 6 (sq ft)", "pi2", 0.45, { waste: 0.1, retail: R("treillis métallique 6 x 6 5 pi x 10 pi", 50, "feuille") }),76  I("FORM-RENTAL", "03", "foundation", "Location de coffrages (par pi² de mur)", "Formwork rental (per sq ft wall)", "pi2", 3.5, { cls: "rental", refNote: "Location de coffrages modulaires — hypothèse de référence." }),77  I("ANCHOR-BOLT", "03", "foundation", "Boulon d'ancrage 1/2 × 10 po", "Anchor bolt 1/2 × 10 in", "unit", 2.5, { retail: R("boulon d'ancrage 1/2 po x 10 po") }),78  I("BRICK-CLAY", "04", "envelope", "Brique d'argile modulaire", "Modular clay brick", "unit", 1.1, { trade: "briqueteur", waste: 0.05, refNote: "Prix par brique (palette de 500) — référence briqueterie 2026.", retail: R("brique d'argile modulaire", 500, "palette") }),79  I("MORTAR-TYPE-N-30KG", "04", "envelope", "Mortier type N 30 kg (sac)", "Type N mortar 30 kg (bag)", "unit", 12.0, { retail: R("mortier type N 30 kg") }),80  I("BRICK-TIES", "04", "envelope", "Attache de brique", "Brick tie", "unit", 0.45, { retail: R("attache de brique", 100, "boîte") }),81  I("CONC-BLOCK-8IN", "04", "foundation", "Bloc de béton 8 × 8 × 16 po", "Concrete block 8 × 8 × 16 in", "unit", 3.5, { trade: "briqueteur", waste: 0.04, retail: R("bloc de béton 8 x 8 x 16") }),82  I("STONE-VENEER", "04", "envelope", "Pierre décorative (placage) pi²", "Manufactured stone veneer (sq ft)", "pi2", 14.0, { trade: "briqueteur", waste: 0.08, retail: R("pierre décorative revêtement extérieur pi²") }),83  I("DAMPPROOF", "07", "foundation", "Enduit d'imperméabilisation bitumineux (pi² couvert)", "Bituminous dampproofing (sq ft covered)", "pi2", 0.4, { retail: R("imperméabilisant à fondation 17 L", 150, "seau") }),84  I("DRAIN-MEMBRANE", "07", "foundation", "Membrane de drainage alvéolée (pi²)", "Dimpled drainage membrane (sq ft)", "pi2", 0.95, { waste: 0.05, retail: R("membrane de drainage Delta-MS", 264, "rouleau") }),85  I("WEEPING-TILE-4IN", "33", "excavation", "Drain français perforé 4 po (pi lin)", "Perforated weeping tile 4 in (lin ft)", "pi_lin", 1.2, { retail: R("drain agricole perforé 4 po 100 pi", 100, "rouleau") }),86  I("BACKFILL-GRAVEL", "31", "excavation", "Gravier 0-3/4 livré (m³)", "3/4 in crushed gravel delivered (m³)", "m3", 45, { refNote: "Agrégat livré en vrac — référence carrière 2026." }),87  I("SAND", "31", "exterior", "Sable à pavé livré (m³)", "Paver sand delivered (m³)", "m3", 42, { refNote: "Vrac livré — référence 2026." }),88  I("TOPSOIL", "32", "exterior", "Terre à jardin livrée (m³)", "Topsoil delivered (m³)", "m3", 55, { refNote: "Vrac livré — référence 2026." }),89  I("CONCRETE-PIER-TUBE", "03", "exterior", "Tube de coffrage 10 po × 4 pi", "Concrete form tube 10 in × 4 ft", "unit", 22, { retail: R("tube de coffrage 10 po x 4 pi") }),9091  /* -------------------------------------------- 07 isolation et étanchéité */92  I("INS-BATT-R24-2X6", "07", "insulation", "Isolant natte R24 (mur 2 × 6) pi²", "Batt insulation R24 (2 × 6 wall) sq ft", "pi2", 1.45, { trade: "charpentier", waste: 0.05, retail: R("isolant laine minérale R24 2 x 6", 39.8, "paquet") }),93  I("INS-BATT-R20-2X6", "07", "insulation", "Isolant natte R20 (mur 2 × 6) pi²", "Batt insulation R20 (2 × 6 wall) sq ft", "pi2", 1.1, { trade: "charpentier", waste: 0.05, retail: R("isolant fibre de verre R20 15 po", 78.3, "paquet") }),94  I("INS-BATT-R12-2X4", "07", "insulation", "Isolant natte R12 (mur 2 × 4) pi²", "Batt insulation R12 (2 × 4 wall) sq ft", "pi2", 0.8, { trade: "charpentier", waste: 0.05, retail: R("isolant fibre de verre R12 15 po", 88, "paquet") }),95  I("INS-BLOWN-CELLULOSE-R50", "07", "insulation", "Cellulose soufflée R50 (pi² de plafond)", "Blown cellulose R50 (sq ft ceiling)", "pi2", 1.6, { trade: "charpentier", waste: 0.03, retail: R("isolant cellulose soufflée 25 lb", 15, "sac") }),96  I("INS-XPS-2IN", "07", "insulation", "Polystyrène extrudé 2 po (pi²)", "Extruded polystyrene 2 in (sq ft)", "pi2", 1.7, { trade: "charpentier", waste: 0.05, retail: R("isolant polystyrène extrudé 2 po 2 x 8", 16, "feuille") }),97  I("INS-EPS-TYPE2-1.5IN", "07", "insulation", "Polystyrène expansé type 2, 1 1/2 po (pi²)", "EPS type 2, 1 1/2 in (sq ft)", "pi2", 0.95, { waste: 0.05, retail: R("isolant polystyrène expansé 1 1/2 po 4 x 8", 32, "feuille") }),98  I("POLY-6MIL", "07", "insulation", "Polyéthylène pare-vapeur 6 mil (pi²)", "Polyethylene vapour barrier 6 mil (sq ft)", "pi2", 0.08, { waste: 0.1, retail: R("polyéthylène 6 mil 10 x 100", 1000, "rouleau") }),99  I("HOUSEWRAP", "07", "envelope", "Membrane pare-air (pi²)", "House wrap (sq ft)", "pi2", 0.14, { waste: 0.1, retail: R("membrane pare-air 9 x 100", 900, "rouleau") }),100  I("SHINGLE-ARCH", "07", "roofing", "Bardeau d'asphalte architectural (pi²)", "Architectural asphalt shingle (sq ft)", "pi2", 1.35, { trade: "couvreur", waste: 0.1, retail: R("bardeaux d'asphalte architecturaux paquet", 32.3, "paquet") }),101  I("ROOF-UNDERLAY-SYNTH", "07", "roofing", "Sous-couche synthétique de toiture (pi²)", "Synthetic roof underlayment (sq ft)", "pi2", 0.22, { waste: 0.08, retail: R("sous-couche synthétique toiture 1000 pi²", 1000, "rouleau") }),102  I("ICE-WATER-SHIELD", "07", "roofing", "Membrane autocollante glace et eau (pi²)", "Ice & water shield (sq ft)", "pi2", 0.95, { waste: 0.08, retail: R("membrane glace et eau 36 po x 65 pi", 195, "rouleau") }),103  I("DRIP-EDGE", "07", "roofing", "Larmier d'aluminium (pi lin)", "Aluminum drip edge (lin ft)", "pi_lin", 0.9, { waste: 0.05, retail: R("larmier aluminium 10 pi", 10, "longueur") }),104  I("ROOF-VENT", "07", "roofing", "Évent de toit", "Roof vent", "unit", 25, { retail: R("évent de toit aluminium") }),105  I("ROOF-METAL-PANEL", "07", "roofing", "Tôle de toiture en acier prépeint (pi²)", "Pre-painted steel roofing panel (sq ft)", "pi2", 4.2, { trade: "couvreur", waste: 0.07, retail: R("tôle de toiture acier prépeint pi²") }),106  I("ROOF-MEMBRANE-ELASTO", "07", "roofing", "Membrane élastomère 2 couches (pi²)", "Two-ply elastomeric membrane (sq ft)", "pi2", 4.8, { trade: "couvreur", waste: 0.08, refNote: "Membrane bitumineuse modifiée (base + finition) — référence fournisseur 2026." }),107  I("EPDM-MEMBRANE-SYSTEM", "07", "roofing", "Membrane EPDM et adhésif (pi²)", "EPDM membrane and adhesive (sq ft)", "pi2", 2.8, { trade: "couvreur", waste: 0.08, refNote: "Référence fournisseur 2026." }),108  I("CAULK-TUBE", "07", "envelope", "Scellant extérieur (tube)", "Exterior sealant (tube)", "unit", 8.0, { retail: R("scellant extérieur polyuréthane tube") }),109  I("SPRAYFOAM-CAN", "07", "openings", "Mousse isolante en aérosol (canette)", "Spray foam can", "unit", 12.0, { retail: R("mousse isolante portes et fenêtres canette") }),110  I("FLASHING-ALU", "07", "envelope", "Solin d'aluminium (pi lin)", "Aluminum flashing (lin ft)", "pi_lin", 1.6, { waste: 0.05, retail: R("solin aluminium 8 po x 50 pi", 50, "rouleau") }),111  I("SIDING-VINYL", "07", "envelope", "Revêtement de vinyle (pi²)", "Vinyl siding (sq ft)", "pi2", 1.55, { trade: "charpentier", waste: 0.1, retail: R("revêtement extérieur vinyle boîte", 200, "boîte") }),112  I("SIDING-VINYL-ACCESS", "07", "envelope", "Accessoires de vinyle (moulures J, coins) pi lin", "Vinyl trim accessories (J-channel, corners) lin ft", "pi_lin", 2.2, { waste: 0.05, retail: R("moulure en J vinyle 12 pi", 12, "longueur") }),113  I("SIDING-FIBERCEMENT", "07", "envelope", "Planche de fibrociment (pi² exposé)", "Fiber-cement plank (exposed sq ft)", "pi2", 3.6, { trade: "charpentier", waste: 0.1, retail: R("revêtement fibrociment planche 8 1/4 po x 12 pi", 7.25, "planche") }),114  I("SIDING-WOOD-CEDAR", "07", "envelope", "Déclin de cèdre (pi²)", "Cedar wood siding (sq ft)", "pi2", 5.5, { trade: "charpentier", waste: 0.1, retail: R("déclin de cèdre revêtement extérieur pi²") }),115  I("SIDING-STEEL", "07", "envelope", "Revêtement d'acier prépeint (pi²)", "Pre-painted steel siding (sq ft)", "pi2", 4.0, { trade: "charpentier", waste: 0.07, retail: R("revêtement extérieur acier prépeint pi²") }),116  I("SOFFIT-ALU", "07", "envelope", "Soffite d'aluminium ventilé (pi²)", "Vented aluminum soffit (sq ft)", "pi2", 2.8, { waste: 0.05, retail: R("soffite aluminium ventilé 16 po x 12 pi", 16, "panneau") }),117  I("FASCIA-ALU", "07", "envelope", "Bordure de toit (fascia) aluminium (pi lin)", "Aluminum fascia (lin ft)", "pi_lin", 3.2, { waste: 0.05, retail: R("fascia aluminium 6 po x 12 pi", 12, "longueur") }),118  I("GUTTER-ALU", "07", "exterior", "Gouttière d'aluminium 5 po (pi lin)", "Aluminum gutter 5 in (lin ft)", "pi_lin", 3.5, { waste: 0.05, retail: R("gouttière aluminium 5 po 10 pi", 10, "longueur") }),119120  /* ------------------------------------------------------------ 08 ouvertures */121  I("WIN-PVC-CASEMENT-STD", "08", "openings", "Fenêtre à battant PVC ~30 × 48 po (double vitrage Low-E)", "PVC casement window ~30 × 48 in (Low-E double)", "unit", 620, { trade: "charpentier", retail: R("fenêtre à battant PVC 30 x 48") }),122  I("WIN-HYBRID-STD", "08", "openings", "Fenêtre hybride PVC/aluminium ~30 × 48 po", "Hybrid PVC/aluminum window ~30 × 48 in", "unit", 950, { trade: "charpentier", refNote: "Fenêtre hybride sur mesure — référence fabricant 2026." }),123  I("WIN-ALU-STD", "08", "openings", "Fenêtre aluminium ~30 × 48 po", "Aluminum window ~30 × 48 in", "unit", 780, { trade: "charpentier", refNote: "Référence fabricant 2026." }),124  I("WIN-WOOD-STD", "08", "openings", "Fenêtre bois/aluminium ~30 × 48 po", "Wood/aluminum window ~30 × 48 in", "unit", 1150, { trade: "charpentier", refNote: "Référence fabricant 2026." }),125  I("WIN-BASEMENT-SLIDER", "08", "openings", "Fenêtre coulissante de sous-sol 32 × 18 po", "Basement slider window 32 × 18 in", "unit", 280, { trade: "charpentier", retail: R("fenêtre coulissante sous-sol PVC 32 x 18") }),126  I("DOOR-EXT-STEEL-36", "08", "openings", "Porte d'entrée en acier 36 po (prémontée)", "Steel entry door 36 in (prehung)", "unit", 650, { trade: "charpentier", retail: R("porte d'entrée acier 36 po prémontée") }),127  I("DOOR-EXT-FIBERGLASS", "08", "openings", "Porte d'entrée en fibre de verre 36 po", "Fiberglass entry door 36 in", "unit", 1400, { trade: "charpentier", retail: R("porte d'entrée fibre de verre 36 po") }),128  I("DOOR-PATIO-6FT", "08", "openings", "Porte-patio coulissante 6 pi (PVC)", "Sliding patio door 6 ft (PVC)", "unit", 1350, { trade: "charpentier", retail: R("porte patio coulissante 6 pi PVC") }),129  I("DOOR-GARAGE-9X7", "08", "garage", "Porte de garage isolée 9 × 7 pi", "Insulated garage door 9 × 7 ft", "unit", 1450, { trade: "charpentier", retail: R("porte de garage isolée 9 x 7") }),130  I("DOOR-GARAGE-16X7", "08", "garage", "Porte de garage isolée 16 × 7 pi", "Insulated garage door 16 × 7 ft", "unit", 2400, { trade: "charpentier", retail: R("porte de garage isolée 16 x 7") }),131  I("GARAGE-OPENER", "26", "garage", "Ouvre-porte de garage", "Garage door opener", "unit", 380, { trade: "electricien", retail: R("ouvre-porte de garage 1/2 HP") }),132  I("DOOR-INT-HOLLOW-PREHUNG", "08", "openings", "Porte intérieure alvéolée prémontée 30 po", "Hollow-core prehung interior door 30 in", "unit", 145, { trade: "charpentier", retail: R("porte intérieure prémontée alvéolée 30 po") }),133  I("DOOR-INT-SOLID-PREHUNG", "08", "openings", "Porte intérieure pleine prémontée 30 po", "Solid-core prehung interior door 30 in", "unit", 310, { trade: "charpentier", retail: R("porte intérieure prémontée âme pleine 30 po") }),134  I("DOOR-CLOSET-BIFOLD", "08", "openings", "Porte pliante de garde-robe 48 po", "Bifold closet door 48 in", "unit", 120, { trade: "charpentier", retail: R("porte pliante garde-robe 48 po") }),135  I("DOOR-HARDWARE-INT", "08", "openings", "Poignée de porte intérieure", "Interior door handle", "unit", 32, { retail: R("poignée de porte intérieure passage") }),136  I("DOOR-HARDWARE-EXT", "08", "openings", "Poignée et serrure de porte extérieure", "Exterior handleset and deadbolt", "unit", 120, { retail: R("poignée entrée avec pêne dormant") }),137  I("SKYLIGHT", "08", "openings", "Puits de lumière fixe 2 × 4 pi", "Fixed skylight 2 × 4 ft", "unit", 900, { trade: "charpentier", retail: R("puits de lumière fixe 2 x 4") }),138139  /* ------------------------------------------------------------ 09 finitions */140  I("GYP-1/2-4X8", "09", "interior", "Panneau de gypse 1/2 po 4 × 8 pi", "Gypsum board 1/2 in 4 × 8 ft", "pi2", 0.55, { trade: "poseur_systemes", waste: 0.1, retail: R("panneau de gypse 1/2 po 4 x 8", 32, "feuille") }),141  I("GYP-5/8-4X8", "09", "interior", "Panneau de gypse 5/8 po type X 4 × 8 pi", "Gypsum board 5/8 in type X 4 × 8 ft", "pi2", 0.68, { trade: "poseur_systemes", waste: 0.1, retail: R("panneau de gypse 5/8 po type X 4 x 8", 32, "feuille") }),142  I("GYP-MR-1/2", "09", "bathroom", "Gypse hydrofuge 1/2 po 4 × 8 pi", "Moisture-resistant gypsum 1/2 in 4 × 8 ft", "pi2", 0.85, { trade: "poseur_systemes", waste: 0.1, retail: R("panneau de gypse hydrofuge 1/2 po 4 x 8", 32, "feuille") }),143  I("JOINT-COMPOUND-20KG", "09", "interior", "Composé à joints 20 kg (seau)", "Joint compound 20 kg (pail)", "unit", 24, { retail: R("composé à joints tout usage 20 kg") }),144  I("DRYWALL-TAPE-250FT", "09", "interior", "Ruban à joints 250 pi (rouleau)", "Joint tape 250 ft (roll)", "unit", 9, { retail: R("ruban à joints papier 250 pi") }),145  I("CORNER-BEAD-8FT", "09", "interior", "Renfort de coin 8 pi", "Corner bead 8 ft", "unit", 5, { retail: R("renfort de coin métallique 8 pi") }),146  I("PAINT-INT-GAL", "09", "interior", "Peinture intérieure latex 3,78 L", "Interior latex paint 3.78 L", "unit", 52, { trade: "peintre", retail: R("peinture intérieure latex mat 3,78 L") }),147  I("PRIMER-GAL", "09", "interior", "Apprêt latex 3,78 L", "Latex primer 3.78 L", "unit", 38, { trade: "peintre", retail: R("apprêt scellant latex 3,78 L") }),148  I("PAINT-EXT-GAL", "09", "envelope", "Peinture extérieure 3,78 L", "Exterior paint 3.78 L", "unit", 65, { trade: "peintre", retail: R("peinture extérieure acrylique 3,78 L") }),149  I("TRIM-BASEBOARD-MDF", "09", "interior", "Plinthe MDF apprêtée 4 po (pi lin)", "Primed MDF baseboard 4 in (lin ft)", "pi_lin", 1.45, { trade: "charpentier", waste: 0.1, retail: R("plinthe MDF apprêtée 4 po 12 pi", 12, "longueur") }),150  I("TRIM-CASING-MDF", "09", "interior", "Cadrage MDF apprêté 2 3/4 po (pi lin)", "Primed MDF casing 2 3/4 in (lin ft)", "pi_lin", 1.3, { trade: "charpentier", waste: 0.1, retail: R("cadrage MDF apprêté 2 3/4 po 7 pi", 7, "longueur") }),151  I("FLOOR-HARDWOOD-OAK", "09", "interior", "Plancher de bois franc chêne 3 1/4 po (pi²)", "Oak hardwood flooring 3 1/4 in (sq ft)", "pi2", 6.2, { trade: "charpentier", waste: 0.08, retail: R("plancher bois franc chêne 3 1/4 po", 20, "boîte") }),152  I("FLOOR-ENGINEERED", "09", "interior", "Plancher d'ingénierie (pi²)", "Engineered wood flooring (sq ft)", "pi2", 5.4, { trade: "charpentier", waste: 0.08, retail: R("plancher bois d'ingénierie", 20, "boîte") }),153  I("FLOOR-VINYL-PLANK", "09", "interior", "Plancher de vinyle SPC (pi²)", "SPC vinyl plank flooring (sq ft)", "pi2", 2.9, { trade: "poseur_revetements", waste: 0.08, retail: R("plancher de vinyle SPC planche", 23.6, "boîte") }),154  I("FLOOR-LAMINATE", "09", "interior", "Plancher flottant stratifié (pi²)", "Laminate flooring (sq ft)", "pi2", 1.9, { trade: "poseur_revetements", waste: 0.08, retail: R("plancher flottant stratifié 12 mm", 20, "boîte") }),155  I("FLOOR-CARPET", "09", "interior", "Tapis résidentiel (pi²)", "Residential carpet (sq ft)", "pi2", 2.6, { trade: "poseur_revetements", waste: 0.1, retail: R("tapis résidentiel pi²") }),156  I("TILE-CERAMIC-12X24", "09", "interior", "Carreau de céramique 12 × 24 po (pi²)", "Ceramic tile 12 × 24 in (sq ft)", "pi2", 2.8, { trade: "carreleur", waste: 0.1, retail: R("carreaux de céramique 12 x 24", 15.5, "boîte") }),157  I("TILE-PORCELAIN", "09", "interior", "Carreau de porcelaine (pi²)", "Porcelain tile (sq ft)", "pi2", 4.2, { trade: "carreleur", waste: 0.1, retail: R("carreaux de porcelaine 12 x 24", 15.5, "boîte") }),158  I("TILE-WALL-SUBWAY", "09", "kitchen", "Carreau mural (dosseret, douche) pi²", "Wall tile (backsplash, shower) sq ft", "pi2", 3.6, { trade: "carreleur", waste: 0.1, retail: R("carreaux muraux céramique 3 x 6 subway", 10.7, "boîte") }),159  I("THINSET-22KG", "09", "interior", "Mortier-colle 22 kg (sac)", "Thinset mortar 22 kg (bag)", "unit", 26, { retail: R("mortier-colle modifié 22 kg") }),160  I("GROUT-4.5KG", "09", "interior", "Coulis 4,5 kg (sac)", "Grout 4.5 kg (bag)", "unit", 22, { retail: R("coulis sans sable 4,5 kg") }),161  I("TILE-BACKER-1/4", "09", "interior", "Panneau d'appui pour carreaux 1/4 po (pi²)", "Tile backer board 1/4 in (sq ft)", "pi2", 1.2, { waste: 0.08, retail: R("panneau de ciment 1/4 po 3 x 5", 15, "feuille") }),162  I("UNDERLAY-FOAM", "09", "interior", "Sous-couche de plancher (pi²)", "Flooring underlayment (sq ft)", "pi2", 0.3, { waste: 0.05, retail: R("sous-couche plancher flottant 100 pi²", 100, "rouleau") }),163  I("STAIR-TREADS-OAK", "09", "interior", "Marche de chêne 42 po", "Oak stair tread 42 in", "unit", 65, { trade: "charpentier", retail: R("marche d'escalier chêne 42 po") }),164  I("STAIR-RAILING", "09", "interior", "Main courante et balustrade (pi lin)", "Handrail and balustrade (lin ft)", "pi_lin", 45, { trade: "charpentier", refNote: "Système de rampe intérieure bois — référence 2026." }),165  I("CLOSET-SHELVING", "09", "interior", "Tablette et tringle de garde-robe (pi lin)", "Closet shelf and rod (lin ft)", "pi_lin", 12, { trade: "charpentier", retail: R("tablette de garde-robe mélamine 12 po x 8 pi", 8, "longueur") }),166167  /* ------------------------------------------------------------- 12 cuisine */168  I("CAB-ECON", "12", "kitchen", "Armoires de mélamine (base + haut, pi lin)", "Melamine cabinets (base + upper, lin ft)", "pi_lin", 180, { trade: "charpentier", quality: "economy", retail: R("armoire de cuisine base mélamine 30 po", 2.5, "armoire"), refNote: "Pi lin = 1 armoire de base + 1 armoire haute de 12 po." }),169  I("CAB-STD", "12", "kitchen", "Armoires thermoplastique/polyester (pi lin)", "Thermofoil/polyester cabinets (lin ft)", "pi_lin", 300, { trade: "charpentier", quality: "standard", refNote: "Devis ébénisterie de série — référence 2026." }),170  I("CAB-SUP", "12", "kitchen", "Armoires MDF peint / bois, fermeture douce (pi lin)", "Painted MDF / wood cabinets, soft-close (lin ft)", "pi_lin", 480, { trade: "charpentier", quality: "superior", refNote: "Devis ébénisterie sur mesure — référence 2026." }),171  I("CAB-PRESTIGE", "12", "kitchen", "Armoires haut de gamme bois massif/laque (pi lin)", "High-end solid wood/lacquer cabinets (lin ft)", "pi_lin", 750, { trade: "charpentier", quality: "prestige", refNote: "Devis ébénisterie haut de gamme — référence 2026." }),172  I("COUNTER-LAMINATE", "12", "kitchen", "Comptoir stratifié postformé (pi lin)", "Post-formed laminate countertop (lin ft)", "pi_lin", 45, { trade: "charpentier", waste: 0.1, retail: R("comptoir stratifié postformé 8 pi", 8, "longueur") }),173  I("COUNTER-QUARTZ", "12", "kitchen", "Comptoir de quartz fabriqué et posé (pi²)", "Quartz countertop fabricated and installed (sq ft)", "pi2", 85, { refNote: "Prix fabricant posé — référence 2026 (la pose est incluse dans le prix fabricant)." }),174  I("COUNTER-GRANITE", "12", "kitchen", "Comptoir de granit fabriqué et posé (pi²)", "Granite countertop fabricated and installed (sq ft)", "pi2", 95, { refNote: "Prix fabricant posé — référence 2026." }),175  I("SINK-KITCHEN-SS", "22", "kitchen", "Évier de cuisine acier inoxydable double", "Double stainless-steel kitchen sink", "unit", 260, { trade: "plombier", retail: R("évier de cuisine acier inoxydable double cuve") }),176  I("FAUCET-KITCHEN", "22", "kitchen", "Robinet de cuisine à bec rétractable", "Pull-down kitchen faucet", "unit", 220, { trade: "plombier", retail: R("robinet de cuisine bec rétractable") }),177  I("RANGE-HOOD", "23", "kitchen", "Hotte de cuisinière 30 po", "Range hood 30 in", "unit", 250, { trade: "electricien", retail: R("hotte de cuisinière 30 po") }),178179  /* ------------------------------------------------------ 22 salle de bain */180  I("TOILET", "22", "bathroom", "Toilette 2 pièces 4,8 L", "Two-piece toilet 4.8 L", "unit", 260, { trade: "plombier", retail: R("toilette 2 pièces 4,8 L allongée") }),181  I("VANITY-36", "22", "bathroom", "Meuble-lavabo 36 po avec dessus", "Vanity 36 in with top", "unit", 480, { trade: "charpentier", retail: R("meuble-lavabo 36 po avec dessus") }),182  I("VANITY-60-DOUBLE", "22", "bathroom", "Meuble-lavabo double 60 po avec dessus quartz", "Double vanity 60 in with quartz top", "unit", 1100, { trade: "charpentier", retail: R("meuble-lavabo double 60 po quartz") }),183  I("FAUCET-LAV", "22", "bathroom", "Robinet de lavabo", "Bathroom sink faucet", "unit", 130, { trade: "plombier", retail: R("robinet de lavabo salle de bain") }),184  I("TUB-ALCOVE-60", "22", "bathroom", "Baignoire en alcôve 60 po acrylique", "Alcove bathtub 60 in acrylic", "unit", 480, { trade: "plombier", retail: R("baignoire en alcôve 60 po acrylique") }),185  I("TUB-FREESTANDING", "22", "bathroom", "Baignoire autoportante acrylique", "Freestanding acrylic bathtub", "unit", 1400, { trade: "plombier", retail: R("baignoire autoportante acrylique 60 po") }),186  I("SHOWER-BASE-48", "22", "bathroom", "Base de douche 48 × 32 po", "Shower base 48 × 32 in", "unit", 420, { trade: "plombier", retail: R("base de douche acrylique 48 x 32") }),187  I("SHOWER-DOOR-GLASS", "22", "bathroom", "Porte de douche en verre trempé", "Tempered-glass shower door", "unit", 620, { trade: "charpentier", retail: R("porte de douche verre trempé 48 po") }),188  I("TUB-SHOWER-FAUCET", "22", "bathroom", "Robinetterie bain-douche", "Tub/shower faucet set", "unit", 260, { trade: "plombier", retail: R("robinet de bain-douche") }),189  I("BATH-ACCESSORIES", "10", "bathroom", "Accessoires de salle de bain (ensemble)", "Bathroom accessory set", "unit", 120, { retail: R("ensemble d'accessoires de salle de bain") }),190  I("EXHAUST-FAN", "23", "bathroom", "Ventilateur de salle de bain 80 PCM", "Bathroom exhaust fan 80 CFM", "unit", 140, { trade: "electricien", retail: R("ventilateur de salle de bain 80 PCM") }),191  I("MIRROR", "10", "bathroom", "Miroir de salle de bain", "Bathroom mirror", "unit", 120, { retail: R("miroir de salle de bain 36 po") }),192193  /* ----------------------------------------------------------- 22 plomberie */194  I("PEX-1/2", "22", "plumbing", "Tuyau PEX 1/2 po (pi lin)", "PEX pipe 1/2 in (lin ft)", "pi_lin", 0.55, { trade: "plombier", waste: 0.05, retail: R("tuyau PEX 1/2 po 100 pi", 100, "rouleau") }),195  I("PEX-3/4", "22", "plumbing", "Tuyau PEX 3/4 po (pi lin)", "PEX pipe 3/4 in (lin ft)", "pi_lin", 0.95, { trade: "plombier", waste: 0.05, retail: R("tuyau PEX 3/4 po 100 pi", 100, "rouleau") }),196  I("PEX-FITTINGS", "22", "plumbing", "Raccord PEX", "PEX fitting", "unit", 4.5, { retail: R("raccord PEX 1/2 po coude") }),197  I("ABS-3IN", "22", "plumbing", "Tuyau ABS 3 po (pi lin)", "ABS pipe 3 in (lin ft)", "pi_lin", 3.2, { trade: "plombier", waste: 0.05, retail: R("tuyau ABS 3 po 12 pi", 12, "longueur") }),198  I("ABS-1.5IN", "22", "plumbing", "Tuyau ABS 1 1/2 po (pi lin)", "ABS pipe 1 1/2 in (lin ft)", "pi_lin", 1.7, { trade: "plombier", waste: 0.05, retail: R("tuyau ABS 1 1/2 po 12 pi", 12, "longueur") }),199  I("ABS-FITTINGS", "22", "plumbing", "Raccord ABS", "ABS fitting", "unit", 6.0, { retail: R("raccord ABS 3 po coude") }),200  I("PLUMB-ROUGH-MISC", "22", "plumbing", "Fournitures de plomberie brute (par appareil)", "Rough plumbing sundries (per fixture)", "unit", 120, { refNote: "Supports, colle, robinets d'arrêt, siphons — hypothèse par appareil." }),201  I("WATER-HEATER-60GAL", "22", "plumbing", "Chauffe-eau électrique 60 gal", "Electric water heater 60 gal", "unit", 900, { trade: "plombier", retail: R("chauffe-eau électrique 60 gallons") }),202  I("SUMP-PUMP", "22", "plumbing", "Pompe de puisard", "Sump pump", "unit", 260, { trade: "plombier", retail: R("pompe de puisard 1/3 HP") }),203  I("BACKWATER-VALVE", "22", "plumbing", "Clapet antiretour 4 po", "Backwater valve 4 in", "unit", 180, { trade: "plombier", retail: R("clapet anti-retour 4 po") }),204  I("HOSE-BIB", "22", "plumbing", "Robinet extérieur antigel", "Frost-free hose bib", "unit", 45, { trade: "plombier", retail: R("robinet extérieur antigel") }),205  I("SERVICE-CONNECTIONS", "33", "site", "Raccordements aqueduc/égout/électricité (forfait)", "Water/sewer/electrical service connections (lump)", "lump", 6500, { refNote: "Conduites de branchement et frais municipaux typiques — hypothèse forfaitaire 2026." }),206207  /* ----------------------------------------------------------------- 23 CVCA */208  I("HEATPUMP-CENTRAL-3T", "23", "hvac", "Thermopompe centrale 3 tonnes (équipement)", "Central heat pump 3 tons (equipment)", "unit", 6800, { trade: "frigoriste", refNote: "Équipement (unité extérieure + serpentin) — référence distributeur 2026." }),209  I("HEATPUMP-WALL-12K", "23", "hvac", "Thermopompe murale 12 000 BTU", "Wall-mounted heat pump 12,000 BTU", "unit", 2400, { trade: "frigoriste", retail: R("thermopompe murale 12000 BTU") }),210  I("FURNACE-ELECTRIC-20KW", "23", "hvac", "Fournaise électrique 20 kW", "Electric furnace 20 kW", "unit", 1900, { trade: "frigoriste", retail: R("fournaise électrique 20 kW") }),211  I("FURNACE-GAS-60K", "23", "hvac", "Fournaise au gaz 60 000 BTU haute efficacité", "Gas furnace 60,000 BTU high-efficiency", "unit", 3200, { trade: "frigoriste", refNote: "Référence distributeur 2026." }),212  I("CENTRAL-AC-2.5T", "23", "hvac", "Climatiseur central 2,5 tonnes", "Central air conditioner 2.5 tons", "unit", 4200, { trade: "frigoriste", refNote: "Référence distributeur 2026." }),213  I("DUCT-SHEETMETAL", "23", "hvac", "Conduits de ventilation (par pi² de plancher desservi)", "Ductwork (per sq ft floor served)", "pi2", 1.8, { trade: "ferblantier", refNote: "Tôle, raccords, grilles — référence par pi² desservi." }),214  I("HRV", "23", "hvac", "Échangeur d'air (VRC)", "Heat-recovery ventilator (HRV)", "unit", 1300, { trade: "ferblantier", retail: R("échangeur d'air VRC") }),215  I("BASEBOARD-1500W", "23", "hvac", "Plinthe électrique 1 500 W", "Electric baseboard heater 1,500 W", "unit", 75, { trade: "electricien", retail: R("plinthe électrique 1500 W 240 V") }),216  I("THERMOSTAT", "23", "hvac", "Thermostat électronique de plinthe", "Electronic baseboard thermostat", "unit", 45, { trade: "electricien", retail: R("thermostat électronique 240 V") }),217  I("THERMOSTAT-CENTRAL", "23", "hvac", "Thermostat central programmable", "Programmable central thermostat", "unit", 180, { trade: "electricien", retail: R("thermostat intelligent central") }),218219  /* ---------------------------------------------------------- 26 électricité */220  I("PANEL-200A-40", "26", "electrical", "Panneau électrique 200 A, 40 circuits", "Electrical panel 200 A, 40 circuits", "unit", 420, { trade: "electricien", retail: R("panneau électrique 200 A 40 circuits") }),221  I("BREAKER-15A", "26", "electrical", "Disjoncteur 15 A", "Breaker 15 A", "unit", 12, { retail: R("disjoncteur unipolaire 15 A") }),222  I("WIRE-14/2", "26", "electrical", "Câble NMD90 14/2 (pi lin)", "NMD90 cable 14/2 (lin ft)", "pi_lin", 0.95, { trade: "electricien", waste: 0.05, retail: R("câble électrique NMD90 14/2 75 m", 246, "rouleau") }),223  I("WIRE-12/2", "26", "electrical", "Câble NMD90 12/2 (pi lin)", "NMD90 cable 12/2 (lin ft)", "pi_lin", 1.35, { trade: "electricien", waste: 0.05, retail: R("câble électrique NMD90 12/2 75 m", 246, "rouleau") }),224  I("BOX-DEVICE", "26", "electrical", "Boîte de dispositif", "Device box", "unit", 1.8, { retail: R("boîte électrique 1 dispositif") }),225  I("RECEPTACLE", "26", "electrical", "Prise 15 A inviolable", "Tamper-resistant receptacle 15 A", "unit", 3.5, { retail: R("prise de courant 15 A inviolable") }),226  I("SWITCH", "26", "electrical", "Interrupteur unipolaire", "Single-pole switch", "unit", 4.0, { retail: R("interrupteur unipolaire 15 A") }),227  I("GFCI", "26", "electrical", "Prise DDFT 15 A", "GFCI receptacle 15 A", "unit", 28, { retail: R("prise DDFT 15 A") }),228  I("COVER-PLATE", "26", "electrical", "Plaque murale", "Cover plate", "unit", 1.2, { retail: R("plaque murale simple") }),229  I("LIGHT-FIXTURE-STD", "26", "electrical", "Luminaire DEL encastré 4 po", "LED recessed light 4 in", "unit", 65, { trade: "electricien", retail: R("luminaire DEL encastré 4 po") }),230  I("LIGHT-FIXTURE-EXT", "26", "electrical", "Luminaire extérieur", "Exterior light fixture", "unit", 85, { trade: "electricien", retail: R("luminaire extérieur mural") }),231  I("SMOKE-CO-DETECTOR", "26", "electrical", "Détecteur de fumée et CO", "Smoke/CO detector", "unit", 55, { retail: R("détecteur de fumée et monoxyde de carbone 120 V") }),232  I("SERVICE-MAST-200A", "26", "electrical", "Entrée électrique 200 A (mât, câble, mise à la terre)", "200 A service entrance (mast, cable, grounding)", "lump", 950, { trade: "electricien", refNote: "Fournitures d'entrée électrique — hypothèse forfaitaire 2026." }),233  I("METER-BASE", "26", "electrical", "Embase de compteur 200 A", "Meter base 200 A", "unit", 180, { retail: R("embase de compteur 200 A") }),234  I("EV-CHARGER-CIRCUIT", "26", "electrical", "Circuit de recharge VÉ 40 A (câble, borne)", "EV charging circuit 40 A (cable, charger)", "lump", 900, { trade: "electricien", refNote: "Borne niveau 2 + câble — hypothèse 2026." }),235236  /* --------------------------------------------- 31/32 site et extérieur */237  I("EXCAVATOR-HOUR", "31", "excavation", "Location pelle mécanique (heure, sans opérateur)", "Excavator rental (hour, bare)", "h", 115, { cls: "equipment", refNote: "Location d'une pelle 8-14 t — référence locateur 2026." }),238  I("TRUCK-HAUL", "31", "excavation", "Transport de déblais (m³)", "Spoil hauling (m³)", "m3", 18, { cls: "equipment", refNote: "Camion 10 roues — référence 2026." }),239  I("ASPHALT-DRIVEWAY", "32", "exterior", "Enrobé bitumineux et fondation granulaire (pi²)", "Asphalt mix and granular base (sq ft)", "pi2", 2.6, { refNote: "Matériaux seulement (fondation 0-3/4 + enrobé 2 po) — référence 2026." }),240  I("PAVER-STONE", "32", "exterior", "Pavé de béton (pi²)", "Concrete paver (sq ft)", "pi2", 4.8, { trade: "briqueteur", waste: 0.05, retail: R("pavé de béton pi²") }),241  I("SOD", "32", "exterior", "Gazon en plaques (pi²)", "Sod (sq ft)", "pi2", 0.65, { waste: 0.05, retail: R("gazon en plaques rouleau 10 pi²", 10, "rouleau") }),242  I("FENCE-PANEL-WOOD", "32", "exterior", "Panneau de clôture bois 6 × 8 pi (pi lin)", "Wood fence panel 6 × 8 ft (lin ft)", "pi_lin", 12, { trade: "charpentier", retail: R("panneau de clôture bois traité 6 x 8", 8, "panneau") }),243  I("DECK-RAILING-ALU", "32", "exterior", "Rampe d'aluminium (pi lin)", "Aluminum railing (lin ft)", "pi_lin", 55, { trade: "charpentier", retail: R("rampe aluminium 6 pi", 6, "section") }),244  I("STEPS-PRECAST", "03", "exterior", "Marches préfabriquées en béton (3 marches)", "Precast concrete steps (3 risers)", "unit", 650, { refNote: "Référence fabricant 2026." }),245  I("TREATED-2X6-12", "06", "exterior", "Bois traité 2 × 6 × 12 pi", "Treated lumber 2 × 6 × 12 ft", "unit", 18, { trade: "charpentier", waste: 0.07, retail: R("bois traité brun 2 x 6 x 12") }),246  I("TREATED-5/4X6-12", "06", "exterior", "Planche de terrasse traitée 5/4 × 6 × 12 pi", "Treated deck board 5/4 × 6 × 12 ft", "unit", 15, { trade: "charpentier", waste: 0.1, retail: R("planche de terrasse bois traité 5/4 x 6 x 12") }),247  I("TREATED-2X8-12", "06", "exterior", "Bois traité 2 × 8 × 12 pi", "Treated lumber 2 × 8 × 12 ft", "unit", 24, { trade: "charpentier", waste: 0.07, retail: R("bois traité brun 2 x 8 x 12") }),248  I("TREATED-4X4-8", "06", "exterior", "Poteau traité 4 × 4 × 8 pi", "Treated post 4 × 4 × 8 ft", "unit", 16, { trade: "charpentier", waste: 0.03, retail: R("bois traité brun 4 x 4 x 8") }),249  I("TREATED-6X6-10", "06", "exterior", "Poteau traité 6 × 6 × 10 pi", "Treated post 6 × 6 × 10 ft", "unit", 45, { trade: "charpentier", waste: 0.03, retail: R("bois traité brun 6 x 6 x 10") }),250  I("POOL-ABOVEGROUND", "13", "exterior", "Piscine hors terre 21 pi (ensemble)", "Above-ground pool 21 ft (kit)", "lump", 6500, { refNote: "Ensemble avec filtre/pompe — référence détaillant 2026." }),251  I("POOL-INGROUND", "13", "exterior", "Piscine creusée 16 × 32 pi (clé en main)", "Inground pool 16 × 32 ft (turnkey)", "lump", 55000, { refNote: "Devis piscinier clé en main — référence 2026." }),252];253254export const ITEM_BY_CODE = new Map(ITEM_SEEDS.map((i) => [i.code, i]));255