Vue d'ensemble

Principes transversaux & inventaire des nouveautés
Ce document décrit la couche de calcul des quantités du chiffrage automatisé. Elle est strictement séparée de la couche d'apparition (déjà spécifiée). Chaque onglet = un lot : d'abord ce qui a été ajouté ou modifié (nouvelles sources, variables, logique), puis le tableau des fiches de calcul.

Les 6 principes transversaux

1Apparition ≠ Quantité. Les règles décident si une prestation apparaît ; ces fiches décident seulement de la quantité une fois déclenchée.
2Deux archétypes. A = forfait global (quantité 1, prix modulé par coefficients). B = quantité réelle (m²/ml/nb), prix = base_price[quality_level] sans coefficient de taille.
3Données client fiables vs analyse faillible. Une donnée d'analyse (existing_floor_finish, has_radiator…) ne peut jamais faire tomber une quantité à 0. « inconnu / absent » = on inclut.
4ratio_sémantique = multiplicateur, jamais une source. Le LLM applique un ratio (0 → 1+) à une source géométrique réelle. Défaut 0 pour les ouvrages à ancrage sémantique pur (pas de mention = pas de ligne).
5Exclusivité à l'apparition. Un seul sol / WC / plan de travail par pièce : géré par l'apparition, jamais par un dédoublonnage de quantité.
6quality_level = prix uniquement. La gamme choisit la colonne de prix et le produit ; elle ne déclenche ni ne quantifie rien.

Sources métier Bernadette Studio créées 7 nouvelles

Ce sont des calculs internes backend, pas des saisies client. Aucune n'ajoute de donnée à saisir.
SourceLotDéfinition
bs_elec_countÉlectricitéNb de points électriques par pièce rénovée (room_type + room.surface, base NF C 15-100).
bs_triggered_countÉlectricitéNb d'équipements alimentés déclenchés (sorties de câble).
bs_plumbing_linearPlomberieml de réseau par pièce humide × coef de taille.
bs_water_pointsPlomberie / SDBNb de points d'eau (robinets, mitigeurs).
bs_radiator_countCVC1 radiateur par pièce à chauffer.
bs_vmc_countCVC1 VMC si ≤80 m², 2 si >80 m².
bs_kitchen_linearCuisineLinéaire cuisine = (length_m + width_m) × ratio.

Coefficients internes créés

CoefficientLotBarème
coef_niveau_renovationLot 0complète 1,0 · partielle 0,8 · rafraîchissement 0,5
coef_surface_lot0Lot 01,0 → 3,5 selon surface_totale_m2
coef_etageLot 01,0 → 1,75 selon property_floor_level
coef_niveau_elecÉlectricitécomplète 1,0 · partielle 0,6 · rafraîchissement 0,0
coef_taille_plomberiePlomberie1,0 → 1,6 selon surface_totale_m2

