Introduction & modèle de données
Préambule de la spécification : modèle de données, règle fondamentale de décomposition d'une ligne de devis, et base MVP. Contenu repris tel quel.
| Champ | Rôle |
|---|---|
| Code | identifiant unique de prestation |
| Prestation | libellé métier |
| Unité | m², ml, u, point, forfait |
| Règle de métré | donnée à calculer depuis plan / JSON / saisie |
| Gamme | Éco / Standard / Premium |
| Type | Main-d’œuvre, fourniture, fourni-posé, forfait, aléa |
Pour chaque prestation, je recommande ce modèle de données :
| Champ technique | Exemple |
|---|---|
| code | SOL-005 |
| lot | Sols |
| label_fr | Pose parquet contrecollé flottant |
| unit | m² |
| quantity_source | surface_sol_piece |
| pricing_type | pose |
| eligible_ranges | eco, standard, premium |
| default_range | standard |
| requires_product | true |
| linked_product_category | parquet |
| waste_rate_default | 7 % |
| complexity_factor_available | true |
| regional_factor_available | true |
| company_custom_price_allowed | true |
| client_visible | true |
| internal_note | hors dépose et ragréage |
Règle fondamentale à intégrer
Une ligne de devis doit toujours distinguer :
| Élément | Exemple |
|---|---|
| Dépose | dépose ancien parquet |
| Préparation support | ragréage |
| Fourniture produit | parquet choisi |
| Pose | pose parquet |
| Finitions | plinthes, seuils |
| Aléa | étage, accès, ancien |
Base de prestations MVP
0. Préparation / installation chantier
| Code | Prestation | Unité | Règle de métré | Gamme | Type |
|---|---|---|---|---|---|
| PRE-001 | Installation de chantier | forfait | 1 par projet | Tous | Forfait |
| PRE-002 | Protection des sols existants | m² | surface sols à conserver | Tous | Fourni-posé |
| PRE-003 | Protection des parties communes | forfait | selon étage + accès + durée | Tous | Forfait |
| PRE-004 | Protection ascenseur / escalier | forfait | si copropriété / accès commun | Tous | Forfait |
| PRE-005 | Acheminement matériaux | forfait | selon étage, ascenseur, distance camion | Tous | Aléa |
| PRE-006 | Évacuation gravats | m³ | volume gravats estimé | Tous | Forfait |
| PRE-007 | Nettoyage courant chantier | forfait | selon durée chantier | Tous | Forfait |
| PRE-008 | Nettoyage fin de chantier | m² | surface totale rénovée | Tous | Forfait |
1. Démolition / dépose
| Code | Prestation | Unité | Règle de métré | Gamme | Type |
|---|---|---|---|---|---|
| DEM-001 | Dépose revêtement sol souple | m² | surface sol concernée | Tous | Main-d’œuvre |
| DEM-002 | Dépose parquet existant | m² | surface parquet à déposer | Tous | Main-d’œuvre |
| DEM-003 | Dépose carrelage sol | m² | surface carrelage sol | Tous | Main-d’œuvre |
| DEM-004 | Dépose faïence murale | m² | surface faïence existante | Tous | Main-d’œuvre |
| DEM-005 | Démolition cloison légère | m² | surface cloison à démolir | Tous | Main-d’œuvre |
| DEM-006 | Dépose faux plafond | m² | surface faux plafond | Tous | Main-d’œuvre |
| DEM-007 | Dépose cuisine existante | forfait | 1 par cuisine | Tous | Forfait |
| DEM-008 | Dépose salle de bain existante | forfait | 1 par salle de bain | Tous | Forfait |
| DEM-009 | Dépose appareil sanitaire | u | nombre WC / vasque / douche / baignoire | Tous | Main-d’œuvre |
| DEM-010 | Dépose radiateur | u | nombre de radiateurs | Tous | Main-d’œuvre |
| DEM-011 | Dépose porte intérieure | u | nombre portes | Tous | Main-d’œuvre |
RÈGLES MÉTIER :
Pour le lot 1 — Démolition / dépose, il y a une limite importante : le plan seul ne permet pas de savoir ce que le client veut déposer. Il permet de connaître les surfaces, pièces, murs, portes, sanitaires visibles, mais pas l’intention travaux.
Pour garder la promesse de rapidité, je recommande de ne pas demander beaucoup plus au client, mais d’ajouter une donnée simple dans l’écran de création du projet ainsi que dans l’écran après l’analyse :
| Donnée minimale utile | Format conseillé | Pourquoi |
|---|---|---|
| Niveau d’intervention | Rafraîchissement / Rénovation complète / Rénovation lourde | déclenche les règles de dépose par défaut |
| Pièces concernées | par défaut : toutes les pièces détectées | permet d’exclure une pièce sans questionnaire long |
| Conservation éléments existants | toggles optionnels : cuisine, SDB, sols, portes, chauffage | évite les grosses erreurs de chiffrage |
| Photos par pièce | optionnel mais fortement recommandé | permet de reconnaître sols, faïence, cuisine, état existant |
La donnée vraiment indispensable est donc : niveau d’intervention global. Le reste peut être prérempli par défaut et corrigé en écran 2.
Voici la première version exploitable à envoyer à l’équipe de développement.
Préparation / Installation chantier
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
PRE-001 | Installation de chantier | forfait | — | — | — | 10% | Règle définie |
PRE-002 | Protection sols existants | m² | — | — | — | 10% | Règle définie + choix client |
PRE-003 | Protection parties communes | forfait | — | — | — | 10% | Règle définie |
PRE-004 | Protection accès vertical | forfait | — | — | — | 10% | Règle définie |
PRE-005 | Acheminement matériaux | forfait | — | — | — | 10% | Règle définie |
PRE-006 | Évacuation gravats | m³ | — | — | — | 10% | Règle définie |
PRE-007 | Nettoyage courant chantier | semaine | — | — | — | 10% | Règle définie |
PRE-008 | Nettoyage fin chantier | m² | — | — | — | 10% | Règle définie |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
2.1 Données issues du JSON validé
Le moteur utilise :
{
"rooms": [],
"area_m2": null,
"room_count": null,
"layout_fidelity": {},
"warnings": []
}
Variables calculées depuis le JSON :
{
"detected_total_area_m2": null,
"renovated_area_m2": null,
"room_count": null,
"wet_room_count": null,
"kitchen_count": null
}
2.2 Données issues de l’écran 0
Le moteur utilise les champs existants :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null
}
2.3 Seule donnée supplémentaire ajoutée
Ajouter uniquement :
{
"property_floor_level": null
}
Format recommandé :
{
"property_floor_level": "ground | 1 | 2 | 3 | 4 | 5_plus"
}
| Valeur | Signification |
|---|---|
| ground | rez-de-chaussée |
| 1 | 1er étage |
| 2 | 2e étage |
| 3 | 3e étage |
| 4 | 4e étage |
| 5_plus | 5e étage ou plus |
Si le type de projet est une maison :
property_floor_level = "ground"
par défaut, sauf si le projet concerne explicitement un étage intérieur.
Nouveaux champs à créer
source : Spécification chiffrage.docxVariables globales de chiffrage
Avant de générer le lot 0, le moteur doit calculer :
{
"project_surface_m2": null,
"renovated_area_m2": null,
"estimated_duration_weeks": null,
"demolition_waste_m3": null,
"floor_logistics_level": null,
"common_area_protection_required": null,
"vertical_access_protection_required": null,
"cleaning_level": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Mise en place initiale du chantier : organisation, matériel de base, zones de stockage, préparation générale du chantier.
forfait
Toujours créer cette ligne si au moins une prestation travaux est générée.
if quote_lines_count > 0:
create PRE-001
quantity = 1
Classification du forfait
Le moteur classe le projet selon la surface rénovée :
| Classe | Règle |
|---|---|
| petit chantier | renovated_area_m2 < 30 |
| chantier moyen | 30 <= renovated_area_m2 <= 80 |
| grand chantier | renovated_area_m2 > 80 |
Ajustements autorisés
PRE-001 peut être ajusté uniquement selon :
{
"renovated_area_m2": true,
"quality_level": true,
"floor_logistics_level": false
}
L’étage ne doit pas impacter PRE-001, car l’installation de chantier est liée à la taille et à l’organisation du projet, pas directement à l’accès.
PRE-001 inclut :
- mise en route chantier ;
- organisation de base ;
- petit matériel chantier ;
- consommables généraux non affectés à un lot ;
- repérage des zones de stockage.
Exclus
PRE-001 n’inclut pas :
- protection sols ;
- protection parties communes ;
- évacuation gravats ;
- nettoyage ;
- autorisations administratives ;
- benne ;
- monte-meuble.
Protection des sols conservés dans le logement pendant les travaux.
m²
Créer la ligne si au moins un des cas est vrai :
keep_existing_floor == true
ou si certaines pièces sont exclues des travaux mais servent de passage.
Si aucune information n’indique que les sols sont conservés :
ne pas créer automatiquement PRE-002 sur toute la surface
Créer uniquement une protection minimale de circulation.
Cas 1 — pièces avec sols conservés :
quantity = sum(area_m2 des pièces avec sol conservé)
Cas 2 — absence d’information :
quantity = renovated_area_m2 × default_internal_floor_protection_ratio
Ratio paramétrable recommandé :
"default_internal_floor_protection_ratio": 0.20
Ajustements autorisés
PRE-002 peut être ajusté selon :
{
"renovated_area_m2": true,
"quality_level": true,
"floor_logistics_level": false
}
L’étage ne doit pas influencer PRE-002.
Ne comprend pas :
- protection parties communes ;
- protection accès vertical ;
- nettoyage final ;
- réparation de sols existants.
Protection des zones communes entre l’entrée de l’immeuble et l’entrée du logement : hall, sas, paliers, circulations communes.
forfait
Créer la ligne si :
project_type == "apartment"
Ne pas créer par défaut pour :
project_type == "house"
sauf si la description projet mentionne explicitement des parties communes.
quantity = 1
Classification du forfait
| floor_logistics_level | Classe de protection |
|---|---|
| low | faible |
| standard | standard |
| high | renforcée |
| very_high | très renforcée |
Ajustements autorisés
PRE-003 peut être ajusté selon :
{
"project_type": true,
"property_floor_level": true,
"floor_logistics_level": true,
"quality_level": true
}
- protection hall ;
- protection palier ;
- protection circulations communes ;
- protection d’accès standard jusqu’au logement.
Exclus
- nettoyage quotidien des parties communes ;
- réparation de dégradations ;
- remplacement de protections demandé en cours de chantier ;
- protection spécifique ascenseur ou escalier détaillée.
Dans cette version MVP, la protection spécifique ascenseur/escalier n’est pas distinguée. Elle est traitée dans PRE-004 comme protection accès vertical générique.
Protection générique des circulations verticales utilisées pour accéder au logement.
Le moteur ne distingue pas ascenseur et escalier, car l’ascenseur n’est pas une donnée d’entrée.
forfait
Créer si :
project_type == "apartment"
et :
property_floor_level != "ground"
Ne pas créer si :
property_floor_level == "ground"
quantity = 1
Classification du forfait
| property_floor_level | Classe |
|---|---|
| 1 | standard |
| 2 | standard |
| 3 | renforcée |
| 4 | renforcée |
| 5_plus | très renforcée |
Ajustements autorisés
PRE-004 peut être ajusté selon :
{
"property_floor_level": true,
"quality_level": true
}
PRE-004 ne doit pas utiliser :
{
"elevator_available": false,
"truck_access": false,
"is_occupied": false
}
- protection générique des accès verticaux ;
- protections nécessaires à l’acheminement courant ;
- mise en place et retrait des protections.
Exclus
- réparation de l’ascenseur ;
- protection spécifique demandée par syndic ;
- monte-charge ;
- monte-meuble ;
- nettoyage quotidien ;
- manutention matériaux.
Acheminement des matériaux depuis le point de livraison jusqu’à la zone de chantier.
Le moteur ne doit pas demander ni utiliser d’information sur le stationnement, camion, ascenseur ou distance de portage.
forfait
Créer si le devis contient au moins une ligne de fourniture ou de pose nécessitant des matériaux.
if material_supply_or_installation_lines_count > 0:
create PRE-005
quantity = 1
Classification du forfait
Le forfait est classé selon :
- surface rénovée ;
- étage du logement ;
- volume théorique de matériaux issu des autres lots.
{
"renovated_area_m2": true,
"floor_logistics_level": true,
"material_volume_proxy": true
}
Calcul du volume théorique
Chaque ligne avec fourniture doit porter un facteur volume :
{
"material_volume_factor": null
}
La variable globale est :
material_volume_proxy = sum(quote_line.quantity × quote_line.material_volume_factor)
Si les facteurs volume ne sont pas disponibles :
material_volume_proxy = renovated_area_m2 × default_material_volume_ratio
default_material_volume_ratio doit être paramétrable en base.
Classification simplifiée
| Condition | Classe |
|---|---|
| petite surface + étage bas | faible |
| surface moyenne ou étage standard | standard |
| grande surface ou étage élevé | élevée |
| très grande surface ou 5e étage et plus | très élevée |
Ne comprend pas :
- évacuation gravats ;
- livraison fournisseur ;
- stockage externe ;
- monte-meuble ;
- autorisation stationnement ;
- frais de voirie.
Sortie, chargement, transport et mise en décharge des gravats issus des travaux.
Le moteur ne doit pas demander ni utiliser d’information sur camion, stationnement ou benne.
m³
Créer si au moins une ligne de démolition ou dépose est générée.
if demolition_lines_count > 0:
create PRE-006
Chaque prestation de démolition doit porter un facteur de gravats :
{
"waste_m3_per_unit": null
}
La quantité totale est :
quantity = sum(demolition_line.quantity × demolition_line.waste_m3_per_unit)
Si les facteurs de gravats ne sont pas disponibles :
quantity = renovated_area_m2 × default_waste_ratio
default_waste_ratio doit être paramétrable selon la densité de travaux générés.
La densité de travaux peut être déduite des lignes existantes :
| Cas | Densité |
|---|---|
| peu de lignes de dépose | faible |
| dépose sols + SDB/cuisine | moyenne |
| démolition cloisons + sols + SDB/cuisine | forte |
Ajustements autorisés
PRE-006 peut être ajusté selon :
{
"demolition_waste_m3": true,
"floor_logistics_level": true,
"quality_level": false
}
Le niveau de qualité ne doit pas influencer l’évacuation gravats.
Ne comprend pas :
- désamiantage ;
- déchets dangereux ;
- évacuation mobilier client ;
- location benne longue durée ;
- autorisation voirie ;
- nettoyage final.
Règle anti-double comptage
Si une ligne de démolition inclut déjà l’évacuation :
demolition_line.includes_waste_removal == true
alors ne pas l’ajouter à PRE-006.
Par défaut, les lignes du lot démolition n’incluent pas l’évacuation gravats.
Nettoyage régulier pendant le chantier : balayage, maintien de propreté minimale, entretien courant des zones de travail.
semaine
ou :
forfait
Créer si :
estimated_duration_weeks >= 2
ou si le projet contient :
- démolition ;
- dépose sols ;
- dépose SDB ;
- dépose cuisine ;
- peinture ;
- sols ;
- plâtrerie.
quantity = estimated_duration_weeks
Calcul durée
La durée estimée doit venir du moteur planning ou d’un moteur de complexité.
Si la durée n’est pas disponible :
estimated_duration_weeks = duration_from_quote_lines_density
Densité :
| Densité du devis | Durée théorique |
|---|---|
| faible | courte |
| moyenne | moyenne |
| forte | longue |
Les valeurs doivent être paramétrables en base.
Ajustements autorisés
PRE-007 peut être ajusté selon :
{
"estimated_duration_weeks": true,
"renovated_area_m2": true,
"quality_level": true,
"floor_logistics_level": false
}
L’étage ne doit pas influencer le nettoyage courant.
Ne comprend pas :
- nettoyage final ;
- nettoyage spécialisé ;
- remise en état après sinistre ;
- nettoyage extérieur ;
- réparation de dégradations.
Nettoyage final avant livraison du chantier.
m²
Toujours créer cette ligne si le chantier contient des travaux intérieurs.
if interior_work_lines_count > 0:
create PRE-008
quantity = renovated_area_m2
Si le logement entier est concerné :
quantity = project_surface_m2
Niveau de nettoyage
| quality_level | cleaning_level |
|---|---|
| eco | standard |
| standard | standard |
| premium | premium |
Ajustements autorisés
PRE-008 peut être ajusté selon :
{
"renovated_area_m2": true,
"quality_level": true,
"floor_logistics_level": false
}
L’étage ne doit pas influencer le nettoyage final.
- aspiration / balayage ;
- nettoyage surfaces principales ;
- retrait protections simples ;
- nettoyage basique avant livraison ;
- préparation livraison.
Exclus
- nettoyage vitres complexe ;
- shampouinage textile ;
- nettoyage extérieur ;
- débarras mobilier ;
- nettoyage spécialisé.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version simplifiée avec une seule donnée ajoutée : étage du logement
Pour le lot 0 — Préparation / installation chantier, il faut ajouter une donnée d’entrée, car ce lot dépend beaucoup plus de la logistique réelle du chantier que du plan.
Les données actuelles de l’écran 0 ne suffisent pas totalement. Pour garder l’outil rapide, je recommande d’ajouter uniquement un champ simple :
| Donnée à ajouter | Format | Impact |
|---|---|---|
| Étage du logement | RDC / 1 / 2 / 3 / 4+ | manutention, parties communes, temps |
Objectif du lot
Le lot 0 couvre les prestations transversales nécessaires au démarrage, à la protection, à la logistique et à la propreté du chantier.
Ce lot comprend :
- installation de chantier ;
- protections intérieures ;
- protections des parties communes ;
- protection accès vertical ;
- acheminement matériaux ;
- évacuation gravats ;
- nettoyage courant ;
- nettoyage final.
Ce lot ne correspond pas directement à une pièce, mais au projet entier.
Le lot 0 doit être calculé à partir :
- de la surface du projet ;
- des pièces validées ;
- des prestations générées dans les autres lots ;
- du niveau de qualité choisi ;
- du type de projet ;
- de l’étage du logement.
Aucune autre donnée d’accès ne doit influencer les règles de chiffrage.
Données explicitement exclues des règles
Les données suivantes ne doivent pas être demandées et ne doivent pas influencer le chiffrage automatique du lot 0 :
{
"elevator_available": "excluded",
"is_occupied": "excluded",
"truck_access": "excluded",
"parking_access": "excluded"
}
Le moteur ne doit donc pas créer de règles conditionnées à :
- présence ou absence d’ascenseur ;
- logement vide ou occupé ;
- stationnement facile ou difficile ;
- distance camion-logement ;
- rue étroite ou large.
Ces contraintes pourront éventuellement être traitées plus tard comme options manuelles, mais elles ne font pas partie du moteur MVP.
Règles de surface
5.1 Surface projet
Priorité 1 :
project_surface_m2 = declared_total_surface_m2
Priorité 2 :
project_surface_m2 = sum(rooms.area_m2)
Si les deux valeurs existent, contrôler l’écart :
surface_gap_percent = abs(declared_total_surface_m2 - detected_total_area_m2) / declared_total_surface_m2
Si l’écart dépasse un seuil paramétrable :
{
"warning": "Écart entre surface déclarée et surface détectée",
"user_validation_required": true
}
Seuil recommandé :
"surface_gap_warning_threshold": 0.10
5.2 Surface rénovée
Si toutes les pièces sont concernées :
renovated_area_m2 = project_surface_m2
Si l’utilisateur exclut certaines pièces en écran 2 :
renovated_area_m2 = sum(area_m2 des pièces sélectionnées)
Si aucune sélection n’est faite :
renovated_area_m2 = project_surface_m2
Niveau logistique lié à l’étage
Le moteur calcule un niveau logistique standardisé uniquement à partir de l’étage du logement.
"floor_logistics_level": "low | standard | high | very_high"
| property_floor_level | floor_logistics_level |
|---|---|
| ground | low |
| 1 | standard |
| 2 | standard |
| 3 | high |
| 4 | high |
| 5_plus | very_high |
Cette variable peut influencer :
- protection des parties communes ;
- protection accès vertical ;
- acheminement matériaux ;
- évacuation gravats.
Elle ne doit pas dépendre d’un ascenseur, d’un stationnement ou d’un accès camion.
Lignes volontairement exclues du MVP
Les lignes suivantes ne doivent pas être générées automatiquement dans cette version, car elles nécessiteraient des données supplémentaires que le produit ne souhaite pas demander au client.
Exclu — Autorisation stationnement / voirie
Non généré automatiquement.
Raison :
Nécessite information stationnement ou réglementation locale non demandée.
Exclu — Monte-meuble / monte-charge
Non généré automatiquement.
Raison :
Nécessite information ascenseur, façade, rue et accès non demandée.
Exclu — Déchets spécifiques / dangereux
Non généré automatiquement.
Raison :
Nécessite diagnostic spécifique ou preuve documentaire.
Ces lignes pourront être ajoutées plus tard comme options manuelles ou alertes, mais elles ne doivent pas influencer le moteur automatique MVP.
Règles anti-double comptage
9.1 Gravats
PRE-006 centralise l’évacuation gravats.
Les prestations de démolition ne doivent pas inclure l’évacuation sauf si explicitement paramétré.
9.2 Nettoyage
PRE-007 = nettoyage courant pendant chantier.
PRE-008 = nettoyage final avant livraison.
Ne pas fusionner les deux.
9.3 Protection
PRE-002 = sols intérieurs du logement.
PRE-003 = parties communes horizontales.
PRE-004 = accès vertical générique.
Ne pas intégrer les parties communes dans PRE-002.
9.4 Manutention
PRE-005 = matériaux entrants.
PRE-006 = gravats sortants.
Ne pas mélanger les deux.
Effet du niveau Éco / Standard / Premium
Le niveau Éco / Standard / Premium ne modifie pas les quantités du lot 0.
Il peut modifier uniquement certains niveaux de service :
| Prestation | Impact qualité |
|---|---|
| PRE-001 | possible ajustement organisation |
| PRE-002 | protection plus ou moins renforcée |
| PRE-003 | protection parties communes plus ou moins renforcée |
| PRE-004 | protection accès vertical plus ou moins renforcée |
| PRE-005 | aucun impact direct |
| PRE-006 | aucun impact direct |
| PRE-007 | nettoyage courant plus ou moins fréquent |
| PRE-008 | niveau de nettoyage final |
Règle générale :
quantity_eco = quantity_standard = quantity_premium
mais :
unit_price may vary by quality_level for selected PRE lines
Format de sortie attendu
Chaque ligne du lot 0 doit être générée sous cette forme :
{
"lot": "Préparation / Installation chantier",
"code": "PRE-006",
"label": "Évacuation gravats",
"unit": "m3",
"quantity": 3.5,
"quantity_formula": "sum(demolition_line.quantity × waste_m3_per_unit)",
"pricing_mode": "unit_price",
"source": "derived_from_demolition_lines",
"confidence": 0.82,
"is_assumption": false,
"assumption_reason": null,
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": ["DEM-001", "DEM-003", "DEM-004"],
"warnings": []
}Règles de validation
Avant génération du lot 0, le moteur doit vérifier :
{
"has_project_surface": true,
"has_renovated_area": true,
"has_project_type": true,
"has_property_floor_level": true
}
Si property_floor_level est absent :
Utiliser "ground" par défaut uniquement pour une maison.
Si project_type == apartment et property_floor_level est absent :
Demander la donnée étage du logement.
Si renovated_area_m2 == null :
Bloquer le lot 0.
Message :
Impossible de chiffrer le lot préparation sans surface rénovée validée.
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| surface projet | écran 0 ou JSON |
| surface rénovée | écran 2 |
| type de projet | écran 0 |
| étage du logement | écran 0 |
| existence de travaux générés | moteur de devis |
Calculé automatiquement
| Donnée | Source |
|---|---|
| volume de gravats | lignes de démolition |
| volume théorique de matériaux | lignes de fourniture / pose |
| durée estimée | densité des lignes ou moteur planning |
| niveau logistique | étage du logement |
| niveau nettoyage | qualité choisie |
Non demandé au client
| Donnée | Statut |
|---|---|
| ascenseur | exclu |
| logement occupé | exclu |
| accès camion | exclu |
| stationnement | exclu |
| largeur escalier | exclu |
| distance camion-logement | exclu |
Règle produit finale
Le lot 0 doit rester simple et compatible avec la promesse d’instantanéité.
Le moteur doit donc fonctionner avec une seule donnée logistique :
Étage du logement
Toutes les règles logistiques sont ensuite dérivées de cette donnée, sans autre question client.
Le moteur doit distinguer :
Logistique faible = RDC
Logistique standard = 1er ou 2e étage
Logistique élevée = 3e ou 4e étage
Logistique très élevée = 5e étage et plus
Aucune autre contrainte d’accès ne doit influencer automatiquement le lot 0 dans cette version.
Pour le lot 2 — Cloisons / doublages / faux plafonds, la donnée clé n’est pas un champ client supplémentaire, mais plutôt une donnée produit : le plan cible ou l’intention de modification.
Le plan existant seul permet de voir les murs actuels, mais il ne permet pas de savoir :
- quelles cloisons créer ;
- quelles cloisons supprimer ;
- quels murs doubler ;
- quels plafonds refaire ;
- quels coffrages créer.
Donc je ne recommande pas d’ajouter un nouveau champ obligatoire côté client à ce stade. La bonne règle est :
Si aucun plan cible, aucune demande explicite ou aucune personnalisation n’indique une modification, le moteur ne doit pas inventer de cloisons, doublages ou faux plafonds.
Démolition / Dépose
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
DEM-001 | Dépose revêtement sol souple | m² | — | — | — | 10% | Règle définie + choix client |
DEM-002 | Dépose parquet existant | m² | — | — | — | 10% | Règle définie + choix client |
DEM-003 | Dépose carrelage sol | m² | — | — | — | 10% | Règle définie + choix client |
DEM-004 | Dépose faïence murale | m² | — | — | — | 10% | Règle définie + choix client |
DEM-005 | Démolition cloison légère | m² | — | — | — | 10% | Choix client |
DEM-006 | Dépose faux plafond | m² | — | — | — | 10% | Choix client |
DEM-007 | Dépose cuisine existante | forfait | — | — | — | 10% | Règle définie + choix client |
DEM-008 | Dépose salle de bain existante | forfait | — | — | — | 10% | Règle définie + choix client |
DEM-009 | Dépose appareil sanitaire | u | — | — | — | 10% | Règle définie + choix client |
DEM-010 | Dépose radiateur | u | — | — | — | 10% | Règle définie + choix client |
DEM-011 | Dépose porte intérieure | u | — | — | — | 10% | Règle définie + choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
2.1 Données issues du JSON validé du plan
Le moteur utilise les données suivantes :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"ceiling_height_m": null,
"openings": [],
"visual_evidence": {
"sanitary_elements": [],
"kitchen_elements": [],
"fixed_features": []
},
"layout_fidelity": {},
"warnings": []
}
2.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null
}
2.3 Données supplémentaires recommandées
Ajouter un champ simple :
{
"renovation_scope": "refresh | complete_renovation | heavy_renovation"
}
| Valeur | Définition |
|---|---|
| refresh | travaux légers, pas de démolition lourde par défaut |
| complete_renovation | rénovation complète des pièces, dépose des sols, cuisine, SDB selon pièces |
| heavy_renovation | rénovation lourde avec possibilité de redistribution, cloisons, faux plafonds |
Par défaut, si la donnée est absente :
"renovation_scope": "complete_renovation"
mais le devis doit afficher une hypothèse :
Hypothèse : chiffrage basé sur une rénovation complète du bien.
Nouveaux champs à créer
source : Spécification chiffrage.docxVariables calculées
Le moteur doit calculer les variables suivantes avant de chiffrer :
{
"total_renovated_area_m2": null,
"room_floor_area_m2": null,
"room_wall_perimeter_m": null,
"room_wall_surface_m2": null,
"ceiling_surface_m2": null,
"bathroom_count": null,
"kitchen_count": null,
"sanitary_fixture_count": null,
"internal_door_count": null,
"radiator_count": null
}
4.1 Surface sol par pièce
room_floor_area_m2 = room.area_m2
Si room.area_m2 est null :
room_floor_area_m2 = room.length_m × room.width_m
uniquement si les deux dimensions sont fiables.
Sinon :
room_floor_area_m2 = null
et la ligne doit être bloquée ou marquée comme non chiffrable automatiquement.
4.2 Surface plafond
ceiling_surface_m2 = room_floor_area_m2
4.3 Périmètre de pièce
Si longueur et largeur fiables :
room_wall_perimeter_m = 2 × (length_m + width_m)
Si pièce irrégulière :
room_wall_perimeter_m = estimated_perimeter_from_layout
avec :
"is_assumption": true
4.4 Surface murale brute
room_wall_surface_m2 = room_wall_perimeter_m × ceiling_height_m
Si hauteur inconnue :
ceiling_height_m = project_default_ceiling_height_m
Valeur par défaut recommandée :
"project_default_ceiling_height_m": 2.50
Cette hypothèse doit être affichée à l’utilisateur.
Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Dépose de sol souple existant : PVC, lino, moquette, vinyle, sol stratifié clipsé assimilé léger.
m²
Créer la ligne si :
existing_floor_finish == "soft_floor"
ou si une photo / analyse visuelle détecte :
- moquette ;
- lino ;
- PVC ;
- vinyle ;
- sol souple.
quantity = sum(area_m2 des pièces concernées)
Ne pas utiliser DEM-001 si le type de sol est inconnu.
Utiliser une ligne générique :
Ne comprend pas :
- ragréage ;
- préparation du support ;
- fourniture nouveau sol ;
- pose nouveau sol ;
- évacuation générale gravats.
{
"code": "DEM-001",
"label": "Dépose revêtement sol souple",
"unit": "m2",
"quantity": 0,
"source": "photo_or_user_input",
"confidence": 0.8,
"is_assumption": false
}
Dépose de parquet existant flottant, collé, cloué ou ancien parquet.
m²
Créer la ligne si :
existing_floor_finish == "parquet"
ou si une photo détecte clairement du parquet.
En rénovation complète d’appartement ancien, si le sol est inconnu, ne pas supposer automatiquement du parquet. Utiliser DEM-000 avec hypothèse.
quantity = sum(area_m2 des pièces avec parquet à déposer)
Si le parquet est conservé et rénové :
keep_existing_parquet = true
ne pas créer DEM-002.
Envoyer vers le lot sols :
Ponçage / vitrification parquet existant
Ne comprend pas :
- évacuation gravats ;
- dépose lambourdes ;
- reprise support ;
- ragréage ;
- ponçage / vitrification.
Dépose de carrelage au sol existant.
m²
Créer la ligne si :
existing_floor_finish == "tile"
ou si la pièce est une salle de bain / WC / cuisine avec carrelage détecté par photo ou visuellement.
Si aucune photo n’est disponible :
- en SDB/SDE/WC : carrelage sol probable ;
- en cuisine : carrelage sol possible ;
- dans les autres pièces : ne pas supposer.
quantity = sum(area_m2 des pièces avec carrelage sol à déposer)
Pour complete_renovation :
Si room.type in ["bathroom", "shower_room", "wc"] et sol inconnu :
quantity = room.area_m2
is_assumption = true
assumption_reason = "Carrelage sol probable en pièce humide"
Ne comprend pas :
- ragréage ;
- chape ;
- reprise support ;
- étanchéité ;
- nouveau carrelage.
Dépose de faïence ou carrelage mural existant.
m²
Créer la ligne si :
existing_wall_finish == "wall_tile"
ou si photo détecte de la faïence.
Créer aussi une hypothèse si :
room.type in ["bathroom", "shower_room", "wc"]
et :
renovation_scope in ["complete_renovation", "heavy_renovation"]
Si surface de faïence détectée :
quantity = detected_wall_tile_area_m2
Sinon, pour SDB/SDE :
quantity = room_wall_perimeter_m × default_tile_height_m
Valeur paramétrable recommandée :
"default_tile_height_m": 2.00
Puis plafonner :
quantity <= room_wall_surface_m2
Pour cuisine :
quantity = kitchen_linear_m × default_credence_height_m
Valeur paramétrable recommandée :
"default_credence_height_m": 0.60
Si kitchen_linear_m est inconnu :
quantity = null
ou créer une hypothèse :
quantity = room.area_m2 × kitchen_wall_tile_ratio
avec ratio paramétrable.
Ne comprend pas :
- reprise de mur ;
- enduit ;
- nouvelle faïence ;
- étanchéité ;
- évacuation gravats.
Démolition de cloison intérieure non porteuse.
m²
Créer la ligne uniquement si l’un des cas suivants est vrai :
target_layout.wall_to_remove == true
ou :
user_project_description contains ["abattre", "ouvrir", "supprimer cloison", "cuisine ouverte", "agrandir", "redistribuer"]
ou :
user_selected_wall_removal == true
quantity = wall_length_m × ceiling_height_m
Si plusieurs cloisons :
quantity = sum(wall_length_m × ceiling_height_m)
Si la cloison est potentiellement porteuse :
requires_structural_validation = true
et la ligne doit être affichée comme estimation non contractuelle.
Ne comprend pas :
- démolition mur porteur ;
- reprise structurelle ;
- IPN ;
- étude ingénieur structure ;
- autorisation copropriété ;
- reprise sols/plafonds/murs après démolition ;
- déplacement réseaux électriques/plomberie inclus dans cloison.
Règle anti-double comptage
Si une porte est incluse dans la cloison démolie, ne pas générer DEM-011 pour cette même porte sauf si le moteur fonctionne en mode détaillé.
Dépose de faux plafond existant.
m²
Créer la ligne si :
existing_false_ceiling_detected == true
ou si l’utilisateur indique :
remove_false_ceiling == true
Ne jamais supposer un faux plafond depuis un plan 2D seul.
quantity = ceiling_surface_m2 des pièces concernées
Ne comprend pas :
- nouveau faux plafond ;
- isolation ;
- électricité intégrée ;
- reprise plafond ;
- peinture plafond.
Dépose des meubles et équipements de cuisine existants.
forfait
ou option avancée :
ml
Créer la ligne si :
room.type == "kitchen"
et :
renovation_scope in ["complete_renovation", "heavy_renovation"]
sauf si :
keep_existing_kitchen == true
Créer aussi la ligne si visual_evidence.kitchen_elements contient :
- évier ;
- plaque ;
- plan de travail ;
- hotte ;
- linéaire cuisine visible.
quantity = 1 forfait par cuisine déposée
Classification taille cuisine
Si kitchen_linear_m disponible :
| Classe | Règle |
|---|---|
| petite | kitchen_linear_m < 3 |
| moyenne | 3 <= kitchen_linear_m <= 6 |
| grande | kitchen_linear_m > 6 |
Si kitchen_linear_m indisponible :
| Classe | Règle |
|---|---|
| petite | kitchen.area_m2 < 8 |
| moyenne | 8 <= kitchen.area_m2 <= 14 |
| grande | kitchen.area_m2 > 14 |
Ne comprend pas :
- dépose carrelage sol ;
- dépose crédence/faïence ;
- modification plomberie ;
- modification électricité ;
- évacuation gravats ;
- fourniture ou pose nouvelle cuisine.
Dépose des équipements existants d’une salle de bain ou salle d’eau.
forfait
Créer la ligne si :
room.type in ["bathroom", "shower_room", "sdb", "sde"]
et :
renovation_scope in ["complete_renovation", "heavy_renovation"]
sauf si :
keep_existing_bathroom == true
quantity = 1 forfait par salle de bain ou salle d’eau rénovée
Classification taille SDB
| Classe | Règle |
|---|---|
| petite | area_m2 < 4 |
| moyenne | 4 <= area_m2 <= 7 |
| grande | area_m2 > 7 |
Ajustement par nombre d’équipements
Si sanitary_elements_count > 3, appliquer une majoration paramétrable.
Inclusion
DEM-008 inclut :
- dépose meuble vasque ;
- dépose lavabo ;
- dépose paroi douche ;
- dépose receveur ;
- dépose baignoire ;
- dépose WC présent dans la pièce ;
- dépose accessoires standards.
Ne comprend pas :
- dépose faïence murale ;
- dépose carrelage sol ;
- démolition cloison ;
- modification réseaux ;
- étanchéité ;
- reprise supports ;
- fourniture nouveaux équipements ;
- pose nouveaux équipements.
Règle anti-double comptage
Si DEM-008 est généré pour une pièce, ne pas générer DEM-009 pour les sanitaires de cette même pièce.
Dépose d’un équipement sanitaire isolé.
u
Créer la ligne si un élément sanitaire est détecté hors package SDB :
visual_evidence.sanitary_elements[] exists
ou si une pièce WC séparée est détectée.
Types concernés :
- WC ;
- lavabo ;
- lave-mains ;
- baignoire ;
- douche ;
- bidet.
quantity = count(sanitary_elements à déposer)
Cas WC séparé
Si room.type == "wc" :
quantity = 1
sauf si plusieurs équipements détectés.
Ne comprend pas :
- modification plomberie ;
- rebouchage réseaux ;
- nouvelle pose ;
- évacuation gravats.
Dépose de radiateur existant.
u
Créer la ligne si :
radiator_detected == true
ou si l’utilisateur indique :
replace_heating_emitters == true
ou si la description contient :
- remplacer radiateurs ;
- déposer radiateurs ;
- chauffage à refaire.
Ne pas créer automatiquement cette ligne uniquement parce que le chauffage est électrique ou gaz.
Priorité 1 :
quantity = count(radiators_detected)
Priorité 2 :
quantity = user_declared_radiator_count
Priorité 3 :
quantity = null
Ne pas estimer automatiquement un radiateur par pièce sans validation utilisateur.
Ne comprend pas :
- modification réseau chauffage ;
- purge ;
- condamnation tuyaux ;
- pose nouveau radiateur ;
- reprise mur ;
- intervention chaudière.
Dépose de porte intérieure existante avec huisserie ou vantail selon cas.
u
Créer la ligne si :
replace_internal_doors == true
ou si :
target_layout.removed_doors[] exists
ou si rénovation lourde avec remplacement menuiseries intérieures sélectionné.
Ne pas déposer automatiquement toutes les portes en rénovation complète.
quantity = count(internal_doors_to_remove)
Source possible :
rooms[].openings[type="door"]
Exclure :
- porte d’entrée ;
- porte-fenêtre ;
- baie vitrée ;
- ouverture sans porte.
Règle anti-double comptage
Si la porte appartient à une cloison démolie en DEM-005 :
do not generate DEM-011
sauf si mode détail activé.
Ne comprend pas :
- fourniture nouvelle porte ;
- pose nouvelle porte ;
- reprise cloison ;
- peinture huisserie ;
- modification dimensions ouverture.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Objectif du lot
Le lot 1 couvre toutes les prestations de dépose, démolition légère, retrait d’équipements existants et préparation destructive avant reconstruction.
Ce lot ne doit pas chiffrer :
- les protections de chantier ;
- l’installation de chantier ;
- l’évacuation générale des gravats ;
- le nettoyage ;
- les reprises de supports ;
- les nouveaux ouvrages.
Ces éléments sont traités dans d’autres lots.
Le lot 1 doit uniquement générer des lignes de devis liées à la dépose ou à la démolition.
Principes généraux de calcul
3.1 Ne jamais chiffrer une démolition sans déclencheur
Une prestation de démolition ne doit être créée que si au moins un des déclencheurs existe :
| Déclencheur | Exemple |
|---|---|
| Type de rénovation | rénovation complète ou lourde |
| Pièce concernée | pièce cochée comme à rénover |
| Élément détecté | cuisine, SDB, sanitaire, porte |
| Demande utilisateur | description contenant “déposer”, “supprimer”, “ouvrir”, “abattre” |
| Projet cible | plan cible différent du plan existant |
3.2 Ne jamais déduire une démolition de cloison depuis le plan existant seul
Le plan existant montre les cloisons, mais ne dit pas lesquelles doivent être supprimées.
La démolition de cloison doit être chiffrée uniquement si :
target_layout.wall_to_remove == true
ou si la description client indique clairement :
- abattre cloison ;
- ouvrir mur ;
- supprimer séparation ;
- agrandir séjour ;
- cuisine ouverte ;
- redistribution.
Sinon, ne pas créer de ligne DEM-005.
3.3 Toujours séparer dépose, préparation, fourniture et pose
Exemple interdit :
Rénovation sol chambre
Exemple attendu :
Dépose parquet existant
Ragréage
Fourniture parquet
Pose parquet
Pose plinthes
Le lot 1 ne génère que la première ligne : dépose.
3.4 Gestion des hypothèses
Chaque ligne générée doit avoir :
{
"confidence": 0.0,
"is_assumption": true,
"assumption_reason": null,
"user_validation_required": true
}
Si la prestation est directement détectée depuis le plan ou la photo, la confiance peut être élevée.
Si la prestation est générée par défaut selon le niveau de rénovation, elle doit être marquée comme hypothèse.
Ligne générique recommandée à ajouter
Pourquoi ajouter cette ligne
Le plan seul ne permet pas toujours de connaître le sol existant.
Pour éviter d’inventer parquet, carrelage ou PVC, le moteur doit pouvoir créer une ligne générique.
Créer si :
renovation_scope in ["complete_renovation", "heavy_renovation"]
et :
existing_floor_finish == null
et :
replace_floor == true
quantity = sum(area_m2 des pièces dont le sol est à remplacer)
Affichage utilisateur
Afficher :
Hypothèse : dépose d’un revêtement de sol existant non identifié. Le prix pourra être ajusté après validation du type de sol.
Règles globales anti-double comptage
7.1 Cuisine
Si DEM-007 est généré :
- ne pas générer une dépose séparée d’évier cuisine ;
- ne pas générer une dépose séparée de plan de travail ;
- ne pas générer une dépose séparée de meubles cuisine.
Mais DEM-003 et DEM-004 peuvent être générés séparément pour carrelage sol et crédence/faïence.
7.2 Salle de bain
Si DEM-008 est généré :
- ne pas générer DEM-009 pour les sanitaires de cette pièce.
Mais DEM-003 et DEM-004 peuvent être générés séparément pour carrelage sol et faïence murale.
7.3 Cloisons et portes
Si DEM-005 est généré sur une cloison contenant une porte :
- ne pas générer DEM-011 pour cette porte.
7.4 Faux plafond
DEM-006 ne doit pas déclencher automatiquement :
- électricité ;
- peinture ;
- isolation ;
- nouveau faux plafond.
Ces prestations appartiennent à d’autres lots.
Gestion du niveau de qualité Éco / Standard / Premium
Le niveau de qualité ne doit pas modifier directement les quantités de démolition.
Il peut modifier uniquement :
| Niveau | Impact éventuel |
|---|---|
| Éco | dépose simple, sans conservation |
| Standard | dépose classique |
| Premium | dépose plus soignée si éléments conservés ou environnement sensible |
Mais par défaut :
quantity_eco = quantity_standard = quantity_premium
Le prix unitaire peut être différent uniquement si la base tarifaire prévoit une dépose soignée ou une contrainte premium.
Format de sortie attendu pour chaque ligne
Chaque ligne de devis générée par le moteur doit suivre ce format :
{
"lot": "Démolition / Dépose",
"code": "DEM-003",
"label": "Dépose carrelage sol",
"room_id": "room_4",
"room_name": "Salle de bain",
"unit": "m2",
"quantity": 4.2,
"quantity_formula": "room.area_m2",
"pricing_mode": "unit_price",
"source": "plan_json | user_input | photo_analysis | default_assumption",
"confidence": 0.75,
"is_assumption": true,
"assumption_reason": "Carrelage sol probable en pièce humide",
"user_validation_required": true,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}Règles de validation avant génération du devis
Avant de générer le lot 1, le moteur doit vérifier :
{
"has_valid_rooms": true,
"has_area_data": true,
"has_renovation_scope": true,
"has_room_selection": true
}
Si renovation_scope est absent :
Utiliser complete_renovation par défaut
Créer une hypothèse visible
Si les surfaces sont absentes :
Bloquer les lignes m²
Demander validation utilisateur
Si les pièces sont absentes :
Bloquer le lot 1
Demander correction écran 2
Résumé des données vraiment nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| Pièces détectées | JSON plan |
| Surfaces par pièce | JSON plan |
| Type de pièce | JSON plan |
| Niveau d’intervention | écran 0 ou défaut |
| Pièces à rénover | écran 2 ou défaut toutes pièces |
Fortement recommandé
| Donnée | Source |
|---|---|
| Type de sol existant | photo ou choix rapide |
| Cuisine conservée ou déposée | toggle |
| Salle de bain conservée ou déposée | toggle |
| Portes ou fenêtres remplacées ou conservées | toggle |
| Radiateurs remplacés ou conservés | toggle |
Non nécessaire au premier chiffrage
| Donnée | Pourquoi |
|---|---|
| marque des produits existants | inutile pour dépose |
| âge exact des équipements | inutile pour estimation rapide |
| composition exacte des murs | utile seulement si cloison à démolir |
| étude structure | uniquement si mur porteur / ouverture |
Règle produit finale
Le lot 1 doit pouvoir produire un devis instantané même avec peu d’informations, mais chaque ligne incertaine doit être marquée comme hypothèse.
Le moteur doit donc distinguer :
Prix certain = donnée visible ou validée
Prix probable = hypothèse métier raisonnable
Prix à valider = donnée manquante mais nécessaire
Prix bloqué = donnée impossible à estimer proprement
Aucune prestation de démolition lourde ne doit être chiffrée comme certaine sans validation utilisateur ou donnée cible explicite.
Cloisons / Doublages / Faux plafonds
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
PLA-001 | Cloison BA13 simple | m² | — | — | — | 10% | Règle définie + choix client |
PLA-002 | Cloison hydrofuge BA13 | m² | — | — | — | 10% | Règle définie |
PLA-003 | Cloison acoustique renforcée | m² | — | — | — | 10% | Règle définie + choix client |
PLA-004 | Doublage mural simple | m² | — | — | — | 10% | Choix client |
PLA-005 | Doublage isolant thermique | m² | — | — | — | 5,5% | Règle définie + choix client |
PLA-006 | Faux plafond BA13 | m² | — | — | — | 10% | Règle définie + choix client |
PLA-007 | Faux plafond acoustique / isolé | m² | — | — | — | 10% | Règle définie + choix client |
PLA-008 | Coffrage technique | ml | — | — | — | 10% | Règle définie + choix client |
PLA-009 | Trappe de visite | u | — | — | — | 10% | Règle définie |
PLA-010 | Reprise localisée support | forfait/m² | — | — | — | 10% | Règle définie |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
2.1 Données issues du JSON validé du plan existant
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"ceiling_height_m": null,
"openings": [],
"layout_fidelity": {},
"visual_evidence": {
"fixed_features": [],
"sanitary_elements": [],
"kitchen_elements": []
}
}
2.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null,
"wall_insulation_type": "none",
"ceiling_insulation_type": "none"
}
Menu déroulant : Isolation des murs
Valeurs possibles :
[
"interior",
"exterior",
"none"
]
Correspondance interface :
| Valeur | Libellé |
|---|---|
| interior | Isolation par l'intérieur |
| exterior | Isolation par l'extérieur |
| none | Non |
Menu déroulant : Isolation plafond
Valeurs possibles :
[
"interior",
"exterior",
"none"
]
Correspondance interface :
| Valeur | Libellé |
|---|---|
| interior | Isolation par l'intérieur |
| exterior | Isolation par l'extérieur |
| none | Non |
2.3 Données issues de l’écran 2
Si une isolation des murs est sélectionnée à l'écran 0 :
{
"room_has_exterior_wall": true,
"wall_insulation_enabled": true
}
Règles
Le champ wall_insulation_enabled :
- n'apparaît que pour les pièces possédant au moins un mur périphérique ;
- est coché par défaut ;
- peut être décoché par l'utilisateur ;
- n'apparaît jamais pour une pièce entièrement centrale sans mur extérieur.
2.4 Données issues du projet cible ou de la personnalisation
Pour chiffrer précisément le lot 2, le moteur doit idéalement recevoir :
{
"target_layout_json": {
"new_partitions": [],
"removed_partitions": [],
"new_openings": [],
"new_false_ceilings": [],
"new_doublings": [],
"technical_boxings": []
}
}
Si target_layout_json n’existe pas, le moteur ne doit pas inventer de modification de cloisonnement.
Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
La logique doit être :
Pas de plan cible ou d’intention explicite = pas de cloison, doublage ou faux plafond inventé.
Les intentions peuvent venir de :
- la description libre du projet ;
- la personnalisation utilisateur ;
- une comparaison entre plan existant et plan cible ;
- une option sélectionnée dans l’interface ;
- une demande explicite de redistribution.
Variables calculées
Avant de chiffrer le lot 2, le moteur doit calculer :
{
"project_surface_m2": null,
"renovated_area_m2": null,
"default_ceiling_height_m": 2.50,
"new_partition_length_m": null,
"new_partition_area_m2": null,
"new_hydro_partition_area_m2": null,
"new_acoustic_partition_area_m2": null,
"new_doubling_area_m2": null,
"new_insulated_doubling_area_m2": null,
"new_false_ceiling_area_m2": null,
"technical_boxing_length_m": null,
"support_repair_area_m2": null,
"exterior_wall_area_to_insulate_m2": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Création d’une cloison intérieure standard en plaques de plâtre.
m²
Créer la ligne si :
target_layout_json.new_partitions[] exists
et si la cloison n’est pas située dans une pièce humide.
Créer aussi si la description projet contient :
- créer une cloison ;
- séparer une pièce ;
- fermer une pièce ;
- créer une chambre ;
- créer un bureau.
Pour chaque cloison :
partition_area_m2 = partition_length_m × ceiling_height_m
Quantité totale :
quantity = sum(partition_area_m2)
Gestion des ouvertures
Par défaut MVP :
Ne pas déduire les portes intérieures standard de la surface de cloison.
Raison : simplification et cohérence avec une logique de prix unitaire fourni-posé.
Si une ouverture est très importante :
large_opening_area_m2 > configurable_threshold
alors déduire :
net_partition_area_m2 = gross_partition_area_m2 - large_opening_area_m2
Le seuil doit être paramétrable.
Ne comprend pas :
- peinture ;
- enduit de finition peinture ;
- plinthes ;
- porte intérieure ;
- électricité intégrée ;
- isolation acoustique renforcée ;
- carrelage ;
- démolition existante.
{
"code": "PLA-001",
"label": "Cloison BA13 simple",
"unit": "m2",
"quantity": 0,
"quantity_formula": "partition_length_m × ceiling_height_m",
"source": "target_layout_json",
"confidence": 0.9,
"is_assumption": false
}
Création d’une cloison en plaques de plâtre hydrofuges pour pièces humides.
m²
Créer la ligne si :
new_partition.room_type in ["bathroom", "shower_room", "sdb", "sde", "wc"]
ou si :
new_partition.adjacent_to_wet_room == true
ou si la cloison est destinée à recevoir une douche, baignoire, WC, meuble vasque ou réseau plomberie.
quantity = sum(partition_length_m × ceiling_height_m for wet room partitions)
Priorité sur PLA-001
Si une cloison est éligible à PLA-002, ne pas créer PLA-001 pour cette même cloison.
PLA-002 overrides PLA-001
Ne comprend pas :
- étanchéité SPEC ;
- carrelage ;
- faïence ;
- plomberie ;
- électricité ;
- peinture ;
- porte.
Création d’une cloison intérieure avec performance acoustique renforcée.
m²
Créer la ligne uniquement si :
acoustic_partition_required == true
ou si :
quality_level == "premium"
et que la cloison sépare :
- chambre / séjour ;
- chambre / cuisine ;
- chambre / salle de bain ;
- chambre / WC ;
- bureau / séjour ;
- bureau / pièce bruyante.
quantity = sum(acoustic_partition_length_m × ceiling_height_m)
PLA-003 remplace PLA-001 si la cloison est acoustique.
Si cloison humide et acoustique :
use PLA-003 only if price base includes acoustic + hydro
Sinon :
create PLA-002 and add acoustic option line
La base de prix doit prévoir une règle de compatibilité.
Ne comprend pas :
- porte acoustique ;
- joints acoustiques spécifiques ;
- traitement sol/plafond acoustique ;
- peinture ;
- électricité.
Doublage intérieur non isolant ou faiblement technique, utilisé pour redresser, habiller ou créer une paroi propre.
m²
Créer la ligne si :
target_layout_json.new_doublings[] exists
ou si l’utilisateur sélectionne :
- redresser les murs ;
- doubler les murs ;
- cacher des réseaux ;
- créer une paroi technique.
Ne pas créer automatiquement sur tous les murs en rénovation complète.
Si murs explicitement listés :
quantity = sum(wall_length_m × ceiling_height_m)
Si pièce entière à doubler :
quantity = room_wall_perimeter_m × ceiling_height_m - openings_area_m2
Si openings_area_m2 indisponible :
quantity = room_wall_perimeter_m × ceiling_height_m
et marquer comme surface brute.
Ne comprend pas :
- isolation thermique ;
- isolation acoustique ;
- peinture ;
- carrelage ;
- électricité ;
- plomberie ;
- dépose existante.
Créer automatiquement la ligne si :
{
"wall_insulation_type": "interior"
}
et :
{
"room_has_exterior_wall": true,
"wall_insulation_enabled": true
}
Somme des surfaces des murs périphériques sélectionnés :
quantity = Σ(exterior_wall_length_m × ceiling_height_m)
Création d’un faux plafond simple en plaques de plâtre.
Par défaut, créer la ligne dans les pièces suivantes :
- salle de bain ;
- salle d'eau ;
- WC ;
- cuisine ;
- entrée ;
- couloir ;
- dégagement ;
- circulation.
Sauf si :
{
"ceiling_insulation_type": "interior"
}
Dans ce cas PLA-007 remplace PLA-006.
quantity = room.area_m2
pour chaque pièce concernée.
Créer automatiquement la ligne si :
{
"ceiling_insulation_type": "interior"
}
quantity = project_surface_m2
La totalité de la surface du logement est alors considérée comme isolée.
PLA-007 overrides PLA-006
Création d’un coffrage pour masquer ou protéger des réseaux, gaines, évacuations, colonnes techniques ou éléments fixes.
ml
ou en mode avancé :
m²
Créer la ligne si :
technical_boxings[] exists
ou si les lots plomberie / ventilation / climatisation créent un réseau apparent nécessitant coffrage.
Exemples :
- évacuation WC apparente ;
- descente technique ;
- gaine VMC ;
- colonne technique ;
- coffrage bâti-support ;
- habillage tuyaux.
Si longueur disponible :
quantity = boxing_length_m
Si surface disponible :
quantity = boxing_length_m × boxing_height_m
Si aucune dimension fiable :
quantity = 1 forfait
avec :
{
"is_assumption": true,
"user_validation_required": true
}
Ne comprend pas :
- trappe de visite ;
- peinture ;
- carrelage ;
- plomberie ;
- ventilation ;
- isolation acoustique.
Création d’une trappe de visite dans un faux plafond, coffrage ou gaine technique.
u
Créer la ligne si :
technical_boxing_requires_access == true
ou si :
false_ceiling_contains_serviceable_equipment == true
Exemples :
- vanne ;
- nourrice ;
- siphon ;
- moteur VMC ;
- compteur ;
- bâti-support ;
- trappe technique existante à conserver.
quantity = count(access_required_points)
Si un coffrage technique est créé sans point d’accès identifié :
quantity = 0
Ne pas créer automatiquement une trappe pour chaque coffrage.
Ne comprend pas :
- coffrage ;
- peinture ;
- carrelage ;
- équipement technique derrière trappe.
Reprise ponctuelle de support après démolition, dépose ou modification technique.
Cette prestation sert à remettre un support en état avant finition.
forfait
ou :
m²
Créer la ligne si une prestation précédente entraîne une reprise localisée :
- démolition cloison ;
- dépose porte ;
- dépose cuisine ;
- dépose salle de bain ;
- création ouverture ;
- modification plomberie ;
- modification électricité ;
- dépose faux plafond.
Si surface connue :
quantity = affected_surface_m2
Si surface inconnue :
quantity = 1 forfait par zone concernée
Isolation thermique des façades par l'extérieur.
m²
Créer la ligne uniquement si :
{
"wall_insulation_type": "exterior"
}
quantity = exterior_facade_area_m2
- échafaudage spécifique ;
- ravalement complet ;
- modification des descentes EP ;
- modification des garde-corps.
8. Prestations complémentaires sur demande explcite du client ou plan cible
Les prestations suivantes ne doivent jamais être générées automatiquement.
Elles ne peuvent être créées que :
- via le plan cible ;
- via une personnalisation utilisateur ;
- via une instruction explicite du client.
u
U et fonction de ML
ml
U et fonction de ML
U et fonction de la surface
U et fonction de la surface
Forfait et fonction de la surface
ml
u
ml
ml
u
forfait
Forfait et fonction de la surface
m²
U et fonction de la surface
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Objectif du lot
Le lot 2 couvre les prestations liées à la création, modification ou reprise d’ouvrages en plaques de plâtre, cloisons, doublages, faux plafonds, coffrages, ouvrages décoratifs en plâtre et reprises localisées de supports.
Ce lot comprend :
- création de cloisons ;
- création de cloisons hydrofuges ;
- création de cloisons acoustiques ;
- doublage mural simple ;
- doublage isolant thermique intérieur ;
- isolation thermique par l'extérieur ;
- faux plafond simple ;
- faux plafond acoustique ou isolé ;
- coffrage technique ;
- trappe de visite ;
- ouvrages décoratifs et sur mesure en placo ;
- reprise localisée de support après démolition ou modification.
Ce lot ne doit pas chiffrer :
- démolition de cloisons existantes ;
- peinture ;
- enduits de finition peinture ;
- carrelage ;
- électricité ;
- plomberie ;
- menuiserie.
Hauteur sous plafond
5.1 Priorité
Priorité 1 :
ceiling_height_m = room.ceiling_height_m
Priorité 2 :
ceiling_height_m = project.default_ceiling_height_m
Valeur par défaut :
"default_ceiling_height_m": 2.50
Règles générales du lot
6.1 Ne jamais créer de cloison depuis le plan existant seul
Le plan existant montre les cloisons actuelles mais ne dit pas quelles cloisons doivent être créées.
Donc :
existing_plan_json alone must not generate PLA-001, PLA-002 or PLA-003
6.2 Isolation des murs
Si :
{
"wall_insulation_type": "interior"
}
alors PLA-005 est automatiquement généré pour toutes les pièces :
{
"room_has_exterior_wall": true,
"wall_insulation_enabled": true
}
La quantité correspond uniquement aux murs périphériques du logement.
Si :
{
"wall_insulation_type": "exterior"
}
alors la prestation PLA-011 est générée.
6.3 Ne jamais créer de doublage automatiquement sur tous les murs
Le moteur ne doit pas doubler tous les murs par défaut.
Le doublage doit être déclenché uniquement par :
- une sélection utilisateur ;
- un scénario énergétique ;
- un mur explicitement marqué à doubler ;
- une contrainte technique ;
- une demande de redressement ou d’isolation.
Isolation plafond
Si :
{
"ceiling_insulation_type": "interior"
}
alors PLA-007 est généré automatiquement sur la totalité de la surface du logement.
Dans ce cas :
PLA-007 overrides PLA-006
Aucun PLA-006 ne doit être créé.
6.4 Toujours transmettre les surfaces créées aux lots suivants
Les cloisons, doublages, coffrages et faux plafonds créent des surfaces à finir.
Le lot 2 doit transmettre aux lots suivants :
{
"new_wall_surface_to_finish_m2": null,
"new_ceiling_surface_to_finish_m2": null,
"new_tile_ready_surface_m2": null,
"new_paint_ready_surface_m2": null
}
Ces surfaces alimentent ensuite :
- lot peinture ;
- lot carrelage ;
- lot salle de bain ;
- lot électricité ;
- lot plomberie.
Règles de priorité entre prestations
8.1 Cloisons
PLA-003 acoustic > PLA-002 hydro > PLA-001 standard
Ne jamais générer deux types de cloisons pour la même surface, sauf si la base tarifaire prévoit une option complémentaire.
8.2 Doublages
PLA-005 insulated > PLA-004 simple
Ne jamais doubler deux fois la même surface.
8.3 Faux plafonds
PLA-007 acoustic/insulated > PLA-006 simple
Ne jamais générer deux faux plafonds pour la même surface.
8.4 Coffrage et trappe
PLA-009 peut être généré en complément de PLA-008.
Mais PLA-008 ne déclenche pas automatiquement PLA-009.
Interactions avec les autres lots
9.1 Avec lot 1 — Démolition
Si DEM-005 est généré :
Créer éventuellement PLA-010 pour reprise localisée.
Si DEM-006 est généré :
Créer éventuellement PLA-006 ou PLA-007 uniquement si nouveau faux plafond prévu.
9.2 Avec lot électricité
Si électricité prévoit spots encastrés :
Créer PLA-006 si faux plafond nécessaire et non existant.
Si électricité crée beaucoup de réseaux encastrés :
Créer PLA-010 pour reprises localisées si non inclus ailleurs.
9.3 Avec lot plomberie
Si plomberie crée des réseaux apparents :
Créer PLA-008 coffrage technique.
Si coffrage cache une vanne ou nourrice :
Créer PLA-009 trappe de visite.
9.4 Avec lot peinture
Toutes les surfaces créées par PLA-001 à PLA-008 doivent alimenter la surface à peindre.
{
"new_paint_surface_m2": "created_wall_or_ceiling_surface"
}
9.5 Avec lot salle de bain
Les cloisons et doublages en pièces humides doivent alimenter :
{
"tile_ready_surface_m2": null,
"waterproofing_required_surface_m2": null
}Gestion du niveau Éco / Standard / Premium
Le niveau de qualité peut influencer le choix de prestation.
| Niveau | Règle |
|---|---|
| Éco | cloison simple sauf pièce humide |
| Standard | cloison simple ou hydro selon pièce |
| Premium | acoustique possible selon adjacence et usage |
10.1 Cloisons
Si quality_level == premium, le moteur peut recommander PLA-003 si la cloison sépare une chambre ou un bureau d’une pièce bruyante.
Mais cette ligne doit être marquée :
{
"is_assumption": true,
"assumption_reason": "Cloison acoustique recommandée en niveau premium"
}
10.2 Doublages
Le niveau premium ne doit pas automatiquement créer des doublages.
10.3 Faux plafonds
Le niveau premium ne doit pas automatiquement créer des faux plafonds.
Il peut seulement transformer un faux plafond prévu en faux plafond renforcé si le scénario cible le demande.
Règles de validation
Ajouter :
{
"wall_insulation_type": "interior|exterior|none",
"ceiling_insulation_type": "interior|exterior|none"
}Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| surfaces pièces | JSON écran 2 |
| hauteur sous plafond | JSON ou défaut |
| niveau de qualité | écran 0 |
| isolation murs | écran 0 |
| isolation plafond | écran 0 |
Complémentaires
| Donnée | Source |
|---|---|
| pièce avec mur extérieur | analyse du plan |
| checkbox isolation pièce | écran 2 |
| plan cible | personnalisation |
| ouvrages décoratifs | personnalisation |
Règle produit finale
Le lot 2 ne doit pas inventer de travaux.
Le moteur doit appliquer cette règle :
Pas de plan cible, pas de demande explicite, pas de dépendance technique = pas de cloison, doublage ou ouvrage spécifique généré automatiquement.
Exceptions autorisées :
1. Faux plafonds standards dans cuisines, salles de bain, WC et circulations ;
2. Isolation intérieure si sélectionnée à l'écran 0 ;
3. Isolation plafond si sélectionnée à l'écran 0 ;
4. Reprises localisées liées aux démolitions ;
5. Coffrages liés aux réseaux techniques.
Toutes les prestations décoratives ou sur mesure (arches, niches, bibliothèques, moulures, têtes de lit, meubles vasques, verrières, rosaces, paillasses, etc.) nécessitent obligatoirement une demande explicite du client ou une présence dans le plan cible.
| Code | Prestation | Unité | Règle de métré | Gamme | Type |
|---|---|---|---|---|---|
| ELE-001 | Mise en sécurité électrique | forfait | 1 par projet si installation conservée | Tous | Forfait |
| ELE-002 | Création / remplacement tableau électrique | u | 1 par logement | Tous | Fourni-posé |
| ELE-003 | Point prise 16A | point | nombre prises prévues | Tous | Fourni-posé |
| ELE-004 | Point interrupteur simple | point | nombre interrupteurs | Tous | Fourni-posé |
| ELE-005 | Point va-et-vient | point | nombre commandes va-et-vient | Tous | Fourni-posé |
| ELE-006 | Point lumineux plafond / applique | point | nombre points lumineux | Tous | Fourni-posé |
| ELE-007 | Circuit spécialisé plaque cuisson | u | 1 par cuisine équipée | Tous | Fourni-posé |
| ELE-008 | Circuit spécialisé four / LL / LV / SL | u | nombre circuits spécialisés | Tous | Fourni-posé |
| ELE-009 | Prise RJ45 | point | nombre prises RJ45 | Standard / Premium | Fourni-posé |
| ELE-010 | Prise TV | point | nombre prises TV | Standard / Premium | Fourni-posé |
| ELE-011 | Spot encastré | u | nombre spots | Standard / Premium | Fourni-posé |
| ELE-012 | Ruban LED / éclairage décoratif | ml | longueur LED | Premium | Fourni-posé |
| ELE-013 | Appareillage électrique entrée de gamme | point | nombre points appareillés | Éco | Fourniture |
| ELE-014 | Appareillage électrique standard | point | nombre points appareillés | Standard | Fourniture |
| ELE-015 | Appareillage électrique premium | point | nombre points appareillés | Premium | Fourniture |
Électricité
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
ELEC-001 | Mise en sécurité électrique | forfait | — | — | — | 10% | Règle définie + choix client |
ELEC-002 | Création / remplacement tableau électrique | u | — | — | — | 10% | Règle définie |
ELEC-003 | Point prise 16A | point | — | — | — | 10% | Règle définie + choix client |
ELEC-004 | Point interrupteur simple | point | — | — | — | 10% | Règle définie |
ELEC-005 | Point va-et-vient | point | — | — | — | 10% | Règle définie + choix client |
ELEC-006 | Point lumineux plafond / applique | point | — | — | — | 10% | Règle définie |
ELEC-007 | Circuit spécialisé plaque cuisson | u | — | — | — | 10% | Règle définie |
ELEC-008 | Circuit spécialisé four / LL / LV / SL | u | — | — | — | 10% | Règle définie + choix client |
ELEC-009 | Prise RJ45 | point | — | — | — | 10% | Règle définie + choix client |
ELEC-010 | Prise TV | point | — | — | — | 10% | Règle définie + choix client |
ELEC-011 | Spot encastré | u | — | — | — | 10% | Choix client |
ELEC-012 | Ruban LED | ml | — | — | — | 10% | Choix client |
ELEC-013 | Appareillage électrique entrée de gamme | point | — | — | — | 10% | Règle définie |
ELEC-014 | Appareillage électrique standard | point | — | — | — | 10% | Règle définie |
ELEC-015 | Appareillage électrique premium | point | — | — | — | 10% | Règle définie |
ELEC-016 | Alimentation électrique radiateur | point | — | — | — | 5,5% | Règle définie + choix client |
ELEC-017 | Alimentation électrique ballon d’eau chaude | u | — | — | — | 5,5% | Règle définie + choix client |
ELEC-018 | Alimentation électrique VMC ou aérateur | u | — | — | — | 5,5% | Règle définie |
ELEC-019 | Alimentation électrique miroir | u | — | — | — | 10% | Règle définie |
ELEC-020 | Prise commandée simple | point | — | — | — | 10% | Choix client |
ELEC-021 | Plus-value prise USB-C intégrée | u | — | — | — | 10% | Choix client |
ELEC-022 | Interrupteur variateur | u | — | — | — | 10% | Choix client |
ELEC-023 | Télérupteur encastré | u | — | — | — | 10% | Choix client |
ELEC-024 | Provision changement / déplacement interphone | forfait | — | — | — | 10% | Choix client |
ELEC-025 | Alimentation électrique volet électrique | u | — | — | — | 5,5% | Choix client |
ELEC-026 | Alimentation électrique cave à vin | u | — | — | — | 10% | Choix client |
ELEC-027 | Alimentation électrique PAC ou climatisation | u | — | — | — | 5,5% | Choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
2.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"type": null,
"name": null,
"openings": [],
"visual_evidence": {
"kitchen_elements": [],
"sanitary_elements": [],
"fixed_features": []
},
"layout_fidelity": {}
}
2.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null
}
2.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"room_type_overrides": [],
"room_area_overrides": [],
"rooms_to_renovate": [],
"room_photos": []
}
2.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"electrical_customization": {
"renovation_mode": null,
"custom_socket_points": [],
"custom_light_points": [],
"custom_switch_points": [],
"custom_specialized_circuits": [],
"custom_rj45_points": [],
"custom_tv_points": [],
"custom_spots": [],
"custom_led_strips": [],
"custom_controlled_sockets": [],
"custom_usb_c_sockets": [],
"custom_dimmers": [],
"custom_remote_switches": [],
"custom_intercom_change": false,
"custom_electric_shutters": [],
"custom_wine_cellar_power": [],
"custom_heat_pump_or_ac_power": []
}
}
La personnalisation est optionnelle.
Si elle n’existe pas, le moteur applique les règles automatiques par type de pièce.
Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Données optionnelles utiles mais non bloquantes :
{
"electrical_diagnostic_uploaded": false,
"electrical_panel_photo_uploaded": false
}
Ces données peuvent améliorer la précision de :
- ELEC-001 mise en sécurité ;
- ELEC-002 tableau électrique ;
- nombre de rangées du tableau ;
- niveau de confiance global du lot électricité.
Mais elles ne doivent pas être obligatoires.
Variables calculées
Avant de générer le lot 3, le moteur doit calculer :
{
"project_surface_m2": null,
"renovated_area_m2": null,
"room_count": null,
"kitchen_count": null,
"bathroom_count": null,
"bedroom_count": null,
"living_room_count": null,
"office_count": null,
"electrical_scope": null,
"electrical_panel_rows_count": null,
"socket_points_count": null,
"switch_points_count": null,
"two_way_switch_points_count": null,
"light_points_count": null,
"specialized_circuit_count": null,
"rj45_points_count": null,
"tv_points_count": null,
"spot_count": null,
"led_strip_length_m": null,
"apparatus_points_count": null,
"electric_radiator_power_points_count": null,
"water_heater_power_points_count": null,
"ventilation_power_points_count": null,
"mirror_power_points_count": null,
"controlled_socket_count": null,
"usb_c_socket_upgrade_count": null,
"dimmer_switch_count": null,
"remote_switch_count": null,
"intercom_provision_count": null,
"electric_shutter_power_points_count": null,
"wine_cellar_power_points_count": null,
"heat_pump_or_ac_power_points_count": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
ELEC-001 — Mise en sécurité électrique
Définition
Mise en sécurité minimale de l’installation électrique existante.
Unité
forfait
Déclencheurs
Créer si :
electrical_scope == "safety_only"
ou si la description projet contient :
- mise en sécurité ;
- sécuriser électricité ;
- tableau à revoir ;
- installation ancienne ;
- diagnostic électrique défavorable.
Règle de quantité
quantity = 1
Anti-double comptage
Si :
electrical_scope == "full_renovation"
ne pas générer ELEC-001 séparément, sauf si la base de prix le prévoit comme ligne obligatoire.
Exclusions
Ne comprend pas :
- rénovation complète ;
- création de nouveaux points ;
- reprise peinture ;
- fourniture luminaires ;
- domotique ;
- mise en conformité complète si installation entièrement refaite.
ELEC-002 — Création / remplacement tableau électrique
Définition
Fourniture et pose ou remplacement du tableau électrique principal du logement.
Unité
u
Déclencheurs
Créer si :
electrical_scope == "full_renovation"
ou si :
electrical_scope == "safety_only"
avec tableau à remplacer.
Créer aussi si :
specialized_circuit_count > 0
et que le tableau existant n’est pas confirmé comme conservé.
Règle de quantité
quantity = 1
Règle de nombre de rangées selon surface
Le moteur doit définir un nombre de rangées cible selon la surface du bien.
"electrical_panel_rows_count": null
| Surface du bien | Nombre de rangées |
|---|---|
| surface <= 35 m² | 2 rangées |
| 35 m² < surface <= 80 m² | 3 rangées |
| 80 m² < surface <= 120 m² | 4 rangées |
| surface > 120 m² | 5 rangées ou tableau renforcé |
if project_surface_m2 <= 35:
electrical_panel_rows_count = 2
elif project_surface_m2 <= 80:
electrical_panel_rows_count = 3
elif project_surface_m2 <= 120:
electrical_panel_rows_count = 4
else:
electrical_panel_rows_count = 5
Sécurité par nombre de circuits
Le nombre de rangées calculé par surface est un minimum.
Le moteur doit aussi vérifier le nombre de circuits générés.
required_rows_by_circuits = compute_rows_from_circuit_count(total_circuit_count)
Règle finale :
electrical_panel_rows_count = max(rows_by_surface, required_rows_by_circuits)
Si required_rows_by_circuits est indisponible :
electrical_panel_rows_count = rows_by_surface
avec :
{
"is_assumption": true,
"assumption_reason": "Nombre de rangées défini par surface, sans calcul détaillé du nombre de circuits"
}
Classification
Le tableau doit être classé selon :
{
"project_surface_m2": null,
"room_count": null,
"specialized_circuit_count": null,
"electrical_panel_rows_count": null,
"heating_type": null,
"hot_water_type": null
}
Classes possibles :
| Classe | Règle |
|---|---|
| tableau 2 rangées | surface <= 35 m² sauf surcharge circuits |
| tableau 3 rangées | surface 35 à 80 m² sauf surcharge circuits |
| tableau 4 rangées | surface 80 à 120 m² sauf surcharge circuits |
| tableau 5 rangées ou renforcé | surface > 120 m² ou nombreux circuits |
Exclusions
Ne comprend pas :
- déplacement compteur ;
- intervention Enedis ;
- colonne montante ;
- augmentation puissance abonnement ;
- domotique avancée ;
- reprise peinture autour tableau.
ELEC-003 — Point prise 16A
Définition
Création d’un point prise de courant 16A standard.
Unité
point
Déclencheurs
Créer selon le programme électrique cible par pièce.
quantity = sum(socket_points_by_room)
Règle de quantité
Le moteur calcule le nombre de prises par pièce selon :
{
"room.type": null,
"room.area_m2": null,
"quality_level": null,
"electrical_customization": null
}
Si l’utilisateur ajoute ou supprime des prises dans la personnalisation :
quantity = user_customized_socket_count
sinon :
quantity = automatic_socket_count_by_room_type
Exclusions
Ne comprend pas :
- circuit spécialisé ;
- prise RJ45 ;
- prise TV ;
- appareillage premium si séparé ;
- peinture après saignée ;
- déplacement lourd de tableau.
ELEC-004 — Point interrupteur simple
Définition
Création d’un point de commande simple pour éclairage.
Unité
point
Déclencheurs
Créer un interrupteur simple si une pièce dispose d’un seul accès principal.
if room.access_count <= 1:
create ELEC-004
Règle de quantité
quantity = count(simple_switch_points)
Par défaut :
1 interrupteur simple par pièce avec point lumineux
Exclusions
Ne comprend pas :
- va-et-vient ;
- variateur ;
- bouton poussoir ;
- domotique ;
- appareillage premium si séparé.
ELEC-005 — Point va-et-vient
Définition
Création d’un système de commande d’éclairage depuis deux points.
Unité
point
Déclencheurs
Créer si :
room.access_count >= 2
ou si la pièce est :
- couloir ;
- entrée avec plusieurs accès ;
- grande pièce avec deux accès ;
- chambre premium avec commande tête de lit ;
- escalier intérieur.
Règle de quantité
quantity = count(two_way_switch_groups)
Un va-et-vient correspond à un groupe de commande pour un même éclairage.
Anti-double comptage
Si ELEC-005 est généré pour une pièce :
do not generate ELEC-004 for same light control
sauf si plusieurs éclairages indépendants existent.
Exclusions
Ne comprend pas :
- télérupteur ;
- variateur ;
- domotique ;
- commande sans fil.
ELEC-006 — Point lumineux plafond / applique
Définition
Création d’un point lumineux en plafond, applique ou sortie de câble.
Unité
point
Déclencheurs
Créer au moins un point lumineux par pièce rénovée.
quantity = sum(light_points_by_room)
Règle de quantité par défaut
1 point lumineux par pièce
Ajustement :
if room.area_m2 > large_room_threshold:
add additional light point
large_room_threshold doit être paramétrable.
Pour premium :
if quality_level == "premium":
allow multiple lighting zones
Exclusions
Ne comprend pas :
- fourniture luminaire décoratif ;
- spot encastré ;
- ruban LED ;
- faux plafond ;
- peinture.
ELEC-007 — Circuit spécialisé plaque cuisson
Définition
Création d’un circuit spécialisé pour plaque de cuisson ou cuisinière.
Unité
u
Déclencheurs
Créer si :
room.type == "kitchen"
et si la cuisine est rénovée.
Créer aussi si :
visual_evidence.kitchen_elements contains "plaque"
ou si la personnalisation ajoute une plaque.
Règle de quantité
quantity = 1 per kitchen
Exclusions
Ne comprend pas :
- plaque de cuisson ;
- pose de la plaque ;
- meuble cuisine ;
- plan de travail ;
- modification tableau hors protections nécessaires si séparées.
ELEC-008 — Circuit spécialisé four / LL / LV / SL
Définition
Création d’un circuit spécialisé pour gros appareil électroménager.
Unité
u
Types concernés
[
"oven",
"dishwasher",
"washing_machine",
"dryer",
"freezer"
]
Déclencheurs automatiques
Créer en cuisine rénovée :
oven = 1
Créer lave-vaisselle si :
quality_level in ["standard", "premium"]
Créer lave-linge si :
room.type in ["laundry", "buanderie"]
ou si la description projet indique lave-linge.
Créer sèche-linge si :
quality_level == "premium"
et si buanderie ou emplacement prévu.
Règle de quantité
quantity = count(specialized_appliance_circuits)
Exclusions
Ne comprend pas :
- appareil électroménager ;
- pose appareil ;
- plomberie appareil ;
- meuble cuisine ;
- ventilation.
ELEC-009 — Prise RJ45
Définition
Création d’une prise de communication RJ45.
Unité
point
Déclencheurs
Créer selon qualité et type de pièce.
Règles par défaut :
| Pièce | Éco | Standard | Premium |
|---|---|---|---|
| Séjour | 0 | 1 | 2 |
| Chambre | 0 | 1 | 1 |
| Bureau | 1 | 1 | 2 |
| Cuisine | 0 | 0 | optionnel |
Règle de quantité
quantity = sum(rj45_points_by_room)
Exclusions
Ne comprend pas :
- abonnement internet ;
- box ;
- baie de brassage complexe ;
- réseau informatique avancé ;
- fibre opérateur.
ELEC-010 — Prise TV
Définition
Création d’une prise TV / coaxiale ou point TV selon configuration.
Unité
point
Déclencheurs
Créer par défaut :
if room.type in ["living_room", "salon", "sejour"] and quality_level in ["standard", "premium"]:
tv_points = 1
Pour chambre :
if quality_level == "premium" and user_customization.tv_in_bedroom == true:
tv_points += 1
Règle de quantité
quantity = sum(tv_points_by_room)
Exclusions
Ne comprend pas :
- antenne collective ;
- intervention opérateur ;
- abonnement ;
- meuble TV ;
- écran TV.
ELEC-011 — Spot encastré
Définition
Création d’un point spot encastré.
Unité
u
Déclencheurs
Créer uniquement si :
target_lighting_plan.spots[] exists
ou si l’utilisateur sélectionne des spots.
Ne pas créer automatiquement des spots uniquement parce que le niveau est premium.
Règle de quantité
quantity = count(spots)
Si l’utilisateur choisit un scénario de spots par pièce sans plan détaillé :
quantity = room.area_m2 × default_spot_density
default_spot_density doit être paramétrable.
Dépendances
Si spots encastrés et aucun faux plafond existant :
trigger dependency PLA-006 or PLA-007
Exclusions
Ne comprend pas :
- faux plafond ;
- peinture ;
- luminaire spot si traité comme produit séparé ;
- variateur ;
- domotique.
ELEC-012 — Ruban LED / éclairage décoratif
Définition
Création d’une alimentation et pose technique pour ruban LED ou éclairage décoratif linéaire.
Unité
ml
Déclencheurs
Créer uniquement si :
target_lighting_plan.led_strips[] exists
ou si l’utilisateur sélectionne :
- LED sous meuble ;
- LED corniche ;
- LED niche ;
- LED tête de lit ;
- LED dressing.
Règle de quantité
quantity = sum(led_strip_length_m)
Si longueur inconnue :
quantity = 1 forfait
avec hypothèse utilisateur.
Exclusions
Ne comprend pas :
- création corniche ;
- menuiserie ;
- faux plafond ;
- peinture ;
- alimentation domotique avancée ;
- transformateur premium si séparé en produit.
ELEC-013 — Appareillage électrique entrée de gamme
Définition
Fourniture de l’appareillage visible en gamme Éco.
Unité
point
Déclencheur
Créer si :
quality_level == "eco"
et si le moteur fonctionne en mode prix séparé :
apparatus_pricing_mode == "separate"
Règle de quantité
quantity = apparatus_points_count
avec :
apparatus_points_count = sockets + switches + rj45 + tv + special_outlets
Anti-double comptage
Si les prix unitaires ELEC-003 à ELEC-012 incluent déjà l’appareillage :
do not create ELEC-013
ELEC-014 — Appareillage électrique standard
Définition
Fourniture de l’appareillage visible en gamme Standard.
Unité
point
Déclencheur
Créer si :
quality_level == "standard"
et :
apparatus_pricing_mode == "separate"
Règle de quantité
quantity = apparatus_points_count
Anti-double comptage
Ne pas créer si les points électriques incluent déjà l’appareillage.
ELEC-015 — Appareillage électrique premium
Définition
Fourniture de l’appareillage visible en gamme Premium.
Unité
point
Déclencheur
Créer si :
quality_level == "premium"
et :
apparatus_pricing_mode == "separate"
Règle de quantité
quantity = apparatus_points_count
Exclusions
Ne comprend pas :
- domotique avancée ;
- interrupteurs connectés ;
- variateurs spécifiques ;
- finitions très haut de gamme hors base produit.
ELEC-016 — Fourniture et pose d’une alimentation électrique radiateur
Définition
Création d’une alimentation électrique dédiée ou adaptée pour radiateur électrique.
Unité
point
Déclencheurs
Créer si :
heating_type in ["electric", "chauffage_electrique"]
ou si l’écran 2 ou la personnalisation indique des radiateurs électriques à créer ou remplacer.
Créer aussi si un lot chauffage génère :
electric_radiators[] exists
Règle de quantité
Priorité 1 :
quantity = count(electric_radiators from personalization or CVC lot)
Priorité 2 :
quantity = count(heated_main_rooms)
Définition heated_main_rooms :
[
"living_room",
"salon",
"sejour",
"bedroom",
"chambre",
"office",
"bureau",
"kitchen"
]
Les pièces suivantes ne déclenchent pas automatiquement une alimentation radiateur :
[
"wc",
"corridor",
"entry",
"closet",
"dressing",
"subspace"
]
Pour salle de bain :
create radiator power point only if electric_towel_radiator_expected == true
Exclusions
Ne comprend pas :
- fourniture radiateur ;
- pose radiateur ;
- thermostat ;
- domotique chauffage ;
- déplacement ancien radiateur ;
- réseau chauffage eau chaude.
ELEC-017 — Fourniture et pose d’une alimentation électrique ballon d’eau chaude
Définition
Création d’une alimentation électrique pour ballon d’eau chaude électrique.
Unité
u
Déclencheurs
Créer si :
hot_water_type in ["electric_water_heater", "ballon_electrique", "ecs_electrique"]
ou si le lot plomberie génère :
water_heater.type == "electric"
ou si la personnalisation ajoute un ballon d’eau chaude électrique.
Règle de quantité
quantity = 1
Sauf si plusieurs ballons sont explicitement prévus :
quantity = count(electric_water_heaters)
Exclusions
Ne comprend pas :
- ballon d’eau chaude ;
- groupe de sécurité ;
- plomberie ;
- évacuation ;
- support ;
- pose ballon ;
- modification tableau hors protection si séparée.
ELEC-018 — Fourniture et pose d’une alimentation électrique VMC ou aérateur
Définition
Création d’une alimentation électrique pour VMC, extracteur ou aérateur.
Unité
u
Déclencheurs
Créer automatiquement si le lot électricité est généré pour un logement rénové.
Règle cible demandée :
quantity = 1
Créer aussi si le lot ventilation génère :
ventilation_equipment exists
Règle de quantité
quantity = 1
Cette quantité reste à 1 par projet, sauf personnalisation technique explicite.
Exclusions
Ne comprend pas :
- VMC ;
- aérateur ;
- bouche ;
- gaine ;
- percement ;
- coffrage ;
- sortie toiture/façade.
ELEC-019 — Fourniture et pose d’une alimentation électrique miroir
Définition
Création d’une alimentation électrique pour miroir lumineux, miroir chauffant ou meuble miroir électrique.
Unité
u
Déclencheurs
Créer automatiquement pour chaque salle de bain ou salle d’eau rénovée.
Types concernés :
[
"bathroom",
"shower_room",
"sdb",
"sde"
]
Règle de quantité
quantity = count(renovated_bathrooms_and_shower_rooms)
Donc :
1 alimentation miroir par salle de bain ou salle d’eau
Ne pas créer automatiquement pour un WC simple, sauf personnalisation.
Exclusions
Ne comprend pas :
- miroir ;
- meuble miroir ;
- pose miroir ;
- interrupteur spécifique ;
- applique décorative ;
- carrelage ;
- percement support.
ELEC-020 — Fourniture et pose d’une prise commandée simple
Définition
Création d’une prise commandée par interrupteur simple.
Unité
point
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_controlled_sockets[] exists
Règle de quantité
quantity = count(custom_controlled_sockets)
Anti-double comptage
Une prise commandée remplace une prise 16A standard sur le même emplacement.
Si une prise commandée est créée :
do not also count it as ELEC-003 for the same location
sauf si la base de prix fonctionne en plus-value.
Exclusions
Ne comprend pas :
- luminaire ;
- lampe ;
- domotique ;
- variateur ;
- scénario connecté.
ELEC-021 — Plus-value prise avec port USB-C intégré
Définition
Plus-value pour remplacer une prise standard par une prise avec port USB-C intégré.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_usb_c_sockets[] exists
Règle de quantité
quantity = count(custom_usb_c_sockets)
Condition
La quantité de prises USB-C ne doit pas dépasser le nombre total de prises 16A prévues dans les pièces concernées.
custom_usb_c_sockets_count <= socket_points_count
Mode de prix
Cette prestation est une plus-value.
"pricing_mode": "upgrade"
Exclusions
Ne comprend pas :
- création d’une prise supplémentaire ;
- déplacement de prise ;
- réseau informatique ;
- chargeur externe.
ELEC-022 — Fourniture et pose d’un interrupteur variateur
Définition
Création d’un interrupteur variateur pour gérer l’intensité lumineuse d’un circuit compatible.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_dimmers[] exists
Règle de quantité
quantity = count(custom_dimmers)
Anti-double comptage
Un variateur remplace un interrupteur simple ou un va-et-vient sur le même circuit.
Si ELEC-022 est créé :
do not also count ELEC-004 for the same switch location
sauf si la base de prix fonctionne en plus-value.
Conditions
Le moteur doit ajouter un warning si le circuit concerné est composé de spots ou LED sans compatibilité connue :
{
"warning": "Compatibilité variateur à valider avec les luminaires sélectionnés"
}
Exclusions
Ne comprend pas :
- luminaires compatibles ;
- transformateur ;
- domotique ;
- variation connectée ;
- reprise peinture.
ELEC-023 — Fourniture et pose d’un télérupteur encastré
Définition
Création d’un télérupteur encastré pour commander un éclairage depuis plusieurs boutons poussoirs.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_remote_switches[] exists
ou si le plan cible prévoit plus de deux points de commande pour un même éclairage.
Règle de quantité
quantity = count(remote_switch_circuits)
Un télérupteur correspond à un circuit d’éclairage commandé par plusieurs poussoirs, pas au nombre de poussoirs.
Anti-double comptage
Si ELEC-023 est généré pour un circuit :
do not generate ELEC-005 va-et-vient for same circuit
Exclusions
Ne comprend pas :
- boutons poussoirs si chiffrés séparément ;
- domotique ;
- tableau électrique si installation au tableau ;
- scénario connecté.
ELEC-024 — Provision changement / déplacement d’interphone
Définition
Provision pour changement, déplacement ou adaptation d’un interphone existant.
Unité
forfait
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_intercom_change == true
ou si la description contient :
- déplacer interphone ;
- changer interphone ;
- visiophone ;
- interphone à déplacer.
Règle de quantité
quantity = 1
Type de ligne
Cette ligne doit être marquée comme provision.
"pricing_mode": "provision"
Exclusions
Ne comprend pas :
- modification installation collective immeuble ;
- intervention syndic ;
- remplacement platine extérieure ;
- câblage collectif ;
- autorisation copropriété ;
- visiophone premium sauf sélection produit.
ELEC-025 — Fourniture et pose d’une alimentation électrique pour volet électrique
Définition
Création d’une alimentation électrique pour volet roulant, store ou fermeture motorisée.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation ou si le lot menuiserie / fermeture prévoit des volets électriques.
custom_electric_shutters[] exists
ou :
motorized_shutters[] exists
Règle de quantité
Priorité 1 :
quantity = count(custom_electric_shutters)
Priorité 2 :
quantity = count(motorized_shutters)
Si l’utilisateur sélectionne “volets électriques sur toutes fenêtres” :
quantity = count(window_openings)
Exclusions
Ne comprend pas :
- volet électrique ;
- moteur ;
- pose volet ;
- coffre ;
- menuiserie ;
- télécommande premium ;
- domotique.
ELEC-026 — Fourniture et pose d’une alimentation électrique pour cave à vin
Définition
Création d’une alimentation électrique dédiée ou adaptée pour cave à vin.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation.
custom_wine_cellar_power[] exists
ou si le lot cuisine / mobilier prévoit une cave à vin.
Règle de quantité
quantity = count(wine_cellar_power_points)
Par défaut :
quantity = 1
si une cave à vin est prévue mais que le nombre d’équipements n’est pas détaillé.
Exclusions
Ne comprend pas :
- cave à vin ;
- meuble ;
- ventilation meuble ;
- découpe cuisine ;
- pose électroménager.
ELEC-027 — Fourniture et pose d’une alimentation électrique pour PAC ou climatisation
Définition
Création d’une alimentation électrique pour pompe à chaleur, climatisation ou unité technique CVC.
Unité
u
Déclencheur
Créer uniquement si demandé en personnalisation ou si le lot CVC prévoit une PAC ou une climatisation.
custom_heat_pump_or_ac_power[] exists
ou :
cvc_equipment.type in ["heat_pump", "pac", "air_conditioning", "clim"]
Règle de quantité
Priorité 1 :
quantity = count(custom_heat_pump_or_ac_power)
Priorité 2 :
quantity = count(cvc_power_required_units)
Si une seule PAC ou clim est prévue sans détail :
quantity = 1
Type de ligne
Si les caractéristiques électriques de la PAC ou clim ne sont pas connues :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Alimentation PAC/clim à valider selon puissance et matériel sélectionné"
}
Exclusions
Ne comprend pas :
- pompe à chaleur ;
- climatisation ;
- liaison frigorifique ;
- évacuation condensats ;
- percement façade ;
- support extérieur ;
- mise en service ;
- autorisation copropriété.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version complète intégrant tableau par rangées, alimentations techniques et options personnalisées
Objectif du lot
Le lot 3 couvre les prestations liées à la mise en sécurité, à la rénovation, à la création ou à la modification de l’installation électrique intérieure.
Ce lot comprend :
- mise en sécurité électrique ;
- tableau électrique ;
- prises de courant ;
- interrupteurs ;
- va-et-vient ;
- points lumineux ;
- circuits spécialisés ;
- prises RJ45 ;
- prises TV ;
- spots ;
- rubans LED ;
- appareillage électrique selon gamme ;
- alimentation radiateur électrique ;
- alimentation ballon d’eau chaude électrique ;
- alimentation VMC ou aérateur ;
- alimentation miroir lumineux ;
- prise commandée ;
- prise USB-C ;
- variateur ;
- télérupteur ;
- provision interphone ;
- alimentation volet électrique ;
- alimentation cave à vin ;
- alimentation PAC ou climatisation.
Ce lot ne doit pas chiffrer :
- peinture après saignées ;
- faux plafond ;
- rebouchage lourd hors prestation électrique ;
- luminaires décoratifs hors sélection produit ;
- domotique avancée non prévue ;
- chauffage électrique complet si traité dans un lot CVC séparé ;
- VMC complète si traitée dans lot ventilation, sauf alimentation électrique ;
- pompe à chaleur ou climatisation complète si traitée dans lot CVC, sauf alimentation électrique.
Détermination du mode électrique
Le moteur doit d’abord déterminer le niveau d’intervention électrique.
"electrical_scope": "safety_only | partial_renovation | full_renovation"
5.1 Mise en sécurité uniquement
Déclencher :
"electrical_scope": "safety_only"
si la description contient :
- mise en sécurité ;
- mise aux normes partielle ;
- conserver installation ;
- seulement tableau ;
- sécuriser électricité.
Dans ce cas, le moteur génère principalement :
- ELEC-001 ;
- éventuellement ELEC-002 ;
- peu ou pas de nouveaux points.
5.2 Rénovation partielle
Déclencher :
"electrical_scope": "partial_renovation"
si seules certaines pièces sont rénovées ou si l’utilisateur personnalise des points électriques dans certaines pièces.
Dans ce cas :
electrical_points generated only for selected rooms
5.3 Rénovation complète
Déclencher :
"electrical_scope": "full_renovation"
si :
- toutes les pièces sont rénovées ;
- le projet est une rénovation complète ;
- le projet implique cuisine + SDB + sols/murs ;
- la description contient “tout refaire”, “rénovation complète”, “refaire électricité”.
Dans ce cas, le moteur génère :
- tableau électrique ;
- prises par pièce ;
- points lumineux ;
- interrupteurs ;
- circuits spécialisés cuisine ;
- alimentations techniques selon chauffage, ECS, VMC et SDB ;
- RJ45 / TV selon gamme ;
- appareillage selon gamme.
5.4 Cas par défaut
Si le mode électrique est inconnu mais que le projet est une rénovation intérieure complète :
{
"electrical_scope": "full_renovation",
"is_assumption": true,
"assumption_reason": "Rénovation électrique complète supposée dans le cadre d'une rénovation complète"
}
Si le projet est léger ou incertain :
{
"electrical_scope": "partial_renovation",
"is_assumption": true,
"assumption_reason": "Rénovation électrique partielle supposée"
}Socle automatique par type de pièce
Le moteur doit générer un programme électrique cible par pièce.
6.1 Séjour / salon
Pour une pièce de type :
["living_room", "salon", "sejour"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Prises 16A | minimum | minimum + confort | confort renforcé |
| Point lumineux | 1 | 1 à 2 | selon scénario |
| Interrupteur | 1 | 1 à 2 | selon accès |
| RJ45 | 0 à 1 | 1 | 1 à 2 |
| TV | 0 | 1 | 1 |
if living_room.area_m2 < 28:
sockets = 5
else:
sockets = 7
Ajustement qualité :
if quality_level == "standard":
sockets = sockets + 1
if quality_level == "premium":
sockets = sockets + 2
6.2 Chambre
Pour une pièce de type :
["bedroom", "chambre"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Prises 16A | 3 | 4 | 5 |
| Point lumineux | 1 | 1 | 1 à 2 |
| Interrupteur | 1 | 1 | 1 |
| RJ45 | 0 | 1 | 1 |
| TV | 0 | 0 | optionnel |
sockets = 3
Ajustement qualité :
if quality_level == "standard":
sockets = 4
if quality_level == "premium":
sockets = 5
6.3 Cuisine
Pour une pièce de type :
["kitchen", "cuisine"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Prises 16A générales | 3 à 6 | 6 | 6 à 8 |
| Point lumineux | 1 | 1 à 2 | selon scénario |
| Interrupteur | 1 | 1 | 1 à 2 |
| Circuit plaque | 1 | 1 | 1 |
| Circuit four | 1 | 1 | 1 |
| Circuit lave-vaisselle | 0 à 1 | 1 | 1 |
| Circuit hotte | 0 à 1 | 1 | 1 |
| RJ45 | 0 | 0 | optionnel |
if kitchen.area_m2 <= 4:
sockets = 3
else:
sockets = 6
Ajustement qualité :
if quality_level == "premium" and kitchen.area_m2 > 4:
sockets = 8
Circuits spécialisés à créer par défaut si la cuisine est rénovée :
create ELEC-007 circuit plaque cuisson
create ELEC-008 circuit four
create ELEC-008 circuit lave-vaisselle if quality_level in ["standard", "premium"]
Si la cuisine est très petite :
dishwasher_circuit = assumption
6.4 Salle de bain / salle d’eau
Pour une pièce de type :
["bathroom", "shower_room", "sdb", "sde"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Prise sécurisée hors volume | 1 | 1 | 1 à 2 |
| Point lumineux plafond / applique | 1 | 1 à 2 | 2 |
| Interrupteur | 1 | 1 | 1 |
| Alimentation miroir lumineux | 1 | 1 | 1 |
| Alimentation sèche-serviette | selon projet | selon projet | selon projet |
sockets = 1
light_points = 1
switches = 1
mirror_power_points = 1
Ajustement qualité :
if quality_level == "premium":
light_points = 2
Ne pas créer automatiquement un sèche-serviette électrique si le mode chauffage ou la personnalisation ne l’indique pas.
6.5 WC
Pour une pièce ou subspace de type :
["wc", "toilet"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Point lumineux | 1 | 1 | 1 |
| Interrupteur | 1 | 1 | 1 |
| Prise 16A | 0 | 0 à 1 | 1 |
light_points = 1
switches = 1
Prise uniquement si :
quality_level == "premium"
ou si WC lavant prévu.
6.6 Entrée / couloir / dégagement
Pour une pièce ou subspace de type :
["entry", "entree", "corridor", "hall", "degagement"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Point lumineux | 1 | 1 à 2 | selon longueur |
| Interrupteur | 1 | 1 | 1 |
| Va-et-vient | selon accès | selon accès | selon accès |
| Prise 16A | 0 à 1 | 1 | 1 |
Règle :
if area_m2 > 4:
sockets = 1
else:
sockets = 0
Si la pièce a deux accès distincts :
create ELEC-005 va-et-vient
Sinon :
create ELEC-004 interrupteur simple
6.7 Bureau
Pour une pièce de type :
["office", "bureau"]
Créer :
| Élément | Éco | Standard | Premium |
|---|---|---|---|
| Prises 16A | 3 | 4 | 5 à 6 |
| Point lumineux | 1 | 1 | 1 à 2 |
| Interrupteur | 1 | 1 | 1 |
| RJ45 | 1 | 1 | 2 |
| TV | 0 | 0 | optionnel |
sockets = 3
rj45 = 1
Ajustement qualité :
if quality_level == "standard":
sockets = 4
if quality_level == "premium":
sockets = 6
rj45 = 2
6.8 Dressing / placard / cellier / buanderie
Pour les subspaces ou pièces de type :
["dressing", "closet", "cellier", "buanderie", "utility"]
Créer uniquement si la zone est une vraie pièce accessible.
Règle :
if area_m2 > 4:
light_points = 1
switches = 1
sockets = 1
else:
no automatic electrical point
Buanderie :
create specialized circuit for washing_machine if washing_machine_expected == true
Règles anti-double comptage
8.1 Tableau et circuits
ELEC-002 couvre le tableau.
ELEC-007, ELEC-008, ELEC-016, ELEC-017, ELEC-018, ELEC-025, ELEC-026 et ELEC-027 couvrent les alimentations ou circuits spécifiques.
Ne pas intégrer deux fois les protections électriques si la base de prix les inclut déjà dans ELEC-002 ou dans les circuits.
Le paramètre suivant doit exister :
{
"circuit_protection_included_in": "panel | circuit | separate"
}
8.2 Points et appareillage
Deux modes possibles :
{
"apparatus_pricing_mode": "included | separate"
}
Si :
"apparatus_pricing_mode": "included"
alors ELEC-013 à ELEC-015 ne sont pas créés.
Si :
"apparatus_pricing_mode": "separate"
alors ELEC-003 à ELEC-012 sont chiffrés hors appareillage visible, et ELEC-013 à ELEC-015 ajoutent la gamme esthétique.
8.3 Spots et points lumineux
ELEC-006 = point lumineux classique.
ELEC-011 = spot encastré.
Si une pièce est éclairée uniquement par spots :
do not also create ELEC-006 for the same lighting zone
8.4 Variateur et interrupteur simple
ELEC-022 remplace ELEC-004 sur le même point de commande.
Si la base de prix fonctionne en plus-value, ELEC-004 peut rester et ELEC-022 devient une plus-value.
8.5 Télérupteur et va-et-vient
ELEC-023 remplace ELEC-005 pour le même circuit.
Ne pas facturer va-et-vient et télérupteur sur un même circuit, sauf si la base de prix distingue boutons poussoirs et télérupteur.
8.6 Prise USB-C
ELEC-021 est une plus-value sur ELEC-003.
Ne pas créer une prise standard supplémentaire si ELEC-021 correspond à une prise déjà comptabilisée.
8.7 Ruban LED
ELEC-012 ne remplace pas ELEC-006 sauf si la personnalisation indique que le ruban LED est l’éclairage principal.
8.8 Faux plafond
ELEC-011 ne doit pas inclure le faux plafond.
Si spots encastrés :
create dependency toward PLA-006 or PLA-007
Interactions avec les autres lots
9.1 Avec lot 2 — Cloisons / faux plafonds
Si spots encastrés :
trigger possible PLA-006 faux plafond
Si nouvelles cloisons :
electrical points can attach to new partitions
Si saignées importantes :
trigger possible PLA-010 reprise localisée
9.2 Avec lot cuisine
Cuisine rénovée déclenche :
- circuit plaque ;
- circuit four ;
- circuit lave-vaisselle selon gamme ;
- prises plan de travail ;
- hotte selon gamme ;
- alimentation cave à vin si demandée ou prévue.
9.3 Avec lot salle de bain
Salle de bain rénovée déclenche :
- point lumineux ;
- prise sécurisée ;
- alimentation miroir ;
- alimentation sèche-serviette si prévu.
9.4 Avec lot peinture
Les reprises de saignées et rebouchages doivent alimenter les surfaces à reprendre, mais la peinture finale reste dans le lot peinture.
9.5 Avec lot CVC
Si chauffage électrique, VMC, PAC ou climatisation :
- ELEC-016 alimentation radiateur ;
- ELEC-018 alimentation VMC ou aérateur ;
- ELEC-027 alimentation PAC ou climatisation.
9.6 Avec lot menuiserie / fermeture
Si volets électriques prévus :
- ELEC-025 alimentation volet électrique.
Gestion du niveau Éco / Standard / Premium
Le niveau de qualité influence :
- nombre de prises ;
- nombre de RJ45 ;
- nombre de points confort ;
- niveau d’appareillage ;
- présence de TV ;
- présence éventuelle de LED ou spots uniquement si scénario cible.
10.1 Éco
Règle :
Respect du socle minimum par pièce
Appareillage entrée de gamme
Peu ou pas de confort additionnel
10.2 Standard
Règle :
Socle minimum + confort raisonnable
RJ45 séjour / bureau / chambres selon cas
Appareillage standard
10.3 Premium
Règle :
Plus de prises
Plus de RJ45
Appareillage premium
Scénarios lumineux possibles
Options décoratives si personnalisées
Le niveau premium ne doit pas créer automatiquement des spots, LED, volets électriques, cave à vin, PAC ou clim sans intention de conception ou personnalisation.
Format de sortie attendu
Chaque ligne du lot 3 doit respecter ce format :
{
"lot": "Électricité",
"code": "ELEC-003",
"label": "Point prise 16A",
"room_id": "room_2",
"room_name": "Chambre",
"unit": "point",
"quantity": 4,
"quantity_formula": "automatic_socket_count_by_room_type",
"pricing_mode": "unit_price",
"source": "business_rule_room_type",
"confidence": 0.85,
"is_assumption": true,
"assumption_reason": "Nombre de prises généré selon type de pièce et niveau de qualité",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour ELEC-002, ajouter :
{
"electrical_panel_rows_count": 3,
"panel_rows_formula": "rows_by_surface",
"project_surface_m2": 62
}
Pour les options personnalisées, source :
"source": "client_personalization"
Règles de validation
Avant génération du lot 3, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_types": true,
"has_room_surfaces": true,
"has_quality_level": true,
"has_electrical_scope": true,
"has_project_surface": true
}
Si quality_level est absent :
quality_level = "standard"
avec hypothèse visible.
Si electrical_scope est absent :
derive electrical_scope from project_description and renovation density
Si project_surface_m2 est absent :
use sum(rooms.area_m2)
Si les pièces ou surfaces sont absentes :
block room-based electrical pricing
Message :
Impossible de générer le lot électricité sans pièces et surfaces validées.
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| type de pièce | JSON écran 2 |
| surface de pièce | JSON écran 2 |
| surface totale projet | écran 0 ou somme JSON |
| niveau de qualité | écran 0 |
| type chauffage | écran 0 |
| type ECS | écran 0 |
| description projet | écran 0 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| nombre de rangées tableau | surface du bien |
| nombre de prises | type pièce + surface + qualité |
| alimentation radiateur | chauffage électrique ou lot CVC |
| alimentation ballon | ECS électrique |
| alimentation VMC/aérateur | toujours 1 par projet électrique |
| alimentation miroir | 1 par SDB/SDE |
| circuits cuisine | cuisine détectée ou personnalisée |
Optionnel utile
| Donnée | Source |
|---|---|
| diagnostic électrique | upload client |
| photo tableau électrique | upload client |
| plan électrique cible | personnalisation |
| emplacement cuisine cible | plan cible |
| choix spots / LED | personnalisation |
| choix appareillage | base produits |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| prise commandée | personnalisation |
| prise USB-C | personnalisation |
| variateur | personnalisation |
| télérupteur | personnalisation |
| interphone | personnalisation |
| volet électrique | personnalisation ou lot menuiserie |
| cave à vin | personnalisation ou lot cuisine |
| PAC / clim | personnalisation ou lot CVC |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| nombre exact de prises souhaitées | généré automatiquement puis personnalisable |
| marque appareillage | déduit par gamme / produit |
| section de câble | gérée par base de prix / électricien |
| détail tableau complet | généré selon circuits |
| longueur exacte câbles | non nécessaire pour estimation instantanée |
| schéma unifilaire | non nécessaire au premier chiffrage |
Règle produit finale
Le lot 3 doit permettre un chiffrage instantané à partir des pièces validées.
Le moteur doit appliquer cette logique :
1. Identifier les pièces.
2. Déterminer le mode électrique.
3. Calculer la surface totale du bien.
4. Définir le tableau électrique et son nombre de rangées.
5. Générer un programme électrique cible par pièce.
6. Ajouter les circuits spécialisés selon cuisine, ECS, chauffage et équipements.
7. Ajouter les alimentations techniques automatiques :
- radiateurs si chauffage électrique ;
- ballon si ECS électrique ;
- VMC/aérateur toujours 1 ;
- miroir 1 par salle de bain.
8. Ajouter les options personnalisées uniquement si demandées.
9. Ajouter l’appareillage selon gamme.
10. Créer les dépendances vers cloisons, faux plafonds et finitions.
11. Marquer les lignes automatiques comme hypothèses personnalisables.
Le devis doit rester clair :
Les quantités électriques sont générées automatiquement selon les pièces, les surfaces, le mode de chauffage, le type d’eau chaude et le niveau de qualité. Elles peuvent être ajustées dans la personnalisation.
Plomberie
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
PLO-001 | Création alimentation eau froide / eau chaude | point | — | — | — | 10% | Règle définie + choix client |
PLO-002 | Création évacuation PVC | point | — | — | — | 10% | Règle définie + choix client |
PLO-003 | Déplacement arrivée / évacuation existante | point | — | — | — | 10% | Choix client |
PLO-004 | Raccordement et pose WC suspendu | u | — | — | — | 10% | Règle définie + choix client |
PLO-005 | Raccordement et pose WC à poser | u | — | — | — | 10% | Règle définie + choix client |
PLO-011 | Pose ballon d’eau chaude | u | — | — | — | 5,5% | Règle définie + choix client |
PLO-012 | Raccordement électroménager | u | — | — | — | 10% | Règle définie + choix client |
PLO-013 | Pose robinet / vanne d’arrêt | u | — | — | — | 10% | Règle définie |
PLO-014 | Déplacement et raccordement des WC sur colonne existante | u | — | — | — | 10% | Choix client |
PLO-015 | Remplacement vanne d’arrêt générale logement | u | — | — | — | 10% | Choix client |
PLO-016 | Raccordement d’une pompe de relevage | u | — | — | — | 10% | Choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
5.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"type": null,
"name": null,
"visual_evidence": {
"sanitary_elements": [],
"kitchen_elements": [],
"fixed_features": []
},
"layout_fidelity": {},
"openings": []
}
5.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null
}
5.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"validated_fixtures": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"fixture_overrides": []
}
5.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"plumbing_customization": {
"target_fixtures": [],
"moved_fixtures": [],
"new_fixtures": [],
"removed_fixtures": [],
"wc_type": null,
"wc_moved": false,
"replace_main_shutoff_valve": false,
"water_heater_replacement": false,
"lift_pump_required": false,
"appliances_to_connect": []
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
La précision du lot 4 doit venir principalement :
- du JSON validé ;
- des équipements sanitaires détectés ;
- de la personnalisation ;
- de la comparaison entre état existant et projet cible.
Règle produit :
Pas de déplacement demandé ou détecté = pas de déplacement de plomberie inventé.
Variables calculées
Avant de générer le lot 4, le moteur doit calculer :
{
"plumbing_scope": null,
"water_supply_points_count": null,
"evacuation_points_count": null,
"moved_plumbing_points_count": null,
"wc_suspended_count": null,
"wc_floor_mounted_count": null,
"wc_moved_count": null,
"sink_like_fixture_count": null,
"shutoff_valve_count": null,
"main_shutoff_valve_replacement_count": null,
"water_heater_count": null,
"appliance_connection_count": null,
"lift_pump_connection_count": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
PLO-001 — Création alimentation eau froide / eau chaude
Définition
Création ou remplacement d’un point d’alimentation eau froide / eau chaude ou eau froide seule selon l’équipement.
Unité
point
Déclencheurs
Créer si un équipement sanitaire ou cuisine nécessite une alimentation en eau.
target_fixtures[] exists
ou :
validated_fixtures[] in renovated rooms
ou :
plumbing_scope == "full_renovation"
Règle de quantité
quantity = count(water_supply_points)
Un équipement EF/EC compte pour 1 point d’alimentation.
Exemples :
| Équipement | Quantité PLO-001 |
|---|---|
| évier | 1 |
| lavabo | 1 |
| vasque | 1 |
| lave-main | 1 |
| douche | 1 |
| baignoire | 1 |
| lave-vaisselle | 1 |
| lave-linge | 1 |
| ballon d’eau chaude | 1 si réseau à créer |
Cas plomberie conservée
Si l’équipement reste au même emplacement et que les réseaux sont explicitement conservés :
do not create PLO-001
Anti-double comptage
Si PLO-003 est généré pour un équipement déplacé :
do not create PLO-001 for the same moved fixture
sauf si la base de prix fonctionne en mode détaillé.
Exclusions
Ne comprend pas :
- pose équipement sanitaire visible ;
- robinetterie visible ;
- meuble vasque ;
- receveur ;
- baignoire ;
- raccordement final électroménager ;
- carrelage ;
- coffrage ;
- peinture.
PLO-002 — Création évacuation PVC
Définition
Création ou remplacement d’un point d’évacuation PVC pour équipement sanitaire ou électroménager.
Unité
point
Déclencheurs
Créer si un équipement nécessite une évacuation.
target_fixtures[] exists
ou :
validated_fixtures[] in renovated rooms
ou :
plumbing_scope == "full_renovation"
Règle de quantité
quantity = count(evacuation_points)
Exemples :
| Équipement | Quantité PLO-002 |
|---|---|
| évier | 1 |
| lavabo | 1 |
| vasque | 1 |
| lave-main | 1 |
| douche | 1 |
| baignoire | 1 |
| lave-vaisselle | 1 |
| lave-linge | 1 |
Les WC sont exclus de PLO-002 par défaut.
Cas plomberie conservée
Si l’équipement reste au même emplacement et que l’évacuation est explicitement conservée :
do not create PLO-002
Anti-double comptage
Si PLO-003 est généré pour un équipement déplacé :
do not create PLO-002 for the same moved fixture
sauf si la base de prix fonctionne en mode détaillé.
Exclusions
Ne comprend pas :
- raccordement WC ;
- colonne EU/EV ;
- pompe de relevage ;
- receveur ;
- siphon visible ;
- pose équipement ;
- carrelage ;
- coffrage.
PLO-003 — Déplacement arrivée / évacuation existante
Définition
Déplacement d’une alimentation et/ou évacuation existante pour un équipement sanitaire ou cuisine, hors WC.
Unité
point
Déclencheurs
Créer si un équipement existant change de position dans le projet cible.
moved_fixtures[] exists
ou si la comparaison entre plan existant et plan cible indique un déplacement.
Exemples :
- évier déplacé ;
- lavabo déplacé ;
- vasque déplacée ;
- douche déplacée ;
- baignoire déplacée ;
- lave-linge déplacé ;
- lave-vaisselle déplacé.
Exclusion WC
Les WC déplacés doivent être traités par PLO-014.
Ne pas utiliser PLO-003 pour un WC.
Règle de déplacement
Le moteur doit comparer la position source et la position cible.
movement_distance_m = distance(source_fixture.centroid, target_fixture.centroid)
Créer PLO-003 si :
movement_distance_m > plumbing_movement_threshold_m
Seuil recommandé paramétrable :
"plumbing_movement_threshold_m": 0.50
Règle de quantité
quantity = count(moved_non_wc_plumbing_fixtures)
Anti-double comptage
Si PLO-003 est généré pour un équipement :
do not also create PLO-001 and PLO-002 for the same equipment
sauf si la base de prix est en mode détaillé.
Exclusions
Ne comprend pas :
- déplacement WC ;
- création colonne ;
- pompe de relevage ;
- pose équipement ;
- coffrage ;
- carrelage ;
- reprise peinture.
PLO-004 — Raccordement et pose WC suspendu
Définition
Raccordement et pose d’un WC suspendu sur attente existante ou réseau prévu.
Unité
u
Déclencheurs
Créer si :
target_fixture.type == "wall_hung_wc"
ou si :
wc_type == "suspended"
ou si le niveau de qualité implique WC suspendu par défaut.
Règle par défaut selon qualité :
| quality_level | WC par défaut |
|---|---|
| eco | WC à poser |
| standard | WC suspendu |
| premium | WC suspendu |
Règle de quantité
quantity = count(wall_hung_wc)
Cas WC déplacé
Si le WC suspendu change de place :
create PLO-014 instead of PLO-004
sauf si la base de prix fonctionne en mode détaillé.
Exclusions
Ne comprend pas :
- déplacement colonne ;
- déplacement réseau EU/EV ;
- coffrage bâti-support si traité en lot 2 ;
- habillage ;
- carrelage ;
- peinture ;
- fourniture WC si produit séparé ;
- alimentation électrique WC lavant.
PLO-005 — Raccordement et pose WC à poser
Définition
Raccordement et pose d’un WC à poser sur attente existante ou réseau prévu.
Unité
u
Déclencheurs
Créer si :
target_fixture.type == "floor_mounted_wc"
ou si :
wc_type == "floor_mounted"
ou si :
quality_level == "eco"
et aucun choix de WC suspendu n’est fait.
Règle de quantité
quantity = count(floor_mounted_wc)
Cas WC déplacé
Si le WC à poser change de place :
create PLO-014 instead of PLO-005
sauf si la base de prix fonctionne en mode détaillé.
Exclusions
Ne comprend pas :
- déplacement colonne ;
- déplacement réseau EU/EV ;
- carrelage ;
- peinture ;
- fourniture WC si produit séparé ;
- broyeur ;
- pompe de relevage.
PLO-011 — Pose ballon d’eau chaude
Définition
Pose et raccordement plomberie d’un ballon d’eau chaude.
Unité
u
Déclencheurs
Créer si :
hot_water_type in ["electric_water_heater", "ballon_electrique", "ecs_electrique"]
et si le projet prévoit le remplacement ou la création du ballon.
Créer aussi si :
water_heater_replacement == true
ou si :
target_equipment includes "water_heater"
Règle de quantité
quantity = count(water_heaters)
Par défaut :
quantity = 1
si un ballon est prévu mais non détaillé.
Cas ECS électrique indiquée en écran 0
Si hot_water_type indique ECS électrique mais que le remplacement n’est pas explicitement demandé :
{
"is_assumption": true,
"assumption_reason": "Ballon d’eau chaude supposé dans le cadre de la rénovation plomberie"
}
Exclusions
Ne comprend pas :
- alimentation électrique du ballon ;
- tableau électrique ;
- groupe de sécurité si séparé ;
- évacuation spécifique si séparée ;
- support renforcé ;
- modification importante plomberie ;
- dépose ancien ballon si traitée en démolition.
PLO-012 — Raccordement électroménager
Définition
Raccordement plomberie final d’un appareil électroménager nécessitant eau et/ou évacuation.
Unité
u
Équipements concernés
[
"dishwasher",
"washing_machine",
"fridge_water",
"steam_oven"
]
Déclencheurs
Créer si :
appliances_to_connect[] exists
ou si cuisine rénovée avec lave-vaisselle prévu.
Créer aussi si buanderie avec lave-linge prévu.
Règle de quantité
quantity = count(appliances_to_connect)
Règle automatique cuisine
Si cuisine rénovée :
if quality_level in ["standard", "premium"]:
dishwasher_connection = 1
Règle automatique buanderie
Si buanderie détectée :
washing_machine_connection = 1
Exclusions
Ne comprend pas :
- création arrivée EF ;
- création évacuation PVC ;
- alimentation électrique ;
- appareil électroménager ;
- pose cuisine ;
- meuble ;
- découpe plan de travail.
Ces éléments sont traités dans d’autres lots.
PLO-013 — Pose robinet / vanne d’arrêt
Définition
Pose de robinets ou vannes d’arrêt sous équipement sanitaire.
Unité
u
Déclencheurs
Créer automatiquement pour chaque :
- évier ;
- lavabo ;
- vasque ;
- lave-main.
Types concernés :
[
"evier",
"sink",
"lavabo",
"vasque",
"lave_main"
]
Règle de quantité
La règle cible est :
2 unités par évier, lavabo, vasque ou lave-main
quantity = sink_like_fixture_count × 2
Exemples :
| Équipement | Quantité PLO-013 |
|---|---|
| 1 évier | 2 |
| 1 lavabo | 2 |
| 1 lave-main | 2 |
| 2 vasques | 4 |
Exclusions
Ne comprend pas :
- robinetterie visible ;
- mitigeur ;
- siphon ;
- meuble ;
- pose vasque ;
- raccordement électroménager.
PLO-014 — Déplacement et raccordement des WC sur colonne existante
Définition
Déplacement d’un WC et raccordement sur une colonne existante.
Unité
u
Déclencheurs
Créer uniquement si le WC change de place à la demande du client par rapport au plan de départ.
wc_moved == true
ou comparaison source / cible :
distance(source_wc.position, target_wc.position) > wc_movement_threshold_m
Seuil recommandé paramétrable :
"wc_movement_threshold_m": 0.50
Condition obligatoire
Cette prestation suppose une colonne existante exploitable.
Si la colonne existante n’est pas identifiée :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Colonne existante non localisée avec certitude"
}
Règle de quantité
quantity = count(moved_wc)
Anti-double comptage
Si PLO-014 est généré pour un WC :
do not also generate PLO-004 or PLO-005 for the same WC
sauf si la base de prix fonctionne en mode détaillé.
Exclusions
Ne comprend pas :
- création nouvelle colonne ;
- broyeur ;
- pompe de relevage ;
- étude faisabilité pente ;
- coffrage ;
- carrelage ;
- peinture ;
- autorisation copropriété ;
- WC fourni si produit séparé.
PLO-015 — Remplacement vanne d’arrêt générale du logement
Définition
Remplacement de la vanne d’arrêt générale du logement.
Unité
u
Déclencheurs
Créer uniquement si demandé par le client.
replace_main_shutoff_valve == true
ou si la description contient :
- remplacer vanne générale ;
- changer arrivée générale ;
- changer robinet d’arrêt général ;
- vanne générale défectueuse.
Règle de quantité
quantity = 1
Ne jamais créer automatiquement
Cette prestation ne doit pas être générée automatiquement à partir du plan seul.
Exclusions
Ne comprend pas :
- intervention colonne collective ;
- coupure générale immeuble ;
- autorisation syndic ;
- modification nourrice complète ;
- remplacement compteur ;
- travaux plomb / ancien réseau spécifique.
PLO-016 — Raccordement d’une pompe de relevage
Définition
Raccordement plomberie d’une pompe de relevage.
Unité
u
Déclencheurs
Créer si :
lift_pump_required == true
ou si le projet cible prévoit une pièce d’eau, WC ou évacuation nécessitant un relevage.
Créer aussi si le lot technique ou la personnalisation indique :
pump_equipment.type == "lift_pump"
Règle de quantité
quantity = count(lift_pumps)
Par défaut :
quantity = 1
si une pompe de relevage est prévue mais non détaillée.
Conditions
Si la pompe est déduite automatiquement mais non confirmée :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Pompe de relevage à confirmer selon pente et évacuation disponible"
}
Exclusions
Ne comprend pas :
- alimentation électrique pompe ;
- pompe elle-même si produit séparé ;
- coffrage ;
- percement ;
- création colonne ;
- évacuation longue distance ;
- maintenance pompe.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version recentrée sur réseaux, alimentations, évacuations et raccordements techniques
Objectif du lot
Le lot 4 couvre les prestations de plomberie technique liées :
- aux alimentations eau froide / eau chaude ;
- aux évacuations PVC ;
- aux déplacements de réseaux ;
- aux raccordements WC ;
- aux ballons d’eau chaude ;
- aux raccordements électroménagers ;
- aux vannes d’arrêt ;
- aux raccordements de pompe de relevage.
Ce lot ne doit pas chiffrer les équipements visibles de salle de bain qui relèvent du lot Salle de bain.
Prestations conservées dans le lot 4
Les prestations conservées sont :
| Code | Prestation |
|---|---|
| PLO-001 | Création alimentation eau froide / eau chaude |
| PLO-002 | Création évacuation PVC |
| PLO-003 | Déplacement arrivée / évacuation existante |
| PLO-004 | Raccordement et pose WC suspendu |
| PLO-005 | Raccordement et pose WC à poser |
| PLO-011 | Pose ballon d’eau chaude |
| PLO-012 | Raccordement électroménager |
| PLO-013 | Pose robinet / vanne d’arrêt |
|---|---|
| PLO-014 | Déplacement et raccordement des WC sur colonne existante |
| PLO-015 | Remplacement vanne d’arrêt générale du logement |
| PLO-016 | Raccordement d’une pompe de relevage |
Détermination du périmètre plomberie
Le moteur doit d’abord déterminer le niveau d’intervention plomberie.
"plumbing_scope": "none | partial_renovation | full_renovation"
8.1 Aucun travaux plomberie
Déclencher :
"plumbing_scope": "none"
si aucune pièce humide, cuisine, WC, ballon, électroménager ou équipement hydraulique n’est concerné.
Dans ce cas, ne générer aucune ligne PLO.
8.2 Rénovation partielle plomberie
Déclencher :
"plumbing_scope": "partial_renovation"
si seules certaines pièces sont concernées :
- cuisine seule ;
- salle de bain seule ;
- WC seul ;
- raccordement électroménager ;
- ballon d’eau chaude ;
- pompe de relevage.
8.3 Rénovation complète plomberie
Déclencher :
"plumbing_scope": "full_renovation"
si le projet implique :
- rénovation complète cuisine + salle de bain ;
- remplacement des réseaux ;
- déplacement de plusieurs équipements ;
- création ou refonte complète des points d’eau.
8.4 Cas par défaut
Si cuisine, SDB ou WC sont rénovés et que le périmètre plomberie n’est pas précisé :
{
"plumbing_scope": "partial_renovation",
"is_assumption": true,
"assumption_reason": "Rénovation plomberie partielle déduite des pièces humides concernées"
}Identification des équipements plomberie
Le moteur doit identifier les équipements nécessitant des alimentations ou évacuations.
9.1 Équipements avec alimentation EF/EC
Créer un point d’alimentation pour :
[
"evier",
"sink",
"lavabo",
"vasque",
"lave_main",
"douche",
"shower",
"baignoire",
"bathtub"
]
9.2 Équipements avec alimentation EF seule
Créer un point d’alimentation EF seule pour :
[
"wc",
"dishwasher",
"washing_machine",
"fridge_water",
"water_heater"
]
9.3 Équipements avec évacuation
Créer un point d’évacuation pour :
[
"evier",
"sink",
"lavabo",
"vasque",
"lave_main",
"douche",
"shower",
"baignoire",
"bathtub",
"dishwasher",
"washing_machine"
]
Les WC sont traités par PLO-004, PLO-005 ou PLO-014, et ne doivent pas être comptés automatiquement dans PLO-002 sauf mode détaillé spécifique.
Règles anti-double comptage
11.1 PLO-001 / PLO-002 / PLO-003
Si PLO-003 est généré pour un équipement déplacé :
do not also create PLO-001 and PLO-002 for the same equipment
sauf si mode détaillé activé.
11.2 WC
Si PLO-014 est généré :
do not generate PLO-004 or PLO-005 for the same WC
Si WC non déplacé :
use PLO-004 or PLO-005 depending on WC type
11.3 Salle de bain
Le lot Salle de bain gère :
- pose meuble vasque ;
- receveur ;
- douche italienne ;
- baignoire ;
- robinetterie visible.
Le lot 4 gère uniquement :
- alimentation ;
- évacuation ;
- vannes ;
- raccordements techniques.
11.4 Ballon d’eau chaude
PLO-011 gère la pose plomberie du ballon.
L’alimentation électrique du ballon doit être traitée dans le lot Électricité.
11.5 Pompe de relevage
PLO-016 gère le raccordement plomberie.
L’alimentation électrique doit être traitée dans le lot Électricité.
Le coffrage éventuel doit être traité dans le lot Cloisons / Doublages / Faux plafonds.
Interactions avec les autres lots
12.1 Avec lot Salle de bain
Les équipements visibles de salle de bain génèrent des besoins en alimentation et évacuation.
Exemples :
| Équipement SDB | Lot Salle de bain | Lot 4 |
|---|---|---|
| meuble vasque | pose visible | PLO-001 + PLO-002 + PLO-013 |
| douche | pose receveur ou italienne | PLO-001 + PLO-002 |
| baignoire | pose visible | PLO-001 + PLO-002 |
| robinetterie | pose visible | hors PLO-013 si mitigeur |
12.2 Avec lot Cuisine
Cuisine rénovée peut générer :
- PLO-001 alimentation évier ;
- PLO-002 évacuation évier ;
- PLO-013 vannes arrêt évier ;
- PLO-012 raccordement lave-vaisselle.
12.3 Avec lot Électricité
Certaines prestations plomberie doivent générer une dépendance électrique :
| Prestation plomberie | Dépendance électrique |
|---|---|
| PLO-011 ballon | alimentation ballon |
| PLO-016 pompe relevage | alimentation pompe |
| électroménager | circuit spécialisé selon équipement |
12.4 Avec lot Cloisons / Coffrages
Certaines prestations plomberie peuvent générer :
- coffrage technique ;
- trappe de visite ;
- reprise localisée support.
Exemples :
Réseau apparent -> PLA-008 coffrage technique
Vanne inaccessible -> PLA-009 trappe de visite
Gestion du niveau Éco / Standard / Premium
Le niveau de qualité influence principalement :
- type de WC par défaut ;
- nombre d’équipements prévus ;
- présence d’équipements complémentaires ;
- degré de remplacement des réseaux.
13.1 Éco
Règle :
WC à poser par défaut
Pas de déplacement réseau sans demande
Réseaux créés uniquement si nécessaires
13.2 Standard
Règle :
WC suspendu par défaut
Réseaux repris dans les pièces rénovées
Raccordements électroménagers standards
13.3 Premium
Règle :
WC suspendu par défaut
Réseaux repris proprement
Options techniques possibles si personnalisées
Le niveau premium ne doit pas créer automatiquement :
- déplacement WC ;
- pompe de relevage ;
- remplacement vanne générale ;
- ballon ;
- équipements non demandés.
Format de sortie attendu
Chaque ligne du lot 4 doit respecter ce format :
{
"lot": "Plomberie",
"code": "PLO-001",
"label": "Création alimentation eau froide / eau chaude",
"room_id": "room_3",
"room_name": "Cuisine",
"unit": "point",
"quantity": 1,
"quantity_formula": "count(water_supply_points)",
"pricing_mode": "unit_price",
"source": "validated_fixtures_or_target_fixtures",
"confidence": 0.85,
"is_assumption": true,
"assumption_reason": "Point d’eau généré selon équipement détecté ou prévu",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour PLO-014 :
{
"lot": "Plomberie",
"code": "PLO-014",
"label": "Déplacement et raccordement des WC sur colonne existante",
"unit": "u",
"quantity": 1,
"source": "client_personalization_or_target_layout",
"confidence": 0.65,
"is_assumption": true,
"assumption_reason": "Colonne existante à confirmer",
"user_validation_required": true
}Règles de validation
Avant génération du lot 4, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_types": true,
"has_wet_rooms_or_kitchen": true,
"has_validated_fixtures_or_target_fixtures": true
}
Si aucune pièce humide, cuisine, WC, ballon, électroménager ou pompe n’est détecté :
do not generate plumbing lot
Si les équipements sont détectés mais non validés :
{
"is_assumption": true,
"user_validation_required": true
}
Si un déplacement est demandé mais que les positions source/cible sont indisponibles :
{
"warning": "Déplacement plomberie demandé mais distance non calculable",
"pricing_mode": "provision"
}Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| type de pièce | JSON écran 2 |
| cuisine / SDB / WC détectés | JSON validé |
| équipements sanitaires détectés ou ciblés | JSON / personnalisation |
| type ECS | écran 0 |
| niveau de qualité | écran 0 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| points EF/EC | fixtures validées |
| points évacuation | fixtures validées |
| vannes d’arrêt | 2 par évier/lavabo/lave-main |
| WC suspendu ou à poser | qualité ou personnalisation |
| ballon | ECS ou personnalisation |
| électroménager à raccorder | cuisine/buanderie/personnalisation |
| pompe relevage | personnalisation ou contrainte technique |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| déplacement WC | personnalisation / plan cible |
| remplacement vanne générale | personnalisation |
| pompe de relevage | personnalisation ou scénario technique |
| déplacement spécifique réseaux | personnalisation / plan cible |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| diamètre exact tuyaux | géré par entreprise / base technique |
| pente exacte évacuation | non déductible automatiquement |
| matériau réseau existant | trop technique |
| position exacte colonne EU/EV | déduite si possible, sinon hypothèse |
| état vanne générale | demandé seulement si remplacement voulu |
| longueur exacte réseaux | estimation par point ou par déplacement |
Règle produit finale
Le lot 4 doit rester centré sur la plomberie technique.
Le moteur doit appliquer cette logique :
1. Identifier les pièces humides, cuisine, WC et équipements.
2. Générer les alimentations EF/EC nécessaires.
3. Générer les évacuations nécessaires.
4. Identifier les équipements déplacés.
5. Traiter les WC séparément des autres évacuations.
6. Générer les vannes d’arrêt : 2 par évier/lavabo/lave-main.
7. Générer ballon, électroménager et pompe si nécessaires.
8. Envoyer les équipements visibles vers les lots Salle de bain ou Cuisine.
9. Créer les dépendances vers Électricité, Cloisons/Coffrages et Finitions.
Le devis doit rester clair :
Les prestations de plomberie sont générées selon les équipements détectés, validés ou personnalisés. Les équipements visibles de salle de bain sont chiffrés dans le lot Salle de bain.
Chauffage / Ventilation / Climatisation
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
CVC-002 | Pose radiateur électrique | u | — | — | — | 5,5% | Règle définie + choix client |
CVC-003 | Pose radiateur eau chaude | u | — | — | — | 5,5% | Règle définie + choix client |
CVC-004 | Déplacement radiateur eau chaude | u | — | — | — | 5,5% | Choix client |
CVC-005 | Création bouche VMC | u | — | — | — | 5,5% | Règle définie |
CVC-006 | Pose extracteur pièce humide | u | — | — | — | 5,5% | Règle définie + choix client |
CVC-007 | Pose VMC simple flux appartement | forfait | — | — | — | 5,5% | Règle définie + choix client |
CVC-008 | Attente climatisation | u/forfait | — | — | — | 5,5% | Choix client |
CVC-009 | Pose chaudière gaz condensation | u | — | — | — | 5,5% | Choix client |
CVC-010 | Pose robinet thermostatique radiateur eau | u | — | — | — | 5,5% | Règle définie + choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
4.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"type": null,
"name": null,
"visual_evidence": {
"fixed_features": [],
"sanitary_elements": [],
"kitchen_elements": []
},
"layout_fidelity": {}
}
4.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null
}
4.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"room_area_overrides": [],
"validated_equipment": []
}
4.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"cvc_customization": {
"heating_mode_target": null,
"radiators_to_install": [],
"radiators_to_move": [],
"water_radiators": [],
"electric_radiators": [],
"thermostatic_valves": [],
"gas_boiler_replacement": false,
"vmc_required": false,
"extractors": [],
"ac_preinstallation": [],
"heat_pump_or_ac_project": false
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Les données existantes suffisent pour générer une estimation :
| Donnée | Source |
|---|---|
| type de chauffage | écran 0 |
| type de pièce | JSON validé |
| surface de pièce | JSON validé |
| pièces rénovées | écran 2 |
| niveau de qualité | écran 0 |
| personnalisation | optionnelle |
Pour une précision supérieure, le moteur peut utiliser des données optionnelles :
- radiateurs visibles sur plan ou photos ;
- chaudière visible ou déclarée ;
- projet de climatisation personnalisé ;
- choix client sur remplacement chaudière ;
- choix client sur ventilation.
Mais ces données ne doivent pas être obligatoires.
Variables calculées
Avant de générer le lot 5, le moteur doit calculer :
{
"cvc_scope": null,
"heating_scope": null,
"ventilation_scope": null,
"cooling_scope": null,
"heated_main_room_count": null,
"wet_room_count": null,
"kitchen_count": null,
"electric_radiator_count": null,
"water_radiator_count": null,
"moved_water_radiator_count": null,
"vmc_vent_count": null,
"extractor_count": null,
"vmc_system_count": null,
"ac_preinstallation_count": null,
"gas_boiler_count": null,
"thermostatic_valve_count": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Pose d’un radiateur électrique dans une pièce chauffée.
u
Créer si :
heating_type in ["electric", "chauffage_electrique"]
ou si la personnalisation contient :
electric_radiators[] exists
ou si un scénario cible prévoit des radiateurs électriques.
Priorité 1 :
quantity = count(electric_radiators from personalization)
Priorité 2 :
quantity = count(heated_main_rooms)
Pièces incluses par défaut :
- séjour ;
- salon ;
- chambre ;
- bureau ;
- cuisine fermée.
Pièces exclues par défaut :
- entrée ;
- couloir ;
- WC ;
- placard ;
- dressing ;
- subspace.
Salle de bain :
Créer un radiateur électrique SDB uniquement si sèche-serviette ou radiateur SDB prévu.
Ne comprend pas :
- alimentation électrique radiateur ;
- thermostat ;
- déplacement ancien radiateur ;
- dépose ancien radiateur ;
- reprise mur ;
- peinture ;
- domotique chauffage.
L’alimentation électrique doit être traitée dans le lot Électricité :
Pose d’un radiateur raccordé à un réseau de chauffage à eau chaude.
u
Créer si :
heating_type in ["gas", "chauffage_gaz", "collective_hot_water", "chauffage_collectif", "water_heating"]
ou si la personnalisation contient :
water_radiators[] exists
ou si un scénario cible prévoit des radiateurs à eau.
Priorité 1 :
quantity = count(water_radiators from personalization)
Priorité 2 :
quantity = count(heated_main_rooms)
Cas radiateurs existants conservés
Si les radiateurs existants sont explicitement conservés :
do not create CVC-003
Créer éventuellement :
si demandé ou prévu.
Ne comprend pas :
- dépose ancien radiateur ;
- création réseau complet de chauffage ;
- déplacement réseau ;
- chaudière ;
- robinet thermostatique si chiffré séparément ;
- peinture ;
- reprise mur.
Déplacement d’un radiateur à eau chaude existant vers un nouvel emplacement.
u
Créer si :
radiators_to_move[] exists
ou si le plan cible indique un déplacement de radiateur à eau.
Ne jamais créer automatiquement depuis le plan existant seul.
quantity = count(radiators_to_move)
Créer uniquement si le chauffage est à eau chaude :
heating_type in ["gas", "chauffage_gaz", "collective_hot_water", "chauffage_collectif", "water_heating"]
Si le chauffage est électrique :
use ELEC-016 and CVC-002 instead, not CVC-004
Ne comprend pas :
- dépose définitive radiateur ;
- remplacement radiateur ;
- chaudière ;
- modification lourde réseau chauffage ;
- peinture ;
- reprise sol ;
- reprise mur.
Création ou pose d’une bouche VMC dans une pièce nécessitant extraction d’air.
u
Créer si :
CVC-007 VMC simple flux is created
et si le projet contient des pièces à extraire :
["kitchen", "cuisine", "bathroom", "shower_room", "sdb", "sde", "wc"]
quantity = count(rooms requiring vmc vent)
Pièces comptabilisées :
- cuisine ;
- salle de bain ;
- salle d’eau ;
- WC.
Si cuisine ouverte :
count kitchen extraction only once
Anti-double comptage
Si CVC-006 extracteur pièce humide est généré pour une pièce :
do not create CVC-005 for the same room
Ne comprend pas :
- groupe VMC ;
- gaine ;
- alimentation électrique ;
- coffrage ;
- percement complexe ;
- sortie toiture/façade.
Pose d’un extracteur ou aérateur dans une pièce humide.
u
Créer si :
extractors[] exists
ou si l’utilisateur choisit un aérateur au lieu d’une VMC.
Créer aussi si une pièce humide rénovée ne dispose pas de VMC prévue.
Pièces concernées
[
"bathroom",
"shower_room",
"sdb",
"sde",
"wc"
]
quantity = count(wet_rooms requiring extractor)
Anti-double comptage
Si CVC-007 VMC simple flux est générée :
do not create CVC-006 for rooms already connected to VMC
Ne comprend pas :
- alimentation électrique ;
- percement façade complexe ;
- gaine longue ;
- coffrage ;
- grille extérieure ;
- peinture.
L’alimentation électrique est traitée dans le lot Électricité :
Pose d’un système VMC simple flux pour logement ou appartement.
forfait
Créer si :
vmc_required == true
ou si la personnalisation prévoit une VMC.
Créer aussi par défaut si :
project contains renovated wet rooms
et :
quality_level in ["standard", "premium"]
quantity = 1
Si le logement ne permet pas de passage de gaines ou d’extraction identifiable :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Faisabilité VMC à confirmer selon gaines et sorties existantes"
}
Ne comprend pas :
- alimentation électrique ;
- coffrage ;
- percement complexe ;
- sortie toiture/façade ;
- création gaine technique lourde ;
- reprise peinture.
Création d’une attente technique pour future climatisation ou système équivalent.
u
ou :
forfait
Créer uniquement si :
ac_preinstallation[] exists
ou si la personnalisation contient :
- attente clim ;
- pré-équipement clim ;
- future climatisation ;
- climatisation prévue plus tard.
Ne pas créer automatiquement avec le niveau premium.
Priorité 1 :
quantity = count(ac_preinstallation_points)
Priorité 2 :
quantity = 1 forfait
si la demande est globale mais non détaillée.
Dépendances
Si attente climatisation :
create dependency ELEC-027 alimentation PAC ou clim if needed
Ne comprend pas :
- unité intérieure ;
- unité extérieure ;
- liaisons frigorifiques définitives ;
- mise en service ;
- percement façade ;
- autorisation copropriété ;
- alimentation électrique si traitée en lot Électricité.
Pose d’une chaudière gaz à condensation.
u
Créer uniquement si :
gas_boiler_replacement == true
ou si la personnalisation prévoit une chaudière gaz condensation.
Créer aussi si la description projet contient :
- remplacer chaudière ;
- nouvelle chaudière gaz ;
- chaudière condensation ;
- chaudière à gaz ;
- chauffage gaz à refaire.
Ne pas créer automatiquement uniquement parce que heating_type == gas.
quantity = 1
Sauf si plusieurs chaudières sont explicitement prévues :
quantity = count(gas_boilers)
Cette prestation doit générer une validation requise si les éléments suivants ne sont pas connus :
{
"gas_supply_available": null,
"flue_or_evacuations_available": null,
"condensate_drain_available": null,
"boiler_location_known": null
}
Si l’un de ces éléments est inconnu :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Pose chaudière gaz à confirmer selon alimentation gaz, évacuation fumées et évacuation condensats"
}
Ne comprend pas :
- dépose ancienne chaudière ;
- modification lourde gaz ;
- tubage conduit ;
- création conduit fumées ;
- évacuation condensats complexe ;
- remplacement radiateurs ;
- robinets thermostatiques ;
- thermostat connecté ;
- contrat entretien ;
- mise en service spécifique si chiffrée séparément ;
- autorisation copropriété si nécessaire.
Interactions
Si CVC-009 est générée, le moteur peut aussi générer selon projet :
CVC-003 pose radiateurs eau chaude
CVC-010 robinets thermostatiques
mais uniquement si les radiateurs sont remplacés ou équipés.
Pose d’un robinet thermostatique sur radiateur à eau chaude.
u
Créer si :
thermostatic_valves[] exists
ou si la personnalisation demande des robinets thermostatiques.
Créer aussi si :
CVC-003 water_radiators are created
et que la base de prix ne les inclut pas déjà.
Priorité 1 :
quantity = count(thermostatic_valves from personalization)
Priorité 2 :
quantity = count(water_radiators)
Créer uniquement pour radiateurs à eau chaude.
Ne jamais créer pour radiateurs électriques.
Anti-double comptage
Si la prestation CVC-003 inclut déjà le robinet thermostatique :
do not create CVC-010
Le paramètre suivant doit exister :
{
"water_radiator_valve_included_in_cvc003": true
}
Ne comprend pas :
- radiateur ;
- déplacement radiateur ;
- purge complète installation ;
- équilibrage complet réseau ;
- chaudière ;
- thermostat central.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version mise à jour sans dépose radiateur
Objectif du lot
Le lot 5 couvre les prestations liées au chauffage, à la ventilation et aux attentes techniques pour climatisation ou pompe à chaleur.
Ce lot comprend :
- pose radiateur électrique ;
- pose radiateur à eau chaude ;
- déplacement radiateur à eau chaude ;
- création bouche VMC ;
- pose extracteur pièce humide ;
- pose VMC simple flux appartement ;
- attente climatisation ;
- pose chaudière gaz condensation ;
- pose robinet thermostatique pour radiateur à eau.
Ce lot ne doit pas chiffrer :
- dépose radiateur existant ;
- dépose chaudière existante ;
- alimentation électrique radiateur ;
- alimentation électrique VMC ;
- alimentation électrique PAC / clim ;
- plomberie sanitaire ;
- peinture ;
- coffrage ;
- percements lourds ;
- autorisations copropriété ;
- étude thermique.
Prestation retirée du lot 5
La prestation suivante est retirée du lot CVC :
| Ancien code | Prestation | Nouveau traitement |
|---|---|---|
| CVC-001 | Dépose radiateur existant | Lot 1 — Démolition / Dépose |
La dépose radiateur doit rester traitée par :
Le lot 5 ne doit jamais générer de ligne de dépose radiateur.
Prestations du lot 5
| Code | Prestation |
|---|---|
| CVC-002 | Pose radiateur électrique |
| CVC-003 | Pose radiateur eau chaude |
| CVC-004 | Déplacement radiateur eau chaude |
| CVC-005 | Création bouche VMC |
| CVC-006 | Pose extracteur pièce humide |
| CVC-007 | Pose VMC simple flux appartement |
| CVC-008 | Attente climatisation |
| CVC-009 | Pose chaudière gaz condensation |
| CVC-010 | Pose robinet thermostatique pour radiateur à eau |
Détermination du périmètre CVC
Le moteur doit déterminer le périmètre du lot 5.
"cvc_scope": "none | heating | ventilation | cooling | heating_and_ventilation | full_cvc"
7.1 Aucun lot CVC
Déclencher :
"cvc_scope": "none"
si aucune prestation chauffage, ventilation ou climatisation n’est attendue.
Dans ce cas, ne générer aucune ligne CVC.
7.2 Chauffage
Déclencher si :
heating_type != null
ou si la personnalisation contient :
- radiateur électrique ;
- radiateur eau chaude ;
- chaudière ;
- robinet thermostatique.
7.3 Ventilation
Déclencher si le projet contient :
- cuisine rénovée ;
- salle de bain rénovée ;
- WC rénové ;
- pièce humide ;
- VMC demandée ;
- extracteur demandé.
7.4 Climatisation / PAC
Déclencher uniquement si demandé en personnalisation ou dans la description projet.
Ne pas créer automatiquement une attente climatisation uniquement parce que le niveau est premium.
Définition des pièces chauffées
Le moteur doit calculer les pièces principales à chauffer.
"heated_main_room_types": [
"living_room",
"salon",
"sejour",
"bedroom",
"chambre",
"office",
"bureau",
"kitchen"
]
Les pièces suivantes ne sont pas chauffées automatiquement :
[
"wc",
"corridor",
"entry",
"hall",
"degagement",
"closet",
"dressing",
"subspace"
]
Salle de bain :
La salle de bain ne déclenche pas automatiquement un radiateur, sauf si sèche-serviette ou radiateur SDB prévu.
Règles anti-double comptage
10.1 Dépose radiateur
La dépose radiateur est exclue du lot 5.
Si un radiateur est remplacé :
DEM-010 handles removal
CVC-002 or CVC-003 handles new radiator
10.2 Radiateur électrique
CVC-002 pose le radiateur électrique.
L’alimentation électrique est traitée par :
ELEC-016 alimentation électrique radiateur
Ne pas inclure l’alimentation dans CVC-002 si elle est générée dans le lot Électricité.
10.3 Radiateur eau chaude
CVC-003 pose le radiateur eau chaude.
CVC-010 pose le robinet thermostatique uniquement si non inclus dans CVC-003.
10.4 VMC / extracteur
CVC-007 = système VMC.
CVC-005 = bouche VMC.
CVC-006 = extracteur indépendant.
Ne pas générer CVC-005 et CVC-006 pour la même pièce.
10.5 Chaudière
CVC-009 = pose chaudière gaz condensation.
Ne pas inclure automatiquement :
- dépose ancienne chaudière ;
- radiateurs ;
- robinets thermostatiques ;
- modification réseau ;
- thermostat.
Ces éléments doivent être générés séparément si nécessaires.
10.6 Climatisation
CVC-008 = attente climatisation.
L’alimentation électrique est traitée par :
ELEC-027 alimentation PAC ou clim
Ne pas inclure l’alimentation électrique dans CVC-008 si elle est générée dans le lot Électricité.
Interactions avec les autres lots
11.1 Avec lot 1 — Démolition / Dépose
Si remplacement radiateur :
Créer DEM-010 pour dépose radiateur existant
Créer CVC-002 ou CVC-003 pour pose nouveau radiateur
11.2 Avec lot 3 — Électricité
Électricité doit gérer :
- alimentation radiateur électrique ;
- alimentation VMC ou extracteur ;
- alimentation clim / PAC ;
- alimentation éventuelle chaudière si nécessaire.
11.3 Avec lot 4 — Plomberie
Plomberie peut interagir avec :
- évacuation condensats chaudière ;
- évacuation condensats clim ;
- raccordements eau si système spécifique.
11.4 Avec lot 2 — Coffrages
Créer dépendance vers coffrage si :
- gaines VMC apparentes ;
- réseaux chauffage apparents ;
- attente clim à cacher ;
- chaudière nécessitant habillage.
11.5 Avec lot peinture
Les percements, déplacements ou reprises associés aux équipements CVC peuvent générer reprises support ou peinture dans les lots concernés.
Gestion du niveau Éco / Standard / Premium
Le niveau de qualité influence le niveau d’équipement, mais ne doit pas inventer de systèmes lourds.
12.1 Éco
Règle :
Radiateurs simples si chauffage électrique
Extracteur possible plutôt que VMC complète
Pas d’attente clim automatique
Pas de chaudière gaz automatique
12.2 Standard
Règle :
Radiateurs adaptés au programme
VMC simple flux possible en pièces humides
Robinet thermostatique si radiateurs eau chaude remplacés
12.3 Premium
Règle :
Équipements plus qualitatifs
VMC privilégiée aux extracteurs isolés
Options clim/PAC uniquement si demandées
Robinet thermostatique recommandé sur radiateurs eau chaude
Le niveau premium ne doit pas créer automatiquement :
- climatisation ;
- PAC ;
- chaudière ;
- déplacement radiateur ;
- changement complet chauffage.
Format de sortie attendu
Chaque ligne du lot 5 doit respecter ce format :
{
"lot": "Chauffage / Ventilation / Climatisation",
"code": "CVC-003",
"label": "Pose radiateur eau chaude",
"room_id": "room_2",
"room_name": "Chambre",
"unit": "u",
"quantity": 1,
"quantity_formula": "count(water_radiators)",
"pricing_mode": "unit_price",
"source": "heating_type_and_room_type",
"confidence": 0.75,
"is_assumption": true,
"assumption_reason": "Radiateur eau chaude généré selon type de chauffage et pièce principale",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour chaudière :
{
"lot": "Chauffage / Ventilation / Climatisation",
"code": "CVC-009",
"label": "Pose chaudière gaz condensation",
"unit": "u",
"quantity": 1,
"pricing_mode": "unit_price",
"source": "client_personalization_or_project_description",
"confidence": 0.60,
"is_assumption": true,
"assumption_reason": "Faisabilité chaudière à confirmer selon gaz, fumées et condensats",
"user_validation_required": true
}Règles de validation
Avant génération du lot 5, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_types": true,
"has_heating_type": true,
"has_quality_level": true
}
Si heating_type est absent :
do not generate automatic radiator lines
mais générer les prestations demandées en personnalisation.
Si pièces humides détectées mais ventilation inconnue :
generate ventilation assumption according to quality level
Si chaudière gaz demandée mais faisabilité inconnue :
{
"user_validation_required": true,
"pricing_mode": "estimate_with_warning"
}Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| type de pièce | JSON écran 2 |
| surface pièce | JSON écran 2 |
| type chauffage | écran 0 |
| niveau de qualité | écran 0 |
| pièces rénovées | écran 2 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| nombre pièces chauffées | JSON validé |
| nombre radiateurs électriques | type chauffage + pièces principales |
| nombre radiateurs eau chaude | type chauffage + pièces principales |
| nombre pièces humides | JSON validé |
| nombre bouches VMC | cuisine/SDB/WC |
| nombre extracteurs | pièces humides sans VMC |
| nombre robinets thermostatiques | nombre radiateurs eau chaude |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| déplacement radiateur eau chaude | personnalisation |
| attente climatisation | personnalisation |
| chaudière gaz condensation | personnalisation ou description explicite |
| pompe à chaleur / clim complète | lot CVC futur ou personnalisation |
| robinet thermostatique sur radiateurs conservés | personnalisation |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| puissance exacte radiateur | base produit / dimensionnement pro |
| puissance chaudière | base produit / dimensionnement pro |
| type exact conduit fumées | validation technique |
| longueur réseaux chauffage | estimation non nécessaire MVP |
| débit VMC | base technique / entreprise |
| dimensionnement clim/PAC | hors MVP ou personnalisation avancée |
Règle produit finale
Le lot 5 doit rester centré sur les équipements CVC réellement attendus.
Le moteur doit appliquer cette logique :
1. Identifier le type de chauffage depuis l’écran 0.
2. Identifier les pièces principales à chauffer.
3. Générer radiateurs électriques ou eau chaude selon chauffage.
4. Ne jamais générer de dépose radiateur dans ce lot.
5. Générer ventilation selon pièces humides et niveau de qualité.
6. Générer attentes clim uniquement si demandées.
7. Générer chaudière gaz uniquement si demandée ou explicitement décrite.
8. Générer robinets thermostatiques sur radiateurs eau chaude si prévus ou non inclus.
9. Créer les dépendances vers Électricité, Plomberie, Coffrages et Démolition.
Le devis doit rester clair :
Les prestations CVC sont générées selon le type de chauffage, les pièces validées et les choix de personnalisation. Les prestations lourdes comme chaudière ou climatisation ne sont pas inventées automatiquement.
Sols
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
SOL-001 | Primaire d’accrochage sol | m² | — | — | — | 10% | Choix client |
SOL-002 | Ragréage autolissant | m² | — | — | — | 10% | Choix client |
SOL-003 | Ragréage fibré | m² | — | — | — | 10% | Règle définie |
SOL-004 | Pose sol PVC / stratifié | m² | — | — | — | 10% | Règle définie + choix client |
SOL-005 | Pose parquet contrecollé flottant | m² | — | — | — | 10% | Règle définie + choix client |
SOL-006 | Pose parquet contrecollé collé | m² | — | — | — | 10% | Règle définie + choix client |
SOL-007 | Pose parquet massif | m² | — | — | — | 10% | Règle définie + choix client |
SOL-008 | Pose carrelage sol format standard | m² | — | — | — | 10% | Règle définie + choix client |
SOL-009 | Pose carrelage petit format / mosaïque | m² | — | — | — | 10% | Choix client |
SOL-010A | Pose plinthes bois | ml | — | — | — | 10% | Règle définie |
SOL-010B | Pose plinthes carrelage | ml | — | — | — | 10% | Règle définie |
SOL-011 | Barre de seuil / profilé | u | — | — | — | 10% | Règle définie + choix client |
SOL-012 | Ponçage / vitrification parquet existant | m² | — | — | — | 10% | Choix client |
SOL-013 | Fourniture et pose d’une chape | m² | — | — | — | 10% | Règle définie + choix client |
SOL-014 | Fourniture et pose de dalle OSB | m² | — | — | — | 10% | Choix client |
SOL-015 | Fourniture et pose de moquette | m² | — | — | — | 10% | Choix client |
SOL-016 | Protection à l’eau sous carrelage — SPEC | m² | — | — | — | 10% | Règle définie |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
3.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"perimeter_m": null,
"type": null,
"name": null,
"openings": [],
"adjacent_room_ids": [],
"layout_fidelity": {}
}
3.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null
}
3.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"room_area_overrides": [],
"room_finish_overrides": []
}
3.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"floor_customization": {
"target_floor_by_room": [],
"existing_floor_to_keep": [],
"requested_primer_rooms": [],
"requested_self_leveling_rooms": [],
"requested_fiber_leveling_rooms": [],
"requested_screed_rooms": [],
"requested_osb_rooms": [],
"requested_moquette_rooms": [],
"requested_thresholds": [],
"requested_floor_profiles": []
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Le moteur doit pouvoir proposer automatiquement un sol cible selon :
- le type de pièce ;
- la surface ;
- le niveau de qualité ;
- la personnalisation éventuelle ;
- le produit choisi.
Données optionnelles utiles mais non bloquantes :
- photo du sol existant ;
- choix produit ;
- volonté de conserver le parquet existant ;
- besoin de chape ;
- besoin d’OSB ;
- demande spécifique moquette.
Variables calculées
Avant de générer le lot 6, le moteur doit calculer :
{
"floor_scope": null,
"floor_change_required": null,
"renovated_floor_area_m2": null,
"target_floor_type_by_room": [],
"support_preparation_type_by_room": [],
"wood_plinth_length_m": null,
"tile_plinth_length_m": null,
"threshold_count": null,
"standard_tile_area_m2": null,
"mosaic_tile_area_m2": null,
"floating_parquet_area_m2": null,
"glued_parquet_area_m2": null,
"solid_parquet_area_m2": null,
"pvc_or_laminate_area_m2": null,
"moquette_area_m2": null,
"screed_area_m2": null,
"osb_area_m2": null,
"spec_area_m2": null,
"existing_parquet_to_restore_area_m2": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Application d’un primaire d’accrochage sur sol existant.
m²
Créer uniquement si demandé par le client.
requested_primer_rooms[] exists
Ne pas créer automatiquement avec un ragréage, une chape ou une pose de sol.
quantity = sum(area_m2 of requested_primer_rooms)
Ne comprend pas :
- ragréage ;
- chape ;
- pose revêtement ;
- dépose sol ;
- nettoyage technique du support.
Ragréage autolissant simple du support.
m²
Créer uniquement si demandé par le client en remplacement du ragréage fibré.
requested_self_leveling_rooms[] exists
ou si :
client_replaces_SOL003_with_SOL002 == true
quantity = sum(area_m2 of requested_self_leveling_rooms)
Si le remplacement concerne toutes les zones de changement de sol :
quantity = sum(area_m2 of rooms with floor_change_required)
Anti-double comptage
Si SOL-002 est généré pour une pièce :
do not generate SOL-003 for same room
Ne comprend pas :
- primaire si chiffré séparément ;
- ragréage fibré ;
- chape ;
- OSB ;
- pose revêtement ;
- dépose sol.
Ragréage fibré de préparation du support.
m²
Proposé automatiquement dès qu’un changement de sol est prévu.
if floor_change_required == true:
create SOL-003
quantity = sum(area_m2 of rooms with floor_change_required)
Exceptions
Ne pas créer SOL-003 si, pour la même pièce :
requested_self_leveling_rooms[] includes room
ou :
requested_screed_rooms[] includes room
ou :
requested_osb_rooms[] includes room
ou si le niveau premium déclenche SOL-013 chape.
Cas premium
Si :
quality_level == "premium"
et :
floor_change_required == true
alors :
SOL-013 chape overrides SOL-003
sauf si le client demande explicitement un ragréage fibré en plus.
Ne comprend pas :
- dépose sol ;
- chape ;
- dalle OSB ;
- pose revêtement ;
- primaire séparé ;
- traitement structurel du plancher.
Pose de sol PVC, vinyle, stratifié ou équivalent économique.
m²
Créer si :
quality_level == "eco"
pour les pièces sèches.
Créer aussi si demandé par le client :
target_floor_type == "pvc_laminate"
ou si le produit choisi appartient à la catégorie :
["pvc", "vinyl", "laminate", "stratifié"]
quantity = sum(area_m2 of rooms with target_floor_type == "pvc_laminate")
Ne comprend pas :
- fourniture du revêtement si traitée en base produit ;
- dépose ancien sol ;
- ragréage ;
- plinthes ;
- seuils.
Pose de parquet contrecollé en pose flottante.
m²
Créer si :
quality_level == "standard"
pour les pièces sèches.
Créer aussi si demandé par le client :
target_floor_type == "floating_engineered_parquet"
ou si le produit choisi impose une pose flottante.
quantity = sum(area_m2 of rooms with target_floor_type == "floating_engineered_parquet")
Ne comprend pas :
- fourniture parquet si traitée en base produit ;
- sous-couche si chiffrée séparément ;
- dépose ancien sol ;
- ragréage ;
- plinthes ;
- seuils.
Pose de parquet contrecollé en pose collée.
m²
Créer si :
quality_level == "premium"
et si le produit choisi est compatible ou impose une pose collée.
Créer aussi si demandé par le client :
target_floor_type == "glued_engineered_parquet"
quantity = sum(area_m2 of rooms with target_floor_type == "glued_engineered_parquet")
Si aucun produit n’est choisi en premium :
default premium dry room floor = glued_engineered_parquet
sauf si parquet massif sélectionné.
Ne comprend pas :
- fourniture parquet si traitée en base produit ;
- colle si séparée ;
- dépose ancien sol ;
- chape ;
- ragréage ;
- plinthes ;
- seuils.
Pose de parquet massif.
m²
Créer si :
target_floor_type == "solid_parquet"
ou si le produit choisi appartient à la catégorie parquet massif.
Créer aussi si explicitement demandé par le client.
quantity = sum(area_m2 of rooms with target_floor_type == "solid_parquet")
Niveau de qualité
Le parquet massif est uniquement proposé automatiquement en premium si le produit choisi l’indique.
Ne pas proposer automatiquement du parquet massif en premium sans produit ou demande client.
Ne comprend pas :
- fourniture parquet si traitée en base produit ;
- lambourdes ;
- OSB ;
- chape ;
- ragréage ;
- plinthes ;
- seuils ;
- vitrification si produit brut non fini.
Pose de carrelage de sol format standard.
m²
Créer si :
target_floor_type == "standard_tile"
ou si le produit choisi est un carrelage standard.
Proposé automatiquement pour :
- salle de bain ;
- salle d’eau ;
- WC ;
- cuisine si aucun autre choix produit n’est fait.
quantity = sum(area_m2 of rooms with target_floor_type == "standard_tile")
Ne comprend pas :
- fourniture carrelage si traitée en base produit ;
- SPEC ;
- ragréage ;
- chape ;
- plinthes carrelage ;
- dépose ancien carrelage.
Pose de carrelage petit format ou mosaïque au sol.
m²
Créer si :
target_floor_type == "mosaic_tile"
ou si le produit choisi est :
- mosaïque ;
- zellige petit format ;
- carreaux petit format ;
- carrelage complexe ;
- pose décorative.
Créer aussi si explicitement demandé par le client.
quantity = sum(area_m2 of rooms with target_floor_type == "mosaic_tile")
Niveau de qualité
Cette prestation peut être proposée en premium uniquement si le produit choisi ou le scénario esthétique le justifie.
Ne pas remplacer automatiquement tous les carrelages premium par mosaïque.
Ne comprend pas :
- fourniture carrelage si traitée en base produit ;
- SPEC ;
- ragréage ;
- chape ;
- plinthes carrelage ;
- dépose ancien carrelage.
Pose de plinthes bois, MDF, stratifiées ou assorties aux sols type parquet / stratifié / PVC / moquette.
ml
Créer si une pièce reçoit :
[
"pvc_laminate",
"floating_engineered_parquet",
"glued_engineered_parquet",
"solid_parquet",
"moquette"
]
Priorité 1 :
quantity = room.perimeter_m - door_opening_widths_m
Priorité 2 :
quantity = 2 × (room.length_m + room.width_m) - door_opening_widths_m
Priorité 3 :
quantity = room.perimeter_m
si les largeurs d’ouvertures sont inconnues.
Anti-double comptage
Ne pas créer SOL-010A dans une pièce avec carrelage sol si SOL-010B est généré.
Ne comprend pas :
- peinture plinthes ;
- fourniture plinthes si traitée en base produit ;
- dépose anciennes plinthes ;
- joints acryliques si séparés.
Pose de plinthes carrelage dans les zones carrelées.
ml
Créer si une pièce reçoit :
[
"standard_tile",
"mosaic_tile"
]
Priorité 1 :
quantity = room.perimeter_m - door_opening_widths_m
Priorité 2 :
quantity = 2 × (room.length_m + room.width_m) - door_opening_widths_m
Priorité 3 :
quantity = room.perimeter_m
si les largeurs d’ouvertures sont inconnues.
Cas salle de bain
Si les murs sont faïencés jusqu’au sol :
do not create SOL-010B unless explicitly required
Ne comprend pas :
- faïence murale ;
- joints muraux ;
- fourniture plinthes si traitée en base produit ;
- dépose anciennes plinthes.
Pose d’une barre de seuil ou profilé de jonction entre deux revêtements ou deux pièces.
u
Créer si :
two_adjacent_rooms_have_different_floor_types == true
ou si un seuil de porte est visible entre deux pièces rénovées.
Créer aussi si demandé par le client :
requested_thresholds[] exists
Priorité 1 :
quantity = count(requested_thresholds)
Priorité 2 :
quantity = count(room_transitions_with_different_floor_types)
Priorité 3 :
quantity = count(door_openings_between_renovated_rooms)
si les types de sol sont inconnus.
Ne comprend pas :
- reprise de niveau importante ;
- rattrapage de sol ;
- rabotage porte ;
- fourniture profilé premium si traitée en base produit.
Ponçage et vitrification d’un parquet existant conservé.
m²
Créer si :
existing_floor_to_keep[] contains room
ou si le client demande :
- conserver parquet ;
- poncer parquet ;
- vitrifier parquet ;
- rénover parquet existant.
quantity = sum(area_m2 of rooms with existing parquet to restore)
Anti-double comptage
Si SOL-012 est généré pour une pièce :
do not generate SOL-003, SOL-004, SOL-005, SOL-006, SOL-007, SOL-013, SOL-014 or SOL-015 for same room
sauf demande explicite client.
Ne comprend pas :
- remplacement parquet ;
- réparation structurelle ;
- lambourdes ;
- rebouchage important ;
- teinte spéciale ;
- dépose parquet.
Fourniture et pose d’une chape de préparation ou de reprise de niveau.
m²
Créer automatiquement si :
quality_level == "premium"
et :
floor_change_required == true
Créer aussi si demandé par le client :
requested_screed_rooms[] exists
Cas premium automatique :
quantity = sum(area_m2 of rooms with floor_change_required)
Cas demande client :
quantity = sum(area_m2 of requested_screed_rooms)
Priorité sur ragréage
Si SOL-013 est généré pour une pièce :
do not generate SOL-003 for same room
sauf si ragréage de finition demandé explicitement.
Ne comprend pas :
- dépose sol ;
- évacuation gravats ;
- renforcement structurel ;
- OSB ;
- revêtement de sol final ;
- séchage accéléré ;
- étude structure.
Warning automatique
Si chape en appartement ancien :
{
"warning": "Chape à valider selon charge admissible et support existant",
"user_validation_required": true
}
Fourniture et pose de panneaux OSB en support de sol.
m²
Créer uniquement si demandé par le client.
requested_osb_rooms[] exists
ou si un scénario technique validé prévoit un support OSB.
quantity = sum(area_m2 of requested_osb_rooms)
Si SOL-014 est généré pour une pièce :
do not generate SOL-013 or SOL-003 for same room
sauf si une couche complémentaire est explicitement demandée.
Ne comprend pas :
- solives ;
- lambourdes ;
- structure bois ;
- isolation entre solives ;
- revêtement final ;
- plinthes ;
- traitement acoustique ;
- étude structure.
Fourniture et pose d’une moquette au sol.
m²
Créer si demandé par le client :
requested_moquette_rooms[] exists
ou si le produit choisi appartient à la catégorie :
["moquette", "carpet"]
quantity = sum(area_m2 of rooms with target_floor_type == "moquette")
Niveau de qualité
La moquette ne doit pas être proposée automatiquement par défaut, sauf si le client la demande ou choisit un produit moquette.
Ne comprend pas :
- dépose ancien sol ;
- ragréage ;
- chape ;
- plinthes ;
- barre de seuil spécifique ;
- traitement acoustique complémentaire.
Protection à l’eau sous carrelage dans les pièces exposées à l’eau.
m²
Créer systématiquement si une pièce d’eau ou cuisine reçoit du carrelage au sol.
Pièces concernées :
[
"bathroom",
"shower_room",
"sdb",
"sde",
"wc",
"kitchen",
"cuisine"
]
Types de sol concernés :
[
"standard_tile",
"mosaic_tile"
]
Règle :
if room.type in wet_or_kitchen_room_types and target_floor_type in tile_types:
create SOL-016
quantity = sum(area_m2 of tiled wet rooms and kitchens)
Anti-double comptage
SOL-016 ne remplace pas :
- SOL-008 ;
- SOL-009 ;
- SOL-013 ;
- SOL-003.
Il s’ajoute sous le carrelage.
Ne comprend pas :
- étanchéité murale de douche ;
- SPEC mural ;
- SEL complet ;
- receveur ;
- douche à l’italienne ;
- carrelage ;
- joints ;
- siphon ;
- plomberie.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version mise à jour avec chape, OSB, moquette et SPEC
Objectif du lot
Le lot 6 couvre les prestations liées aux sols intérieurs :
- préparation du support ;
- chape ;
- ragréage ;
- dalle OSB ;
- pose de revêtements de sol ;
- pose de plinthes ;
- seuils et profilés ;
- ponçage / vitrification de parquet existant ;
- protection à l’eau sous carrelage.
Ce lot ne doit pas chiffrer :
- dépose des sols existants ;
- évacuation gravats ;
- peinture ;
- carrelage mural ;
- faïence ;
- étanchéité murale de douche ;
- démolition ;
- menuiserie ;
- isolation lourde de plancher si traitée ailleurs.
Prestations du lot 6
| Code | Prestation |
|---|---|
| SOL-001 | Primaire d’accrochage sol |
| SOL-002 | Ragréage autolissant |
| SOL-003 | Ragréage fibré |
| SOL-004 | Pose sol PVC / stratifié |
| SOL-005 | Pose parquet contrecollé flottant |
| SOL-006 | Pose parquet contrecollé collé |
| SOL-007 | Pose parquet massif |
| SOL-008 | Pose carrelage sol format standard |
| SOL-009 | Pose carrelage petit format / mosaïque |
| SOL-010A | Pose plinthes bois |
| SOL-010B | Pose plinthes carrelage |
| SOL-011 | Barre de seuil / profilé |
| SOL-012 | Ponçage / vitrification parquet existant |
| SOL-013 | Fourniture et pose d’une chape |
| SOL-014 | Fourniture et pose de dalle OSB |
| SOL-015 | Fourniture et pose de moquette |
| SOL-016 | Protection à l’eau sous carrelage — SPEC |
Détermination du revêtement cible
Le moteur doit définir un revêtement cible par pièce.
"target_floor_type": "pvc_laminate | floating_engineered_parquet | glued_engineered_parquet | solid_parquet | standard_tile | mosaic_tile | moquette | existing_parquet_to_restore"
6.1 Priorité de décision
Priorité 1 :
target_floor_type = client_selected_floor_product
Priorité 2 :
target_floor_type = room_finish_override from screen 2
Priorité 3 :
target_floor_type = automatic_rule_by_room_type_and_quality_level
Règles automatiques par niveau de qualité
7.1 Pièces sèches
Pièces concernées :
[
"living_room",
"salon",
"sejour",
"bedroom",
"chambre",
"office",
"bureau",
"entry",
"entree",
"corridor",
"hall"
]
Règle automatique :
| quality_level | Revêtement proposé |
|---|---|
| eco | PVC / stratifié |
| standard | parquet contrecollé flottant |
| premium | parquet contrecollé collé ou parquet massif selon produit choisi |
7.2 Pièces d’eau
Pièces concernées :
[
"bathroom",
"shower_room",
"sdb",
"sde",
"wc"
]
Règle automatique :
| quality_level | Revêtement proposé |
|---|---|
| eco | carrelage format standard |
| standard | carrelage format standard |
| premium | carrelage format standard ou mosaïque selon produit choisi |
7.3 Cuisine
Pour une pièce de type :
["kitchen", "cuisine"]
Règle automatique :
| quality_level | Revêtement proposé |
|---|---|
| eco | PVC / stratifié ou carrelage standard |
| standard | carrelage standard ou parquet flottant selon scénario |
| premium | carrelage standard, mosaïque ou parquet collé selon produit choisi |
Si aucun produit n’est choisi :
target_floor_type = standard_tile
pour la cuisine.
Règles générales de préparation du support
8.1 Changement de sol
Le moteur doit calculer :
floor_change_required = true
si :
- le client choisit un nouveau revêtement ;
- le niveau de qualité génère automatiquement un nouveau sol ;
- le sol existant n’est pas explicitement conservé ;
- le lot démolition prévoit une dépose de sol ;
- le projet cible implique remplacement du sol.
8.2 Aucun changement de sol
Si le parquet existant est conservé :
floor_change_required = false
et le moteur doit proposer éventuellement :
8.3 Anti-double comptage des supports
Une même zone ne doit pas recevoir automatiquement plusieurs couches de préparation lourde.
Priorité de support :
SOL-014 OSB > SOL-013 chape > SOL-003 ragréage fibré > SOL-002 ragréage autolissant > SOL-001 primaire seul
Règle :
For each room, generate only one main support preparation line unless explicitly requested.
Exception :
SOL-001 primaire may be added only if explicitly requested by client.
Règles anti-double comptage
10.1 Sol conservé
Si SOL-012 est généré :
do not generate any new floor covering for same room
10.2 Ragréage / chape / OSB
Une même pièce ne doit pas recevoir automatiquement :
SOL-003 + SOL-013 + SOL-014
OSB > chape > ragréage fibré > ragréage autolissant
10.3 Carrelage
Si SOL-009 est généré :
do not generate SOL-008 for same room
10.4 Plinthes
Si pièce parquet / PVC / moquette :
use SOL-010A
Si pièce carrelage :
use SOL-010B
Ne jamais générer SOL-010A et SOL-010B dans une même pièce, sauf zone mixte explicitement prévue.
10.5 SPEC
SOL-016 s’ajoute uniquement sous carrelage dans pièces d’eau et cuisine.
Ne pas créer SOL-016 sous parquet, PVC, stratifié ou moquette.
Interactions avec les autres lots
11.1 Avec lot 1 — Démolition
Si changement de sol :
Lot 1 may generate floor removal
Lot 6 generates support preparation and new floor
11.2 Avec lot Salle de bain
Si salle de bain carrelée :
SOL-016 under floor tile
Salle de bain lot handles shower, bathtub, vanity and wall finishes
11.3 Avec lot Cuisine
Si cuisine carrelée :
SOL-016 under kitchen floor tile
11.4 Avec lot Menuiserie
Si seuils ou profils liés à portes :
SOL-011 handles threshold/profile
Menuiserie handles door adjustments if required
11.5 Avec lot Peinture
Plinthes bois peuvent créer :
- joints acryliques ;
- retouches peinture ;
- peinture plinthes si plinthes à peindre.
Ces éléments ne sont pas inclus dans le lot sol sauf paramétrage spécifique.
Gestion du niveau Éco / Standard / Premium
12.1 Éco
Règle :
PVC / stratifié proposé dans les pièces sèches
Carrelage standard proposé dans les pièces d’eau et cuisine
Ragréage fibré proposé si changement de sol
12.2 Standard
Règle :
Parquet contrecollé flottant proposé dans les pièces sèches
Carrelage standard proposé dans les pièces d’eau et cuisine
Ragréage fibré proposé si changement de sol
12.3 Premium
Règle :
Parquet contrecollé collé proposé dans les pièces sèches
Parquet massif si produit choisi
Carrelage standard ou mosaïque selon produit choisi
Chape proposée systématiquement si changement de sol
En premium :
SOL-013 overrides SOL-003 by default
sauf demande explicite de ragréage complémentaire.
Format de sortie attendu
Chaque ligne du lot 6 doit respecter ce format :
{
"lot": "Sols",
"code": "SOL-005",
"label": "Pose parquet contrecollé flottant",
"room_id": "room_2",
"room_name": "Chambre",
"unit": "m2",
"quantity": 12.4,
"quantity_formula": "room.area_m2",
"pricing_mode": "unit_price",
"source": "quality_level_and_room_type",
"confidence": 0.85,
"is_assumption": true,
"assumption_reason": "Parquet contrecollé flottant proposé en niveau standard",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour SPEC :
{
"lot": "Sols",
"code": "SOL-016",
"label": "Protection à l’eau sous carrelage — SPEC",
"room_id": "room_4",
"room_name": "Salle de bain",
"unit": "m2",
"quantity": 4.6,
"quantity_formula": "room.area_m2",
"source": "wet_room_with_tile_floor",
"confidence": 0.95,
"is_assumption": false,
"user_validation_required": false
}Règles de validation
Avant génération du lot 6, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_surfaces": true,
"has_room_types": true,
"has_quality_level": true
}
Si le type de pièce est absent :
use room name and visual evidence to infer room type
Si la surface est absente :
block floor pricing for that room
Message :
Impossible de chiffrer le sol d’une pièce sans surface validée.
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| surface des pièces | JSON écran 2 |
| type de pièce | JSON écran 2 |
| niveau de qualité | écran 0 |
| pièces rénovées | écran 2 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| type de sol proposé | type pièce + qualité |
| ragréage fibré | changement de sol |
| chape | premium + changement de sol |
| plinthes bois | sols parquet/PVC/moquette |
| plinthes carrelage | sols carrelage |
| SPEC | carrelage dans cuisine/SDB/WC |
| seuils | jonction entre sols différents |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| primaire d’accrochage | demande client |
| ragréage autolissant | demande client |
| OSB | demande client |
| moquette | demande client / produit choisi |
| parquet massif | produit choisi / demande client |
| mosaïque | produit choisi / demande client |
| ponçage parquet | conservation parquet existant |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| planéité exacte du support | hypothèse technique / validation chantier |
| humidité du support | validation chantier |
| charge admissible plancher | validation technique si chape |
| type exact ancien support | pas nécessaire au chiffrage instantané |
| épaisseur chape | base technique / entreprise |
| type colle / joint | base prix / produit |
Règle produit finale
Le lot 6 doit appliquer la logique suivante :
1. Identifier les pièces rénovées.
2. Définir un revêtement cible par pièce selon qualité, type de pièce et personnalisation.
3. Déterminer si un changement de sol est prévu.
4. Générer automatiquement un ragréage fibré si changement de sol.
5. En premium, remplacer le ragréage fibré par une chape si changement de sol.
6. Générer le revêtement cible.
7. Générer les plinthes selon le type de revêtement.
8. Générer les seuils entre sols différents.
9. Générer le SPEC sous carrelage en cuisine et pièces d’eau.
10. Éviter tout double comptage entre chape, ragréage, OSB et conservation parquet.
Le devis doit rester clair :
Les sols sont générés automatiquement selon le niveau de qualité, le type de pièce et les produits sélectionnés. Les supports techniques comme chape, OSB ou ragréage sont ajustables dans la personnalisation.
Murs / Plafonds / Peinture
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
PEI-001 | Préparation légère des murs | m² | — | — | — | 10% | Règle définie |
PEI-003 | Ratissage partiel | m² | — | — | — | 10% | Choix client |
PEI-004 | Ratissage complet | m² | — | — | — | 10% | Règle définie |
PEI-005 | Impression murs | m² | — | — | — | 10% | Règle définie |
PEI-006 | Peinture murs 2 couches | m² | — | — | — | 10% | Règle définie |
PEI-007 | Impression plafonds | m² | — | — | — | 10% | Règle définie |
PEI-008 | Peinture plafonds 2 couches | m² | — | — | — | 10% | Règle définie |
PEI-009 | Peinture boiseries / portes | u | — | — | — | 10% | Règle définie |
PEI-010 | Pose papier peint | m² | — | — | — | 10% | Choix client |
PEI-011 | Enduit décoratif / peinture premium | m² | — | — | — | 10% | Choix client |
PEI-012 | Mise en peinture – Préparation + Finition BA13 neuf | m² | — | — | — | 10% | Règle définie |
PEI-013 | Provision dépose / repose radiateur à eau pour peinture | u/forfait | — | — | — | 10% | Règle définie |
PEI-014 | Plus-value polychromie supérieure à 3 couleurs | forfait | — | — | — | 10% | Choix client |
PEI-015 | Provision mise en place d’entoilage type Fissnet | forfait | — | — | — | 10% | Choix client |
PEI-016 | Entoilage de support | m² | — | — | — | 10% | Règle définie |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
4.1 Données issues du JSON validé
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"perimeter_m": null,
"ceiling_height_m": null,
"type": null,
"name": null,
"openings": [],
"doors": [],
"windows": [],
"layout_fidelity": {}
}
4.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"floor_count": null,
"heating_type": null,
"project_description": null,
"quality_level": null,
"property_floor_level": null
}
4.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"room_area_overrides": [],
"door_replacement_status": [],
"color_selection": []
}
4.4 Données issues des autres lots
Le lot 7 utilise notamment les sorties du lot 2 :
{
"new_wall_surface_to_finish_m2": null,
"new_ceiling_surface_to_finish_m2": null,
"new_ba13_wall_surface_m2": null,
"new_ba13_ceiling_surface_m2": null,
"new_paint_ready_surface_m2": null
}
Et les sorties du lot CVC :
{
"water_radiators_kept_count": null,
"water_radiators_replaced_count": null,
"heating_type": null
}
4.5 Données issues de la personnalisation
Le moteur peut recevoir :
{
"paint_customization": {
"paint_scope_by_room": [],
"wallpaper_surfaces": [],
"decorative_finish_surfaces": [],
"partial_skimming_surfaces": [],
"requested_fissnet_provision": false,
"selected_color_count": null,
"doors_to_paint": [],
"doors_replaced": [],
"radiators_to_keep": [],
"water_radiators_to_remove_for_paint": []
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Les données suivantes peuvent être définies en personnalisation, mais ne doivent pas bloquer le chiffrage initial :
- nombre de couleurs ;
- choix papier peint ;
- choix peinture décorative ;
- choix entoilage spécifique ;
- portes remplacées ou conservées ;
- surfaces exactes décoratives.
Si ces données sont absentes, le moteur applique les règles automatiques par niveau de qualité.
Variables calculées
Avant de générer le lot 7, le moteur doit calculer :
{
"room_wall_surface_m2": null,
"room_ceiling_surface_m2": null,
"existing_wall_surface_to_paint_m2": null,
"existing_ceiling_surface_to_paint_m2": null,
"new_ba13_surface_to_finish_m2": null,
"wallpaper_surface_m2": null,
"decorative_finish_surface_m2": null,
"light_wall_prep_surface_m2": null,
"partial_skimming_surface_m2": null,
"full_skimming_surface_m2": null,
"primer_wall_surface_m2": null,
"paint_wall_surface_m2": null,
"primer_ceiling_surface_m2": null,
"paint_ceiling_surface_m2": null,
"woodwork_or_door_count": null,
"water_radiator_paint_provision_count": null,
"color_count": null,
"polychromy_extra_count": null,
"fissnet_provision_count": null,
"entoilage_surface_m2": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Préparation légère des murs existants avant impression et peinture.
m²
Créer en niveau Éco pour les pièces à rénover.
quality_level == "eco"
et :
room_to_renovate == true
quantity = existing_wall_surface_to_paint_m2
Ne comprend pas :
- ratissage ;
- entoilage ;
- reprise lourde ;
- rebouchage ponctuel spécifique ;
- peinture ;
- impression.
Ratissage partiel des murs existants sur zones localisées.
m²
Créer uniquement si demandé par le client.
partial_skimming_surfaces[] exists
ou si le client demande :
- ratissage partiel ;
- reprise partielle des murs ;
- murs partiellement abîmés.
Priorité 1 :
quantity = sum(partial_skimming_surfaces_m2)
Priorité 2 :
quantity = room_wall_surface_m2 × default_partial_skimming_ratio
si la surface exacte n’est pas définie.
Ratio paramétrable :
"default_partial_skimming_ratio": 0.30
Anti-double comptage
Si PEI-004 ratissage complet est généré pour la même pièce :
do not generate PEI-003
sauf si le client demande explicitement une zone spécifique complémentaire.
Ne comprend pas :
- ratissage complet ;
- entoilage ;
- impression ;
- peinture.
Ratissage complet des murs existants.
m²
Créer automatiquement si :
quality_level in ["standard", "premium"]
et :
room_to_renovate == true
quantity = existing_wall_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- surfaces BA13 neuves traitées par PEI-012 ;
- surfaces papier peint traitées par PEI-010 si le support est chiffré dans cette prestation ;
- surfaces décoratives traitées par PEI-011 si le support est inclus.
Anti-double comptage
PEI-004 remplace :
PEI-001
PEI-003
sur les mêmes surfaces.
Ne comprend pas :
- impression ;
- peinture ;
- entoilage ;
- reprise structurelle ;
- traitement humidité ;
- fissures structurelles.
Application d’une couche d’impression sur murs existants à peindre.
m²
Créer systématiquement si la pièce est à rénover.
room_to_renovate == true
quantity = existing_wall_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- surfaces BA13 neuves traitées par PEI-012 ;
- surfaces papier peint si l’impression est incluse dans PEI-010 ;
- surfaces décoratives si l’impression est incluse dans PEI-011.
Ne comprend pas :
- peinture 2 couches ;
- ratissage ;
- entoilage ;
- impression BA13 neuf si incluse PEI-012.
Application de deux couches de peinture sur murs existants.
m²
Créer systématiquement si la pièce est à rénover.
room_to_renovate == true
quantity = existing_wall_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- surfaces BA13 neuves traitées par PEI-012 ;
- surfaces papier peint ;
- surfaces enduit décoratif ;
- surfaces peinture premium si PEI-011 remplace la finition classique.
Ne comprend pas :
- impression ;
- préparation support ;
- ratissage ;
- entoilage ;
- peinture boiseries ;
- peinture portes.
Application d’une couche d’impression sur plafonds existants.
m²
Créer systématiquement si la pièce est à rénover.
room_to_renovate == true
quantity = existing_ceiling_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- faux plafonds neufs traités par PEI-012 ;
- plafonds décoratifs spécifiques traités par une prestation dédiée.
Ne comprend pas :
- peinture plafond 2 couches ;
- préparation support ;
- faux plafond ;
- ratissage plafond si chiffré séparément.
Application de deux couches de peinture sur plafonds existants.
m²
Créer systématiquement si la pièce est à rénover.
room_to_renovate == true
quantity = existing_ceiling_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- faux plafonds neufs traités par PEI-012 ;
- plafonds avec finition décorative spécifique.
Ne comprend pas :
- impression ;
- préparation support ;
- faux plafond ;
- spots ;
- reprises lourdes.
Mise en peinture des portes, huisseries, boiseries ou éléments bois existants conservés.
u
ou :
ml
selon base de prix.
Créer systématiquement si les portes ne sont pas changées.
doors_replaced == false
ou si aucune ligne de remplacement de portes n’est générée dans le lot menuiserie.
Priorité 1 :
quantity = count(doors_to_paint)
Priorité 2 :
quantity = count(existing_internal_doors in renovated rooms)
Exceptions
Ne pas générer si :
doors_replaced == true
sauf si les portes neuves sont brutes à peindre.
Ne comprend pas :
- remplacement porte ;
- ponçage lourd ;
- décapage complet ;
- réparation menuiserie ;
- quincaillerie.
Pose de papier peint sur murs ou zones décoratives.
m²
Créer uniquement à la demande du client.
wallpaper_surfaces[] exists
quantity = sum(wallpaper_surfaces_m2)
Anti-double comptage
Si PEI-010 est généré sur une surface :
do not generate PEI-006 on same surface
PEI-005 peut être conservé uniquement si l’impression support est requise et non incluse dans PEI-010.
Ne comprend pas :
- fourniture papier peint si traitée en base produit ;
- dépose ancien papier peint ;
- ratissage complet ;
- enduit décoratif ;
- peinture de finition sur même surface.
Application d’un enduit décoratif ou d’une finition premium spécifique.
m²
Créer uniquement à la demande du client.
decorative_finish_surfaces[] exists
ou si le client choisit une finition décorative spécifique.
quantity = sum(decorative_finish_surface_m2)
Anti-double comptage
Si PEI-011 est généré sur une surface :
do not generate PEI-006 on same surface
PEI-005 peut être conservé uniquement si l’impression support est requise et non incluse dans PEI-011.
Ne comprend pas :
- préparation lourde ;
- entoilage ;
- fourniture produit premium si traitée en base produit ;
- éclairage décoratif ;
- supports spéciaux non prévus.
Préparation et mise en peinture complète des surfaces neuves en BA13.
Cette prestation concerne uniquement :
- cloisons neuves ;
- doublages neufs ;
- faux plafonds neufs ;
- coffrages BA13 neufs si finition peinture.
m²
Créer si le lot 2 génère :
new_ba13_wall_surface_m2 > 0
ou :
new_ba13_ceiling_surface_m2 > 0
quantity = new_ba13_wall_surface_m2 + new_ba13_ceiling_surface_m2
Anti-double comptage
Si PEI-012 est généré sur une surface :
do not generate PEI-004, PEI-005, PEI-006, PEI-007 or PEI-008 on the same surface
Ne comprend pas :
- création BA13 ;
- bandes placo si incluses dans lot 2 ;
- traitement acoustique ;
- carrelage ;
- papier peint ;
- enduit décoratif.
Provision pour dépose temporaire et repose d’un radiateur à eau afin de peindre correctement derrière.
u
ou :
forfait
Créer si :
heating_type in ["gas", "chauffage_gaz", "collective_hot_water", "chauffage_collectif", "water_heating"]
et si :
water_radiators_replaced_count == 0
ou si les radiateurs à eau sont conservés.
Priorité 1 :
quantity = count(water_radiators_to_remove_for_paint)
Priorité 2 :
quantity = count(heated_main_rooms)
avec hypothèse.
Anti-double comptage
Ne pas créer PEI-013 si :
CVC-003 water_radiators are replaced
ou si :
CVC-004 water_radiators are moved
Ne comprend pas :
- remplacement radiateur ;
- purge complète installation ;
- modification réseau chauffage ;
- équilibrage réseau ;
- dépose définitive radiateur ;
- peinture radiateur.
Plus-value liée à la gestion de plusieurs couleurs dans le projet.
forfait
ou :
couleur supplémentaire
selon base de prix.
Créer si :
selected_color_count >= 3
quantity = 1
Règle avancée possible
Si la base de prix fonctionne par couleur supplémentaire :
quantity = selected_color_count - 2
Ne comprend pas :
- fourniture peinture premium ;
- teinte sur mesure hors standard ;
- échantillons ;
- essais couleur ;
- décor mural spécifique.
Provision pour mise en place d’un entoilage localisé de type Fissnet ou équivalent, lorsque le besoin est identifié mais que la surface exacte n’est pas déterminée.
forfait
Créer si :
requested_fissnet_provision == true
ou si les photos / observations indiquent fissures ou supports sensibles sans surface mesurable.
quantity = 1
Anti-double comptage
Si PEI-016 est généré sur toute la surface concernée :
do not generate PEI-015 for the same room
Ne comprend pas :
- ratissage complet ;
- peinture ;
- traitement structurel fissures ;
- reprise gros œuvre ;
- diagnostic fissuration.
Mise en place d’un entoilage de support sur murs existants avant finition.
m²
Créer systématiquement en standard et premium.
quality_level in ["standard", "premium"]
et :
room_to_renovate == true
quantity = existing_wall_surface_to_paint_m2
Exceptions
Ne pas générer sur :
- surfaces BA13 neuves traitées par PEI-012 ;
- surfaces carrelées ;
- surfaces papier peint si le support spécifique est traité ailleurs ;
- surfaces décoratives si le support spécifique est inclus ailleurs.
Anti-double comptage
Si PEI-015 provision entoilage est générée pour une pièce sans surface précise :
do not generate PEI-016 unless surface is known
Ne comprend pas :
- ratissage ;
- impression ;
- peinture ;
- traitement structurel fissures ;
- toile décorative finale.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version mise à jour avec BA13 neuf, entoilage, polychromie et radiateurs
Objectif du lot
Le lot 7 couvre les prestations de préparation, impression, peinture, finition et décoration des murs, plafonds, boiseries et portes.
Ce lot comprend :
- préparation légère des murs ;
- ratissage partiel ;
- ratissage complet ;
- impression murs ;
- peinture murs 2 couches ;
- impression plafonds ;
- peinture plafonds 2 couches ;
- peinture boiseries / portes ;
- pose papier peint ;
- enduit décoratif / peinture premium ;
- mise en peinture des surfaces BA13 neuves ;
- provision dépose / repose radiateur à eau pour peinture ;
- plus-value polychromie ;
- provision entoilage type Fissnet ;
- entoilage de support.
Ce lot ne doit pas chiffrer :
- création de cloisons ;
- création de doublages ;
- création de faux plafonds ;
- dépose de radiateurs définitive ;
- remplacement de portes ;
- fourniture de portes ;
- carrelage mural ;
- faïence ;
- sols ;
- travaux structurels.
Prestations du lot 7
| Code | Prestation |
|---|---|
| PEI-001 | Préparation légère des murs |
| PEI-003 | Ratissage partiel |
| PEI-004 | Ratissage complet |
| PEI-005 | Impression murs |
| PEI-006 | Peinture murs 2 couches |
| PEI-007 | Impression plafonds |
| PEI-008 | Peinture plafonds 2 couches |
| PEI-009 | Peinture boiseries / portes |
| PEI-010 | Pose papier peint |
| PEI-011 | Enduit décoratif / peinture premium |
| PEI-012 | Mise en peinture – Préparation + Finition BA13 neuf |
| PEI-013 | Provision dépose / repose radiateur à eau pour peinture |
| PEI-014 | Plus-value polychromie supérieure à 3 couleurs |
| PEI-015 | Provision mise en place d’entoilage type Fissnet |
| PEI-016 | Entoilage de support |
Prestation retirée
La prestation suivante est retirée :
| Ancien code | Prestation | Statut |
|---|---|---|
| PEI-002 | Rebouchage / reprise ponctuelle | Retirée du lot 7 |
Les reprises ponctuelles liées à des démolitions, réseaux ou supports techniques doivent être traitées dans les lots concernés, notamment :
Calcul des surfaces
7.1 Surface plafond
Priorité 1 :
room_ceiling_surface_m2 = room.area_m2
Priorité 2 :
room_ceiling_surface_m2 = room.length_m × room.width_m
7.2 Surface murs
Priorité 1 :
room_wall_surface_m2 = room.perimeter_m × ceiling_height_m - openings_area_m2
Priorité 2 :
room_wall_surface_m2 = 2 × (room.length_m + room.width_m) × ceiling_height_m - openings_area_m2
Priorité 3 :
room_wall_surface_m2 = 2 × (room.length_m + room.width_m) × default_ceiling_height_m
avec hypothèse.
Valeur par défaut :
"default_ceiling_height_m": 2.50
7.3 Surfaces existantes vs BA13 neuf
Le moteur doit distinguer :
{
"existing_wall_surface_to_paint_m2": "murs existants",
"existing_ceiling_surface_to_paint_m2": "plafonds existants",
"new_ba13_surface_to_finish_m2": "cloisons, doublages ou faux plafonds neufs"
}
Les surfaces BA13 neuves doivent être traitées par :
PEI-012
et ne doivent pas être doublées avec PEI-005 à PEI-008.
Règles générales par niveau de qualité
8.1 Éco
Le moteur propose :
PEI-001 préparation légère des murs
PEI-005 impression murs
PEI-006 peinture murs 2 couches
PEI-007 impression plafonds
PEI-008 peinture plafonds 2 couches
PEI-009 peinture boiseries / portes si portes non changées
Ne pas proposer automatiquement :
- ratissage complet ;
- entoilage ;
- papier peint ;
- peinture décorative.
8.2 Standard
Le moteur propose par défaut :
PEI-004 ratissage complet
PEI-016 entoilage de support
PEI-005 impression murs
PEI-006 peinture murs 2 couches
PEI-007 impression plafonds
PEI-008 peinture plafonds 2 couches
PEI-009 peinture boiseries / portes si portes non changées
PEI-003 ratissage partiel est proposé uniquement si le client le demande en remplacement ou complément.
8.3 Premium
Le moteur propose par défaut :
PEI-004 ratissage complet
PEI-016 entoilage de support
PEI-005 impression murs
PEI-006 peinture murs 2 couches
PEI-007 impression plafonds
PEI-008 peinture plafonds 2 couches
PEI-009 peinture boiseries / portes si portes non changées
PEI-011 enduit décoratif / peinture premium reste uniquement à la demande du client.
Règles anti-double comptage
10.1 Surfaces BA13 neuves
Les surfaces BA13 neuves sont traitées par :
PEI-012
Elles ne doivent pas être reprises dans :
PEI-004
PEI-005
PEI-006
PEI-007
PEI-008
PEI-016
sauf paramétrage contraire.
10.2 Ratissage
PEI-004 ratissage complet > PEI-003 ratissage partiel > PEI-001 préparation légère
Ne jamais générer PEI-001, PEI-003 et PEI-004 sur la même surface.
10.3 Papier peint
Si PEI-010 est généré sur une surface :
do not generate PEI-006 on that same surface
10.4 Enduit décoratif
Si PEI-011 est généré sur une surface :
do not generate PEI-006 on that same surface
10.5 Portes
Si les portes sont changées :
do not generate PEI-009
sauf si portes neuves à peindre.
10.6 Radiateurs
Si les radiateurs à eau sont remplacés ou déplacés :
do not generate PEI-013
Si radiateurs à eau conservés :
generate PEI-013 as provision
10.7 Entoilage
Si PEI-016 est généré avec surface connue :
do not generate PEI-015 for same surface
Si PEI-015 est généré en provision sans surface connue :
do not generate PEI-016 unless surface becomes available
Interactions avec les autres lots
11.1 Avec lot 2 — Cloisons / Doublages / Faux plafonds
Les surfaces neuves issues du lot 2 doivent alimenter :
PEI-012
11.2 Avec lot CVC
Si chauffage à eau et radiateurs conservés :
PEI-013 provision dépose / repose radiateur à eau pour peinture
11.3 Avec lot Menuiserie
Si les portes sont remplacées :
do not generate PEI-009
Si les portes sont conservées :
generate PEI-009
11.4 Avec lot Salle de bain / Cuisine
Les surfaces carrelées ou faïencées ne doivent pas être peintes.
Le moteur doit exclure des surfaces PEI :
tile_wall_surface_m2
faience_surface_m2
decorative_wall_covering_surface_m2
11.5 Avec lot Électricité / Plomberie
Les reprises localisées liées aux saignées ou modifications techniques ne sont pas PEI-002.
Elles doivent être traitées par :
PLA-010
Puis les surfaces réparées peuvent ensuite intégrer le lot peinture si elles sont dans une pièce à rénover.
Gestion du niveau Éco / Standard / Premium
12.1 Éco
Créer par défaut :
PEI-001
PEI-005
PEI-006
PEI-007
PEI-008
PEI-009 si portes non changées
12.2 Standard
Créer par défaut :
PEI-004
PEI-016
PEI-005
PEI-006
PEI-007
PEI-008
PEI-009 si portes non changées
PEI-003 uniquement si client demande ratissage partiel.
12.3 Premium
Créer par défaut :
PEI-004
PEI-016
PEI-005
PEI-006
PEI-007
PEI-008
PEI-009 si portes non changées
PEI-011 uniquement si client demande une finition décorative ou premium spécifique.
Format de sortie attendu
Chaque ligne du lot 7 doit respecter ce format :
{
"lot": "Murs / Plafonds / Peinture",
"code": "PEI-006",
"label": "Peinture murs 2 couches",
"room_id": "room_2",
"room_name": "Chambre",
"unit": "m2",
"quantity": 34.5,
"quantity_formula": "existing_wall_surface_to_paint_m2",
"pricing_mode": "unit_price",
"source": "room_to_renovate",
"confidence": 0.85,
"is_assumption": true,
"assumption_reason": "Surface murale calculée depuis périmètre et hauteur sous plafond",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour BA13 neuf :
{
"lot": "Murs / Plafonds / Peinture",
"code": "PEI-012",
"label": "Mise en peinture – Préparation + Finition BA13 neuf",
"unit": "m2",
"quantity": 18.2,
"quantity_formula": "new_ba13_wall_surface_m2 + new_ba13_ceiling_surface_m2",
"source": "lot_2_created_surfaces",
"confidence": 0.90,
"is_assumption": false
}Règles de validation
Avant génération du lot 7, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_surfaces": true,
"has_room_types": true,
"has_quality_level": true,
"has_ceiling_height_or_default": true
}
Si hauteur sous plafond absente :
use default_ceiling_height_m = 2.50
Si surface pièce absente :
block painting pricing for that room
Message :
Impossible de chiffrer la peinture d’une pièce sans surface validée.
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| surface des pièces | JSON écran 2 |
| type de pièce | JSON écran 2 |
| niveau de qualité | écran 0 |
| pièces à rénover | écran 2 |
| hauteur sous plafond ou valeur par défaut | JSON / défaut |
Automatiquement déduit
| Donnée | Source |
|---|---|
| surface murs | périmètre × hauteur |
| surface plafonds | surface sol |
| ratissage complet | standard / premium |
| entoilage | standard / premium |
| impression murs/plafonds | pièce à rénover |
| peinture murs/plafonds | pièce à rénover |
| peinture portes | portes non changées |
| provision radiateur | chauffage à eau + radiateurs conservés |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| ratissage partiel | demande client |
| papier peint | demande client |
| enduit décoratif / peinture premium | demande client |
| polychromie | nombre de couleurs client |
| provision Fissnet | demande client ou observation |
| peinture portes neuves | demande client / menuiserie |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| état détaillé de chaque mur | difficile sans visite |
| nombre exact de fissures | traité en provision |
| plan précis des couleurs | personnalisation ultérieure |
| marque peinture | base produit / gamme |
| support exact de chaque mur | hypothèse selon pièce |
| surface exacte derrière radiateurs | provision |
Règle produit finale
Le lot 7 doit appliquer la logique suivante :
1. Identifier les pièces à rénover.
2. Calculer surfaces murs et plafonds.
3. Séparer surfaces existantes et surfaces BA13 neuves.
4. Appliquer les règles de préparation selon niveau de qualité.
5. Appliquer impression et peinture systématiquement si pièce rénovée.
6. Ajouter peinture portes si portes non changées.
7. Ajouter entoilage en standard et premium.
8. Ajouter BA13 neuf uniquement sur surfaces créées par le lot 2.
9. Ajouter papier peint, finition décorative ou polychromie uniquement si demandé.
10. Ajouter provision radiateur à eau si radiateurs conservés.
11. Éviter tout double comptage entre préparation, ratissage, entoilage, BA13 neuf et finitions décoratives.
Le devis doit rester clair :
Les prestations de peinture sont générées selon les pièces à rénover et le niveau de qualité. Les finitions spécifiques comme papier peint, enduit décoratif ou polychromie sont ajoutées uniquement si le client les sélectionne.
Salle de bain
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
SDB-004 | Étanchéité sous carrelage SPEC | m² | — | — | — | 10% | Règle définie |
SDB-005 | Pose faïence murale standard | m² | — | — | — | 10% | Règle définie + choix client |
SDB-006 | Pose faïence petit format / calepinage | m² | — | — | — | 10% | Choix client |
SDB-007 | Pose receveur extra-plat | u | — | — | — | 10% | Règle définie |
SDB-008 | Pose paroi de douche / pare-baignoire | u | — | — | — | 10% | Règle définie + choix client |
SDB-009 | Pose meuble vasque | u | — | — | — | 10% | Règle définie |
SDB-010 | Pose colonne de douche | u | — | — | — | 10% | Règle définie + choix client |
SDB-011 | Pose mitigeur vasque | u | — | — | — | 10% | Règle définie |
SDB-013 | Fourniture et pose baignoire avec tablier à carreler et trappe 20x20 | u | — | — | — | 10% | Règle définie + choix client |
SDB-014 | Fourniture et pose baignoire | u | — | — | — | 10% | Règle définie + choix client |
SDB-015 | Fourniture et pose meuble colonne salle de bain | u | — | — | — | 10% | Choix client |
SDB-016 | Pose miroir salle de bain | u | — | — | — | 10% | Règle définie |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
4.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"perimeter_m": null,
"ceiling_height_m": null,
"type": null,
"name": null,
"visual_evidence": {
"sanitary_elements": [],
"fixed_features": []
},
"layout_fidelity": {}
}
4.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null
}
4.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"room_area_overrides": [],
"validated_sanitary_elements": []
}
4.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"bathroom_customization": {
"bathroom_type_by_room": [],
"target_wall_tile_type": null,
"target_wall_tile_surface_m2": null,
"tile_height_m": null,
"shower_receiver_selected": false,
"bathtub_selected": false,
"bathtub_type": null,
"shower_screen_selected": false,
"bath_screen_selected": false,
"vanity_type": null,
"mirror_count": null,
"bathroom_column_furniture_selected": false,
"shower_column_selected": false
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Le moteur peut générer automatiquement la salle de bain à partir :
- du type de pièce : SDB / SDE / WC ;
- de la surface ;
- du niveau de qualité ;
- des équipements détectés ;
- des choix de personnalisation éventuels.
Données optionnelles utiles mais non bloquantes :
- choix baignoire ou douche ;
- choix simple vasque ou double vasque ;
- choix faïence standard ou petit format ;
- choix meuble colonne ;
- choix miroir spécifique ;
- choix hauteur de faïence.
Variables calculées
Avant de générer le lot 8, le moteur doit calculer :
{
"bathroom_count": null,
"shower_room_count": null,
"renovated_bathroom_count": null,
"renovated_shower_room_count": null,
"bathroom_wall_surface_m2": null,
"wall_tile_surface_m2": null,
"spec_wall_surface_m2": null,
"standard_wall_tile_area_m2": null,
"small_format_wall_tile_area_m2": null,
"shower_receiver_count": null,
"shower_screen_count": null,
"bath_screen_count": null,
"single_vanity_count": null,
"double_vanity_count": null,
"vanity_mixer_count": null,
"shower_column_count": null,
"standard_bathtub_count": null,
"tiled_apron_bathtub_count": null,
"bathroom_column_furniture_count": null,
"bathroom_mirror_count": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Protection à l’eau sous carrelage mural ou zones exposées à l’eau dans une salle de bain ou salle d’eau.
m²
Créer systématiquement si la salle de bain ou salle d’eau est à rénover.
room_to_renovate == true
et :
room.type in ["bathroom", "sdb", "salle_de_bain", "shower_room", "sde", "salle_d_eau"]
Priorité 1 :
quantity = wall_tile_surface_m2
Priorité 2 :
quantity = spec_wall_surface_m2
Priorité 3 :
quantity = room.perimeter_m × default_spec_height_m
avec hypothèse.
Distinction avec le lot Sols
SDB-004 concerne les protections sous carrelage mural ou zones verticales de salle de bain.
Le SPEC sol sous carrelage reste traité par :
Ne comprend pas :
- carrelage ;
- faïence ;
- SPEC sol si traité par SOL-016 ;
- SEL complet ;
- receveur ;
- douche italienne ;
- plomberie.
Pose de faïence murale standard dans salle de bain ou salle d’eau.
m²
Créer si :
target_wall_tile_type == "standard"
ou si aucun carrelage mural spécifique n’est choisi.
Par défaut, pour une pièce d’eau rénovée :
target_wall_tile_type = "standard"
sauf si le client choisit petit format, mosaïque ou calepinage spécifique.
quantity = wall_tile_surface_m2
Anti-double comptage
Si SDB-006 est généré sur la même surface :
do not generate SDB-005
Ne comprend pas :
- fourniture faïence si traitée en base produit ;
- SPEC ;
- préparation lourde du support ;
- plomberie ;
- joints spéciaux premium si chiffrés séparément.
Pose de faïence petit format, mosaïque ou pose avec calepinage spécifique.
m²
Créer si le client choisit :
- faïence petit format ;
- mosaïque ;
- zellige ;
- pose décorative ;
- calepinage spécifique ;
- motif ;
- pose complexe.
Créer aussi si :
target_wall_tile_type == "small_format_or_layout"
quantity = small_format_wall_tile_area_m2
Si toute la faïence est en petit format :
quantity = wall_tile_surface_m2
Niveau premium
Le niveau premium ne doit pas créer automatiquement SDB-006 sans produit ou choix esthétique spécifique.
Anti-double comptage
Si SDB-006 est généré :
do not generate SDB-005 on same surface
Ne comprend pas :
- fourniture faïence si traitée en base produit ;
- SPEC ;
- préparation lourde ;
- joints époxy si séparés ;
- niches ;
- plomberie.
Pose d’un receveur de douche extra-plat.
u
Créer si la pièce est une salle d’eau.
room_bathroom_type == "shower_room"
Créer aussi si le client transforme une salle de bain en douche.
quantity = count(shower_rooms_to_renovate)
Par défaut :
1 receveur par salle d’eau
Ne comprend pas :
- douche à l’italienne ;
- évacuation ;
- alimentation eau ;
- colonne de douche ;
- paroi ;
- carrelage ;
- SPEC ;
- receveur si fourni en base produit séparée.
Pose d’une paroi de douche ou d’un pare-baignoire.
u
Créer si :
room_bathroom_type == "shower_room"
ou si la salle de bain contient une baignoire avec pare-baignoire prévu.
Créer aussi si demandé par le client.
Salle d’eau :
quantity = shower_receiver_count
Salle de bain avec baignoire :
quantity = bath_screen_count
Si aucun détail :
quantity = count(shower_or_bath_screen_required)
Ne comprend pas :
- receveur ;
- baignoire ;
- faïence ;
- plomberie ;
- percement complexe ;
- renfort support.
Pose d’un meuble vasque simple ou double.
u
Créer systématiquement si salle de bain ou salle d’eau à rénover.
room_to_renovate == true
et :
room_bathroom_type in ["bathroom", "shower_room"]
Règle simple / double vasque
Si :
bathroom.area_m2 < 3
alors :
vanity_type = "single"
Sinon :
vanity_type = "double"
Override client :
client selected vanity type overrides automatic rule
quantity = 1 meuble vasque par salle de bain ou salle d’eau
Attribut à ajouter :
{
"vanity_type": "single | double"
}
Ne comprend pas :
- alimentation EF/EC ;
- évacuation ;
- vannes d’arrêt ;
- robinetterie si SDB-011 séparé ;
- miroir ;
- meuble colonne ;
- électricité miroir.
Pose d’une colonne de douche.
u
Créer si :
room_bathroom_type == "shower_room"
Créer aussi si la salle de bain avec baignoire prévoit une fonction douche ou un pare-baignoire.
quantity = count(shower_columns_required)
Par défaut :
1 colonne de douche par salle d’eau
Ne comprend pas :
- alimentation EF/EC ;
- receveur ;
- paroi ;
- baignoire ;
- robinetterie vasque ;
- faïence.
Pose d’un mitigeur de vasque ou lavabo.
u
Créer systématiquement avec SDB-009.
Si meuble vasque simple :
quantity = 1
Si meuble double vasque :
quantity = 2
quantity = 1 if vanity_type == "single"
quantity = 2 if vanity_type == "double"
Ne comprend pas :
- meuble vasque ;
- alimentation EF/EC ;
- vannes d’arrêt ;
- siphon ;
- robinetterie douche ;
- robinetterie baignoire.
Fourniture et pose d’une baignoire avec tablier à carreler et trappe de visite 20x20.
u
Créer si la pièce est une salle de bain à rénover et non une salle d’eau.
room_bathroom_type == "bathroom"
et si le client choisit ou si le scénario prévoit :
bathtub_type == "tiled_apron"
quantity = count(bathrooms_with_tiled_apron_bathtub)
Par défaut :
quantity = 1 per bathroom concerned
Si SDB-013 est généré :
do not generate SDB-014 for same room
Ne comprend pas :
- alimentation EF/EC ;
- évacuation ;
- faïence sur tablier si chiffrée ailleurs ;
- SPEC ;
- pare-baignoire ;
- robinetterie baignoire si traitée séparément.
Interaction faïence
Le tablier à carreler peut augmenter la surface de faïence.
Le moteur doit transmettre :
{
"additional_tile_surface_from_bathtub_apron_m2": null
}
vers SDB-005 ou SDB-006.
Fourniture et pose d’une baignoire standard.
u
Créer si la pièce est une salle de bain à rénover et non une salle d’eau.
room_bathroom_type == "bathroom"
et si aucun tablier à carreler n’est demandé.
quantity = count(bathrooms_with_standard_bathtub)
Par défaut :
quantity = 1 per bathroom concerned
Si SDB-013 est généré :
do not generate SDB-014 for same room
Ne comprend pas :
- alimentation EF/EC ;
- évacuation ;
- pare-baignoire ;
- robinetterie baignoire si séparée ;
- faïence ;
- SPEC ;
- habillage spécifique.
Fourniture et pose d’un meuble colonne de salle de bain.
u
Créer uniquement si choix du client.
bathroom_column_furniture_selected == true
ou si un produit meuble colonne est sélectionné.
quantity = count(selected_bathroom_column_furniture)
Par défaut si choix global :
quantity = 1
Ne comprend pas :
- meuble vasque ;
- miroir ;
- éclairage ;
- fixation renforcée si support spécifique ;
- raccordement électrique.
Pose d’un miroir de salle de bain.
u
Créer systématiquement si salle de bain ou salle d’eau à rénover.
room_to_renovate == true
et :
room_bathroom_type in ["bathroom", "shower_room"]
quantity = 1 per bathroom or shower_room
Si le client sélectionne plusieurs miroirs :
quantity = client_selected_mirror_count
Ne comprend pas :
- alimentation électrique miroir ;
- miroir lumineux si produit spécifique ;
- meuble miroir ;
- applique ;
- percement complexe.
L’alimentation électrique est traitée dans le lot Électricité :
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version prestations unitaires, sans forfait global
Objectif du lot
Le lot 8 couvre les prestations visibles et spécifiques à la salle de bain ou salle d’eau :
- étanchéité sous carrelage mural / zones humides ;
- faïence murale ;
- receveur extra-plat ;
- paroi de douche ou pare-baignoire ;
- meuble vasque ;
- colonne de douche ;
- mitigeur vasque ;
- baignoire ;
- meuble colonne ;
- miroir.
Ce lot ne doit pas chiffrer :
- alimentation eau froide / eau chaude ;
- évacuation PVC ;
- déplacement réseaux ;
- vannes d’arrêt ;
- raccordement électroménager ;
- pose ballon d’eau chaude ;
- peinture générale ;
- sols ;
- SPEC sol sous carrelage ;
- faux plafonds ;
- électricité.
Ces éléments sont traités dans les autres lots.
Prestations retirées
Les prestations suivantes sont supprimées du lot 8 :
| Ancien code | Prestation | Statut |
|---|---|---|
| SDB-001 | Création salle de bain simple | Retirée |
| SDB-002 | Rénovation salle de bain standard | Retirée |
| SDB-003 | Salle de bain premium complète | Retirée |
| SDB-012 | Accessoires salle de bain | Retirée |
Le moteur ne doit plus générer de forfait global de salle de bain.
Prestations du lot 8
| Code | Prestation |
|---|---|
| SDB-004 | Étanchéité sous carrelage SPEC |
| SDB-005 | Pose faïence murale standard |
| SDB-006 | Pose faïence petit format / calepinage |
| SDB-007 | Pose receveur extra-plat |
| SDB-008 | Pose paroi de douche / pare-baignoire |
| SDB-009 | Pose meuble vasque |
| SDB-010 | Pose colonne de douche |
| SDB-011 | Pose mitigeur vasque |
| SDB-013 | Fourniture et pose d’une baignoire avec tablier à carreler et trappe 20x20 |
| SDB-014 | Fourniture et pose d’une baignoire |
| SDB-015 | Fourniture et pose d’un meuble colonne de salle de bain |
| SDB-016 | Pose d’un miroir de salle de bain |
Définitions métier
6.1 Salle de bain
Une pièce est considérée comme salle de bain si :
room.type in ["bathroom", "sdb", "salle_de_bain"]
ou si le plan / la personnalisation indique une baignoire.
6.2 Salle d’eau
Une pièce est considérée comme salle d’eau si :
room.type in ["shower_room", "sde", "salle_d_eau"]
ou si le plan / la personnalisation indique une douche sans baignoire.
6.3 Pièce d’eau à rénover
Une pièce est une pièce d’eau à rénover si :
room.type in ["bathroom", "sdb", "salle_de_bain", "shower_room", "sde", "salle_d_eau"]
et :
room_to_renovate == true
Détermination automatique douche / baignoire
8.1 Salle d’eau
Si la pièce est une salle d’eau :
room_bathroom_type = "shower_room"
Créer par défaut :
- receveur extra-plat ;
- paroi de douche ;
- colonne de douche ;
- meuble vasque ;
- mitigeur vasque ;
- miroir.
Ne pas créer de baignoire.
8.2 Salle de bain
Si la pièce est une salle de bain :
room_bathroom_type = "bathroom"
Créer par défaut :
- baignoire ;
- pare-baignoire si demandé ou selon scénario ;
- meuble vasque ;
- mitigeur vasque ;
- miroir.
Ne pas créer de receveur extra-plat sauf si la personnalisation transforme la pièce en salle d’eau.
8.3 Override client
Si le client choisit explicitement douche ou baignoire :
client choice overrides automatic room type
Calcul des surfaces de faïence murale
9.1 Surface prioritaire
Priorité 1 :
wall_tile_surface_m2 = client_selected_wall_tile_surface_m2
Priorité 2 :
wall_tile_surface_m2 = wall_tile_height_m × room_perimeter_m - openings_area_m2
Priorité 3 :
wall_tile_surface_m2 = default_wall_tile_surface_by_room_type
avec hypothèse.
9.2 Hauteur de faïence par défaut
Le moteur doit utiliser une table paramétrable.
Exemple de structure :
{
"default_wall_tile_height_by_quality": {
"eco": "configured_value",
"standard": "configured_value",
"premium": "configured_value"
}
}
Ne pas coder ces hauteurs en dur dans le moteur.
Règles anti-double comptage
11.1 Forfaits supprimés
Le moteur ne doit jamais générer :
SDB-001
SDB-002
SDB-003
11.2 Baignoire
Si SDB-013 est généré :
do not generate SDB-014
Si SDB-014 est généré :
do not generate SDB-013
11.3 Salle d’eau
Si salle d’eau :
generate SDB-007
do not generate SDB-013 or SDB-014
11.4 Salle de bain
Si salle de bain :
generate SDB-013 or SDB-014
do not generate SDB-007 unless client converts to shower room
11.5 Faïence
Si SDB-006 est généré :
do not generate SDB-005 for same surface
11.6 Meuble vasque / mitigeur
SDB-011 dépend de SDB-009.
SDB-011 quantity must follow vanity_type from SDB-009
11.7 Miroir
SDB-016 est systématique.
Ne pas le confondre avec :
ELEC-019 alimentation miroir
Interactions avec les autres lots
12.1 Avec lot 4 — Plomberie
Le lot 4 gère :
- alimentation EF/EC ;
- évacuation PVC ;
- vannes d’arrêt ;
- raccordement WC ;
- déplacement réseaux.
Le lot 8 gère les équipements visibles.
Exemples :
| Équipement | Lot 8 | Lot 4 |
|---|---|---|
| meuble vasque | SDB-009 | PLO-001 + PLO-002 + PLO-013 |
| baignoire | SDB-013 ou SDB-014 | PLO-001 + PLO-002 |
| douche | SDB-007 + SDB-010 | PLO-001 + PLO-002 |
| miroir | SDB-016 | ELEC-019 si lumineux |
12.2 Avec lot 6 — Sols
Le SPEC sol sous carrelage est traité par :
SOL-016
Le lot 8 gère le SPEC mural ou sous faïence via :
SDB-004
12.3 Avec lot 7 — Peinture
Les surfaces faïencées ne doivent pas être peintes.
Le moteur doit transmettre :
{
"wall_tile_surface_m2": null,
"paint_exclusion_surface_m2": null
}
au lot Peinture.
12.4 Avec lot Électricité
Le miroir peut générer :
ELEC-019 alimentation miroir
La colonne de douche ou baignoire ne génère pas d’électricité sauf équipement spécifique.
12.5 Avec lot Menuiserie
Le meuble colonne ou meuble vasque n’est pas considéré comme menuiserie sur mesure sauf produit spécifique.
Gestion du niveau Éco / Standard / Premium
13.1 Éco
Règle :
Faïence standard
Meuble vasque selon surface
Baignoire standard si salle de bain
Receveur extra-plat si salle d’eau
Miroir systématique
13.2 Standard
Règle :
Faïence standard
Meuble simple ou double selon surface
Receveur extra-plat en salle d’eau
Baignoire standard en salle de bain
Miroir systématique
13.3 Premium
Règle :
Faïence standard ou petit format selon produit choisi
Double vasque si surface >= 3 m²
Baignoire avec tablier à carreler si sélectionnée
Miroir systématique
Meuble colonne uniquement si client choisit
Le premium ne doit pas créer automatiquement :
- meuble colonne ;
- faïence petit format ;
- baignoire à tablier à carreler ;
- pare-baignoire spécifique ;
sans produit ou choix client.
Format de sortie attendu
Chaque ligne du lot 8 doit respecter ce format :
{
"lot": "Salle de bain",
"code": "SDB-009",
"label": "Pose meuble vasque",
"room_id": "room_4",
"room_name": "Salle de bain",
"unit": "u",
"quantity": 1,
"quantity_formula": "1 per renovated bathroom or shower room",
"pricing_mode": "unit_price",
"source": "room_type_and_surface",
"confidence": 0.85,
"is_assumption": true,
"assumption_reason": "Meuble vasque généré automatiquement selon surface de salle de bain",
"user_validation_required": false,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour meuble vasque :
{
"vanity_type": "single | double",
"vanity_rule": "single if area < 3m2, double otherwise"
}
Pour baignoire :
{
"code": "SDB-014",
"condition": "bathroom renovated and not shower_room"
}Règles de validation
Avant génération du lot 8, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_room_types": true,
"has_room_surfaces": true,
"has_bathroom_or_shower_room": true,
"has_quality_level": true
}
Si aucune salle de bain ou salle d’eau n’est détectée :
do not generate Lot 8
Si type SDB/SDE incertain :
{
"is_assumption": true,
"user_validation_required": true,
"assumption_reason": "Type salle de bain / salle d’eau à confirmer"
}
Si surface absente :
block vanity type rule and use client validation
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièce SDB ou SDE validée | JSON écran 2 |
| surface de la pièce | JSON écran 2 |
| pièce à rénover | écran 2 |
| niveau de qualité | écran 0 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| salle d’eau ou salle de bain | type pièce / fixture |
| receveur extra-plat | salle d’eau |
| baignoire | salle de bain |
| meuble simple/double vasque | surface < ou >= 3 m² |
| mitigeur vasque | type de vasque |
| miroir | systématique |
| SPEC | SDB/SDE rénovée |
| faïence standard | défaut |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| faïence petit format / calepinage | choix client / produit |
| baignoire avec tablier à carreler | choix client / produit |
| meuble colonne | choix client |
| plusieurs miroirs | choix client |
| pare-baignoire spécifique | choix client |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| hauteur exacte de faïence | valeur paramétrable / personnalisable |
| modèle exact baignoire | base produit |
| modèle exact meuble vasque | base produit |
| surface exacte tablier baignoire | estimée ou générée depuis produit |
| nombre exact accessoires | prestation supprimée |
| détail robinetterie douche | produit / personnalisation future |
Règle produit finale
Le lot 8 doit appliquer la logique suivante :
1. Identifier les salles de bain et salles d’eau à rénover.
2. Supprimer toute logique de forfait global.
3. Générer SPEC systématiquement si SDB/SDE rénovée.
4. Générer faïence murale standard par défaut.
5. Générer faïence petit format uniquement si produit ou choix client.
6. Si salle d’eau : générer receveur, paroi douche, colonne douche.
7. Si salle de bain : générer baignoire standard ou baignoire avec tablier selon choix.
8. Générer meuble vasque simple si surface < 3 m², double sinon.
9. Générer mitigeur selon simple ou double vasque.
10. Générer miroir systématiquement.
11. Générer meuble colonne uniquement si choix client.
12. Créer les dépendances vers plomberie, électricité, sols et peinture.
Le devis doit rester clair :
La salle de bain est chiffrée par prestations unitaires selon le type de pièce, la surface et les choix de personnalisation. Aucun forfait global salle de bain n’est généré automatiquement.
Cuisine
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
CUI-001 | Provision pour fourniture cuisine équipée | ml | — | — | — | 10% | Règle définie |
CUI-003 | Pose cuisine standard | ml | — | — | — | 10% | Règle définie |
CUI-004 | Pose cuisine premium / ajustements complexes | ml/forfait | — | — | — | 10% | Règle définie + choix client |
CUI-006 | Pose plan de travail stratifié | ml | — | — | — | 10% | Règle définie + choix client |
CUI-007 | Pose plan de travail pierre / compact / quartz | ml/m² | — | — | — | 10% | Choix client |
CUI-008 | Pose crédence carrelage | m² | — | — | — | 10% | Règle définie + choix client |
CUI-009 | Pose crédence premium | m² | — | — | — | 10% | Choix client |
CUI-010 | Pose évier + robinetterie | u | — | — | — | 10% | Règle définie |
CUI-011 | Pose électroménager | u | — | — | — | 10% | Règle définie + choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
4.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"perimeter_m": null,
"type": null,
"name": null,
"visual_evidence": {
"kitchen_elements": [],
"fixed_features": []
},
"layout_fidelity": {}
}
4.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"hot_water_type": null,
"heating_type": null,
"project_description": null,
"quality_level": null
}
4.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"room_area_overrides": [],
"validated_kitchen_elements": []
}
4.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"kitchen_customization": {
"kitchen_linear_m": null,
"kitchen_layout_type": null,
"kitchen_supply_range": null,
"countertop_type": null,
"countertop_linear_m": null,
"backsplash_type": null,
"backsplash_height_m": null,
"backsplash_linear_m": null,
"sink_and_faucet_selected": true,
"appliances": [],
"premium_adjustments_required": false
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
La donnée la plus utile pour ce lot est :
kitchen_linear_m
Mais elle ne doit pas bloquer le chiffrage.
Si le client ne donne pas le linéaire de cuisine, le moteur doit l’estimer à partir :
- du plan validé ;
- des éléments de cuisine visibles ;
- de la surface de la cuisine ;
- d’une table de ratios paramétrables.
Variables calculées
Avant de générer le lot Cuisine, le moteur doit calculer :
{
"kitchen_count": null,
"renovated_kitchen_count": null,
"kitchen_area_m2": null,
"kitchen_linear_m": null,
"kitchen_linear_m_source": null,
"countertop_linear_m": null,
"backsplash_linear_m": null,
"backsplash_area_m2": null,
"sink_count": null,
"faucet_count": null,
"appliance_count": null,
"standard_kitchen_installation_linear_m": null,
"premium_kitchen_installation_linear_m": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Provision pour fourniture d’une cuisine équipée calculée au mètre linéaire.
ml
Créer si une cuisine est à rénover.
room.type in ["kitchen", "cuisine"]
et :
room_to_renovate == true
quantity = kitchen_linear_m
Source du linéaire
Le moteur doit indiquer :
{
"kitchen_linear_m_source": "client_input | plan_detection | area_estimate"
}
Niveau de gamme
Le prix au mL doit dépendre de :
{
"quality_level": "eco | standard | premium",
"kitchen_supply_range": "eco | standard | premium"
}
Si kitchen_supply_range n’est pas renseigné :
kitchen_supply_range = quality_level
La provision couvre les éléments de cuisine équipée selon base prix :
- meubles bas ;
- meubles hauts ;
- colonnes ;
- façades ;
- caissons ;
- quincaillerie standard ;
- éléments de rangement standards.
Ne comprend pas :
- pose cuisine ;
- plan de travail si chiffré séparément ;
- crédence ;
- évier ;
- robinetterie ;
- électroménager ;
- plomberie ;
- électricité ;
- ajustements complexes premium si chiffrés par CUI-004.
Statut
Cette ligne doit être marquée comme provision.
"pricing_mode": "provision"
Pose d’une cuisine équipée standard, incluant meubles bas, meubles hauts et colonnes standards.
ml
Créer si :
quality_level in ["eco", "standard"]
et si une cuisine est à rénover.
Créer aussi si le client demande explicitement une pose standard.
quantity = kitchen_linear_m
CUI-003 inclut :
- pose meubles bas ;
- pose meubles hauts ;
- pose colonnes ;
- réglages standards ;
- assemblage standard ;
- fixation standard.
Ne comprend pas :
- fourniture cuisine ;
- plan de travail ;
- crédence ;
- évier ;
- robinetterie ;
- électroménager ;
- plomberie ;
- électricité ;
- ajustements complexes ;
- habillages sur mesure.
Anti-double comptage
Si CUI-004 est généré :
do not generate CUI-003
Pose d’une cuisine premium ou pose avec ajustements complexes.
ml
ou :
forfait
selon base de prix.
Créer si :
quality_level == "premium"
et si une cuisine est à rénover.
Créer aussi si :
premium_adjustments_required == true
ou si le projet prévoit :
- cuisine haut de gamme ;
- meubles complexes ;
- murs irréguliers ;
- nombreux fileurs ;
- ajustements sur mesure ;
- plans particuliers ;
- intégration complexe ;
- cuisine avec colonnes nombreuses ;
- cuisine encastrée ;
- alignements précis.
Priorité 1 :
quantity = kitchen_linear_m
Priorité 2 :
quantity = 1 forfait
si l’ajustement complexe est global.
CUI-004 inclut :
- pose meubles bas ;
- pose meubles hauts ;
- pose colonnes ;
- ajustements complexes ;
- alignements ;
- fileurs ;
- découpes ou adaptations mineures ;
- finitions de pose premium.
Ne comprend pas :
- fourniture cuisine ;
- plan de travail pierre si séparé ;
- crédence ;
- électroménager ;
- plomberie ;
- électricité ;
- fabrication sur mesure complète si lot menuiserie.
Anti-double comptage
Si CUI-004 est généré :
do not generate CUI-003
Pose d’un plan de travail stratifié.
ml
Créer si :
countertop_type == "laminate"
ou si le produit choisi est stratifié.
Créer par défaut en éco.
En standard, créer si aucun plan de travail pierre / compact / quartz n’est choisi.
Priorité 1 :
quantity = countertop_linear_m
Priorité 2 :
quantity = kitchen_linear_m × default_countertop_ratio
Le ratio doit être paramétrable.
Ne comprend pas :
- fourniture plan de travail si traitée en base produit ;
- évier ;
- robinetterie ;
- électroménager ;
- crédence ;
- plomberie ;
- découpe complexe si chiffrée séparément.
Anti-double comptage
Si CUI-007 est généré :
do not generate CUI-006
Pose d’un plan de travail en pierre, compact, quartz ou matériau premium.
ml
ou :
m²
selon base de prix.
Créer si :
countertop_type in ["stone", "compact", "quartz", "ceramic", "premium"]
ou si le produit choisi appartient à une gamme premium.
Créer aussi en premium si le client a choisi ce type de plan de travail.
Ne pas créer automatiquement en premium sans produit ou choix client si le devis reste en provision.
Priorité 1 :
quantity = countertop_linear_m
Priorité 2 :
quantity = kitchen_linear_m × default_countertop_ratio
Ne comprend pas :
- fourniture plan de travail si traitée en base produit ;
- prise de gabarit si séparée ;
- découpe évier / plaque si séparée ;
- crédence ;
- évier ;
- robinetterie ;
- plomberie ;
- électroménager.
Anti-double comptage
Si CUI-007 est généré :
do not generate CUI-006
Pose d’une crédence en carrelage standard.
m²
Créer si :
backsplash_type == "tile"
ou si le produit choisi est une crédence carrelage standard.
Créer par défaut en éco ou standard si crédence prévue et qu’aucune crédence premium n’est choisie.
Priorité 1 :
quantity = backsplash_area_m2
Priorité 2 :
quantity = backsplash_linear_m × backsplash_height_m
Priorité 3 :
quantity = kitchen_linear_m × default_backsplash_height_m
default_backsplash_height_m doit être paramétrable.
Ne comprend pas :
- fourniture carrelage si traitée en base produit ;
- crédence premium ;
- SPEC ;
- préparation lourde ;
- peinture ;
- plan de travail.
Anti-double comptage
Si CUI-009 est généré :
do not generate CUI-008
Pose d’une crédence premium : pierre, compact, quartz, verre, inox, zellige, mosaïque ou matériau décoratif complexe.
m²
Créer si :
backsplash_type in ["premium", "stone", "compact", "quartz", "glass", "inox", "zellige", "mosaic"]
ou si le produit choisi impose une pose premium.
Créer uniquement si le client choisit une crédence premium ou si le produit le justifie.
Priorité 1 :
quantity = backsplash_area_m2
Priorité 2 :
quantity = backsplash_linear_m × backsplash_height_m
Priorité 3 :
quantity = kitchen_linear_m × default_backsplash_height_m
Ne comprend pas :
- fourniture crédence si traitée en base produit ;
- préparation lourde support ;
- plan de travail ;
- électricité ;
- plomberie.
Anti-double comptage
Si CUI-009 est généré :
do not generate CUI-008
Pose d’un évier et de sa robinetterie de cuisine.
u
Créer systématiquement si cuisine à rénover.
room.type in ["kitchen", "cuisine"]
et :
room_to_renovate == true
Créer aussi si le client sélectionne un évier ou une robinetterie cuisine.
quantity = 1 per renovated kitchen
Si plusieurs éviers sont explicitement prévus :
quantity = count(kitchen_sinks)
Ne comprend pas :
- alimentation EF/EC ;
- évacuation PVC ;
- vannes d’arrêt ;
- raccordement électroménager ;
- plan de travail ;
- découpe plan de travail si séparée ;
- fourniture évier / robinetterie si traitée en base produit.
Les réseaux plomberie doivent être traités par :
PLO-001
PLO-002
PLO-013
Pose ou intégration d’équipements électroménagers de cuisine.
u
Équipements concernés
[
"hob",
"oven",
"dishwasher",
"fridge",
"hood",
"microwave",
"wine_cellar",
"washing_machine",
"dryer"
]
Créer si :
appliances[] exists
ou si cuisine à rénover avec hypothèse électroménager.
Priorité 1 :
quantity = count(appliances selected by client)
Priorité 2 :
quantity = default_appliance_count_by_quality
La table doit être paramétrable.
Exemple de structure :
{
"default_appliance_count_by_quality": {
"eco": "configured_value",
"standard": "configured_value",
"premium": "configured_value"
}
}
Ne comprend pas :
- fourniture électroménager si traitée en base produit ;
- alimentation électrique ;
- circuit spécialisé ;
- raccordement plomberie ;
- adaptation meuble complexe ;
- évacuation ;
- ventilation hotte complexe.
Les alimentations électriques sont traitées dans le lot Électricité.
Les raccordements plomberie électroménager sont traités dans :
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version mise à jour avec provision cuisine équipée en mL
Objectif du lot
Le lot Cuisine couvre les prestations visibles et spécifiques à la cuisine :
- provision de fourniture de cuisine équipée ;
- pose cuisine standard ;
- pose cuisine premium / ajustements complexes ;
- pose plan de travail ;
- pose crédence ;
- pose évier + robinetterie ;
- pose électroménager.
Ce lot ne doit pas chiffrer :
- alimentations électriques ;
- circuits spécialisés ;
- arrivées eau froide / eau chaude ;
- évacuations PVC ;
- vannes d’arrêt ;
- raccordements plomberie finaux ;
- raccordements électriques finaux ;
- carrelage de sol ;
- peinture générale ;
- démolition cuisine existante.
Ces éléments sont traités dans les autres lots.
Prestations conservées ou modifiées
| Code | Prestation |
|---|---|
| CUI-001 | Provision pour fourniture cuisine équipée |
| CUI-003 | Pose cuisine standard |
| CUI-004 | Pose cuisine premium / ajustements complexes |
| CUI-006 | Pose plan de travail stratifié |
| CUI-007 | Pose plan de travail pierre / compact / quartz |
| CUI-008 | Pose crédence carrelage |
| CUI-009 | Pose crédence premium |
| CUI-010 | Pose évier + robinetterie |
| CUI-011 | Pose électroménager |
Prestations retirées
Les prestations suivantes sont retirées :
| Ancien code | Prestation | Statut |
|---|---|---|
| CUI-002 | Pose cuisine linéaire simple | Absorbée par CUI-003 |
| CUI-005 | Pose meubles hauts | Retirée |
| CUI-012 | Raccordements finaux cuisine | Retirée |
3.1 Règle pour CUI-005
La pose des meubles hauts ne doit plus être une ligne séparée.
Elle est incluse dans :
ou :
3.2 Règle pour CUI-012
Les raccordements finaux cuisine sont retirés du lot Cuisine.
Ils doivent être traités dans :
pour les raccordements plomberie électroménager.
Et dans le lot Électricité pour les circuits et alimentations :
Détermination du linéaire cuisine
7.1 Priorité de calcul
Priorité 1 :
kitchen_linear_m = client_provided_kitchen_linear_m
Priorité 2 :
kitchen_linear_m = detected_kitchen_linear_m_from_plan
Priorité 3 :
kitchen_linear_m = estimated_kitchen_linear_m_from_area
7.2 Estimation par surface
Si aucun linéaire n’est disponible, utiliser une table paramétrable.
Exemple de structure :
{
"kitchen_linear_m_estimation_by_area": {
"area_less_than_5m2": "configured_value",
"area_5_to_8m2": "configured_value",
"area_8_to_12m2": "configured_value",
"area_more_than_12m2": "configured_value"
}
}
Ne pas coder les valeurs en dur dans le moteur.
7.3 Statut de confiance
Si le linéaire est estimé :
{
"is_assumption": true,
"assumption_reason": "Linéaire cuisine estimé depuis la surface de la cuisine",
"user_validation_required": true
}
Si le linéaire est fourni par le client :
{
"is_assumption": false,
"confidence": 0.95
}Règles par niveau de qualité
8.1 Éco
Le moteur propose :
CUI-001 provision fourniture cuisine équipée gamme éco
CUI-003 pose cuisine standard
CUI-006 plan de travail stratifié
CUI-008 crédence carrelage si crédence prévue
CUI-010 évier + robinetterie
CUI-011 électroménager selon sélection ou hypothèse minimale
8.2 Standard
Le moteur propose :
CUI-001 provision fourniture cuisine équipée gamme standard
CUI-003 pose cuisine standard
CUI-006 ou CUI-007 selon plan de travail choisi
CUI-008 crédence carrelage
CUI-010 évier + robinetterie
CUI-011 électroménager
8.3 Premium
Le moteur propose :
CUI-001 provision fourniture cuisine équipée gamme premium
CUI-004 pose cuisine premium / ajustements complexes
CUI-007 plan de travail pierre / compact / quartz si produit choisi ou gamme premium
CUI-009 crédence premium si produit choisi
CUI-010 évier + robinetterie
CUI-011 électroménager
Le niveau premium ne doit pas créer automatiquement une crédence premium sans produit choisi ou scénario esthétique.
Règles anti-double comptage
10.1 Pose cuisine
Si CUI-004 est généré :
do not generate CUI-003
Si CUI-003 est généré :
do not generate CUI-004
10.2 Meubles hauts
CUI-005 est supprimé.
Les meubles hauts sont inclus dans :
CUI-003 or CUI-004
10.3 Raccordements finaux
CUI-012 est supprimé.
Les raccordements sont traités dans :
PLO-012
ELEC-007
ELEC-008
10.4 Plan de travail
Si CUI-007 est généré :
do not generate CUI-006
Si CUI-006 est généré :
do not generate CUI-007
10.5 Crédence
Si CUI-009 est généré :
do not generate CUI-008
Si CUI-008 est généré :
do not generate CUI-009
10.6 Évier
CUI-010 ne doit pas inclure les réseaux plomberie.
Les réseaux sont dans :
PLO-001
PLO-002
PLO-013
10.7 Électroménager
CUI-011 ne doit pas inclure :
ELEC specialized circuits
PLO appliance connections
Interactions avec les autres lots
11.1 Avec lot Électricité
Cuisine rénovée peut générer :
ELEC-007 circuit plaque cuisson
ELEC-008 circuits four / lave-vaisselle / autres appareils
ELEC-009 RJ45 si prévu
ELEC-010 TV si prévu
ELEC-026 alimentation cave à vin si prévue
11.2 Avec lot Plomberie
Cuisine rénovée peut générer :
PLO-001 alimentation EF/EC évier
PLO-002 évacuation évier
PLO-013 vannes d’arrêt évier
PLO-012 raccordement lave-vaisselle
11.3 Avec lot Sols
Le sol de cuisine est traité par le lot Sols.
Si cuisine carrelée :
SOL-016 SPEC sous carrelage cuisine
11.4 Avec lot Peinture
La crédence doit être exclue des surfaces de peinture.
Le lot Cuisine transmet :
{
"backsplash_area_m2": null,
"paint_exclusion_surface_m2": null
}
11.5 Avec lot Menuiserie
Si la cuisine est sur mesure complète ou assimilable à de la menuiserie haut de gamme :
route to custom joinery lot instead of standard kitchen lot
Gestion du niveau Éco / Standard / Premium
12.1 Éco
Créer par défaut :
CUI-001 provision cuisine équipée gamme éco
CUI-003 pose cuisine standard
CUI-006 plan de travail stratifié
CUI-008 crédence carrelage si crédence prévue
CUI-010 évier + robinetterie
CUI-011 électroménager selon hypothèse minimale
12.2 Standard
Créer par défaut :
CUI-001 provision cuisine équipée gamme standard
CUI-003 pose cuisine standard
CUI-006 ou CUI-007 selon produit
CUI-008 crédence carrelage
CUI-010 évier + robinetterie
CUI-011 électroménager
12.3 Premium
Créer par défaut :
CUI-001 provision cuisine équipée gamme premium
CUI-004 pose cuisine premium / ajustements complexes
CUI-007 plan de travail premium si produit choisi
CUI-009 crédence premium si produit choisi
CUI-010 évier + robinetterie
CUI-011 électroménager
Le niveau premium ne doit pas créer automatiquement :
- crédence premium sans produit ;
- plan de travail pierre sans produit ;
- électroménager haut de gamme non sélectionné.
Ces lignes doivent rester des provisions ou dépendre de la personnalisation.
Format de sortie attendu
Chaque ligne du lot Cuisine doit respecter ce format :
{
"lot": "Cuisine",
"code": "CUI-001",
"label": "Provision pour fourniture cuisine équipée",
"room_id": "room_3",
"room_name": "Cuisine",
"unit": "ml",
"quantity": 4.2,
"quantity_formula": "kitchen_linear_m",
"pricing_mode": "provision",
"source": "plan_detection_or_area_estimate",
"confidence": 0.70,
"is_assumption": true,
"assumption_reason": "Linéaire cuisine estimé depuis la surface de la cuisine",
"user_validation_required": true,
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour pose cuisine premium :
{
"lot": "Cuisine",
"code": "CUI-004",
"label": "Pose cuisine premium / ajustements complexes",
"unit": "ml",
"quantity": 4.2,
"source": "quality_level_premium",
"confidence": 0.80,
"is_assumption": true
}Règles de validation
Avant génération du lot Cuisine, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_kitchen_room": true,
"has_kitchen_area": true,
"has_quality_level": true,
"has_kitchen_linear_m_or_estimation": true
}
Si aucune cuisine n’est détectée :
do not generate kitchen lot
Si la cuisine est détectée mais le linéaire est estimé :
{
"is_assumption": true,
"user_validation_required": true,
"warning": "Linéaire cuisine estimé à confirmer"
}
Si la cuisine est ouverte sur séjour :
generate kitchen lot once only
Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| cuisine détectée | JSON écran 2 |
| surface cuisine | JSON écran 2 |
| pièce à rénover | écran 2 |
| niveau de qualité | écran 0 |
Automatiquement déduit
| Donnée | Source |
|---|---|
| linéaire cuisine | plan ou surface |
| provision fourniture cuisine | linéaire + gamme |
| pose standard ou premium | niveau qualité |
| plan de travail | gamme ou produit |
| crédence | gamme ou produit |
| évier + robinetterie | cuisine rénovée |
| électroménager | personnalisation ou hypothèse |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| linéaire cuisine exact | client |
| plan de travail pierre / quartz | produit choisi |
| crédence premium | produit choisi |
| électroménager exact | client |
| cuisine sur mesure complexe | personnalisation |
| cave à vin | personnalisation |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| détail meuble par meuble | trop lourd |
| nombre exact de caissons | remplacé par linéaire |
| marque cuisine | base produit / gamme |
| profondeur exacte meubles | base standard |
| détail quincaillerie | base produit |
| calepinage crédence détaillé | personnalisation ultérieure |
Règle produit finale
Le lot Cuisine doit appliquer la logique suivante :
1. Identifier la cuisine à rénover.
2. Calculer ou estimer le linéaire cuisine.
3. Générer une provision de fourniture cuisine équipée en mL.
4. Générer pose standard ou premium selon niveau de qualité.
5. Générer plan de travail selon gamme ou produit choisi.
6. Générer crédence carrelage ou premium selon gamme ou produit choisi.
7. Générer évier + robinetterie systématiquement si cuisine rénovée.
8. Générer pose électroménager selon personnalisation ou hypothèse.
9. Ne pas générer meubles hauts séparément.
10. Ne pas générer raccordements finaux cuisine.
11. Créer les dépendances vers plomberie, électricité, sols et peinture.
Le devis doit rester clair :
La cuisine est chiffrée au mètre linéaire pour la provision de fourniture et la pose. Les équipements, plans de travail, crédences et électroménagers sont ajustables dans la personnalisation.
Menuiserie intérieure / extérieure
Prestations du lot
source : base_prestations_bernadette_studio_lots_0_10.xlsx| Code | Prestation | Unité | Prix Éco HT | Prix Std HT | Prix Premium HT | TVA | Déclenchement |
|---|---|---|---|---|---|---|---|
MEN-001 | Pose porte intérieure | u | — | — | — | 10% | Règle définie + choix client |
MEN-003 | Remplacement poignées / quincaillerie | u | — | — | — | 10% | Choix client |
MEN-004 | Pose placard | ml/u | — | — | — | 10% | Règle définie + choix client |
MEN-006 | Dressing sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-007 | Bibliothèque sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-008 | Meuble TV sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-009 | Tête de lit sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-011 | Pose d’une porte atelier | u | — | — | — | 10% | Choix client |
MEN-012 | Pose d’une verrière sur mesure | m²/forfait | — | — | — | 10% | Choix client |
MEN-013 | Création placard MDF toute hauteur | ml/forfait | — | — | — | 10% | Choix client |
MEN-014 | Pose caissons dressing standard type PAX IKEA | u/ml | — | — | — | 10% | Choix client |
MEN-015 | Création étagères fixes, invisibles ou arrondies | ml/u | — | — | — | 10% | Choix client |
MEN-016 | Création bureau et rangements associés sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-017 | Création banquette sur mesure | ml/forfait | — | — | — | 10% | Choix client |
MEN-018 | Création buanderie sur mesure avec étagères | ml/forfait | — | — | — | 10% | Choix client |
MEN-019 | Provision coffrage MDF BEC | forfait | — | — | — | 10% | Choix client |
MEN-020 | Provision placard tableau électrique | forfait | — | — | — | 10% | Choix client |
MEN-021 | Forfait reprise des portes intérieures existantes | forfait/u | — | — | — | 10% | Choix client |
MEN-022 | Détalonnage porte d’entrée | u | — | — | — | 10% | Choix client |
MEN-023 | Remplacement fenêtres / portes-fenêtres | u/m² | — | — | — | 5,5% | Règle définie + choix client |
MEN-024 | Remplacement porte d’entrée | u | — | — | — | 10% | Choix client |
MEN-025 | Installation volet roulant | u | — | — | — | 5,5% | Choix client |
Données en entrée nécessaires
source : Spécification chiffrage.docxDonnées d’entrée utilisées
5.1 Données issues du JSON validé du plan
Le moteur utilise :
{
"rooms": [],
"subspaces": [],
"area_m2": null,
"length_m": null,
"width_m": null,
"perimeter_m": null,
"type": null,
"name": null,
"openings": [],
"doors": [],
"visual_evidence": {
"fixed_features": [],
"built_in_closets": [],
"technical_elements": []
},
"layout_fidelity": {}
}
5.2 Données issues de l’écran 0
Le moteur utilise :
{
"project_type": null,
"declared_total_surface_m2": null,
"declared_room_count": null,
"project_description": null,
"quality_level": null
}
5.3 Données issues de l’écran 2
Le moteur utilise :
{
"validated_rooms": [],
"rooms_to_renovate": [],
"room_type_overrides": [],
"door_replacement_status": [],
"validated_openings": [],
"validated_fixed_features": []
}
5.4 Données issues de la personnalisation
Le moteur peut recevoir :
{
"joinery_customization": {
"interior_doors_to_install": [],
"door_range": null,
"hardware_to_replace": [],
"closets_to_install": [],
"closet_range": null,
"custom_dressing_requested": false,
"custom_library_requested": false,
"custom_tv_unit_requested": false,
"custom_headboard_requested": false,
"atelier_door_requested": false,
"custom_glass_partition_requested": false,
"full_height_mdf_closet_requested": false,
"standard_dressing_boxes_requested": false,
"custom_shelves_requested": false,
"custom_desk_storage_requested": false,
"custom_bench_requested": false,
"custom_laundry_unit_requested": false,
"mdf_water_heater_boxing_requested": false,
"electrical_panel_closet_requested": false,
"existing_doors_repair_requested": false,
"entry_door_undercut_requested": false
}
}Nouveaux champs à créer
source : Spécification chiffrage.docxDonnées supplémentaires client
Aucune donnée client supplémentaire obligatoire n’est recommandée pour le MVP.
Les prestations courantes peuvent être générées depuis :
- les portes détectées ;
- les portes remplacées ;
- les placards détectés ;
- le niveau de qualité.
Les prestations sur mesure doivent être générées uniquement depuis :
- la personnalisation ;
- une demande explicite du client ;
- un scénario d’aménagement validé.
Si les dimensions exactes ne sont pas disponibles, les prestations sur mesure doivent être générées en provision.
Variables calculées
Avant de générer le lot Menuiserie, le moteur doit calculer :
{
"internal_door_count": null,
"interior_doors_to_install_count": null,
"doors_to_keep_count": null,
"hardware_replacement_count": null,
"closet_linear_m": null,
"closet_count": null,
"custom_dressing_linear_m": null,
"custom_library_linear_m": null,
"custom_tv_unit_linear_m": null,
"custom_headboard_linear_m": null,
"atelier_door_count": null,
"glass_partition_area_m2": null,
"mdf_closet_linear_m": null,
"standard_dressing_box_count": null,
"shelf_linear_m": null,
"custom_desk_linear_m": null,
"custom_bench_linear_m": null,
"custom_laundry_linear_m": null,
"mdf_boxing_provision_count": null,
"electrical_panel_closet_count": null,
"existing_door_repair_count": null,
"entry_door_undercut_count": null
}Règles détaillées par prestation
source : Spécification chiffrage.docxRègles par prestation
Pose d’une porte intérieure, déclinée en Eco, Standard ou Premium.
u
Créer si :
interior_doors_to_install[] exists
ou si le plan cible prévoit de nouvelles portes intérieures.
Créer aussi si le client demande le remplacement de portes intérieures.
Ne pas créer automatiquement si les portes existantes sont conservées.
quantity = count(interior_doors_to_install)
Déclinaison gamme
{
"door_range": "eco | standard | premium"
}
Règle :
if door_range is null:
door_range = quality_level
Effet de la gamme
| Gamme | Règle |
|---|---|
| Eco | porte intérieure simple |
| Standard | porte intérieure standard qualitative |
| Premium | porte intérieure haut de gamme ou finition supérieure |
Ne comprend pas :
- dépose ancienne porte ;
- peinture porte ;
- modification cloison ;
- création ouverture ;
- serrure spéciale ;
- porte atelier ;
- porte coulissante complexe si chiffrée ailleurs.
Anti-double comptage
Si MEN-011 porte atelier est générée :
do not generate MEN-001 for same opening
Remplacement des poignées ou de la quincaillerie de portes existantes.
u
Créer si :
hardware_to_replace[] exists
ou si le client demande de remplacer les poignées.
Créer aussi si les portes existantes sont conservées et qu’une option de rafraîchissement quincaillerie est sélectionnée.
quantity = count(hardware_to_replace)
Si le client demande un remplacement global :
quantity = count(doors_to_keep)
Ne comprend pas :
- remplacement porte ;
- peinture porte ;
- réparation huisserie ;
- serrure technique ;
- contrôle d’accès.
Pose d’un placard standard ou semi-standard, décliné en Eco, Standard ou Premium.
ml
ou :
u
selon base de prix.
Créer si :
closets_to_install[] exists
ou si le client demande la pose d’un placard.
Ne pas créer automatiquement uniquement parce qu’un placard existant est visible sur le plan.
Priorité 1 :
quantity = sum(closet_linear_m)
Priorité 2 :
quantity = count(closets_to_install)
Déclinaison gamme
{
"closet_range": "eco | standard | premium"
}
Règle :
if closet_range is null:
closet_range = quality_level
Ne comprend pas :
- dressing sur mesure ;
- placard MDF toute hauteur ;
- peinture ;
- éclairage intégré ;
- déplacement cloison ;
- travaux électriques.
Anti-double comptage
Si MEN-013 est généré :
do not generate MEN-004 for same closet zone
Création ou pose d’un dressing sur mesure.
ml
ou :
forfait
selon niveau de détail.
Créer uniquement si :
quality_level == "premium"
et si le client demande un dressing sur mesure.
custom_dressing_requested == true
Priorité 1 :
quantity = custom_dressing_linear_m
Priorité 2 :
quantity = 1 forfait
si dimensions non renseignées.
Interdiction
Ne jamais proposer MEN-006 en Eco ou Standard.
Ne comprend pas :
- éclairage intégré ;
- électricité ;
- miroir ;
- assise ;
- peinture murale ;
- modification cloison ;
- portes premium spécifiques si chiffrées séparément.
Création d’une bibliothèque sur mesure.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_library_requested == true
Priorité 1 :
quantity = custom_library_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- éclairage intégré ;
- prises ;
- peinture murale ;
- traitement acoustique ;
- fixation spéciale non prévue.
Création d’un meuble TV sur mesure.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_tv_unit_requested == true
Priorité 1 :
quantity = custom_tv_unit_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- télévision ;
- support TV mural ;
- prises ;
- éclairage LED ;
- raccordements électriques ;
- peinture.
Création d’une tête de lit sur mesure.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_headboard_requested == true
Priorité 1 :
quantity = custom_headboard_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- éclairage intégré ;
- prises ;
- chevets ;
- textile ;
- peinture murale ;
- revêtement décoratif.
Pose d’une porte atelier intérieure.
u
Créer uniquement si demandé par le client.
atelier_door_requested == true
ou si le plan cible prévoit une porte atelier.
quantity = count(atelier_doors)
Par défaut :
quantity = 1
si une demande globale est faite.
Anti-double comptage
Si MEN-011 est générée :
do not generate MEN-001 for same opening
Ne comprend pas :
- création ouverture ;
- modification cloison ;
- peinture ;
- verrière fixe ;
- serrurerie spécifique ;
- reprise sol.
Pose d’une verrière intérieure sur mesure.
m²
ou :
forfait
Créer uniquement si demandé par le client.
custom_glass_partition_requested == true
ou si le plan cible prévoit une verrière.
Priorité 1 :
quantity = glass_partition_area_m2
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- création cloison ;
- ouverture dans mur ;
- renfort structurel ;
- peinture ;
- électricité ;
- dépose ancienne cloison.
Création d’un placard sur mesure en MDF toute hauteur.
ml
ou :
forfait
Créer uniquement si demandé par le client.
full_height_mdf_closet_requested == true
Priorité 1 :
quantity = mdf_closet_linear_m
Priorité 2 :
quantity = 1 forfait
Anti-double comptage
Si MEN-013 est généré :
do not generate MEN-004 for same zone
Ne comprend pas :
- peinture laque si séparée ;
- éclairage intégré ;
- poignées premium si séparées ;
- électricité ;
- modification cloison.
Pose de caissons dressing standards de type PAX IKEA ou équivalent modulaire.
u
ou :
ml
Créer uniquement si demandé par le client.
standard_dressing_boxes_requested == true
Priorité 1 :
quantity = count(standard_dressing_boxes)
Priorité 2 :
quantity = standard_dressing_linear_m
Anti-double comptage
Si MEN-014 est généré :
do not generate MEN-006 for same dressing zone
Ne comprend pas :
- fourniture caissons si fournie par client ;
- dressing sur mesure ;
- portes coulissantes premium ;
- éclairage intégré ;
- fixation spécifique complexe.
Création d’étagères fixes, invisibles, arrondies ou décoratives.
ml
ou :
u
Créer uniquement si demandé par le client.
custom_shelves_requested == true
Priorité 1 :
quantity = shelf_linear_m
Priorité 2 :
quantity = count(custom_shelves)
Ne comprend pas :
- peinture / finition spéciale si séparée ;
- LED ;
- prises ;
- renfort structurel ;
- décoration.
Création d’un bureau sur mesure avec rangements intégrés.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_desk_storage_requested == true
Priorité 1 :
quantity = custom_desk_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- chaise ;
- éclairage ;
- prises ;
- réseau RJ45 ;
- peinture ;
- décoration.
Création d’une banquette sur mesure.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_bench_requested == true
Priorité 1 :
quantity = custom_bench_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- coussins ;
- tissu ;
- éclairage ;
- rangements intérieurs si non prévus ;
- peinture murale.
Création d’un agencement de buanderie sur mesure avec étagères.
ml
ou :
forfait
Créer uniquement si demandé par le client.
custom_laundry_unit_requested == true
Priorité 1 :
quantity = custom_laundry_linear_m
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- plomberie ;
- électroménager ;
- alimentation électrique ;
- plan de travail si séparé ;
- peinture.
Provision pour coffrage MDF d’un ballon d’eau chaude électrique ou équipement équivalent.
forfait
Créer uniquement si demandé par le client.
mdf_water_heater_boxing_requested == true
ou si la personnalisation indique un ballon à habiller en MDF.
quantity = 1
Type de prix
Cette prestation doit être marquée comme provision.
"pricing_mode": "provision"
Ne comprend pas :
- ballon d’eau chaude ;
- plomberie ;
- électricité ;
- ventilation technique ;
- trappe si séparée ;
- peinture / laque si séparée.
Provision pour création d’un placard ou habillage de tableau électrique.
forfait
Créer uniquement si demandé par le client.
electrical_panel_closet_requested == true
quantity = 1
Type de prix
Cette prestation doit être marquée comme provision.
"pricing_mode": "provision"
Ne comprend pas :
- tableau électrique ;
- déplacement tableau ;
- électricité ;
- ventilation technique ;
- peinture / laque si séparée.
Reprise légère des portes intérieures existantes conservées.
forfait
ou :
u
Créer uniquement si demandé par le client.
existing_doors_repair_requested == true
ou si le client choisit de conserver et reprendre les portes existantes.
Priorité 1 :
quantity = count(existing_doors_to_repair)
Priorité 2 :
quantity = 1 forfait
Ne comprend pas :
- peinture porte ;
- remplacement quincaillerie si MEN-003 séparé ;
- remplacement porte ;
- réparation lourde ;
- rabotage complexe ;
- serrure.
La peinture des portes reste traitée par :
Détalonnage de la porte d’entrée.
u
Créer uniquement si demandé par le client.
entry_door_undercut_requested == true
ou si la personnalisation ventilation le prévoit.
quantity = 1
Ne comprend pas :
- remplacement porte d’entrée ;
- serrure ;
- peinture ;
- seuil ;
- rabotage de toutes les portes ;
- modification bloc-porte ;
- certification acoustique ou coupe-feu.
Autres règles du lot
Règles métier de chiffrage pour moteur de devis
Version mise à jour avec déclinaisons Eco / Standard / Premium et prestations sur demande
Objectif du lot
Le lot Menuiserie couvre les prestations liées :
- aux portes intérieures ;
- aux poignées et quincailleries ;
- aux placards ;
- aux dressings ;
- aux agencements sur mesure ;
- aux meubles intégrés ;
- aux reprises de portes existantes ;
- aux détalonnages ;
- aux coffrages MDF spécifiques.
Ce lot ne doit pas chiffrer :
- peinture des portes ;
- peinture des boiseries ;
- cloisons BA13 ;
- coffrages techniques en placo ;
- dépose des portes existantes ;
- électricité ;
- plomberie ;
- pose cuisine standard ;
- meubles de salle de bain standards.
Prestations conservées ou modifiées
| Code | Prestation |
|---|---|
| MEN-001 | Pose porte intérieure — déclinaison Eco / Standard / Premium |
| MEN-003 | Remplacement poignées / quincaillerie |
| MEN-004 | Pose placard — déclinaison Eco / Standard / Premium |
| MEN-006 | Dressing sur mesure — uniquement en Premium |
| MEN-007 | Bibliothèque sur mesure |
| MEN-008 | Meuble TV sur mesure |
| MEN-009 | Tête de lit sur mesure |
Prestations retirées
| Ancien code | Prestation | Statut |
|---|---|---|
| MEN-002 | Pose porte intérieure premium | Retirée |
| MEN-005 | Dressing standard | Retirée |
| MEN-010 | Habillage technique / cache gaine | Retirée |
3.1 Règle pour MEN-002
MEN-002 est supprimée car la gamme premium est désormais portée par MEN-001 via l’attribut :
{
"door_range": "eco | standard | premium"
}
3.2 Règle pour MEN-005
MEN-005 est supprimée.
Les dressings standards type caissons modulaires sont traités par :
Les dressings sur mesure sont traités par :
3.3 Règle pour MEN-010
MEN-010 est supprimée.
Les coffrages techniques en placo restent traités par :
Les coffrages MDF spécifiques demandés par le client sont traités par :
Prestations ajoutées
Toutes les prestations ajoutées sont à la demande du client.
| Code | Prestation |
|---|---|
| MEN-011 | Pose d’une porte atelier |
| MEN-012 | Pose d’une verrière sur mesure |
| MEN-013 | Création de placard sur mesure en MDF toute hauteur |
| MEN-014 | Pose de caissons dressing standard type PAX IKEA |
| MEN-015 | Création d’étagères fixes, invisibles ou arrondies |
| MEN-016 | Création d’un bureau et rangements associés sur mesure |
| MEN-017 | Création d’une banquette sur mesure |
| MEN-018 | Création d’une buanderie sur mesure avec étagères |
| MEN-019 | Provision coffrage MDF BEC |
| MEN-020 | Provision placard tableau électrique |
| MEN-021 | Forfait reprise des portes intérieures existantes |
| MEN-022 | Détalonnage de la porte d’entrée |
Règles générales
8.1 Ne pas inventer de menuiserie sur mesure
Le moteur ne doit jamais générer automatiquement :
- bibliothèque sur mesure ;
- meuble TV sur mesure ;
- tête de lit sur mesure ;
- bureau sur mesure ;
- banquette ;
- buanderie sur mesure ;
- verrière ;
- porte atelier ;
- placard MDF toute hauteur.
Ces prestations doivent venir d’une demande client ou d’une personnalisation.
8.2 Les prestations sur mesure sont des provisions si dimensions incertaines
Si les dimensions ne sont pas disponibles :
{
"pricing_mode": "provision",
"is_assumption": true,
"user_validation_required": true
}
8.3 Les portes et placards peuvent être déclinés en gamme
Les prestations MEN-001 et MEN-004 doivent porter un attribut de gamme :
{
"range": "eco | standard | premium"
}
Si aucune gamme n’est sélectionnée :
range = quality_level
Règles anti-double comptage
10.1 Portes
Si MEN-011 porte atelier est générée :
do not generate MEN-001 for same opening
Si portes conservées :
do not generate MEN-001
Créer éventuellement :
MEN-021 reprise portes existantes
PEI-009 peinture portes
MEN-003 remplacement quincaillerie
10.2 Placards
Si MEN-013 placard MDF toute hauteur est généré :
do not generate MEN-004 for same zone
Si MEN-014 caissons dressing standard est généré :
do not generate MEN-006 for same zone
10.3 Coffrages
Les coffrages techniques placo sont en lot 2 :
PLA-008
Les coffrages MDF spécifiques demandés sont en lot Menuiserie :
MEN-019
10.4 Peinture
La peinture ou finition des menuiseries n’est pas incluse par défaut.
Elle doit être traitée dans le lot Peinture ou dans une finition produit spécifique.
10.5 Électricité
Les éclairages intégrés, LED, prises ou alimentations électriques intégrées aux meubles ne sont pas incluses par défaut.
Elles doivent créer des dépendances vers le lot Électricité.
Interactions avec les autres lots
11.1 Avec lot 1 — Démolition
Dépose de portes existantes :
11.2 Avec lot 2 — Cloisons
Création ou modification d’ouvertures :
Lot 2 or structural lot handles opening/wall modification
11.3 Avec lot 3 — Électricité
Agencements avec LED, prises ou éclairage intégré peuvent déclencher :
ELEC-012 ruban LED
ELEC-003 prise 16A
ELEC-009 RJ45
11.4 Avec lot 7 — Peinture
Portes ou boiseries conservées :
PEI-009
Surfaces MDF à peindre :
PEI lot to handle paint finish unless included in joinery product
11.5 Avec lot CVC / Plomberie
Coffrage MDF BEC :
must preserve technical access and ventilation if required
Le lot Menuiserie ne remplace pas les contraintes techniques des lots plomberie, électricité ou CVC.
Gestion du niveau Éco / Standard / Premium
12.1 Éco
Peut proposer :
MEN-001 porte intérieure gamme éco si remplacement portes demandé
MEN-004 placard gamme éco si placard demandé
MEN-014 caissons dressing standard si demandé
Ne pas proposer automatiquement de sur mesure.
12.2 Standard
Peut proposer :
MEN-001 porte intérieure gamme standard si remplacement portes demandé
MEN-004 placard gamme standard si placard demandé
MEN-014 caissons dressing standard si demandé
Sur mesure uniquement si client le demande, sauf MEN-006 qui reste Premium.
12.3 Premium
Peut proposer :
MEN-001 porte intérieure gamme premium si remplacement portes demandé
MEN-004 placard gamme premium si placard demandé
MEN-006 dressing sur mesure si demandé
MEN-007 à MEN-020 si demandé
Le niveau Premium ne doit pas créer automatiquement tous les agencements sur mesure.
Format de sortie attendu
Chaque ligne du lot Menuiserie doit respecter ce format :
{
"lot": "Menuiserie intérieure / Agencement",
"code": "MEN-001",
"label": "Pose porte intérieure",
"room_id": "room_2",
"room_name": "Chambre",
"unit": "u",
"quantity": 1,
"quantity_formula": "count(interior_doors_to_install)",
"pricing_mode": "unit_price",
"source": "client_personalization_or_target_layout",
"confidence": 0.85,
"is_assumption": false,
"assumption_reason": null,
"user_validation_required": false,
"range": "standard",
"included": [],
"excluded": [],
"dependencies": [],
"warnings": []
}
Pour sur mesure sans dimensions :
{
"lot": "Menuiserie intérieure / Agencement",
"code": "MEN-007",
"label": "Bibliothèque sur mesure",
"unit": "forfait",
"quantity": 1,
"pricing_mode": "provision",
"source": "client_personalization",
"confidence": 0.50,
"is_assumption": true,
"assumption_reason": "Dimensions non renseignées, provision à confirmer",
"user_validation_required": true
}Règles de validation
Avant génération du lot Menuiserie, le moteur doit vérifier :
{
"has_validated_rooms": true,
"has_openings_or_doors": true,
"has_quality_level": true
}
Si aucune porte, placard ou demande de menuiserie n’est détectée :
do not generate joinery lot
Si prestation sur mesure demandée mais dimensions absentes :
{
"pricing_mode": "provision",
"user_validation_required": true
}Résumé des données nécessaires
Obligatoire
| Donnée | Source |
|---|---|
| pièces validées | JSON écran 2 |
| portes / ouvertures détectées | JSON validé |
| niveau de qualité | écran 0 |
| demandes menuiserie | personnalisation |
Automatiquement déduit
| Donnée | Source |
|---|---|
| gamme porte | niveau de qualité |
| gamme placard | niveau de qualité |
| nombre portes existantes | JSON plan |
| portes conservées ou remplacées | lot menuiserie / écran 2 |
| quincaillerie | portes conservées + demande client |
Personnalisation uniquement
| Prestation | Source |
|---|---|
| porte atelier | demande client |
| verrière sur mesure | demande client |
| placard MDF toute hauteur | demande client |
| dressing PAX | demande client |
| étagères | demande client |
| bureau sur mesure | demande client |
| banquette | demande client |
| buanderie sur mesure | demande client |
| coffrage MDF BEC | demande client |
| placard tableau électrique | demande client |
| reprise portes existantes | demande client |
| détalonnage porte entrée | demande client |
Non demandé au client en MVP
| Donnée | Raison |
|---|---|
| détail caisson par caisson | trop lourd |
| plans atelier complets | phase conception |
| épaisseur exacte MDF | base technique |
| quincaillerie détaillée | base produit |
| teinte / finition finale | personnalisation ou lot peinture |
| calepinage complet | phase conception |
| charge admissible étagères | validation technique |
Règle produit finale
Le lot Menuiserie doit appliquer la logique suivante :
1. Identifier les portes et ouvertures existantes.
2. Générer MEN-001 uniquement si portes à remplacer ou nouvelles portes prévues.
3. Décliner MEN-001 en Eco, Standard ou Premium.
4. Générer MEN-003 si remplacement poignées / quincaillerie demandé.
5. Générer MEN-004 si placard demandé, décliné en gamme.
6. Générer MEN-006 uniquement en Premium et uniquement si dressing sur mesure demandé.
7. Générer les agencements sur mesure uniquement à la demande du client.
8. Générer les prestations ajoutées uniquement si personnalisation explicite.
9. Passer en provision toutes les prestations sur mesure sans dimensions fiables.
10. Créer les dépendances vers peinture, électricité, plomberie, CVC ou cloisons si nécessaire.
Le devis doit rester clair :
Les prestations de menuiserie courante sont générées selon les portes, placards et choix de gamme. Les agencements sur mesure ne sont ajoutés que sur demande du client ou via personnalisation.
| Code | Prestation | Unité | Règle de métré | Gamme | Type |
|---|---|---|---|---|---|
| PRD-001 | Fourniture parquet | m² | surface parquet + taux perte | Éco / Standard / Premium | Fourniture |
| PRD-002 | Fourniture carrelage sol | m² | surface carrelage + taux perte | Éco / Standard / Premium | Fourniture |
| PRD-003 | Fourniture faïence murale | m² | surface faïence + taux perte | Éco / Standard / Premium | Fourniture |
| PRD-004 | Fourniture peinture | L / m² | surface murs/plafonds | Éco / Standard / Premium | Fourniture |
| PRD-005 | Fourniture robinetterie | u | nombre équipements | Éco / Standard / Premium | Fourniture |
| PRD-006 | Fourniture meuble vasque | u | nombre meubles | Éco / Standard / Premium | Fourniture |
| PRD-007 | Fourniture receveur douche | u | nombre receveurs | Éco / Standard / Premium | Fourniture |
| PRD-008 | Fourniture WC | u | nombre WC | Éco / Standard / Premium | Fourniture |
| PRD-009 | Fourniture cuisine | forfait / ml | selon configuration | Éco / Standard / Premium | Fourniture |
| PRD-010 | Fourniture électroménager | u | nombre appareils | Éco / Standard / Premium | Fourniture |
| PRD-011 | Fourniture luminaires | u | nombre luminaires | Éco / Standard / Premium | Fourniture |
| PRD-012 | Fourniture appareillage électrique | point | nombre points | Éco / Standard / Premium | Fourniture |
| Code | Prestation | Unité | Règle de métré | Gamme | Type |
|---|---|---|---|---|---|
| ALE-001 | Coefficient étage sans ascenseur | % | selon étage | Tous | Aléa |
| ALE-002 | Coefficient accès difficile | % | selon largeur accès / stationnement | Tous | Aléa |
| ALE-003 | Coefficient copropriété sensible | % | selon contraintes immeuble | Tous | Aléa |
| ALE-004 | Coefficient logement occupé | % | si chantier en site occupé | Tous | Aléa |
| ALE-005 | Coefficient urgence planning | % | délai compressé | Tous | Aléa |
| ALE-006 | Provision imprévus rénovation ancien | % | selon fiabilité plan + visite | Tous | Aléa |
| ALE-007 | Majoration premium finition | % | selon niveau de détail attendu | Premium | Aléa |
| ALE-008 | Minoration chiffrage économique | % | selon niveau éco | Éco | Aléa |
Structure minimale à donner aux développeurs
Pour chaque prestation, je recommande ce modèle de données :
| Champ technique | Exemple |
|---|---|
| code | SOL-005 |
| lot | Sols |
| label_fr | Pose parquet contrecollé flottant |
| unit | m² |
| quantity_source | surface_sol_piece |
| pricing_type | pose |
| eligible_ranges | eco, standard, premium |
| default_range | standard |
| requires_product | true |
| linked_product_category | parquet |
| waste_rate_default | 7 % |
| complexity_factor_available | true |
| regional_factor_available | true |
| company_custom_price_allowed | true |
| client_visible | true |
| internal_note | hors dépose et ragréage |
Règle fondamentale à intégrer
Une ligne de devis doit toujours distinguer :
| Élément | Exemple |
|---|---|
| Dépose | dépose ancien parquet |
| Préparation support | ragréage |
| Fourniture produit | parquet choisi |
| Pose | pose parquet |
| Finitions | plinthes, seuils |
| Aléa | étage, accès, ancien |