{"description":"Scène décrite en JSON, coordonnées plan (x,y) en millimètres, hauteurs en millimètres. Repère : x = droite, y = profondeur, z = hauteur verticale.","workflow_agent":"1) lire ce schéma  2) composer la scène  3) POST /cao/verifier (gratuit, sans clé)  4) corriger alertes critiques (intégrité.correctifs / POST /cao/integrite appliquer:true)  5) /cao/rendu puis /cao/pdf ou /cao/dxf, OU /cao/visite/plan puis Visite 4K. Ne livrez pas planche ni visite avec alertes critiques.","champs":{"murs":{"type":"liste d'objets","requis":false,"note":"MULTI-ÉTAGES : `z` (base du mur, défaut 0) EMPILE des étages — un R+1 = les mêmes murs répétés avec z = hauteur du RDC (ex. 2600). Posez `toitures` au sommet.","objet":{"x1":"nombre (mm) — requis","y1":"nombre (mm) — requis","x2":"nombre (mm) — requis","y2":"nombre (mm) — requis","hauteur":"nombre (mm) — optionnel, défaut 2500","epaisseur":"nombre (mm) — optionnel, défaut 200","z":"nombre (mm) — optionnel, défaut 0 — altitude de la BASE du mur (multi-étages)","existant":"booléen — optionnel — mur de la construction EXISTANTE (extension) : /cao/permis ne compte comme créé que ce qui s'y ajoute","materiau":"texte — optionnel — matériau unique (couche unique de toute l'épaisseur)","composition":"texte — optionnel — clé dans compositions{} (sinon genre déduit : mur_exterieur, refend, cloison…)","couches":"liste [{cle, epaisseur?}] — optionnel — composition INLINE ; la couche sans épaisseur prend le reste"}},"compositions":{"type":"objet","requis":false,"note":"Compositions de parois DÉCLARÉES par le projet. Une clé qui match le genre (mur_exterieur, refend, cloison, plancher, toiture…) retire le drapeau Hypothese. Sinon composition type, marquée comme telle.","objet":{"libelle":"texte","couches":"liste [{cle, epaisseur?}] — cle : enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omettre epaisseur sur la couche porteuse."}},"georef":{"type":"objet","requis":false,"note":"Lambert-93 (EPSG:2154) pour IfcMapConversion. Scale 0,001 (mm → m). N'inventez pas d'est/nord : omis = origine 0.","objet":{"crs":"texte — défaut EPSG:2154","est":"mètres — easting, omis si inconnu","nord":"mètres — northing, omis si inconnu","altitude":"mètres","orientation":"degrés — gisement du X projet depuis l'Est, sens trigo"}},"escaliers":{"type":"liste d'objets","requis":false,"note":"Escalier droit dimensionné selon la LOI DE BLONDEL (2×hauteur de marche + giron ≈ 630 mm) : donnez le dénivelé `hauteur` d'étage, le nombre de marches se calcule seul (~17,5 cm/marche). Rendu DXF/aperçu/PDF ; métrés indiquent la conformité.","objet":{"x":"nombre (mm) — requis — départ de la volée (pied de l'escalier)","y":"nombre (mm) — requis","hauteur":"nombre (mm) — optionnel, défaut 2600 — dénivelé total à monter (hauteur d'étage)","largeur":"nombre (mm) — optionnel, défaut 1000 — emmarchement","rotation":"degrés — optionnel, défaut 0 — direction de la montée","finition":"texte — optionnel, défaut chene — aspect 3D : acier, beton, bois_clair, chene, chene_clair, frene, hetre, marbre, metal_noir, noyer, pierre, pin","finition_rampe":"texte — optionnel — finition du garde-corps rampant (mêmes valeurs que garde_corps.finition) ; par défaut assortie à la volée : escalier bois → rampe du même bois, béton/métal → noir mat","rampe":"texte — optionnel, défaut droite — côté du garde-corps rampant, vu en montant : droite | gauche | deux | aucune. « aucune » pour une volée entre deux murs (cage d'escalier). Ne jamais doubler la rampe par un garde_corps[] parallèle (alerte garde_corps_double_rampe)","giron":"nombre (mm) — optionnel — profondeur de marche (défaut : Blondel)","nb_marches":"entier — optionnel — sinon calculé (~17,5 cm/marche)","z":"nombre (mm) — optionnel, défaut 0 — altitude du pied (multi-étages)","groupe":"texte — optionnel — même valeur pour les volées d'un escalier TOURNANT et pour son palier (boites[] de rôle « palier ») : audit, trémie, IFC (un seul IfcStair), visite et réimport le traitent comme UN ouvrage. Le plus simple : l'opération copilote poser_escalier","forme":"texte — optionnel — escalier_droit | escalier_quart_tournant | escalier_demi_tournant (GET /api/v1/cao/familles, clé « escaliers ») ; donne le type IFC QUARTER_TURN_STAIR / HALF_TURN_STAIR"}},"garde_corps":{"type":"liste d'objets","requis":false,"note":"Garde-corps le long d'un segment, à PLAT. NF P01-012 : ≥1000 mm (plan), ≥900 mm au nez de CHAQUE marche (`/cao/integrite` le propose en correctif). Rendu DXF/PDF/IFC. À poser UNIQUEMENT là où la chute atteint 1 m (bord de trémie ouvert, mezzanine, balcon, terrasse) — jamais le long de la rampe d'une volée (elle protège déjà), jamais pour tenir des meubles à distance (paliers et trémies sont interdits au mobilier). Une trémie longée par une circulation se ferme de préférence par une cloison de cage (murs[]) : escalier « encloisonné » des maisons de ville.","objet":{"x1":"nombre (mm) — requis","y1":"nombre (mm) — requis","x2":"nombre (mm) — requis","y2":"nombre (mm) — requis","hauteur":"nombre (mm) — optionnel, défaut 1000 — ≥900 le long d'une volée (voir note)","z":"nombre (mm) — optionnel, défaut 0 — altitude de la base de ce segment","finition":"texte — optionnel, défaut noir_mat — aspect 3D : acier_brut, anthracite, blanc, bois_chene, bois_clair, bois_hetre, bronze, galva, gris_sable, inox, laiton, noir_mat, noyer, verre, verre_depoli, verre_feuillete"}},"ascenseurs":{"type":"liste d'objets","requis":false,"note":"Ascenseur = gaine (4 parois, avant ouvert = porte) + cabine, desservant plusieurs `niveaux` empilés. Défauts ACCESSIBILITÉ NF EN 81-70 (cabine 1100×1400 mm, porte 900 mm). Rendu DXF/aperçu/PDF (symbole ASC), métrés signalent la conformité PMR. Placez la cabine à côté de la cage d'escalier pour une circulation complète.","objet":{"x":"nombre (mm) — requis — centre de la cabine","y":"nombre (mm) — requis","largeur":"nombre (mm) — optionnel, défaut 1100 (cabine, axe x local)","profondeur":"nombre (mm) — optionnel, défaut 1400 (cabine, axe y local)","hauteur":"nombre (mm) — optionnel, défaut 2600 — hauteur desservie PAR niveau","niveaux":"entier — optionnel, défaut 2 — nombre de niveaux desservis (gaine = hauteur × (niveaux-1))","porte":"nombre (mm) — optionnel, défaut 900 (≥ 800 = PMR)","rotation":"degrés — optionnel, défaut 0 — orientation (la porte donne côté +y local)","z":"nombre (mm) — optionnel, défaut 0 — altitude de la base (niveau le plus bas desservi)"}},"boites":{"type":"liste d'objets","requis":false,"objet":{"x":"nombre (mm, centre) — requis","y":"nombre (mm, centre) — requis","l":"nombre (mm, longueur) — requis","p":"nombre (mm, profondeur) — requis","h":"nombre (mm, hauteur) — requis","z":"nombre (mm, altitude de la base) — optionnel, défaut 0","rotation":"nombre (degrés, autour de l'axe vertical) — optionnel, défaut 0","role":"texte — optionnel — « palier » : palier d'un escalier tournant, dessus à l'altitude de départ de sa seconde volée ; avec `groupe`, il est porté par ses volées (pas une dalle flottante), compris dans la trémie et exporté en IfcSlab LANDING","groupe":"texte — optionnel — avec role « palier » : le `groupe` des volées qu'il relie"}},"plan":{"type":"liste d'objets","requis":false,"objet":{"x1":"mm","y1":"mm","x2":"mm","y2":"mm"}},"cercles":{"type":"liste d'objets","requis":false,"objet":{"x":"mm","y":"mm","r":"mm"}},"ouvertures":{"type":"liste d'objets","requis":false,"note":"Portes/fenêtres incrustées sur un mur — rendues par /cao/pdf (élévations + vue axonométrique), la Visite 4K / visite virtuelle (baies réellement percées) et /cao/ifc (IfcDoor/IfcWindow). Sans effet sur dxf/metres.","objet":{"mur":"entier — requis — index du mur porteur dans murs[] (0 = premier)","position":"nombre (mm) — requis — distance depuis le début du mur (x1,y1)","largeur":"nombre (mm) — requis","hauteur":"nombre (mm) — requis","z":"nombre (mm, allège RELATIVE à la base du mur) — optionnel, défaut 900 (fenêtre) ou 0 (porte). Sur un mur R+1 (z=2700), z:900 place le bas de l'ouvrant à 3600 mm du sol.","type":"'fenetre' | 'porte' — optionnel, défaut 'fenetre'","vitree":"booléen — optionnel, portes seulement — porte VITRÉE (porte-fenêtre) : vantaux vitrés en visite, vitrage compté dans l'éclairement naturel de la pièce quand elle donne dehors. Toute porte de plus de 1 100 mm a DEUX vantaux.","famille":"texte — optionnel — famille paramétrique (GET /api/v1/cao/familles) : porte_battante, porte_entree, fenetre_deux_vantaux… La baie doit alors avoir les cotes que la famille donne ; exportée en IFC comme un type à géométrie partagée (dormant, vantaux, mode d'ouverture).","parametres":"objet — optionnel, avec famille — ex. {vantail: 830, sens: 'gauche'} ; une valeur hors série ou hors bornes est une alerte critique"}},"toitures":{"type":"liste d'objets","requis":false,"note":"Rendues par /cao/pdf, la Visite 4K / visite virtuelle et /cao/ifc. SANS ce champ : un toit plat est auto-généré sur l'emprise de TOUS les murs (comportement historique). AVEC ce champ : composez librement (plusieurs entrées = plusieurs pans, ex. un bâtiment en L ou une lucarne en plus du toit principal).","types":["chien_assis","conique","deux_pans","dome","personnalise","plat","quatre_pans"],"objet_commun":{"type":"un des types ci-dessus — optionnel, défaut 'plat'","murs":"liste d'index dans murs[] — optionnel — limite l'emprise auto à ces murs (sinon : tous les murs). Ignoré si `polygone` fourni.","polygone":"liste de points {x,y} (mm) — optionnel — emprise personnalisée explicite, remplace le rectangle auto-calculé (tout type sauf 'chien_assis')","z":"nombre (mm) — optionnel — altitude de la base (défaut : sommet des murs concernés)","debord":"nombre (mm) — optionnel, défaut 200 — débord de toit sur l'emprise auto","epaisseur":"nombre (mm) — optionnel, défaut 180 — épaisseur de dalle ('plat' uniquement)","hauteur_faitage":"nombre (mm) — optionnel, défaut 1200 (600 pour 'chien_assis') — hauteur du faîtage/sommet/dôme au-dessus de z","rotation":"degrés — optionnel, défaut 0 — orientation du faîtage ('deux_pans' uniquement ; 0 = faîtage parallèle à l'axe X)","rayon":"nombre (mm) — optionnel — rayon de base ('conique'/'dome' ; défaut déduit de l'emprise)","segments":"entier — optionnel, défaut 16 — nombre de facettes ('conique'/'dome')","apex":"{x,y,[z]} (mm) — optionnel ('personnalise') — sommet à une position libre (défaut : centroïde de `polygone` + hauteur_faitage). Sans apex, 'personnalise' se comporte comme 'plat'."},"objet_chien_assis":{"type":"'chien_assis'","x":"nombre (mm) — centre","y":"nombre (mm) — centre","z":"nombre (mm) — base — À POSITIONNER sur le pan du toit porteur","largeur":"nombre (mm), défaut 1000","profondeur":"nombre (mm), défaut 800","hauteur":"nombre (mm), défaut 900 — hauteur de la façade avant","hauteur_faitage":"nombre (mm), défaut 600 — au-dessus de `hauteur`"}},"electricite":{"type":"liste d'objets","requis":false,"note":"Symboles électricité. PRÉSENT dans TOUS les rendus : calque `ELEC` du DXF (cercle + repère), aperçu `render` (SVG/PNG), plan technique et métrés de la planche `/cao/pdf`, et comptage par type dans `/cao/metres`. Position : attaché à un mur (`mur`+`position`, comme les ouvertures) ou libre (`x`,`y`).","types":["detecteur_fumee","differentiel","interrupteur","luminaire","prise","prise_rj45","prise_spe","tableau_electrique","va_et_vient","vmc"],"objet":{"type":"un des types ci-dessus — optionnel, défaut 'prise'","mur":"entier — optionnel — index dans murs[] (position par mur)","position":"nombre (mm) — avec `mur` — distance depuis (x1,y1)","x":"nombre (mm) — sans `mur` — position libre","y":"nombre (mm)","z":"nombre (mm) — optionnel — défaut selon le type (NF C 15-100 : prises 30 cm, interrupteurs 110 cm ; luminaire/detecteur_fumee/vmc = plafond). ⚠️ DEUX SENS : attaché à un mur (`mur`), `z` est RELATIF à la base du mur ; libre (`x`,`y`), c'est une altitude ABSOLUE — au R+1 d'une maison à 2,80 m, une prise libre à 30 cm du plancher prend z = 3100. Les contrôles NF C 15-100 jugent, dans les deux cas, la hauteur au-dessus du plancher."}},"mobilier":{"type":"liste d'objets","requis":false,"note":"MEUBLES ET DÉCORATION — de vrais objets (parasol, arbre, clôture, WC, canapé, tapis, plante…), pas des boîtes : un parasol a un mât, une toile à pans et un socle. Rendu en VISITE 4K, planche PDF, DXF et métrés. N'utilisez `boites[]` que pour un volume générique. Catalogue + cotes par défaut (gratuit, sans clé) : GET /api/v1/cao/mobilier. Zones INTERDITES (alertes critiques) : débattement des portes (mobilier_zone_porte), paliers de départ et d'arrivée des escaliers — largeur de la volée × max(1 m, largeur) — et trémies (mobilier_zone_escalier).","types":["abri_jardin","arbre","arbre_conifere","armoire","baignoire","banc_jardin","barbecue","bassin","berline","bibliotheque","bureau","cadre_mural","canape","canape_angle","chaise","citadine","cloture_bois","cloture_fer","cloture_grillage","colonne_cuisine","commode","cuisine","cuisine_moderne","douche","evier","fauteuil","figurant","figurant_assis","four","haie","hotte","ilot_cuisine","jardiniere","lampadaire","lavabo","lave_linge","linge_lit","lit","livres","luminaire","meuble_tv","miroir","parasol","pergola","plante_interieur","plaque_cuisson","portail","porte_manteau","refrigerateur","rideaux","salon_jardin","suv","table","table_basse","table_chevet","tapis","television","terrasse","transat","utilitaire","vaisselle","wc"],"objet":{"type":"un des types du catalogue — REQUIS","x":"nombre (mm, centre) — requis","y":"nombre (mm, centre) — requis","z":"nombre (mm, altitude du SOL sous l'objet) — optionnel, défaut 0. Sur une terrasse (type 'terrasse'), le sol est le DESSUS du platelage : z de la terrasse + son h (40 mm par défaut). Objets accrochés (cadre_mural, miroir, rideaux) : `z` = bas de l'objet, en altitude absolue.","rotation":"degrés — optionnel, défaut 0. À rotation 0, un meuble à façade a le DOS côté −y et fait face à +y (tête de lit, dossier de canapé ou de fauteuil, fond d'armoire, de commode ou de meuble TV, dos du réfrigérateur ou de la cuisinière) ; 90 → dos côté +x, 180 → +y, 270 → −x. Le côté du dos de chaque article : `dos_a_rotation_0` dans GET /api/v1/cao/mobilier. Un lit se pose la TÊTE contre un mur plein (alerte lit_tete_sans_mur).","l, p, h, d":"nombres (mm) — optionnels : dimensions sur mesure. Par défaut, cotes courantes du catalogue (canapé 3 places 2100×950, lit double 1600×2000, parasol Ø3000…). `l` = LARGEUR, le long du dos du meuble ; `p` = PROFONDEUR, du dos vers l'avant — un lit se cote l = 1600, p = 2000, tête de lit au dos. Terrasse : `w` = profondeur (alias de `p`).","materiau":"texte — optionnel — force la matière (bois_chene, tissu_gris…)","label":"texte — optionnel — nom affiché"}},"plomberie":{"type":"liste d'objets","requis":false,"note":"Appareils sanitaires. PRÉSENT dans le DXF (calque `PLOMB`, empreinte + repère), l'aperçu `render` (SVG/PNG), la planche `/cao/pdf` et le comptage par type de `/cao/metres`. Les types qui ont un modèle 3D (wc, lavabo, douche, baignoire, evier) sont DÉSORMAIS aussi posés en volume dans la Visite 4K — une salle de bain n'est plus vide. Même positionnement que electricite (mur+position ou x,y).","types":["baignoire","chauffe_eau","compteur_eau","douche","evier","lavabo","module_hydraulique","pac_exterieure","radiateur","wc"],"objet":{"type":"un des types ci-dessus — optionnel, défaut 'evier'","mur":"entier — optionnel","position":"nombre (mm) — avec `mur`","x":"nombre (mm)","y":"nombre (mm)","z, l, p, h":"nombres (mm) — optionnels, défauts selon le type (dimensions commerciales usuelles). `z` suit la règle d'electricite : relatif à la base du mur si `mur`, sinon altitude absolue du sol sous l'appareil.","rotation":"degrés — optionnel, défaut 0"}},"reseaux":{"type":"liste d'objets","requis":false,"note":"Canalisations de plomberie. PRÉSENT dans le DXF (calque `PLOMB_RESEAUX`, polylignes + repère de type), l'aperçu `render` (SVG/PNG), la planche `/cao/pdf` et les mètres linéaires par type de `/cao/metres`.","types":["chauffage","ec","ef","ep","eu","ev"],"objet":{"type":"un des types ci-dessus — optionnel, défaut 'ef'","diametre":"nombre (mm) — optionnel — défaut selon le type","z":"mm — optionnel : niveau (plancher) du tracé ; le plan technique ne le dessine qu'à cet étage. Sans z, tracé type reporté sur chaque étage.","trace":"liste d'au moins 2 points {x,y} (mm) — tracé libre. Alias segment droit : x1/y1/x2/y2 (mm), comme murs/plan/garde_corps.","pente_pct":"nombre (%) — optionnel — pente d'une canalisation gravitaire (NF DTU 60.11 : 1 à 3 %), du premier point vers le dernier ; l'IFC la dessine en pente."}},"structure":{"type":"objet","requis":false,"note":"Générée par POST /cao/regles (prédimensionnement indicatif, à faire valider par un bureau d'études) : `linteaux[]` {mur, ouverture, x1, y1, x2, y2, z, hauteur, epaisseur} et `fondations[]` {mur, x1, y1, x2, y2, z, largeur, hauteur}. Exportée en IFC (IfcBeam LINTEL, IfcFooting)."},"ventilation":{"type":"objet","requis":false,"note":"VMC simple flux générée par POST /cao/regles (arrêté du 24/03/1982) : caisson, bouches (débits), entrées d'air, gaines, bilan des débits. Les bouches sont aussi dans electricite[] (type vmc)."},"evacuations":{"type":"objet","requis":false,"note":"Générée par POST /cao/regles (NF DTU 60.11) : `chute` {x, y, diametre, z_bas, z_haut, ventilation, gaine} — la chute unique EU/EV, dans la gaine technique : contre une paroi à chaque niveau, hors escalier, portes, fenêtres et meubles, débouché 400 mm au-dessus de la couverture. Déclarée, elle n'est jamais déplacée. Exportée en IFC (IfcPipeSegment, systèmes EU et EV, ports connectés de chaque appareil jusqu'au pied de chute)."},"alimentation":{"type":"objet","requis":false,"note":"Générée par POST /cao/regles (NF DTU 60.11, distribution en pieuvre) : `colonnes[]` {type ef|ec, x, y, diametre, z_bas, z_haut} dans la gaine technique et `nourrices[]` {type, x, y, z, departs} à leur pied ; les tubes sont dans reseaux[] (ef, ec — `alimente` : l'appareil servi, `depuis` : arrivee ou chauffe_eau). Exportée en IFC (colonnes en IfcPipeSegment, systèmes EF et ECS)."},"chauffage":{"type":"objet","requis":false,"note":"Écrit par POST /cao/regles (NF EN 12831, NF EN 442, NF EN 14511, NF DTU 65.10) : {regime, deperditions_w, temperature_base, generateur, colonnes, nourrices}. `temperature_base` (°C, défaut −7) peut être déclarée : c'est la température extérieure de base du calcul. Les radiateurs posés sont dans plomberie[] (type radiateur, l, p, h, puissance_w, puissance_utile_w, piece), comme la pompe à chaleur air/eau qui les alimente (pac_exterieure : l'unité extérieure, contre une façade ; module_hydraulique : le module intérieur ; puissance_kw) ; `generateur` la résume {type, puissance_nominale_kw, puissance_a_la_base_w, appoint_w}. Le réseau bitube est dans reseaux[] (type chauffage, circuit aller ou retour, `alimente` : le radiateur, `depuis` : generateur pour les liaisons ; chaque tracé part de l'amont), ses colonnes et nourrices dans `colonnes` et `nourrices`. Le détail par pièce, le générateur et le réseau sont dans rapport.chauffage."},"tableau":{"type":"objet","requis":false,"note":"Écrit par POST /cao/regles (NF C 15-100) : les circuits du tableau électrique {circuits: [{id, nature, disjoncteur_a, section_mm2, points, niveaux, membres, differentiel, tableau}], differentiels: [{id, type (A ou AC), calibre_a, sensibilite_ma, circuits, tableau}], communication (les RJ45), autonomes (les détecteurs de fumée), cables: [{circuit, de, vers, section_mm2, niveau, trace: [{x, y, z}]}]}. `membres` : les tags des appareillages et appareils (« electricite[3] », « plomberie[5] », « ventilation.caisson ») ; chaque câble part du tableau ou du membre précédent, en gaine noyée dans la dalle, ses verticales dans les murs, hors baies. Exporté en IFC : un IfcDistributionCircuit par circuit, ses câbles en IfcCableSegment."},"sol":{"type":"objet","requis":false,"note":"Hypothèses de sol des fondations générées : contrainte_mpa (défaut 0,20) et hors_gel_mm (défaut 800).","objet":{"contrainte_mpa":"nombre","hors_gel_mm":"nombre (mm)"}},"parcelle":{"type":"liste de points [x, y] (mm)","requis":false,"note":"Limite séparative de la parcelle. Active les règles qui mesurent une distance à la limite — art. 671 du Code civil pour les plantations (2 m au-delà de 2 m de haut, 0,50 m sinon). Sans elle, ces contrôles se taisent : une distance à une limite inconnue ne se calcule pas.","exemple":[[-5000,-5000],[15000,-5000],[15000,12000],[-5000,12000]]},"terrasses":{"type":"liste d'objets","requis":false,"note":"Terrasses extérieures, pour le contrôle d'écoulement (NF DTU 52.1 / 43.1 : 1 à 2 % vers l'extérieur). Le platelage VISIBLE se pose avec mobilier[] type 'terrasse' ; ce qu'on pose dessus prend z = son dessus (40 mm par défaut) et n'est pas « hors sol ».","objet":{"x1":"mm","y1":"mm","x2":"mm","y2":"mm","pente_pct":"nombre — pente d'écoulement, en %"}},"allees":{"type":"liste d'objets","requis":false,"note":"Cheminements piétons : 0,90 m au strict minimum, 1,20 m pour se croiser.","objet":{"x1":"mm","y1":"mm","x2":"mm","y2":"mm","largeur":"nombre (mm) — requis pour le contrôle"}},"stationnements":{"type":"liste d'objets","requis":false,"note":"Places de stationnement : 2,50 × 5,00 m ; 3,30 m de large si la place est adaptée (`adapte: true`).","objet":{"x":"mm","y":"mm","l":"mm (défaut 5000)","p":"mm (défaut 2500)","adapte":"booléen — optionnel"}},"pieces":{"type":"liste d'objets","requis":false,"note":"Usage des pièces, repéré par un point DANS la pièce (détectée automatiquement). Active le contrôle d'éclairement naturel (1/6 de la surface au sol) des pièces de vie : sejour, salon, chambre, cuisine, bureau, salle_a_manger.","objet":{"type":"texte — usage de la pièce","x":"mm","y":"mm","z":"mm — altitude du plancher de la pièce","nom":"texte — optionnel","cuisine_ouverte":"booléen — optionnel — séjour qui contient la cuisine : /cao/regles y pose la bouche d'extraction cuisine (VMC) et les circuits de cuisine (NF C 15-100)"}},"juridiction":{"type":"texte","requis":false,"note":"Pays dont le vérificateur applique les normes : 'fr' (défaut), 'eu' (normes harmonisées), 'us' (IRC, NEC), 'cn' (GB 55038, GB 50096), 'uk' (Approved Documents, BS 7671), 'de' (MBO, DIN 18065), 'asie' (règles de métier seules). Celles-là SEULEMENT : les normes se contredisent — un escalier conforme à l'IRC sort de la plage de Blondel. Seuils et textes : GET /api/v1/cao/normes.","valeurs":["fr","eu","us","cn","uk","de","asie"]},"sols":{"type":"liste d'objets","requis":false,"note":"Matériau de sol par pièce — un point {x,y} DANS la pièce (détectée auto). Sans marqueur : défaut selon l'usage (carrelage sdb/WC/cuisine, parquet clair sinon). Rendu en 3D + /cao/metres ; hors contrôles de chevauchement mobilier.","types":["beton","carrelage","exterieur_terrasse","moquette","parquet_chene","parquet_clair"],"objet":{"x":"nombre (mm) — requis","y":"nombre (mm) — requis","type":"un des types ci-dessus — requis","z":"nombre (mm) — optionnel, déduit des murs proches si absent"}},"decoration":{"type":"liste d'objets","requis":false,"note":"Finitions déco/peinture par mur — colore les élévations (face 'exterieur') et la vue axonométrique (face détectée automatiquement selon l'orientation par rapport au centre du bâtiment). Métrés : m² par (type, couleur) + litres de peinture estimés (2 couches, 5 m²/L).","types":["beton_cire","carrelage_mural","enduit","lambris","papier_peint","peinture"],"objet":{"mur":"entier — requis — index dans murs[]","face":"'interieur' | 'exterieur' — optionnel, défaut 'interieur'","type":"un des types ci-dessus — optionnel, défaut 'peinture'","couleur":"couleur hexadécimale (ex. « #e2e0d5 ») — optionnel, défaut selon le type","finition":"'mat' | 'satin' | 'brillant' | 'structure' — optionnel, défaut mat — pilote la RUGOSITÉ en 3D : « brillant » renvoie un reflet net dans la Visite 4K et en visite virtuelle, « mat » aucun"}}},"regle":"Au moins un des champs (murs, boites, plan, cercles, toitures, electricite, plomberie, reseaux, decoration, escaliers, garde_corps, ascenseurs) doit contenir au moins un élément.","exemple_piece_simple":{"murs":[{"x1":0,"y1":0,"x2":4000,"y2":0,"hauteur":2500,"epaisseur":200},{"x1":4000,"y1":0,"x2":4000,"y2":3000,"hauteur":2500,"epaisseur":200},{"x1":4000,"y1":3000,"x2":0,"y2":3000,"hauteur":2500,"epaisseur":200},{"x1":0,"y1":3000,"x2":0,"y2":0,"hauteur":2500,"epaisseur":200}],"boites":[{"x":1000,"y":1500,"l":1600,"p":800,"h":750,"rotation":0}],"ouvertures":[{"mur":0,"position":1500,"largeur":900,"hauteur":2100,"type":"porte"}]},"exemple_toiture_4_pans":{"toitures":[{"type":"quatre_pans","hauteur_faitage":1500}]},"exemple_toiture_2_pans":{"toitures":[{"type":"deux_pans","hauteur_faitage":1500,"rotation":0}]},"exemple_toiture_composee_batiment_en_L":{"note":"2 entrées, chacune limitée à ses propres murs (`murs:[indices]`) — pour un bâtiment dont le contour n'est pas un simple rectangle.","toitures":[{"type":"quatre_pans","murs":[0,1],"hauteur_faitage":1200},{"type":"deux_pans","murs":[2,3],"hauteur_faitage":1400}]},"exemple_toiture_personnalisee":{"toitures":[{"type":"personnalise","polygone":[{"x":0,"y":0},{"x":6000,"y":0},{"x":3000,"y":5000}],"apex":{"x":3000,"y":2000,"z":2200}}]},"exemple_chien_assis":{"note":"S'ajoute à un toit existant — pensez à POSITIONNER x/y/z sur le pan porteur.","toitures":[{"type":"deux_pans","hauteur_faitage":1500},{"type":"chien_assis","x":3000,"y":0,"z":2900,"largeur":1300,"profondeur":900,"hauteur":900,"hauteur_faitage":600}]},"exemple_electricite_plomberie":{"note":"Rendu sur une planche à part (« Plan technique ») dans /cao/pdf, avec légende et métrés (nombre de points par type, mètres linéaires de réseaux par type).","electricite":[{"type":"prise","mur":0,"position":1000},{"type":"interrupteur","mur":3,"position":300},{"type":"luminaire","x":3000,"y":2000}],"plomberie":[{"type":"evier","x":1000,"y":500}],"reseaux":[{"type":"ef","trace":[{"x":0,"y":500},{"x":1000,"y":500}]}]},"exemple_decoration":{"decoration":[{"mur":0,"face":"interieur","type":"peinture","couleur":"#d1e8d5","finition":"satin"},{"mur":0,"face":"exterieur","type":"enduit","couleur":"#e8e4d8"}]},"exemple_multi_etages":{"_commentaire":"Maison R+2 : mêmes 4 murs répétés à z=0, 2600 et 5200, un escalier par niveau ADESSÉ À UN MUR (pas devant la porte), un garde-corps de trémie à chaque arrivée (NF P01-012), et une toiture 4 pans posée AU SOMMET (z = 7800). Ajoutez autant de niveaux que voulu en répétant les murs.","murs":[{"x1":0,"y1":0,"x2":8000,"y2":0,"z":0,"hauteur":2600},{"x1":8000,"y1":0,"x2":8000,"y2":6000,"z":0,"hauteur":2600},{"x1":8000,"y1":6000,"x2":0,"y2":6000,"z":0,"hauteur":2600},{"x1":0,"y1":6000,"x2":0,"y2":0,"z":0,"hauteur":2600},{"x1":0,"y1":0,"x2":8000,"y2":0,"z":2600,"hauteur":2600},{"x1":8000,"y1":0,"x2":8000,"y2":6000,"z":2600,"hauteur":2600},{"x1":8000,"y1":6000,"x2":0,"y2":6000,"z":2600,"hauteur":2600},{"x1":0,"y1":6000,"x2":0,"y2":0,"z":2600,"hauteur":2600},{"x1":0,"y1":0,"x2":8000,"y2":0,"z":5200,"hauteur":2600},{"x1":8000,"y1":0,"x2":8000,"y2":6000,"z":5200,"hauteur":2600},{"x1":8000,"y1":6000,"x2":0,"y2":6000,"z":5200,"hauteur":2600},{"x1":0,"y1":6000,"x2":0,"y2":0,"z":5200,"hauteur":2600}],"ouvertures":[{"mur":0,"position":3500,"largeur":1000,"hauteur":2100,"type":"porte"},{"mur":1,"position":2000,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"},{"mur":2,"position":2500,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"},{"mur":5,"position":2000,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"},{"mur":6,"position":2500,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"},{"mur":9,"position":2000,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"},{"mur":10,"position":2500,"largeur":1200,"hauteur":1400,"z":900,"type":"fenetre"}],"escaliers":[{"x":700,"y":1500,"hauteur":2600,"largeur":1000,"rotation":90,"z":0},{"x":700,"y":1500,"hauteur":2600,"largeur":1000,"rotation":90,"z":2600}],"garde_corps":[{"x1":0,"y1":5945,"x2":1400,"y2":5945,"hauteur":1000,"z":2600},{"x1":0,"y1":5945,"x2":1400,"y2":5945,"hauteur":1000,"z":5200}],"toitures":[{"type":"quatre_pans","z":7800,"hauteur_faitage":2200,"debord":400}]},"endpoints":{"POST /api/v1/cao/verifier":"GRATUIT, sans clé — audit géométrique (alertes lucarnes flottantes, allège absolue, étage sans fenêtres…). Appelez AVANT pdf/dxf. MCP : cao_verifier","POST /api/v1/cao/dxf":"scène → fichier DXF (AutoCAD, LibreCAD, BricsCAD…) — calques MURS/OBJETS/PLAN/ELEC/PLOMB/PLOMB_RESEAUX/ESCALIER/GARDE_CORPS/ASCENSEUR. format=json inclut le champ alertes[]","POST /api/v1/cao/ifc":"scène → fichier IFC4 (BIM — Revit, ArchiCAD, Solibri…) en millimètres, GUID réel par élément. Pièces IfcSpace nommées (surfaces habitable CCH R156-1 et Carrez), planchers percés de leurs trémies, toiture IfcRoof, escaliers IfcStair ; Pset/Qto standard ; couches de matériaux (masse volumique, conductivité) ; IfcWallType/SlabType/DoorType/WindowType ; IfcRelSpaceBoundary2ndLevel ; géoréf EPSG:2154. Ouvertures IfcDoor/IfcWindow qui percent réellement le mur. Validé schéma + règles EXPRESS IFC4. format=json → {ifc, elements, unites}. MCP : cao_generer_ifc. Coordination : POST /cao/ifc/valider (sans compte buildingSMART), /cao/ifc/importer, /cao/ifc/conflits, /cao/ifc/bcf (BCF 2.1)","POST /api/v1/cao/ifc/importer":"IFC d'un architecte (texte STEP, IFC2X3 ou IFC4) → scène CAO (chaque élément garde son GlobalId), puis nos contrôles, métrés, conflits et studio 4K/VR. MCP : cao_importer_ifc","POST /api/v1/cao/regles":"scène complétée par les règles de l'art : linteaux, semelles, portées de dalle (prédimensionnement indicatif), électricité NF C 15-100, VMC (arrêté du 24/03/1982), évacuations en pente (NF DTU 60.11) — ajoute ce qui manque, ne retire rien. MCP : cao_regles_structure_reseaux","GET /api/v1/cao/copilote":"catalogue des opérations du copilote d'édition (gratuit, sans clé)","POST /api/v1/cao/copilote":"{scene, instruction} → la demande en français (« agrandis la cuisine d'un mètre ») appliquée au millimètre : le modèle choisit des opérations typées, le moteur les exécute, nos contrôles rejugent ; une paroi qui créerait un défaut n'est pas retenue. MCP : cao_copilote","GET /api/v1/cao/familles":"familles paramétriques de menuiseries (portes battantes, doubles, coulissantes, galandage, entrée, portes-fenêtres, baies ; fenêtres un ou deux vantaux, oscillo-battantes, fixes) — paramètres bornés, cotes de baie, accessibilité ; gratuit, sans clé. MCP : cao_familles","GET /api/v1/cao/ifc/ids/logement-fr":"notre IDS 1.0 « logement FR » (XML buildingSMART) — gratuit, sans clé","POST /api/v1/cao/ifc/ids":"scène OU `ifc` + `ids` (XML IDS 1.0 ; défaut : logement FR) → conformité par spécification, éléments en échec et leurs raisons, BCF des échecs sur demande (`bcf`). MCP : cao_ids_verifier","POST /api/v1/cao/metres":"scène → métrés chiffrés (ml, m², m³, comptages électricité/plomberie, escaliers + conformité Blondel, garde-corps ml) + alertes[] — alias : /cao/quantites","POST /api/v1/cao/render":"scène → aperçu visuel simple (SVG par défaut, ou PNG via body.format)","POST /api/v1/cao/programme":"programme → PLAN : {chambres, cuisine, surface_m2…} → une maison de plain-pied complète aux cotes françaises (murs, portes, fenêtres, pièces, toiture), vérifiée à zéro alerte, et l'autre typologie en variante. GET décrit les champs.","POST /api/v1/cao/devis":"scène → QUANTITATIF PAR LOTS (trame de DPGF) : gros œuvre, couverture, menuiseries, plâtrerie, électricité, plomberie, chauffage-ventilation, sols, peinture — chaque ouvrage avec son code, son unité et sa quantité ; chiffré avec body.prix {code: prix unitaire HT} (et tva_pct), jamais avec des prix inventés","POST /api/v1/cao/energie":"scène + `climat` → CE QU'ELLE CONSOMMERA : besoin de chauffage par les degrés-jours (apports solaires par orientation, corrigés du MASQUE mesuré sur la scène, et facteur d'utilisation EN ISO 13790), eau chaude, consommation selon le générateur en énergie finale et primaire ; l'Ic construction estimé avec VOS facteurs carbone ; et le confort d'été comparé à ce qu'une nuit de ventilation évacue. ⚠️ Degrés-jours, irradiation et facteurs carbone viennent de VOUS (Météo-France, PVGIS, INIES) : ni DPE, ni calcul réglementaire.","POST /api/v1/cao/urbanisme":"scène + `regles` → LE RÈGLEMENT APPLIQUÉ : emprise au sol et %, hauteurs, recul de CHAQUE limite avec la hauteur en vis-à-vis, prospect H/2, pentes, stationnement, espaces libres — chaque contrôle dit sa valeur, son seuil et quoi corriger. ⚠️ Les règles viennent de VOUS (le règlement de la zone, Géoportail de l'urbanisme) : aucune valeur de PLU n'est devinée. Sans règle, la mesure est rendue seule.","POST /api/v1/cao/plan/partager":"scène → LIEN À ENVOYER AU CLIENT : il ouvre le plan dans son navigateur (page /plan/{jeton}), sans compte ni logiciel, et punaise ses remarques dessus ; elles reviennent par GET /api/v1/cao/plan/{jeton} et s'exportent en sujets BCF. Lire et commenter sont LIBRES ; créer, marquer traité et retirer demandent la clé. Le plan partagé est une COPIE FIGÉE : l'édition continue sans changer ce que le client regarde.","POST /api/v1/cao/soleil":"scène → SOLEIL ET OMBRES : aux 21 juin, 21 mars et 21 décembre, lever, coucher, hauteur maximale, ombre portée à midi (m² et contours) et, pour CHAQUE baie, les heures de soleil avec sa première et sa dernière heure — masques du bâtiment et masques déclarés (`masques`) pris en compte ; le terrain vient de `georef` (Lambert-93), sinon Strasbourg et la réponse le dit","POST /api/v1/cao/re2020":"scène → PRÉ-ÉTUDE RE 2020 : H_T, U moyen, compacité, ventilation au débit de base, vitrages par orientation (nord_deg), déperditions, leviers ; les seuils RE 2020 des maisons rappelés — Bbio, Cep, DH et Ic restent le calcul réglementaire d'un bureau d'études (attestation PCMI14-1)","POST /api/v1/cao/permis":"scène → DOSSIER DE PERMIS DE CONSTRUIRE d'une maison (Cerfa 13406, brouillon) : surface de plancher R111-22, emprise au sol R420-1, hauteurs, PCMI2 plan de masse, PCMI3 coupe, PCMI4 notice, PCMI5 façades ; PCMI1/6/7/8 dits « à fournir ». body.format : json (défaut) | html | pdf","POST /api/v1/cao/rendu-photo":"scène → studio PHOTO path-tracé 4K (/cao/visite-photo : Three r163 + three-gpu-pathtracer). Visite/XR restent sur le rastériseur r128. Fallback : url_photo_raster. GET explique l'endpoint.","POST /api/v1/cao/rendu-photo/cadrage":"PNG → recadrage 16:9 + relight (PIL). Optionnel. Jamais à la place de POST /cao/verifier. CAO_PHOTO_IA_URL = webhook si présent.","POST /api/v1/cao/pdf":"scène → PLANCHE complète (dessus + face + côté + vue axonométrique ombrée + plan technique électricité/plomberie, cotes, métrés) en PDF (ou HTML via body.format ; format=json → {html, alertes}). Bandeau d'alertes injecté si problèmes détectés.","POST /api/v1/cao/visite/plan":"PLAN DE TOURNAGE de la visite vidéo 4K : objectif (focale en mm, équivalent 24×36) + chemin de caméra (mm, même repère que la scène) + temps de pose par pièce. Body scène + duree_s + objectif{} + cadence{} + chemin[] optionnel (le vôtre, vérifié). MCP : cao_visite_plan. Le RENDU est fait par le GPU du navigateur — éditeur CAO → bouton « Visite 4K » (y coller le plan) ou CAD_startCinematicTour({plan}) : il n'y a plus de rendu vidéo côté serveur, un seul moteur pour une seule qualité.","GET /api/v1/cao/visite/objectifs":"GRATUIT, sans clé — catalogue des focales (14–85 mm) avec champ de vision en 16:9 et usage conseillé. Repères : 20 mm intérieur, 35 mm extérieur, 50 mm clôture."},"authentification":"X-API-Key requis pour dxf/metres/render/pdf, /cao/visite/plan, /cao/programme, /cao/re2020, /cao/soleil, /cao/energie, /cao/devis, /cao/permis et /cao/rendu-photo (pas pour /cao/schema, /cao/verifier, /cao/visite/objectifs ni /cao/rendu-photo/cadrage). Clé : https://synergieloc.fr/api-ia","export_pbr":"GLB (glTF 2.0 PBR) depuis le studio (bouton) ou l'éditeur CAO — import Twinmotion / D5. Pas d'export Datasmith natif : le GLB est le format d'échange.","promo":"🎁 CAO GRATUITE jusqu'au 2026-12-31 : les endpoints /api/v1/cao/* ne consomment aucune unité (toutes clés, tous plans). Après cette date, 2 unités par appel."}