Variables à créer (non présentes dans l'existant)

À CRÉERtype_habitat (appartement / maison)
Pour ELEC-024 (interphone) et la protection des parties communes. Proxy actuel : property_floor_level > 0.
À CRÉERduree_chantier_semaines
Envisagée mais non retenue en V1 pour le nettoyage courant (traité en forfait).

Légende des étiquettes

CLIENT donnée saisie (écran 0/1/2) — fiable, peut être bloquante MOTEUR source de quantité existante (fournie par les devs) MÉTIER source Bernadette créée — calcul interne, nouveau LOGIQUE règle de raisonnement transversale À CRÉER donnée non présente dans l'existant

Lot 0 — Préparation

Installation de chantier, protections, nettoyage
LOGIQUEArchétype A — forfaits globaux
Toutes les prestations du lot sont des forfaits : la quantité est toujours 1. Ce sont les coefficients de prix (et non la quantité) qui reflètent le projet.
MÉTIERcoef_niveau_renovation NOUVEAU
Coefficient interne (backend) : complète 1,00 · partielle 0,80 · rafraîchissement 0,50. Fallback absent = 1,00.
MÉTIERcoef_surface_lot0 NOUVEAU
Coefficient interne selon surface_totale_m2 : ≤30→1,0 · 30-50→1,5 · 50-80→2,0 · 80-120→2,75 · >120→3,5.
MÉTIERcoef_etage NOUVEAU
Coefficient interne selon property_floor_level : RDC→1,0 · +1→1,10 · +2→1,20 · +3→1,35 · +4→1,50 · ≥5→1,75.
LOGIQUEPrestations fusionnées
La liste a été simplifiée (8 → 4). PRE-001 regroupe installation + protection des sols + nettoyage courant.
À CRÉERÀ vérifier — ré-ancrage du base_price
Les coefficients partent de 1,0 à ≤30 m². Le base_price doit donc être le prix d'un petit chantier de référence, sinon inflation (double comptage avec coef_surface).

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
PRE-001Installation chantier + protection sols + nettoyage courantfixed_price1Quantité 1. Prix = base_price[quality_level] × coef_niveau × coef_surface
PRE-002Protection parties communesfixed_price1Quantité 1. Prix = base × coef_niveau × coef_etage
PRE-003Manutention & approvisionnementfixed_price1Quantité 1. Prix = base × coef_niveau × coef_surface × coef_etage
PRE-004Nettoyage fin de chantierfixed_price1Quantité 1. Prix = base × coef_niveau × coef_surface

Lot 1 — Démolition / Dépose

Déposes de revêtements, sanitaires, menuiseries, évacuation
LOGIQUEPrincipe fondateur : l'analyse n'est jamais bloquante
Une donnée d'analyse (existing_floor_finish, has_radiator…) ne peut jamais faire tomber une quantité à 0. Base fiable = room_to_renovate + room.surface. « inconnu / absent » = on inclut.
CLIENTdoors_to_renovate / windows_to_renovate NOUVEAU (client)
Checkboxes écran 2. Pilotent la dépose porte/fenêtre via doors_count / windows_count.
LOGIQUEDEM-003 : quantité par sémantique
La démolition de cloison n'a aucun ancrage géométrique. La quantité (m²) est déduite du texte projet — jamais inventée par un ratio.
MOTEURSignaux d'analyse en OU
Ex. dépose radiateur = has_radiator OU visible_plumbing OU type_chauffage à eau, pour ne pas rater le cas si l'analyse est muette.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
DEM-001Dépose revêtements de solsfloor_area_m2room.surface, sinon length_m×width_mΣ room.surface des pièces où room_to_renovate=1 (aucun filtre sur existing_floor_finish)
DEM-002Dépose revêtements murauxwall_area_m2perimeter_m × 2,5Σ wall_area_m2 des pièces où room_to_renovate=1
DEM-003Démolition cloison légèrewall_area_m2manualratio_sémantique · défaut 0wall_area_m2 des pièces où DEM-003 est déclenchée (le multiplicateur donne la fraction de mur à abattre)
DEM-004Dépose faux plafondceiling_area_m2room.surfaceΣ ceiling_area_m2 des pièces déclenchées où room_to_renovate=1
DEM-005Dépose cuisine existantefixed_price11 si room_type=kitchen OU presence_cuisine=1, avec room_to_renovate=1
DEM-006Dépose salle de bain existanterooms_count1Nb de pièces où room_bathroom_type ∈ {salle_de_bain, salle_d_eau} OU visible_plumbing=1, room_to_renovate=1
DEM-007Dépose appareil sanitaire (WC)rooms_count1Nb de pièces où room_bathroom_type=wc ET room_to_renovate=1
DEM-008Dépose radiateurrooms_count1Nb de pièces room_to_renovate=1 ET has_radiator=1 (si dispo) ; sinon 1 par pièce à rénover
DEM-009Dépose porte intérieuredoors_count1/pièceΣ doors_count des pièces où doors_to_renovate=1
DEM-010Dépose fenêtrewindows_count1/pièceΣ windows_count des pièces où windows_to_renovate=1
DEM-011Évacuation gravats + tri sélectiffixed_price11 forfait global si ≥1 dépose/démolition déclenchée. Archétype A : prix = base × coef_niveau × coef_surface

Lot 2 — Cloisons / Isolation / Faux plafonds

Créations, doublages, isolation, faux plafonds
LOGIQUEratio_sémantique NOUVEAU (concept)
La sémantique n'est JAMAIS une quantity_source : c'est un multiplicateur (0 → 1+) appliqué à une source géométrique réelle (wall_area_m2…). Le LLM répond « quelle fraction ? », jamais « combien de m² ? ».
LOGIQUEDéfaut ratio_sémantique = 0
Pour les ouvrages à ancrage sémantique pur (cloisons, coffrage), pas de mention dans la description = pas de ligne. La sémantique conditionne alors aussi l'apparition.
CLIENTIsolation = 2 conditions client obligatoires
PLA-005/007 exigent surface_a_isoler contient {murs|plafonds} ET type_isolation=isolation_interieure. L'isolation par l'extérieur ne déclenche jamais ces prestations d'ITI.
LOGIQUEForfait modulable par ratio
PLA-010 : fixed_price=1 mais le ratio_sémantique peut l'annuler (0) ou le pondérer.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
PLA-001Cloisonnement (création)wall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0wall_area_m2
PLA-002Cloison hydrofuge BA13wall_area_m2perimeter_m × 2,5idem · défaut 0
PLA-003Cloison acoustique renforcéewall_area_m2perimeter_m × 2,5idem · défaut 0
PLA-004Doublage murwall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0wall_area_m2
PLA-005Isolation thermique mur (intérieur)wall_area_m2perimeter_m × 2,5Σ wall_area_m2 des pièces room_to_renovate=1 ET surface_a_isoler contient murs ET type_isolation=isolation_interieure
PLA-006Faux plafond BA13ceiling_area_m2room.surfaceratio_sémantique · défaut 1Si niveau_renovation=complete : Σ ceiling_area_m2 des pièces room_type ∈ {couloir, dégagement, entrée, buanderie, salle_de_bain, salle_d_eau}. Sinon
PLA-007Faux plafond acoustique / isoléceiling_area_m2room.surfaceratio_sémantique · défaut 1Σ ceiling_area_m2 des pièces room_to_renovate=1 ET surface_a_isoler contient plafonds ET type_isolation=isolation_interieure · complément
PLA-008Coffrage (habillage réseaux)linear_meters_totalperimeter_mratio_sémantique · défaut 0linear_meters_total
PLA-009Trappe de visiterooms_count1Nb de pièces où un faux plafond/coffrage est déclenché
PLA-010Reprise encadrement / supportfixed_price1ratio_sémantique · défaut 0(voir source)

Électricité

Points, circuits, appareillage, alimentations
MÉTIERbs_elec_count NOUVEAU (source métier)
Nombre d'appareillages électriques, calculé par pièce où room_to_renovate=1, selon room_type et room.surface. S'appuie sur les minimums NF C 15-100. AUCUNE variable client nouvelle.
MÉTIERbs_triggered_count NOUVEAU (source métier)
Nombre d'équipements alimentés déclenchés (via triggered_prestations.codes) — pour les sorties de câble.
MÉTIERcoef_niveau_elec NOUVEAU (coef)
complète 1,00 · partielle 0,60 · rafraîchissement 0,00 (électricité hors périmètre).
LOGIQUEFusion appareillage
ELEC-013/014/015 fusionnés en ELEC-013 : l'appareillage = total des points ; la gamme ne joue que sur le prix.
À CRÉERtype_habitat À CRÉER
ELEC-024 (interphone) : proxy property_floor_level>0 en attendant une variable appartement/maison.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
ELEC-001Mise en sécurité électriquefixed_price11 forfait global si électricité dans le périmètre
ELEC-002Tableau électriquefixed_price11 global · prix modulé par la taille du projet
ELEC-003Prise 16Abs_elec_countroom_type inconnu → 1/pièceΣ pièces room_to_renovate=1 : séjour max(5, ⌈room.surface/4⌉), cuisine 6 (3 si ≤4 m²), chambre 3, autres 1, WC 0 · × coef_niveau_elec
ELEC-004Interrupteur simplebs_elec_count1/pièceΣ pièces room_to_renovate=1 : 1/pièce (0 couloir) · × coef_niveau_elec
ELEC-005Va-et-vientbs_elec_count0Σ pièces room_to_renovate=1 : 1 (séjour, chambre, couloir) · × coef_niveau_elec
ELEC-006Point lumineuxbs_elec_count1/pièceΣ pièces room_to_renovate=1 : 1/pièce, cuisine 2 · × coef_niveau_elec
ELEC-007Prise 32Abs_elec_count0Σ pièces room_type=kitchen : 1 · × coef_niveau_elec
ELEC-008Prise 20Abs_elec_count0Σ pièces room_to_renovate=1 : cuisine 3 + buanderie 1 · × coef_niveau_elec
ELEC-009Prise RJ45bs_elec_count0Σ pièces room_to_renovate=1 : séjour 2 + chambre 1 · × coef_niveau_elec
ELEC-010Prise TVbs_elec_count0Σ pièces room_type=living_room : 1 · × coef_niveau_elec
ELEC-011Spotsrooms_count0ratio_sémantique · défaut 0rooms_count
ELEC-012Ruban LED (ml)linear_meters_total0ratio_sémantique · défaut 0(voir source)
ELEC-013Appareillage (fusion éco/std/premium)bs_elec_count= total pointsTotal des points posés (prises + interrupteurs + va-et-vient + RJ45 + TV) · × coef_niveau_elec
ELEC-016Sortie de câblesbs_triggered_count1Nb d'équipements alimentés déclenchés (ballon, radiateur, sèche-serviette, VMC…)
ELEC-017Alimentation ballonfixed_price11 par ballon ECS · triggered_by PLO-011 · lié type_eau_chaude=ballon_electrique
ELEC-018Alimentation VMCfixed_price11 par VMC · triggered_by CVC-007
ELEC-019Alimentation miroirrooms_count1Nb de SDB rénovées · triggered_by SDB-016
ELEC-020Prise commandéerooms_count0ratio_sémantique · défaut 0(voir source)
ELEC-021Prise USB-Crooms_count0ratio_sémantique · défaut 0(voir source)
ELEC-022Interrupteur variateurrooms_count0ratio_sémantique · défaut 0(voir source)
ELEC-023Télérupteur encastrérooms_count0ratio_sémantique · défaut 0(voir source)
ELEC-024Provision interphonefixed_price11 si project_type = apartment
ELEC-025Alimentation volet= MEN-025windows_count= quantité de MEN-025 (volets motorisés, triggered_by MEN-025)
ELEC-026Alimentation cave à vinfixed_price0ratio_sémantique · défaut 0(voir source)
ELEC-027Alimentation PAC / climfixed_price11 par attente clim · triggered_by CVC-008

Plomberie

Réseaux, sanitaires, robinetterie
MÉTIERbs_plumbing_linear NOUVEAU (source métier)
Mètres linéaires de réseau par pièce humide où room_to_renovate=1, pondérés par la taille du projet (coef_taille_plomberie).
MÉTIERbs_water_points NOUVEAU (source métier)
Nombre de points d'eau (équipements sanitaires posés, via triggered_prestations.codes) — pour compter les robinets.
MÉTIERcoef_taille_plomberie NOUVEAU (coef)
≤50→1,0 · 50-80→1,2 · 80-120→1,4 · >120→1,6.
LOGIQUEml_base par type de pièce
Alim EF+EC : SDB 8 / salle d'eau 6 / cuisine 5 ml. Évacuation : SDB 5 / salle d'eau 4 / cuisine 3 ml.
LOGIQUEPrestations « non spécifiées V1 »
PLO-003/012/014/015 → ratio_sémantique défaut 0 : n'apparaissent que si la description les évoque.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
PLO-001Création alimentation EF/ECbs_plumbing_linearperimeter_m de la pièceΣ pièces humides rénovées : ml_base[type] × coef_taille_plomberie
PLO-002Création évacuation PVCbs_plumbing_linearperimeter_mΣ pièces humides rénovées : ml_base_évac[type] × coef_taille_plomberie
PLO-003Déplacement arrivée/évacuation existantemanual1À confirmer (non spécifié V1)
PLO-004Pose WC suspendurooms_count1Nb de WC rénovés · exclusif avec PLO-005
PLO-005Pose WC à poserrooms_count1Nb de WC rénovés · exclusif avec PLO-004
PLO-011Ballon eau chaudefixed_price11 · lié type_eau_chaude=ballon_electrique
PLO-012Raccordement électroménagermanual1À confirmer (non spécifié V1)
PLO-013Robinets / vannes d'arrêtbs_water_points2× 22 × bs_water_points (un point d'eau = 2 arrivées EF/EC)
PLO-014Déplacement WC sur colonne existantemanual1À confirmer (non spécifié V1)
PLO-015Remplacement vanne générale logementmanual1À confirmer (non spécifié V1)
PLO-016Raccordement pompe de relevagefixed_price11 (unité)

