このMCPでできること
Creates, validates, analyzes, and exports French building and property designs as DXF, IFC, BCF, PDFs, visualizations, quantities, permits, and rental-management documents.
ツール
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'dpe': {'type': 'string', 'description': 'Classe du diagnostic de performance energetique, de A a G. Mention OBLIGATOIRE dans toute annonce de location ; les classes F et G sont soumises a restrictions.'}, 'loyer': {'type': 'number', 'description': "Loyer mensuel hors charges, en euros. ATTENTION : en zone tendue l'encadrement des loyers s'applique et n'est PAS verifie ici."}, 'titre': {'type': 'string', 'description': "Accroche de l'annonce. Laissee vide, elle est composee a partir du type, de la surface et de la ville."}, 'ville': {'type': 'string', 'description': 'Commune du bien.'}, 'statut': {'enum': ['brouillon'], 'type': 'string', 'default': 'brouillon', 'description': "Toujours « brouillon » : ce service REDIGE l'annonce, il ne la publie nulle part. La diffusion reste un geste humain."}, 'charges': {'type': 'number', 'description': 'Provision mensuelle pour charges, en euros. Doit etre affichee separement du loyer.'}, 'contact': {'type': 'string', 'description': "Coordonnees de visite affichees dans l'annonce."}, 'nb_pieces': {'type': 'number', 'description': "Nombre de pieces principales, cuisine et salle d'eau exclues."}, 'reference': {'type': 'string', 'description': "Reference interne de l'annonce, pour rattacher les candidatures recues."}, 'type_bien': {'type': 'string', 'description': 'Nature du bien : studio, appartement, maison, local commercial, parking.'}, 'agence_nom': {'type': 'string', 'description': 'Agence ou bailleur qui publie.'}, 'surface_m2': {'type': 'number', 'description': 'Surface habitable en m2, au sens de la loi Carrez ou Boutin selon le bail.'}, 'code_postal': {'type': 'string', 'description': 'Code postal, cinq chiffres.'}, 'description': {'type': 'string', 'description': 'Texte descriptif du bien : agencement, exposition, equipements, transports.'}}}
入力スキーマ
{'type': 'object', 'required': ['bailleur_nom', 'locataire_nom', 'logement_adresse', 'loyer_actuel', 'irl_reference', 'irl_nouveau', 'date_effet'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'émission imprimé avant la date (« Fait à … »)."}, 'date_effet': {'type': 'string', 'description': "Date d'application du nouveau loyer. Format ISO AAAA-MM-JJ. Par défaut, la date du jour. La révision ne rétroagit pas au-delà d'un an (art. 17-1, loi 89-462)."}, 'irl_nouveau': {'type': 'number', 'description': "Valeur de l'IRL du même trimestre, publiée par l'INSEE cette année."}, 'bailleur_nom': {'type': 'string', 'description': 'Bailleur qui notifie la révision.'}, 'loyer_actuel': {'type': 'number', 'description': 'Loyer hors charges en vigueur avant révision, en euros.'}, 'irl_reference': {'type': 'number', 'description': "Valeur de l'IRL du trimestre de référence inscrit au bail."}, 'locataire_nom': {'type': 'string', 'description': 'Locataire destinataire de la notification.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, en en-tête.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du bien loué (objet du courrier).'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse POSTALE du locataire (fenêtre) — ex. "12 rue de la Paix\\n75002 Paris".'}, 'trimestre_nouveau': {'type': 'string', 'description': "Trimestre correspondant de l'année en cours — « T2 2026 »."}, 'trimestre_reference': {'type': 'string', 'description': "Trimestre de référence du bail — « T2 2025 ». C'est le bail qui le fixe, pas l'usage."}}}
入力スキーマ
{'type': 'object', 'required': ['bailleur_nom', 'locataire_nom', 'periode'], 'properties': {'bic': {'type': 'string', 'description': 'BIC de la banque du bailleur, facultatif pour un virement SEPA.'}, 'iban': {'type': 'string', 'description': 'IBAN de encaissement affiché pour le virement. Reproduit tel quel, jamais vérifié ni stocké.'}, 'lieu': {'type': 'string', 'description': "Lieu d'émission imprimé avant la date (« Fait à … »)."}, 'loyer': {'type': 'number', 'description': 'Loyer hors charges, en euros. Nombre, sans symbole ni séparateur de milliers.'}, 'lignes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Lignes supplémentaires à ajouter au décompte (parking, garage, régularisation). Chaque objet porte un libellé et un montant.'}, 'charges': {'type': 'number', 'description': 'Provision pour charges du mois, en euros. Régularisée séparément par `regularisation_charges`.'}, 'periode': {'type': 'string', 'description': 'Période appelée, en clair — par exemple « mars 2026 » ou « 1er au 31 mars 2026 ».'}, 'reference': {'type': 'string', 'description': 'Référence à rappeler par le locataire dans le libellé de son virement.'}, 'bailleur_nom': {'type': 'string', 'description': "Nom du bailleur émetteur, tel qu'il doit figurer sur l'avis."}, 'date_echeance': {'type': 'string', 'description': "Date limite de paiement, format ISO AAAA-MM-JJ. Par défaut, la date d'émission."}, 'date_emission': {'type': 'string', 'description': "Date d'émission, format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'locataire_nom': {'type': 'string', 'description': 'Nom du locataire appelé à payer ; apparaît dans le bloc destinataire.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse postale complète du bailleur (expéditeur).'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du logement loué, si elle diffère de celle du locataire.'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse du locataire. Sert au bloc fenêtre : elle est poussée À DROITE pour une enveloppe à fenêtre.'}}}
入力スキーマ
{'type': 'object', 'required': ['titre'], 'properties': {'lots': {'type': 'array', 'items': {'type': 'string'}, 'description': "Lots de copropriété concernés, quand l'intervention est refacturée à plusieurs."}, 'type': {'type': 'string', 'description': "Corps d'état concerné : plomberie, électricité, serrurerie, chauffage, menuiserie."}, 'titre': {'type': 'string', 'description': "Objet de l'intervention en une ligne — « Fuite sous l'évier, cuisine »."}, 'urgence': {'type': 'string', 'description': "Degré d'urgence : « normale », « urgente » (sous 48 h) ou « immédiate » (sécurité, dégât des eaux, coupure)."}, 'echeance': {'type': 'string', 'description': "Date souhaitée d'achèvement, format ISO AAAA-MM-JJ."}, 'agence_nom': {'type': 'string', 'description': "Nom du donneur d'ordre — agence ou syndic qui commande l'intervention."}, 'cout_estime': {'type': 'number', 'description': 'Plafond de dépense autorisé sans nouvel accord, en euros. Le mandat de gérance en fixe souvent le seuil.'}, 'description': {'type': 'string', 'description': "Constat détaillé : ce qui est cassé, depuis quand, ce qui a déjà été tenté. C'est ce que l'artisan lira pour chiffrer."}, 'agence_adresse': {'type': 'string', 'description': "Adresse du donneur d'ordre, pour la facturation."}, 'prestataire_nom': {'type': 'string', 'description': 'Artisan ou entreprise à qui le bon est adressé.'}, 'prestataire_adresse': {'type': 'string', 'description': 'Adresse du prestataire. Sert au bloc fenêtre, poussé À DROITE.'}, 'adresse_intervention': {'type': 'string', 'description': 'Adresse exacte du lieu à dépanner, avec bâtiment, étage et numéro de lot si nécessaire.'}}}
入力スキーマ
{'type': 'object', 'properties': {'domaine': {'enum': ['securite', 'documents', 'cao', 'irl', 'workflow', 'gerance', 'offre', 'partenaire'], 'type': 'string', 'description': 'Optional filter. Omit to receive all domains.'}}}
入力スキーマ
{'type': 'object', 'required': ['candidat_nom', 'agence_adresse'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'établissement du dossier (« Fait à … »)."}, 'message': {'type': 'string', 'description': "Mot du candidat à l'agence, ajouté au corps du dossier."}, 'agence_nom': {'type': 'string', 'description': 'Agence ou bailleur destinataire du dossier.'}, 'garant_nom': {'type': 'string', 'description': "Nom du garant, s'il y en a un. La caution se formalise par un acte distinct."}, 'candidat_nom': {'type': 'string', 'description': 'Nom et prénom du candidat locataire.'}, 'candidat_tel': {'type': 'string', 'description': "Téléphone du candidat, pour que l'agence puisse le rappeler."}, 'nb_occupants': {'type': 'number', 'description': 'Nombre de personnes qui occuperont le logement, enfants compris.'}, 'date_emission': {'type': 'string', 'description': "Date d'établissement, format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'situation_pro': {'type': 'string', 'description': 'Situation professionnelle : CDI, CDD, indépendant, retraité, étudiant. Détermine les pièces attendues.'}, 'agence_adresse': {'type': 'string', 'description': "Adresse de l'agence. Sert au bloc fenêtre, poussé À DROITE."}, 'candidat_email': {'type': 'string', 'description': 'Adresse e-mail du candidat.'}, 'pieces_jointes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Libellés des pièces jointes au dossier. ⚠️ Les libellés seulement : ce service ne transporte aucun document.'}, 'candidat_adresse': {'type': 'string', 'description': 'Adresse actuelle du candidat, avant emménagement.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du logement demandé.'}, 'revenus_mensuels': {'type': 'number', 'description': "Revenus nets mensuels du foyer, en euros. Sert au taux d'effort ; aucun seuil n'est appliqué ici."}, 'reference_annonce': {'type': 'string', 'description': "Référence de l'annonce, pour rattacher le dossier au bon lot."}, 'date_entree_souhaitee': {'type': 'string', 'description': "Date d'emménagement souhaitée, format ISO AAAA-MM-JJ."}}}
入力スキーマ
{'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'Optional date, YYYY-MM-DD: the state of the site on that day.'}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'debut': {'type': 'string', 'description': 'Site start date, YYYY-MM-DD (today by default).'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'images': {'type': 'boolean', 'default': True, 'description': 'Include the SVG views.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'ifc': {'type': 'string', 'description': "IFC file content as STEP text (IFC2X3 or IFC4), e.g. an architect's model. When given, scene fields are ignored."}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['action'], 'properties': {'nom': {'type': 'string', 'description': 'Family name in the library (lire, enregistrer), e.g. etagere_murale.'}, 'action': {'enum': ['lister', 'lire', 'enregistrer'], 'type': 'string', 'description': 'lister | lire | enregistrer.'}, 'auteur': {'type': 'string', 'description': "Author code of someone else's public family (lire)."}, 'famille': {'type': 'object', 'description': 'The family definition to save (enregistrer).'}, 'version': {'type': 'integer', 'description': 'A given version (lire); default: the latest.'}, 'publique': {'type': 'boolean', 'description': 'Share the family with everyone (enregistrer).'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'projet': {'type': 'object', 'description': 'Title block: titre, maitre_ouvrage (client), auteur, adresse, phase (ESQ, APS, APD, PC, PRO, DCE, EXE, DOE), format_feuille (A3 or A1), revisions [{indice, date, objet}] with the current revision last.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['avant', 'apres'], 'properties': {'apres': {'type': 'object', 'description': 'The modified scene.'}, 'avant': {'type': 'object', 'description': 'The original scene (same format as the other CAO tools).'}, 'quantites': {'type': 'boolean', 'default': True, 'description': 'Also compare the quantity take-off, item by item.'}}}
入力スキーマ
{'type': 'object', 'properties': {'ifc': {'type': 'string', 'description': "IFC file content as STEP text (IFC2X3 or IFC4), e.g. an architect's model. When given, scene fields are ignored."}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['scene'], 'properties': {'scene': {'type': 'object', 'description': 'The building scene to modify (same format as cao_generer_ifc: murs, ouvertures, mobilier…).'}, 'modele': {'type': 'boolean', 'default': True, 'description': 'False to use only the deterministic rules, never the language model.'}, 'operations': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Optional typed operations (GET /api/v1/cao/copilote) applied without the language model.'}, 'instruction': {'type': 'string', 'description': "The request in natural language, e.g. « agrandis la cuisine d'un mètre »."}}}
入力スキーマ
{'type': 'object', 'properties': {'exemple': {'enum': ['maison', 'appartement', 'extension'], 'type': 'string', 'default': 'maison', 'description': 'maison = single-storey house with a two-slope roof; appartement = T3 flat, no roof; extension = veranda grafted onto an existing wall'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'prix': {'type': 'object', 'description': "Optional unit prices excluding VAT, keyed by the item codes this tool returns, e.g. {'GO-SEMELLES': 250, 'CV-RADIATEUR': 450}."}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'tva_pct': {'type': 'number', 'maximum': 30, 'minimum': 0, 'description': 'Optional VAT rate in percent (5.5, 10 or 20 in France), to add a total including tax.'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'appliquer': {'type': 'boolean', 'description': 'Apply the proposed fixes to a copy of the scene.'}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'revalider': {'type': 'boolean', 'description': 'With appliquer: re-run the check on the corrected scene.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'climat': {'type': 'object', 'description': '{dju_base18, irradiation_saison_chauffe_kwh_m2: {sud, est, ouest, nord}, irradiation_aout_kwh_m2_jour: {...}} — Météo-France and PVGIS.'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'options': {'type': 'object', 'description': 'nord_deg, g_vitrage, inertie_kj_m2k, occupants…'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'systeme': {'type': 'object', 'description': "{chauffage: {type, cop|rendement}, ecs: {...}, ventilation: 'simple_flux'|'double_flux'}."}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}, 'facteurs_carbone': {'type': 'object', 'description': '{item code: kgCO2e per unit}, same codes as cao_devis.'}}}
入力スキーマ
{'type': 'object', 'required': ['famille'], 'properties': {'famille': {'type': 'object', 'description': 'The family definition: libelle, categorie (mobilier, equipement, structure, menuiserie, divers), parametres {name: {defaut, min, max, entier, choix}}, formules {name: expression}, contraintes [{si, message}], solides [{nom, x, y, z, l, p, h, repeter, si}].'}, 'parametres': {'type': 'object', 'description': 'Parameter values; defaults otherwise.'}}}
入力スキーマ
{'type': 'object', 'properties': {}}
入力スキーマ
{'type': 'object', 'required': ['scene'], 'properties': {'scene': {'type': 'object', 'description': 'The scene whose families to reload.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['base', 'central', 'locale'], 'properties': {'base': {'type': 'object', 'description': 'The version both sides started from.'}, 'locale': {'type': 'object', 'description': 'Your changed copy, started from `base`.'}, 'central': {'type': 'object', 'description': 'The shared version as it is now (changed by others).'}, 'resolutions': {'type': 'object', 'description': 'Optional: for each conflict id returned by a first call, "central" or "local".'}, 'empreinte_base': {'type': 'string', 'description': 'Optional: sha256 of the base as you loaded it (sorted JSON, compact separators) — a different base is refused (409).'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'armatures': {'type': 'boolean', 'default': False, 'description': 'Add the reinforcement computed per Eurocode 2 (bars and slab meshes).'}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'bcf': {'type': 'boolean', 'default': False, 'description': 'True to add the failures as a BCF 2.1 zip in base64 (bcf_base64).'}, 'ids': {'type': 'string', 'description': 'Optional IDS 1.0 XML text; default: our French housing IDS.'}, 'ifc': {'type': 'string', 'description': "Optional IFC text (STEP) to check instead of the scene; an architect's model keeps its GlobalIds."}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['ifc'], 'properties': {'ifc': {'type': 'string', 'description': 'IFC file content as STEP text (IFC2X3 or IFC4).'}, 'metres': {'type': 'boolean', 'default': True, 'description': 'Compute quantities (metrés) of the imported scene.'}, 'studio': {'type': 'boolean', 'default': False, 'description': 'Open a 4K video studio and a VR tour of the imported model (URLs).'}, 'conflits': {'type': 'boolean', 'default': False, 'description': 'Detect clashes in the IFC itself (volumes; GlobalIds kept).'}, 'controler': {'type': 'boolean', 'default': True, 'description': 'Run our checks (audit, integrity, drawing set) on the imported scene.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'appliquer': {'type': 'boolean', 'description': 'Apply the proposed fixes to a copy of the scene.'}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'revalider': {'type': 'boolean', 'description': 'With appliquer: re-run the check on the corrected scene.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'properties': {'ids': {'type': 'string', 'description': 'Optional IDS (XML text) the IFC must satisfy.'}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'auteur': {'type': 'string', 'description': 'Author, copied to the manifest.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'version': {'type': ['integer', 'string'], 'description': 'Version number, copied to the manifest.'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'livrables': {'type': 'array', 'items': {'enum': ['ifc', 'dxf', 'pdf', 'metres', 'nomenclatures'], 'type': 'string'}, 'description': 'Deliverables to produce. Default: ifc, dxf, metres, nomenclatures.'}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}, 'warnings_expliques': {'type': 'object', 'description': '{warning code: justification} for the warnings you accept.'}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'titre': {'type': 'string', 'description': "Project title shown as the sheet's heading."}, 'auteur': {'type': 'string', 'description': "Optional: shown as 'Réalisé pour ...'."}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'coupe': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 4, 'minItems': 4, 'description': 'Optional section line AA as [x1, y1, x2, y2] in mm (CAO axes). Default: across the building through its stair.'}, 'titre': {'type': 'string', 'description': "Project title shown on the dossier's cover page."}, 'auteur': {'type': 'string', 'description': 'Optional: applicant or designer shown on the cover page.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'bureau': {'type': 'boolean', 'description': 'Add a study with its own window.'}, 'cellier': {'type': 'boolean', 'description': 'Add a utility and storage room off the corridor.'}, 'cuisine': {'enum': ['ouverte', 'fermee'], 'type': 'string', 'default': 'ouverte', 'description': 'Kitchen open onto the living room (ouverte) or a separate room (fermee).'}, 'toiture': {'enum': ['deux_pans', 'quatre_pans', 'plat'], 'type': 'string', 'default': 'deux_pans', 'description': 'Roof: gable (deux_pans), hip (quatre_pans) or flat (plat).'}, 'chambres': {'type': 'integer', 'default': 2, 'maximum': 5, 'minimum': 1, 'description': 'Number of bedrooms, 1 to 5: the first gets 11 m² or more, the others 9 m² or more.'}, 'typologie': {'enum': ['aile', 'bandes'], 'type': 'string', 'description': 'Force one layout type. Default: both are drawn; the one closest to surface_m2 (or the most compact) is returned, the other as a variant.'}, 'surface_m2': {'type': 'number', 'maximum': 250, 'minimum': 25, 'description': 'Target living area in m², met through the living room size and the bedroom depth; the remaining gap comes back as ecart_m2.'}, 'salles_de_bain': {'type': 'integer', 'maximum': 2, 'minimum': 1, 'description': '1 or 2 bathrooms. Default: 1 up to 3 bedrooms, 2 beyond (the second one is a shower room).'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'nord_deg': {'type': 'number', 'default': 0, 'description': 'Direction of north in the scene, in degrees clockwise from +y (0 means +y is north). Drives the split of glazing by orientation.'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'sol': {'type': 'object', 'description': 'Soil assumptions for footings: {contrainte_mpa (default 0.20), hors_gel_mm (default 800)}.'}, 'vmc': {'type': 'boolean', 'default': True, 'description': 'Generate single-flow ventilation (extract grilles, air inlets, fan, flows).'}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'chauffage': {'type': 'boolean', 'default': True, 'description': 'Compute room heat losses (NF EN 12831) and size radiators at 55/45 °C.'}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'structure': {'type': 'boolean', 'default': True, 'description': 'Generate lintels and strip footings, check slab spans.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'evacuations': {'type': 'boolean', 'default': True, 'description': 'Generate drainage branches to the stack with slopes (NF DTU 60.11).'}, 'alimentation': {'type': 'boolean', 'default': True, 'description': 'Place the water inlet and water heater when missing (NF DTU 60.11).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}, 'electricite_regles': {'type': 'boolean', 'default': True, 'description': 'Complete electrical points per NF C 15-100.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'format': {'enum': ['svg', 'png'], 'type': 'string', 'default': 'svg', 'description': 'svg (default) returns editable vector markup as text — best when you want to inspect or post-process it. png returns a raster image you can actually see. These two values are the only ones accepted; anything else is refused.'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'annee': {'type': 'integer', 'description': 'Optional year for the three reference dates.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'nord_deg': {'type': 'number', 'default': 0, 'description': 'Direction of north in the scene, in degrees clockwise from +y (0 means +y is north).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'pas_minutes': {'type': 'integer', 'default': 15, 'maximum': 60, 'minimum': 5, 'description': 'Optional time step of the computation, in minutes.'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'regles': {'type': 'object', 'description': "The rules read in the zone's regulation, e.g. {'recul_limites_m': 3, 'emprise_max_pct': 30, 'hauteur_max_m': 7}."}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['actions'], 'properties': {'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'depuis': {'type': 'object', 'properties': {'vise': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}}, 'position': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}}, 'focale_mm': {'type': 'number'}}, 'description': 'Starting viewpoint — same shape as a `chemin` waypoint. Omit for an overall view of the building.'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'actions': {'type': 'array', 'items': {'type': 'string'}, 'description': "Ordered sequence. Each item is an action code ('avancer'), a keyboard shortcut ('ctrl+8'), a repeat form ('avancer x3'), or {code, repetitions}. 200 items max."}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'reglages': {'type': 'object', 'properties': {'pas_mm': {'type': 'number', 'default': 500}, 'grand_pas': {'type': 'boolean', 'default': False}, 'facteur_zoom': {'type': 'number', 'default': 1.25}, 'focale_max_mm': {'type': 'number', 'default': 85}, 'focale_min_mm': {'type': 'number', 'default': 16}, 'pas_altitude_mm': {'type': 'number', 'default': 250}, 'pas_rotation_deg': {'type': 'number', 'default': 15}}, 'description': 'Step sizes. Defaults: 500 mm per move, 250 mm per altitude step, 15° per rotation, ×1.25 per zoom. `grand_pas: true` = the Shift key (×4).'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'properties': {'fps': {'enum': [24, 25, 30, 60], 'type': 'integer', 'default': 30, 'description': 'Images par seconde de la visite. 24 à 30 pour un rendu naturel ; au-delà, le fichier grossit sans gain visible.'}, 'mode': {'enum': ['deco', 'nu'], 'type': 'string', 'default': 'deco', 'description': "'deco' = furnished as modelled; 'nu' = bare shell (plaster)."}, 'murs': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start point X of the wall axis (mm)'}, 'x2': {'type': 'number', 'description': 'End point X of the wall axis (mm)'}, 'y1': {'type': 'number', 'description': 'Start point Y of the wall axis (mm)'}, 'y2': {'type': 'number', 'description': 'End point Y of the wall axis (mm)'}, 'couches': {'type': 'array', 'description': 'Optional inline material layers [{cle, epaisseur?}]. cle is one of enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer so it takes the remainder of the wall thickness.'}, 'hauteur': {'type': 'number', 'default': 2500, 'description': 'Wall height (mm) from floor level. Default 2500, a usual French ceiling height'}, 'existant': {'type': 'boolean', 'description': 'Optional: true for a wall of the EXISTING building when the scene is an extension. cao_permis then counts as created only what the works add.'}, 'materiau': {'type': 'string', 'description': 'Optional single material key: the whole thickness becomes one load-bearing layer instead of a type composition.'}, 'epaisseur': {'type': 'number', 'default': 200, 'description': 'Wall thickness (mm), spread evenly on both sides of the axis — the axis is the centreline, not a face. Default 200'}, 'composition': {'type': 'string', 'description': 'Optional key into the scene-level compositions object. When omitted, the exporter infers mur_exterieur / refend / cloison from geometry. A matching declared composition drops the Hypothese flag in the IFC.'}}}, 'description': 'Walls: plan segments extruded vertically. Every coordinate in this whole scene is in MILLIMETRES, in a single plan frame whose origin you choose — X to the right, Y upward, Z up from the floor. Keep one consistent origin across murs/boites/plan: the generators never recentre anything for you.'}, 'plan': {'type': 'array', 'items': {'type': 'object', 'required': ['x1', 'y1', 'x2', 'y2'], 'properties': {'x1': {'type': 'number', 'description': 'Start X (mm), same frame as murs[]'}, 'x2': {'type': 'number', 'description': 'End X (mm), same frame as murs[]'}, 'y1': {'type': 'number', 'description': 'Start Y (mm), same frame as murs[]'}, 'y2': {'type': 'number', 'description': 'End Y (mm), same frame as murs[]'}}}, 'description': '2D reference lines — drawn flat, never extruded and never counted in the quantities. Use them for axes, plot limits or setting-out marks.'}, 'boites': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'l', 'p', 'h'], 'properties': {'h': {'type': 'number', 'description': 'Height along Z (mm)'}, 'l': {'type': 'number', 'description': 'Length along X before rotation (mm)'}, 'p': {'type': 'number', 'description': 'Depth along Y before rotation (mm)'}, 'x': {'type': 'number', 'description': 'Centre X of the box (mm) — not a corner'}, 'y': {'type': 'number', 'description': 'Centre Y of the box (mm) — not a corner'}, 'z': {'type': 'number', 'default': 0, 'description': 'Underside height above the floor (mm). 0 = resting on the floor; raise it for a wall unit or a shelf'}, 'rotation': {'type': 'number', 'default': 0, 'description': 'Rotation around the box centre, in DEGREES counter-clockwise (not radians). Default 0'}}}, 'description': 'Boxes (furniture, volumes): a rectangular block placed by its CENTRE, not by a corner. Millimetres, same frame as murs[].'}, 'chemin': {'type': 'array', 'items': {'type': 'object', 'properties': {'plan': {'type': 'string'}, 'vise': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}}, 'pose_s': {'type': 'number'}, 'position': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}}, 'focale_mm': {'type': 'number'}}}, 'description': 'OPTIONAL: your own waypoints — replaces the computed path.'}, 'georef': {'type': 'object', 'properties': {'crs': {'type': 'string', 'description': 'Projected CRS name. Default EPSG:2154 (Lambert-93).'}, 'est': {'type': 'number', 'description': 'Easting in metres in the CRS. Omit if unknown — never invent.'}, 'nord': {'type': 'number', 'description': 'Northing in metres in the CRS. Omit if unknown — never invent.'}, 'altitude': {'type': 'number', 'description': 'Orthogonal height in metres (NGF-IGN69 for Lambert-93).'}, 'orientation': {'type': 'number', 'description': "Angle in degrees of the project's X axis from map East, counterclockwise. Default 0."}}, 'description': 'Optional Lambert-93 (EPSG:2154) false origin for IfcMapConversion. Local millimetres are scaled by 0.001 to CRS metres. Do not invent coordinates: omit est/nord if unknown (origin stays 0). orientation is the angle in degrees of project X from map East, counterclockwise.'}, 'cadence': {'type': 'object', 'properties': {'pose_piece_s': {'type': 'number', 'default': 1.6, 'description': 'Dwell time at each room centre.'}, 'hauteur_oeil_mm': {'type': 'number', 'default': 1650}, 'vitesse_ext_mm_s': {'type': 'number', 'default': 2600}, 'vitesse_int_mm_s': {'type': 'number', 'default': 1150}, 'vitesse_transition_mm_s': {'type': 'number', 'default': 950}}, 'description': 'Pacing. Interior is a WALK: above ~1600 mm/s the video is unwatchable.'}, 'cercles': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y', 'r'], 'properties': {'r': {'type': 'number', 'description': 'Radius, same unit as plan[]'}, 'x': {'type': 'number', 'description': 'Centre X, same unit as plan[]'}, 'y': {'type': 'number', 'description': 'Centre Y, same unit as plan[]'}}}, 'description': 'Circles on the 2D plan, alongside plan[] lines: each has a centre and a radius, in the same unit as the plan. Use for round shapes a polyline would render badly — fillets, posts, manholes.'}, 'duree_s': {'type': 'number', 'description': 'Video length, 8–900 s (default 60). A real estate walkthrough runs 480–600 s; the path is ENRICHED with extra exterior revolutions to fill it with movement rather than slowed down.'}, 'reseaux': {'type': 'array', 'items': {'type': 'object', 'required': ['trace'], 'properties': {'type': {'enum': ['ef', 'ec', 'eu', 'ev', 'ep', 'chauffage'], 'type': 'string', 'default': 'ef'}, 'trace': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': 'At least 2 points (mm), freely drawn in plan'}, 'diametre': {'type': 'number', 'description': 'mm, default per type'}}}, 'description': 'Plumbing pipe runs (EF/EC/EU/EV/EP/chauffage) — used only by cao_pdf (technical plan + linear-meter quantities per type).'}, 'objectif': {'type': 'object', 'properties': {'adaptatif': {'type': 'boolean', 'default': True}, 'focale_max_mm': {'type': 'number', 'default': 28}, 'focale_min_mm': {'type': 'number', 'default': 16}, 'focale_entree_mm': {'type': 'number', 'default': 24}, 'focale_cloture_mm': {'type': 'number', 'default': 50}, 'focale_escalier_mm': {'type': 'number', 'default': 20}, 'focale_exterieur_mm': {'type': 'number', 'default': 35}, 'focale_interieur_mm': {'type': 'number', 'default': 20}}, 'description': 'Lens, full-frame equivalent mm. 20 = interior standard, 35 = exterior, 50 = closing shot. Below 16 mm the image goes fisheye.'}, 'toitures': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "'chien_assis' only: center x"}, 'y': {'type': 'number', 'description': "'chien_assis' only: center y — POSITION it on the carrying roof slope"}, 'z': {'type': 'number', 'description': 'Base altitude (mm) — default: top of the walls covered'}, 'apex': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}}, 'description': "Free apex position — 'personnalise' only (default: 'plat' if omitted)"}, 'murs': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Wall indices this roof section covers (default: all walls). Ignored if `polygone` is given.'}, 'type': {'enum': ['chien_assis', 'conique', 'deux_pans', 'dome', 'personnalise', 'plat', 'quatre_pans'], 'type': 'string', 'default': 'plat'}, 'rayon': {'type': 'number', 'description': "Base radius (mm) — 'conique'/'dome' (default: from footprint)"}, 'debord': {'type': 'number', 'default': 200, 'description': 'Eaves overhang (mm) on the auto footprint'}, 'hauteur': {'type': 'number', 'description': "'chien_assis' only: front wall height, default 900"}, 'largeur': {'type': 'number', 'description': "'chien_assis' only, default 1000"}, 'polygone': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}}}, 'description': "Custom footprint (mm) — overrides the auto rectangle. Any type except 'chien_assis'."}, 'rotation': {'type': 'number', 'default': 0, 'description': "Ridge orientation in degrees — 'deux_pans' only (0 = along X axis)"}, 'segments': {'type': 'integer', 'default': 16, 'description': "Facet count — 'conique'/'dome'"}, 'epaisseur': {'type': 'number', 'default': 180, 'description': "Slab thickness (mm) — 'plat' only"}, 'profondeur': {'type': 'number', 'description': "'chien_assis' only, default 800"}, 'hauteur_faitage': {'type': 'number', 'default': 1200, 'description': "Ridge/apex/dome height above z (mm); 600 for 'chien_assis'"}}}, 'description': "Roofs — used only by cao_pdf. WITHOUT this field: a flat roof is auto-generated over the footprint of ALL walls (legacy default). WITH it: compose freely — each entry can target a subset of walls (via `murs`), letting you build an L-shaped building's roof, or add a dormer on top of a main roof."}, 'plomberie': {'type': 'array', 'items': {'type': 'object', 'properties': {'h': {'type': 'number'}, 'l': {'type': 'number'}, 'p': {'type': 'number'}, 'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['baignoire', 'chauffe_eau', 'compteur_eau', 'douche', 'evier', 'lavabo', 'module_hydraulique', 'pac_exterieure', 'radiateur', 'wc'], 'type': 'string', 'default': 'evier'}, 'position': {'type': 'number'}, 'rotation': {'type': 'number', 'default': 0}}}, 'description': 'Sanitary fixtures (sink, WC, shower…) — used only by cao_pdf. Same positioning as electricite.'}, 'decoration': {'type': 'array', 'items': {'type': 'object', 'required': ['mur'], 'properties': {'mur': {'type': 'integer', 'description': 'Index in murs[]'}, 'face': {'enum': ['interieur', 'exterieur'], 'type': 'string', 'default': 'interieur'}, 'type': {'enum': ['beton_cire', 'carrelage_mural', 'enduit', 'lambris', 'papier_peint', 'peinture'], 'type': 'string', 'default': 'peinture'}, 'couleur': {'type': 'string', 'description': "Hex color, e.g. '#e2e0d5' — default per type"}, 'finition': {'enum': ['mat', 'satin', 'brillant', 'structure'], 'type': 'string', 'description': "Informational only, doesn't affect rendering"}}}, 'description': "Paint/finish per wall — used only by cao_pdf. Colors the elevations (exterior face) and the axonometric view (face auto-detected by orientation relative to the building's centroid)."}, 'ouvertures': {'type': 'array', 'items': {'type': 'object', 'required': ['mur', 'position', 'largeur', 'hauteur'], 'properties': {'z': {'type': 'number', 'description': 'Sill height (mm) — default 900 (window) or 0 (door)'}, 'mur': {'type': 'integer', 'description': 'Index of the host wall in murs[] (0-based)'}, 'type': {'enum': ['fenetre', 'porte'], 'type': 'string', 'default': 'fenetre'}, 'hauteur': {'type': 'number', 'description': 'Opening height (mm), measured up from `z`. `z + hauteur` must stay under the wall height'}, 'largeur': {'type': 'number', 'description': 'Opening width (mm) measured along the wall, from `position`. Must fit inside the wall segment'}, 'position': {'type': 'number', 'description': "Distance in mm from the wall's start (x1,y1)"}}}, 'description': 'Doors/windows embedded in a wall — used only by cao_pdf (elevations + axonometric view), no effect on dxf/metres.'}, 'resolution': {'enum': ['1080p', '1440p', '4k'], 'type': 'string', 'default': '4k', 'description': 'Définition du rendu — « 1080p » ou « 4k ». La 4K quadruple le temps de calcul.'}, 'electricite': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'z': {'type': 'number', 'description': 'Default per type (NF C 15-100-informed: outlets 30cm, switches 110cm; light/smoke detector/vmc default to ceiling height)'}, 'mur': {'type': 'integer'}, 'type': {'enum': ['detecteur_fumee', 'interrupteur', 'luminaire', 'prise', 'prise_rj45', 'prise_spe', 'tableau_electrique', 'va_et_vient', 'vmc'], 'type': 'string', 'default': 'prise'}, 'position': {'type': 'number'}}}, 'description': 'Electrical symbols (outlets, switches, lights…) — used only by cao_pdf (dedicated technical plan + quantities), no effect on dxf/metres/render. Position: attached to a wall (`mur`+`position`, like ouvertures) or free (`x`,`y`).'}, 'compositions': {'type': 'object', 'description': 'Named wall/slab layer sets declared by the project. A key that matches an inferred kind (mur_exterieur, refend, cloison, plancher, toiture) or murs[].composition drops the Hypothese flag. Each value is {libelle, couches: [{cle, epaisseur?}]}. cle: enduit, bloc_beton, isolant, ba13, ossature, enduit_platre, beton_arme, tuile, charpente, etancheite. Omit epaisseur on the load-bearing layer.'}}}
入力スキーマ
{'type': 'object', 'required': ['titre'], 'properties': {'titre': {'type': 'string', 'description': 'Objet du compte rendu — « Visite hebdomadaire, lot gros œuvre ».'}, 'points': {'type': 'array', 'items': {'type': 'object', 'required': ['libelle'], 'properties': {'notes': {'type': 'string', 'description': "Précision utile au client : cause d'un retard, décision prise, qui doit agir ensuite."}, 'statut': {'type': 'string', 'description': 'Où en est ce point : « fait », « en cours », « en attente » ou « réserve ».'}, 'libelle': {'type': 'string', 'description': 'Le point constaté, en une ligne — « Cloison axe B, doublage posé ».'}}}, 'description': "Points traités pendant la visite, avec leur suite à donner. Un point par ligne du compte rendu ; l'ordre est conservé tel quel."}, 'risques': {'type': 'string', 'description': "Risques et réserves relevés, qui engagent la responsabilité s'ils ne sont pas signalés."}, 'client_nom': {'type': 'string', 'description': "Maître d'ouvrage destinataire du compte rendu."}, 'date_visite': {'type': 'string', 'description': 'Date de la visite. Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'entreprise émettrice, en en-tête du document."}, 'pct_avancement': {'type': 'number', 'description': 'Avancement constaté, en pourcentage de 0 à 100.'}, 'prochaine_etape': {'type': 'string', 'description': "Prochaine échéance du chantier et ce qu'elle attend."}, 'adresse_chantier': {'type': 'string', 'description': 'Adresse du chantier visité.'}}}
入力スキーマ
{'type': 'object', 'required': ['date_rdv'], 'properties': {'duree': {'type': 'string', 'description': 'Durée prévue, en clair — « 30 min », « 1 h ». Sert à ce que le client réserve le bon créneau.'}, 'objet': {'type': 'string', 'description': 'Motif du rendez-vous en une ligne : visite, état des lieux, signature de bail, devis.'}, 'contact': {'type': 'string', 'description': 'Téléphone ou e-mail pour décaler ou annuler le rendez-vous.'}, 'message': {'type': 'string', 'description': "Texte libre ajouté au corps : pièces à préparer, code d'accès, consignes de stationnement."}, 'date_rdv': {'type': 'string', 'description': 'Date et heure du rendez-vous confirmé, format ISO AAAA-MM-JJ HH:MM.'}, 'lieu_rdv': {'type': 'string', 'description': "Adresse où se tient le rendez-vous, si elle diffère de l'adresse du client."}, 'client_nom': {'type': 'string', 'description': 'Nom du client destinataire de la confirmation.'}, 'intervenant': {'type': 'string', 'description': 'Personne qui se présentera au rendez-vous — le client doit savoir qui attendre.'}, 'date_emission': {'type': 'string', 'description': "Date d'émission du courrier, format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'client_adresse': {'type': 'string', 'description': 'Adresse postale du client. Sert au bloc fenêtre, poussé À DROITE.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'agence ou de l'entreprise qui émet la confirmation."}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'notes': {'type': 'string', 'description': 'Observations libres ajoutées au bas du document.'}, 'siret': {'type': 'string', 'description': "SIRET de l'entreprise, quatorze chiffres. Sa validité de forme est contrôlée ; son activité réelle ne l'est pas."}, 'pieces': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Pièces à contrôler : attestation de vigilance URSSAF, assurance décennale, Kbis, qualification RGE.'}, 'agence_nom': {'type': 'string', 'description': "Donneur d'ordre qui exige les justificatifs."}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'entreprise_nom': {'type': 'string', 'description': 'Entreprise dont la conformité est vérifiée.'}}}
入力スキーマ
{'type': 'object', 'required': ['proprietaire_nom', 'periode'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'émission imprimé avant la date (« Fait à … »)."}, 'solde': {'type': 'number', 'description': "Solde reversé au propriétaire, en euros. ⚠️ Fourni par l'appelant et repris tel quel — ce service ne recalcule pas recettes moins dépenses."}, 'periode': {'type': 'string', 'description': 'Période couverte, en clair — « 1er trimestre 2026 » ou « exercice 2025 ».'}, 'depenses': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Décaissements de la période, même forme que `recettes` : date, libellé, montant.'}, 'recettes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Encaissements de la période. Chaque objet porte une date, un libellé et un montant en euros.'}, 'agence_nom': {'type': 'string', 'description': 'Agence de gérance qui rend compte.'}, 'honoraires': {'type': 'number', 'description': 'Honoraires de gérance retenus sur la période, en euros.'}, 'bailleur_nom': {'type': 'string', 'description': "Bailleur, lorsqu'il diffère du propriétaire destinataire (indivision, SCI)."}, 'date_emission': {'type': 'string', 'description': "Date d'émission, format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'agence_adresse': {'type': 'string', 'description': "Adresse de l'agence, en en-tête."}, 'biens_adresses': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Adresses des biens couverts par ce compte rendu.'}, 'texte_virement': {'type': 'string', 'description': 'Mention du virement de reversement : date, référence, banque.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, si elle diffère de celle du propriétaire.'}, 'proprietaire_nom': {'type': 'string', 'description': 'Propriétaire à qui le compte rendu est adressé.'}, 'proprietaire_adresse': {'type': 'string', 'description': 'Adresse du propriétaire. Sert au bloc fenêtre, poussé À DROITE.'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'cible': {'type': 'string', 'description': 'persona: partenaire|artisan|agent_ia|sci|…'}, 'produit': {'type': 'string', 'description': 'Offre à proposer. Détermine les tarifs autorisés — un tarif hors de cette offre est refusé.'}, 'contexte': {'type': 'string', 'description': "Ce qu'on sait du prospect : origine, page vue, échange précédent. Nourrit la décision, pas le corps du message."}, 'prospect_nom': {'type': 'string', 'description': "Nom du prospect, pour personnaliser l'ouverture."}, 'prospect_email': {'type': 'string', 'description': 'Adresse du prospect. Sert au contrôle de doublon et à la liste STOP ; jamais conservée après la décision.'}, 'prospect_entreprise': {'type': 'string', 'description': 'Raison sociale du prospect, quand elle est connue.'}}}
入力スキーマ
{'type': 'object', 'required': ['montant', 'date_paiement'], 'properties': {'loyer': {'type': 'number', 'description': 'Part du montant imputée au loyer hors charges, en euros.'}, 'source': {'enum': ['declaration_client', 'extrait_bancaire'], 'type': 'string', 'default': 'declaration_client', 'description': 'Moyen de paiement constaté : virement, chèque, espèces, prélèvement.'}, 'charges': {'type': 'number', 'description': 'Part du montant imputée aux provisions pour charges, en euros.'}, 'montant': {'type': 'number', 'description': 'Montant total encaissé, en euros.'}, 'periode': {'type': 'string', 'description': 'Période couverte par le paiement — « mars 2026 ».'}, 'date_paiement': {'type': 'string', 'description': "Date de l'encaissement. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'locataire_nom': {'type': 'string', 'description': 'Locataire dont le paiement est déclaré.'}}}
入力スキーマ
{'type': 'object', 'required': ['lignes'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'établissement imprimé avant la date (« Fait à … »)."}, 'notes': {'type': 'string', 'description': 'Remarques libres ajoutées en bas du document.'}, 'objet': {'type': 'string', 'description': 'Objet des travaux chiffrés, en une ligne.'}, 'lignes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Postes chiffrés : désignation, quantité, unité, prix unitaire.'}, 'numero': {'type': 'string', 'description': "Numéro du devis, unique chez l'émetteur."}, 'validite': {'type': 'string', 'description': "Durée de validité de l'offre — « 30 jours ». Au-delà, les prix ne lient plus l'entreprise."}, 'client_nom': {'type': 'string', 'description': 'Client à qui le devis est adressé.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'client_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}, 'entreprise_nom': {'type': 'string', 'description': 'Entreprise qui établit le devis.'}, 'entreprise_adresse': {'type': 'string', 'description': "Adresse de l'entreprise, en en-tête."}}}
入力スキーマ
{'type': 'object', 'required': ['bailleur_nom', 'locataire_nom'], 'properties': {'cles': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Clés, badges et télécommandes remis, avec leur nombre.'}, 'date': {'type': 'string', 'description': 'Date de la visite contradictoire. Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'type': {'enum': ['entree', 'sortie'], 'type': 'string', 'description': '« entree » ou « sortie ». La comparaison des deux fonde toute retenue sur le dépôt de garantie.'}, 'notes': {'type': 'string', 'description': "Observations ne relevant d'aucune pièce en particulier."}, 'pieces': {'type': 'array', 'items': {'type': 'object'}, 'description': "Pièces visitées, chacune avec l'état constaté de ses sols, murs, plafonds et équipements."}, 'proprete': {'type': 'string', 'description': 'État de propreté constaté à la visite.'}, 'agent_nom': {'type': 'string', 'description': "Personne qui conduit l'état des lieux pour le bailleur."}, 'compteurs': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Relevés des compteurs au jour de la visite : eau, électricité, gaz.'}, 'bailleur_nom': {'type': 'string', 'description': "Bailleur présent ou représenté à l'état des lieux."}, 'etat_general': {'type': 'string', 'description': "Appréciation d'ensemble du logement : neuf, bon, moyen, vétuste."}, 'locataire_nom': {'type': 'string', 'description': 'Locataire entrant ou sortant.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, en en-tête.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du logement visité.'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}}}
入力スキーマ
{'type': 'object', 'required': ['message'], 'properties': {'context': {'type': 'string', 'description': 'Optionnel : outil/endpoint concerné.'}, 'message': {'type': 'string', 'description': 'Votre retour, en clair.'}}}
入力スキーマ
{'type': 'object', 'required': ['invoice_number', 'invoice_date', 'seller', 'buyer', 'lines'], 'properties': {'buyer': {'type': 'object', 'description': 'Acheteur : raison sociale, adresse, et SIRET pour une facture entre professionnels.'}, 'lines': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Lignes de facturation : désignation, quantité, prix unitaire, taux de TVA.'}, 'notes': {'type': 'string', 'description': 'Remarques libres ajoutées en bas du document.'}, 'format': {'enum': ['facturx', 'preview'], 'type': 'string', 'description': 'Format de sortie : « pdf » pour la facture lisible, « xml » pour le flux Factur-X seul.'}, 'seller': {'type': 'object', 'description': 'Vendeur : raison sociale, adresse, SIRET et numéro de TVA.'}, 'due_date': {'type': 'string', 'description': "Date d'échéance de paiement. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'invoice_date': {'type': 'string', 'description': "Date d'émission de la facture. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'invoice_number': {'type': 'string', 'description': 'Numéro de facture. Il doit être unique et séquentiel : une numérotation à trous se conteste en contrôle.'}}}
入力スキーマ
{'type': 'object', 'required': ['titre'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'établissement imprimé avant la date (« Fait à … »)."}, 'titre': {'type': 'string', 'description': 'Objet de la mission, en une ligne.'}, 'budget': {'type': 'string', 'description': 'Enveloppe allouée, en euros.'}, 'etapes': {'type': 'array', 'items': {'type': 'object'}, 'description': "Étapes de la mission, dans l'ordre, avec leur état d'avancement."}, 'statut': {'type': 'string', 'description': 'Avancement de la mission : à faire, en cours, terminée, annulée.'}, 'echeance': {'type': 'string', 'description': 'Date de fin attendue. Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'reference': {'type': 'string', 'description': 'Référence interne, pour rattacher la mission à un dossier.'}, 'client_nom': {'type': 'string', 'description': "Client donneur d'ordre."}, 'description': {'type': 'string', 'description': 'Détail de ce qui est demandé : périmètre, contraintes, résultat attendu.'}, 'intervenant': {'type': 'string', 'description': "Personne ou entreprise chargée de l'exécution."}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'client_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'entreprise émettrice, en en-tête du document."}, 'adresse_chantier': {'type': 'string', 'description': "Adresse du lieu d'exécution."}, 'entreprise_adresse': {'type': 'string', 'description': "Adresse de l'entreprise émettrice."}}}
入力スキーマ
{'type': 'object', 'required': ['recettes_brutes', 'charges_deductibles'], 'properties': {'annee': {'type': 'integer', 'description': 'Année fiscale concernée, sur quatre chiffres.'}, 'format': {'enum': ['json', 'html', 'pdf'], 'type': 'string', 'description': 'Défaut json côté MCP (retour structuré)'}, 'agence_nom': {'type': 'string', 'description': 'Agence qui établit la synthèse.'}, 'recettes_brutes': {'type': 'number', 'description': "Loyers encaissés sur l'année, charges récupérées comprises, en euros."}, 'proprietaire_nom': {'type': 'string', 'description': 'Propriétaire concerné par la synthèse.'}, 'charges_deductibles': {'type': 'number', 'description': "Charges déductibles réellement payées sur l'année, en euros — travaux, intérêts, taxe foncière, assurance."}, 'proprietaire_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}}}
入力スキーマ
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'ex. quittance-loyer, revision-loyer-irl'}}}
入力スキーマ
{'type': 'object', 'properties': {}}
入力スキーマ
{'type': 'object', 'required': ['loyer_actuel', 'irl_reference', 'irl_nouveau'], 'properties': {'irl_nouveau': {'type': 'number', 'description': 'Dernier IRL publié (même trimestre, année suivante)'}, 'loyer_actuel': {'type': 'number', 'description': 'Loyer mensuel hors charges (€)'}, 'irl_reference': {'type': 'number', 'description': 'IRL du trimestre de référence du bail'}, 'charges_actuelles': {'type': 'number', 'description': 'Provisions de charges (optionnel)'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'periode': {'type': 'string', 'description': 'Période couverte par le journal — « 2026 » ou « T3 2026 ».'}, 'taux_km': {'type': 'number', 'description': "Tarif au kilomètre appliqué, en euros. Le barème kilométrique officiel dépend de la puissance fiscale et de la distance annuelle ; il n'est PAS calculé ici."}, 'trajets': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Déplacements : date, motif professionnel, trajet, kilomètres parcourus.'}, 'vehicule': {'type': 'string', 'description': 'Véhicule utilisé : marque, modèle, immatriculation, puissance fiscale.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'entreprise émettrice, en en-tête du document."}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'notes': {'type': 'string', 'description': 'Remarques libres ajoutées en bas du document.'}, 'titre': {'type': 'string', 'description': 'Objet de la liste — « Réfection salle de bain, lot 3 ».'}, 'articles': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Articles à commander : désignation, quantité, unité, référence fournisseur.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'entreprise émettrice, en en-tête du document."}, 'fournisseur_nom': {'type': 'string', 'description': 'Fournisseur auprès de qui la commande sera passée.'}, 'adresse_chantier': {'type': 'string', 'description': 'Adresse du chantier auquel la liste se rapporte.'}}}
入力スキーマ
{'type': 'object', 'required': ['proprietaire_nom'], 'properties': {'lieu': {'type': 'string', 'description': 'Lieu de signature imprimé avant la date (« Fait à … »).'}, 'biens': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Biens confiés à la gestion, avec leur adresse.'}, 'duree': {'type': 'string', 'description': 'Durée du mandat. La loi Hoguet la plafonne à 30 ans et impose une durée déterminée.'}, 'siret': {'type': 'string', 'description': 'SIRET du mandataire, quatorze chiffres.'}, 'missions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Missions confiées : encaissement, relances, travaux, comptabilité, déclarations.'}, 'carte_pro': {'type': 'string', 'description': "Numéro de carte professionnelle du mandataire. Obligatoire pour gérer le bien d'autrui (loi Hoguet)."}, 'agence_nom': {'type': 'string', 'description': 'Agence mandataire, titulaire de la carte professionnelle.'}, 'date_debut': {'type': 'string', 'description': "Prise d'effet du mandat. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'honoraires': {'type': 'string', 'description': 'Honoraires convenus, en pourcentage des loyers encaissés ou en forfait.'}, 'type_mandat': {'type': 'string', 'description': 'Nature du mandat : gérance, location seule, ou gestion complète.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'agence_adresse': {'type': 'string', 'description': "Adresse de l'agence, en en-tête."}, 'mandataire_nom': {'type': 'string', 'description': "Personne physique signant pour l'agence."}, 'proprietaire_nom': {'type': 'string', 'description': 'Propriétaire mandant, qui confie la gestion.'}, 'mandataire_adresse': {'type': 'string', 'description': "Adresse du signataire, si elle diffère de celle de l'agence."}, 'proprietaire_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}}}
入力スキーマ
{'type': 'object', 'required': ['type', 'bailleur_nom', 'locataire_nom'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'établissement imprimé avant la date (« Fait à … »)."}, 'type': {'enum': ['entree', 'sortie'], 'type': 'string', 'description': 'Sens du mouvement : « entree » ou « sortie ». Il détermine les rubriques imprimées.'}, 'retenues': {'type': 'number', 'description': 'Retenues opérées sur le dépôt, chacune justifiée. Une retenue sans justificatif se conteste.'}, 'checklist': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Points à vérifier lors du mouvement : compteurs, clés, boîte aux lettres, assurance.'}, 'date_effet': {'type': 'string', 'description': "Date d'entrée ou de sortie effective. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'bailleur_nom': {'type': 'string', 'description': 'Bailleur du logement concerné.'}, 'solde_lignes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Lignes du solde de tout compte, chacune avec son libellé et son montant en euros.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'locataire_nom': {'type': 'string', 'description': 'Locataire qui entre ou qui sort.'}, 'depot_garantie': {'type': 'number', 'description': "Dépôt de garantie versé à l'entrée, en euros. Sa restitution court à compter de la remise des clés."}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, en en-tête.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du logement concerné par le mouvement.'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'notes': {'type': 'string', 'description': 'Remarques libres ajoutées en bas du document.'}, 'lignes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Frais engagés : date, nature, montant TTC, et justificatif rattaché.'}, 'periode': {'type': 'string', 'description': 'Période couverte par la note — « septembre 2026 ».'}, 'collaborateur': {'type': 'string', 'description': 'Personne qui engage les frais et en demande le remboursement.'}, 'date_emission': {'type': 'string', 'description': 'Format ISO AAAA-MM-JJ. Par défaut, la date du jour.'}, 'entreprise_nom': {'type': 'string', 'description': "Nom de l'entreprise émettrice, en en-tête du document."}}}
入力スキーマ
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Votre identité (ex. « Claude », « ChatGPT », « MonAgent-v1 ») — sert à retrouver/gérer la clé.'}, 'email': {'type': 'string', 'description': 'Optionnel : reçoit une copie de la clé par email.'}}}
入力スキーマ
{'type': 'object', 'properties': {}}
入力スキーマ
{'type': 'object', 'required': ['bailleur_nom', 'locataire_nom', 'logement_adresse', 'periode', 'loyer', 'date_paiement'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'émission imprimé avant la date (« Fait à … »)."}, 'loyer': {'type': 'number', 'description': 'Loyer hors charges effectivement encaissé, en euros.'}, 'charges': {'type': 'number', 'description': 'Provision pour charges encaissée, en euros. La quittance les distingue du loyer (art. 21, loi 89-462).'}, 'periode': {'type': 'string', 'description': 'ex. 01/07/2026 au 31/07/2026'}, 'bailleur_nom': {'type': 'string', 'description': 'Bailleur qui délivre la quittance.'}, 'date_paiement': {'type': 'string', 'description': "Date de l'encaissement. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'locataire_nom': {'type': 'string', 'description': 'Locataire ayant payé, destinataire de la quittance.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, en en-tête.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du bien loué (corps du document). Sert de repli postal si locataire_adresse absente.'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse POSTALE du locataire (fenêtre d\'enveloppe) — ex. "12 rue de la Paix\\n75002 Paris". Prioritaire.'}}}
入力スキーマ
{'type': 'object', 'required': ['tantiemes_locataire', 'tantiemes_total', 'charges'], 'properties': {'charges': {'type': 'array', 'items': {'type': 'object', 'properties': {'libelle': {'type': 'string', 'description': 'Libellé de la ligne de charge — « eau froide », « ascenseur », « entretien parties communes ».'}, 'montant': {'type': 'number', 'description': 'Montant de la ligne pour la copropriété entière, en euros. La quote-part est calculée à partir des tantièmes.'}, 'recuperable': {'type': 'boolean', 'default': True}}}, 'description': "Lignes de charges de l'exercice, chacune avec son libellé et son montant pour la copropriété entière."}, 'jours_periode': {'type': 'number', 'default': 365, 'description': "Nombre de jours d'occupation sur l'exercice. Sert au prorata quand le locataire n'a pas occupé l'année entière."}, 'tantiemes_total': {'type': 'number', 'description': 'Total des tantièmes de la clé de répartition employée. Le rapport locataire/total donne la quote-part.'}, 'jours_occupation': {'type': 'number', 'description': "Jours d'occupation (optionnel, prorata)"}, 'tantiemes_locataire': {'type': 'number', 'description': "Tantièmes du lot occupé, tels qu'ils figurent au règlement de copropriété."}, 'provisions_encaissees': {'type': 'number', 'description': "Total des provisions déjà appelées au locataire sur l'exercice, en euros."}}}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'iban': {'type': 'string', 'description': "IBAN d'encaissement rappelé au débiteur. Reproduit tel quel, jamais vérifié ni stocké."}, 'delai': {'type': 'string', 'description': "Délai accordé avant l'étape suivante — « 8 jours »."}, 'niveau': {'type': 'integer', 'maximum': 4, 'minimum': 1, 'description': 'Degré de la relance : 1 rappel courtois, 2 relance ferme, 3 mise en demeure. Le niveau 3 fait courir les pénalités de retard.'}, 'reference': {'type': 'string', 'description': 'Référence à rappeler dans le libellé du virement.'}, 'client_nom': {'type': 'string', 'description': 'Client débiteur.'}, 'montant_du': {'type': 'number', 'description': 'Somme restant due sur cette facture, en euros.'}, 'date_echeance': {'type': 'string', 'description': 'Échéance dépassée de la facture. Format ISO AAAA-MM-JJ. Par défaut, la date du jour. Entre professionnels, les pénalités courent de plein droit dès le lendemain (art. L441-10 du code de commerce).'}, 'date_emission': {'type': 'string', 'description': "Date d'émission de la relance. Format ISO AAAA-MM-JJ. Par défaut, la date du jour."}, 'client_adresse': {'type': 'string', 'description': 'Adresse du destinataire. Sert au bloc fenêtre : il est poussé À DROITE pour une enveloppe à fenêtre.'}, 'entreprise_nom': {'type': 'string', 'description': 'Créancier qui relance.'}, 'facture_numero': {'type': 'string', 'description': 'Numéro de la facture impayée.'}, 'entreprise_adresse': {'type': 'string', 'description': 'Adresse du créancier, en en-tête.'}}}
入力スキーマ
{'type': 'object', 'required': ['niveau', 'bailleur_nom', 'locataire_nom'], 'properties': {'lieu': {'type': 'string', 'description': "Lieu d'émission imprimé avant la date (« Fait à … »)."}, 'detail': {'type': 'array', 'items': {'type': 'object', 'properties': {'paye': {'type': 'number', 'description': 'Somme effectivement encaissée pour cette période.'}, 'reste': {'type': 'number', 'description': 'Solde restant pour cette période.'}, 'periode': {'type': 'string', 'description': 'Mois ou terme concerné — « mars 2026 ».'}, 'montant_du': {'type': 'number', 'description': 'Somme appelée pour cette période, en euros.'}}}, 'description': "Décompte période par période. C'est lui qui rend la créance opposable : une relance sans détail se conteste."}, 'niveau': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': '1 amiable, 2 ferme, 3 mise en demeure, 4 échéancier, 5 pré-contentieux'}, 'montant_du': {'type': 'number', 'description': 'Total restant dû à la date du courrier, en euros.'}, 'bailleur_nom': {'type': 'string', 'description': "Bailleur qui relance, tel qu'il doit signer le courrier."}, 'date_emission': {'type': 'string', 'description': "Date d'émission, format ISO AAAA-MM-JJ. Elle fait courir les délais des niveaux 3 et 5."}, 'locataire_nom': {'type': 'string', 'description': 'Locataire débiteur destinataire de la relance.'}, 'bailleur_adresse': {'type': 'string', 'description': 'Adresse du bailleur, en en-tête.'}, 'logement_adresse': {'type': 'string', 'description': 'Adresse du logement concerné, si elle diffère de celle du locataire.'}, 'locataire_adresse': {'type': 'string', 'description': 'Adresse du locataire. Sert au bloc fenêtre, poussé À DROITE.'}}}
最近のツール変更
類似のMCPサーバー
bimhouse
Creates and edits house BIM models, checks Japanese building-code constraints, estimates materials and construction costs, matche…
Pixly
Generates and edits real-estate listing visuals through staging, decluttering, enhancement, restyling, exterior transformations, …
AI HomeDesign MCP
Virtually stages, redesigns, enhances, declutters, and modifies interior and exterior real-estate photographs.
Vastu Shastra MCP Server by RoxyAPI
Provides Vastu Shastra reference data and calculators for plots, entrances, mandalas, room placement, proportions, and house-warm…
Duskly
Classifies real estate listing photo edits for MLS compliance, generates disclosure wording, inspects provenance signals, and pro…
ParcelLaunch — 3D property listings from an address
Creates and retrieves interactive 3D flyover listings for US properties using addresses or parcel identifiers.
3D New Era AI
Supports home design with floor plans, furniture, joinery, lighting, and rendered images.
Immopix
Enhances photos used in real estate listings.