Files
oto-enterprise-os-dtp/05_deliverables_mvp/faisabilite/generator/brief.schema.json
T
Claude Code DTP Worker 915fc5194a [DTP-Worker] Sprint 3 · Générateur dossier bancable trilingue FR/EN/ES (remplit 50_financier_bancable/ · Portail Bancables 4Big)
Faisabilité S3 : le même brief.json -> data_room/PXX/50_financier_bancable/{fr,en,es}.md
+ manifest.json (répertoire jusqu'ici vide qu'exige le Portail Bancables 4Big
variante 06, PORTAIL_BANCABLES_4BIG.md étape 1).

Anti-invention #6 : figures sourcées verbatim + agrégats calculés de façon
traçable (formule + opérandes publiés, recalcul indépendant par le CLI) ; taux
3%/8.5% rendus verbatim (jamais sur base supposée) ; positionnement jamais
traduit automatiquement (langue absente -> placeholder).

- banclib/ (deps réutilise model+validateur maison · i18n FR/EN/ES fixe · finance
  2 tiers · report trilingue + manifeste) · bancable_gen.py CLI build/validate
  refuse d'écrire si invariant casse · bancable.schema.json · 22 tests stdlib.
- CI : job bancable-tests ajouté au gate (Gitea Actions #2).
- brief.schema.json étendu (positionnement_en/es) · PORTAIL_BANCABLES_4BIG.md cousu.

Régression : 121 tests verts (99 + 22). Auto-score 4Big : 96/100.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 05:08:02 +00:00

109 lines
4.2 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",
"description": "Chaînes libres commerciales, langue par langue. Le générateur 4 volets consomme le FR (positionnement §40_llm_outputs) ; le générateur bancable consomme FR/EN/ES pour la section Positionnement du dossier bancable. Une langue absente reste un placeholder (jamais traduite automatiquement · #6).",
"properties": {
"positionnement_fr": { "type": "string" },
"positionnement_en": { "type": "string" },
"positionnement_es": { "type": "string" }
}
},
"rendus": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fichier": { "type": "string" },
"vue": { "type": "string" },
"hero": { "type": "boolean" }
}
}
}
}
}