CVC — Chauffage / Ventilation

Radiateurs, VMC, chaudière, clim
MÉTIERbs_radiator_count NOUVEAU (source métier)
1 radiateur par pièce à chauffer (room_to_renovate=1, hors cuisine/pièces humides). L'analyse has_radiator confirme, ne bloque jamais.
MÉTIERbs_vmc_count NOUVEAU (source métier)
1 VMC si surface_totale_m2 ≤ 80, 2 si > 80. Fallback 1.
CLIENTtype_chauffage = donnée maîtresse
Aiguille radiateur électrique (CVC-002) vs eau chaude (CVC-003) — jamais les deux. Donnée client fiable, l'analyse n'ajuste qu'à la marge.
LOGIQUEExclusivité VMC / extracteur
VMC posée → bouches (CVC-005) ; sinon → extracteur individuel (CVC-006).

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
CVC-002Pose radiateur électriquebs_radiator_count1/pièceNb pièces room_to_renovate=1 (hors cuisine/humides) si type_chauffage=electrique
CVC-003Pose radiateur eau chaudebs_radiator_count1/pièceidem si type_chauffage ∈ {gaz, collectif, individuel}
CVC-004Déplacement radiateur eau chaudemanual1À confirmer (non spécifié V1)
CVC-005Création bouche VMCrooms_count1Nb de pièces humides rénovées
CVC-006Pose extracteur pièce humiderooms_count1Nb de pièces humides rénovées sans VMC
CVC-007Pose VMCbs_vmc_count11 par défaut ; 2 si nombre_etages > 1 (logement sur plusieurs niveaux)
CVC-008Attente climatisationmanual1À confirmer (non spécifié V1)
CVC-009Pose chaudière gaz condensationfixed_price11 si type_chauffage=gaz (lié type_eau_chaude=chaudiere)
CVC-010Pose robinet thermostatiquebs_radiator_count11 par radiateur eau chaude (triggered_by CVC-003) si type_chauffage ∈ {gaz, collectif, individuel}

