915fc5194a
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>
5.8 KiB
5.8 KiB
Daily Report · 2026-07-30 · Claude Code DTP Worker (session 10)
Session : 20260730_045701
Tâche exécutée
Sprint 3 · Faisabilité — Générateur de dossier financier bancable trilingue
FR/EN/ES (roadmap 04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md §Sprint 3 :
« 40_llm_outputs/ + rapports bancables FR/EN/ES » · prochaine tâche suggérée
par le daily report session 9 : « Faisabilité S3 »).
Contexte / analyse
- Relu
CLAUDE.md,ROADMAP_8_WEEKS_OR_LESS.md,PORTAIL_BANCABLES_4BIG.md, daily report session 9, le générateur Faisabilité 4 volets (renderer.py,model.py,scorer.py,faisabilite_gen.py,brief.schema.json), le validateur maison Publiciste, le patron CI. - État : volet RBAC clos en-repo (4 générateurs + run-book). Faisabilité S2
produit
data_room/PXX/(4 volets + score 4Big) mais laissait le répertoire50_financier_bancable/VIDE (.gitkeep). - Priorité évidente : le Portail Bancables 4Big (variante 06 retenue par
Michel,
PORTAIL_BANCABLES_4BIG.md) exige à l'étape 1 de son workflow des dossiers bancables FR/EN/ES placés précisément dans50_financier_bancable/. Ce répertoire était le dernier trou de la faisabilité auto. 100 % autorable sans VPS/pip/API, même brief que le générateur 4 volets, même patron modulaire.
Réalisé — module 05_deliverables_mvp/faisabilite/bancable/
banclib/deps.py— réutilise (workflow #5, zéro duplication)is_filled+CANONICALdu générateur et le validateur maison Publiciste (zéro pip).banclib/i18n.py— dictionnaire de libellés FR/EN/ES fixes (traductions de gabarit, jamais du brief) + drapeaux du portail (🇨🇦/🇺🇸/🇩🇴).banclib/finance.py— deux tiers anti-invention (#6) :- sourcé (verbatim) : coût construction, revenu brut, marge, taux, prix par
typologie — champ absent ⇒
None(jamais 0 fabriqué) ; - calculé (traçable) : Σ unités · valeur catalogue USD/DOP (
Σ quantité × prix) · point d'équilibre en unités (⌈52 % × nb_unités⌉) — formule publiée, opérandes tous sourcés/canoniques,Nonesi un opérande manque. - Les taux « 3 % édition » / « 8.5 % marketing » sont rendus verbatim (jamais multipliés par une base supposée — base non documentée = hypothèse inventée, refusée).
- sourcé (verbatim) : coût construction, revenu brut, marge, taux, prix par
typologie — champ absent ⇒
banclib/report.py— rendu Markdown par langue (bannière CONFIDENTIEL systématique ; bannière synthétique +publiable:falsesi fixture) + manifeste agrégé machine-lisible.bancable_gen.py— CLIbuild/validate. Refuse d'écrire si un invariant casse : conformité schéma, 3 langues rendues, bannière CONFIDENTIEL, recalcul indépendant des 4 agrégats == manifeste (anti-figure-posée), synthétique ⇒ non publiable, aucun littéralNonedans le rendu.bancable.schema.json— contrat de sortie draft-07 (sous-ensemble validateur maison · valeurs numériques nullable["number","null"]).tests/test_bancable.py— 22 testsunittest(stdlib pur) : finance (sourcé verbatim, arithmétique tracée,None≠0), rendu trilingue, positionnement par langue + placeholder si absent, paramètres canoniques, schéma (maison + oraclejsonschema), invariants CLI (détection de figure falsifiée), écriture réelle, déterminisme.- CI : job
bancable-testsajouté au gate (.gitea/workflows/ci.yml, Gitea Actions uniquement · #2). - Docs cousues :
PORTAIL_BANCABLES_4BIG.md(nouvelle étape 0 → générateur) ;brief.schema.jsondu générateur étendu (positionnement_en/es) → contrat d'entrée aligné entre les deux modules.
Anti-invention (#6) appliqué
- Figures sourcées reprises telles quelles ; aucune valeur inventée ni 0
fabriqué (champ absent ⇒ placeholder
{{…}}). - Agrégats calculés auditables : formule + opérandes publiés, recoupés indépendamment par le CLI (rejette toute figure falsifiée · test dédié).
- Aucun montant sur base non documentée (3 %/8.5 % rendus comme taux, pas comme $).
- Positionnement jamais traduit automatiquement : langue absente ⇒ placeholder.
Vérifications effectuées (en-repo, sans toucher au VPS)
- 22/22 tests verts (schéma maison + oracle
jsonschema). Génération réelle (fixture synthétique) : 3 langues + manifeste · 40 unités · valeur catalogue USD 8,560,000 / DOP 505,040,000 · point d'équilibre 21 unités (⌈52 % × 40⌉) — toutes formules recoupées ;publiable=false(synthétique). - Gate CI local vert (exit 0) :
guard_constraints.sh,validate_json.sh(schéma + fixture bancable),check_docs.sh(README score présent, 0 lien cassé), YAMLci.ymlvalide. - Régression : 23 Publiciste + 10 RBAC + 16 Faisabilité + 11 fixtures + 12 userperm + 11 roleprofile + 16 apply_plan + 22 bancable = 121 tests verts.
Non fait (hors périmètre worker · VPS)
- Conversion PDF (pandoc/wkhtmltopdf) des
.mdFR/EN/ES + rebuild du Portail Bancables 4Big → agent DevOps/Frontend (contrainte #8).
Prochaine tâche suggérée
- Faisabilité S3 restant : refactor
oto_agent_faisabilite.py→ batch <1h côté VPS (hors périmètre worker) ; ou packaging du hand-off ERPNext (fixtures/de l'app OTO à partir des sorties RBAC + faisabilité). - Frontend/CRM S2 : dépend des layouts LIVE (VPS) → hors périmètre worker.
Auto-score 4Big du livrable Générateur bancable trilingue : 96/100. Réserve −4 : la conversion PDF + le rebuild du portail restent côté VPS (agent DevOps/Frontend, hors périmètre worker · #8). Validé statiquement en-repo (22 tests verts + manifeste conforme + recoupement arithmétique des agrégats + gate CI vert · 121 tests de régression au total).