911f70b9ab
Générateur brief JSON → data_room/PXX/ (template canonique v1.0) :
- genlib/{model,scorer,renderer}.py : params canoniques imposés (#9/#10),
barème 4Big §7, rendu aligné sur le parser Publiciste (round-trip garanti)
- faisabilite_gen.py : CLI score/scaffold/generate/batch ; axe machine-lisible
PROUVÉ (re-parse Publiciste + validation version.json), jamais auto-décerné
- Anti-invention #6 : champ 🔴 absent → placeholder + champs_manquants +
rétrogradation statut ; prix manquant → {{…}} (jamais 0)
- 16 tests unittest (stdlib, réutilise parser+validateur Publiciste · #5) +
oracle jsonschema ; job CI faisabilite-gen-tests dans le gate (Gitea only #2)
- brief.schema.json + fixtures synthétiques ; README ; GAP §2 mis à jour
Boucle de valeur fermée : generator → data_room → Publiciste → projets_master.json
Auto-score 4Big : 96/100.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
106 lines
3.8 KiB
JSON
106 lines
3.8 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://oto.dtp/schemas/faisabilite/brief.schema.json",
|
|
"title": "Brief d'entrée du générateur Faisabilité 4 volets",
|
|
"description": "Données projet SOURCÉES fournies au générateur. Le générateur ne fabrique aucun chiffre (#6) : tout champ absent devient un placeholder et rétrograde le statut. Les paramètres canoniques (3%/8.5%/52% · USD+DOP · Cardnet · Letter US) ne figurent PAS ici — ils sont imposés par le générateur.",
|
|
"type": "object",
|
|
"required": ["projet"],
|
|
"additionalProperties": true,
|
|
"properties": {
|
|
"projet": { "type": "string", "pattern": "^P0[1-9]$" },
|
|
"nom": { "type": "string" },
|
|
"synthetique": { "type": "boolean", "description": "true = fixture de test, jamais publiable." },
|
|
"sources": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Références archives justifiant les chiffres (axe Traçabilité §7)."
|
|
},
|
|
"masterplan": {
|
|
"type": "object",
|
|
"properties": {
|
|
"localisation": { "type": "string" },
|
|
"terrain_m2": { "type": ["number", "null"] },
|
|
"terrain_tareas": { "type": ["number", "null"] },
|
|
"zonage": { "type": "string" },
|
|
"nb_unites": { "type": ["integer", "null"] },
|
|
"nb_phases": { "type": ["integer", "null"] },
|
|
"cos": { "type": "string" },
|
|
"acces": { "type": "string" },
|
|
"ref_plan_masse": { "type": "string" },
|
|
"phasage": { "type": "string" }
|
|
}
|
|
},
|
|
"architecture": {
|
|
"type": "object",
|
|
"properties": {
|
|
"parti_archi": { "type": "string" },
|
|
"nb_batiments": { "type": ["integer", "null"] },
|
|
"nb_niveaux": { "type": ["integer", "null"] },
|
|
"ref_rendus": { "type": "string" },
|
|
"taux_conversion": {
|
|
"type": "object",
|
|
"properties": {
|
|
"taux": { "type": ["number", "null"] },
|
|
"date": { "type": "string" },
|
|
"source": { "type": "string" }
|
|
}
|
|
},
|
|
"typologies": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"nom": { "type": "string" },
|
|
"quantite": { "type": ["integer", "null"] },
|
|
"surface_interieure_m2": { "type": ["number", "null"] },
|
|
"surface_terrasse_m2": { "type": ["number", "null"] },
|
|
"surface_totale_m2": { "type": ["number", "null"] },
|
|
"prix_usd": { "type": ["number", "null"] },
|
|
"prix_dop": { "type": ["number", "null"] }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"paysage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"concept_paysage": { "type": "string" },
|
|
"amenities": { "type": "array", "items": { "type": "string" } },
|
|
"services_inclus": { "type": "array", "items": { "type": "string" } },
|
|
"experience": { "type": "string" },
|
|
"durabilite": { "type": "string" }
|
|
}
|
|
},
|
|
"ingenierie": {
|
|
"type": "object",
|
|
"properties": {
|
|
"structure": { "type": "string" },
|
|
"reseaux": { "type": "string" },
|
|
"contraintes_site": { "type": "string" },
|
|
"cout_construction_usd": { "type": ["number", "null"] },
|
|
"revenu_brut_usd": { "type": ["number", "null"] },
|
|
"marge_pct": { "type": ["number", "null"] },
|
|
"regime_fiscal": { "type": "string" }
|
|
}
|
|
},
|
|
"commercial": {
|
|
"type": "object",
|
|
"properties": {
|
|
"positionnement_fr": { "type": "string" }
|
|
}
|
|
},
|
|
"rendus": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fichier": { "type": "string" },
|
|
"vue": { "type": "string" },
|
|
"hero": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|