Sols

Préparation, revêtements, plinthes
MOTEURAucune source métier
Le lot le plus propre : la surface au sol (floor_area_m2 / room.surface) est la donnée la plus fiable. Uniquement des sources moteur existantes.
LOGIQUEExclusivité : un seul sol par pièce
SOL-004 à 009/015 sont exclusifs dans une même pièce. Le calcul (room.surface) est identique ; c'est l'apparition qui tranche. La quantité ne dédoublonne pas.
LOGIQUELa préparation suit la pose
Primaire/ragréage/chape (SOL-001/002/003/013) se calculent une seule fois par pièce où un sol neuf est posé.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
SOL-001Primaire d'accrochagefloor_area_m2room.surfaceΣ surface des pièces où une pose de sol neuf est déclenchée
SOL-002Ragréage autolissantfloor_area_m2room.surfaceidem
SOL-003Ragréage fibréfloor_area_m2room.surfaceidem
SOL-004Sol PVC / stratifié (gamme éco)floor_area_m2room.surfaceΣ surface des pièces room_to_renovate=1 où le sol est refait
SOL-005Parquet contrecollé flottant (std)floor_area_m2room.surfaceidem
SOL-006Parquet contrecollé colléfloor_area_m2room.surfaceidem
SOL-007Parquet massif (premium)floor_area_m2room.surfaceidem
SOL-008Carrelage solfloor_area_m2room.surfaceΣ surface des pièces room_to_renovate=1 (pièces humides / cuisine)
SOL-009Carrelage petit format / mosaïquefloor_area_m2room.surfaceratio_sémantique · défaut 0(voir source)
SOL-010APlinthes boislinear_meters_totalperimeter_mΣ périmètre des pièces où sol bois posé
SOL-010BPlinthes carrelagelinear_meters_totalperimeter_mΣ périmètre des pièces où carrelage posé
SOL-011Barre de seuil / profilédoors_count1/pièceNb de passages entre pièces rénovées (≈ portes)
SOL-012Ponçage / vitrification parquetfloor_area_m2room.surfaceΣ surface des pièces existing_floor_finish=parquet conservé
SOL-013Chapefloor_area_m2room.surfaceΣ surface des pièces où pose de sol neuf ET niveau_renovation=complete
SOL-014Dalle OSB (support)floor_area_m2room.surfaceratio_sémantique · défaut 0(voir source)
SOL-015Jonc de mer / moquettefloor_area_m2room.surfaceΣ surface des pièces concernées
SOL-016Étanchéité sous carrelage (SEL)floor_area_m2room.surfaceΣ surface des pièces humides où carrelage sol posé (triggered_by SOL-008)

Peinture / Murs / Plafonds

Finitions et préparations
MOTEURAucune source métier
Tout tient sur wall_area_m2, ceiling_area_m2, doors_count et ratio_sémantique.
LOGIQUEPréparation en cascade
Une finition (PEI-006) entraîne à la pièce l'impression (PEI-005) et la préparation adaptée, toutes sur la même surface. L'analyse choisit le niveau de ratissage, sans jamais bloquer.
LOGIQUEDéfaut = préparation légère
Si wall_condition absent/inconnu, on retombe sur PEI-001 (léger) plutôt que 0, sans surfacturer un ratissage complet.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
PEI-001Préparation légère des murswall_area_m2perimeter_m × 2,5Σ murs des pièces room_to_renovate=1 où peinture murs déclenchée
PEI-003Ratissage partielwall_area_m2perimeter_m × 2,5idem · affiné par wall_condition=a_preparer (ne bloque pas)
PEI-004Ratissage completwall_area_m2perimeter_m × 2,5idem · affiné par wall_condition=degrade
PEI-005Impression murswall_area_m2perimeter_m × 2,5Σ murs des pièces où peinture murs déclenchée (systématique)
PEI-006Enduit & peinture murswall_area_m2perimeter_m × 2,5Σ murs des pièces room_to_renovate=1 (base du lot)
PEI-007Impression plafondsceiling_area_m2room.surfaceΣ plafonds des pièces où peinture plafond déclenchée
PEI-008Peinture plafondsceiling_area_m2room.surfaceΣ plafonds des pièces room_to_renovate=1 · affiné needs_ceiling_paint
PEI-009Peinture portedoors_count1/pièceΣ portes des pièces room_to_renovate=1
PEI-010Pose papier peintwall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0(voir source)
PEI-011Enduit décoratif / peinture premiumwall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0(voir source)
PEI-012Peinture prépa + finition BA13 neufwall_area_m2perimeter_m × 2,5= Σ des quantités de PLA-001 + PLA-004 + PLA-006 déclenchées (surfaces BA13 neuves)
PEI-013Dépose/repose radiateur pour peinturerooms_count1Nb de pièces peintes où type_chauffage ∈ {gaz, collectif, individuel} · triggered_by PEI-006
PEI-014Plus-value polychromierooms_count0ratio_sémantique · défaut 0(voir source)
PEI-015Entoilage fibre de verrewall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0(voir source)
PEI-016Entoilage de supportwall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0(voir source)

Salle de bain

Étanchéité, faïence, sanitaires
LOGIQUERéutilisation bs_water_points
Aucune source métier nouvelle — les mitigeurs réutilisent bs_water_points (créée en plomberie).
LOGIQUEExclusivité douche / baignoire
Receveur (SDB-007) et baignoire (SDB-013) ne sortent jamais ensemble. Défaut : salle_d_eau → douche ; salle_de_bain → baignoire. Paroi/colonne suivent la douche.
LOGIQUEFusion baignoire
SDB-013 et SDB-014 (avec/sans tablier) fusionnés en une ligne : le tablier est une option de prix.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
SDB-004Étanchéité sous carrelage (SEL/SPEC)floor_area_m2room.surfaceΣ surface des pièces humides rénovées où carrelage sol posé
SDB-005Carrelage muralwall_area_m2perimeter_m × 2,5ratio_sémantique (si demi-hauteur)Σ murs des pièces humides room_to_renovate=1
SDB-006Faïence petit format / calepinagewall_area_m2perimeter_m × 2,5ratio_sémantique · défaut 0(voir source)
SDB-007Receveur de doucherooms_count1Nb de pièces humides avec douche · exclusif baignoire
SDB-008Paroi / porte de doucherooms_count11 par douche posée (triggered_by SDB-007)
SDB-009Meuble vasquerooms_count11 meuble par SDB / salle d'eau (room_to_renovate=1). Double vasque = variante de prix, pas de quantité
SDB-010Colonne de doucherooms_count11 par douche posée (triggered_by SDB-007)
SDB-011Mitigeur lavabobs_water_points11 par vasque posée (2 si double vasque)
SDB-013Baignoire (fusion avec/sans tablier)rooms_count1Nb de SDB avec baignoire · exclusif douche
SDB-015Meuble colonne SDBrooms_count0ratio_sémantique · défaut 0(voir source)
SDB-016Pose miroir SDBrooms_count11 par SDB/salle d'eau rénovée

Cuisine

Meubles, plan de travail, crédence
MÉTIERbs_kitchen_linear NOUVEAU (source métier)
Linéaire de cuisine = (length_m + width_m) × ratio_sémantique — déduit des DIMENSIONS RÉELLES de la pièce cuisine dans le plan (implantation en L).
MOTEURFallback en cascade
Si length_m/width_m absents : 2×racine(room.surface), sinon perimeter_m×0,5, sinon 3 ml. Jamais 0.
LOGIQUEExclusivités
Plan de travail stratifié (CUI-006) vs pierre (CUI-007) ; crédence (CUI-008) vs premium (CUI-009). Un seul par cuisine, tranché à l'apparition.

Fiches de calcul des quantités

CodePrestationquantity_sourceFallbackMultiplicateurRègle de calcul (quantité)
CUI-001Fourniture meubles cuisinebs_kitchen_linearborné [2 ; 8] ml ; sinon 2×racine(room.surface)ratio_sémantique · défaut 1(length_m + width_m) de la cuisine rénovée
CUI-003Pose meubles cuisinebs_kitchen_linearborné [2 ; 8] ml= même linéaire (triggered_by CUI-001)
CUI-004Pose cuisine premium / ajustementsbs_kitchen_linear0ratio_sémantique · défaut 0(voir source)
CUI-006Plan de travail stratifiébs_kitchen_linearidem= linéaire cuisine · exclusif CUI-007
CUI-007Plan de travail pierre / quartzbs_kitchen_linearidem= linéaire cuisine · exclusif CUI-006
CUI-008Crédence cuisinebs_kitchen_linearidem= linéaire cuisine · exclusif CUI-009
CUI-009Crédence premiumbs_kitchen_linear0ratio_sémantique · défaut 0(voir source)
CUI-010Pose évierrooms_count11 par cuisine rénovée
CUI-011Pose électroménagermanual1À confirmer (V1 ; bs_appliance_count envisageable plus tard)