Files
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

5.8 KiB
Raw Permalink Blame History

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épertoire 50_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 dans 50_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 + CANONICAL du 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.pydeux 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, None si 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).
  • banclib/report.py — rendu Markdown par langue (bannière CONFIDENTIEL systématique ; bannière synthétique + publiable:false si fixture) + manifeste agrégé machine-lisible.
  • bancable_gen.py — CLI build / 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éral None dans le rendu.
  • bancable.schema.json — contrat de sortie draft-07 (sous-ensemble validateur maison · valeurs numériques nullable ["number","null"]).
  • tests/test_bancable.py22 tests unittest (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 + oracle jsonschema), invariants CLI (détection de figure falsifiée), écriture réelle, déterminisme.
  • CI : job bancable-tests ajouté au gate (.gitea/workflows/ci.yml, Gitea Actions uniquement · #2).
  • Docs cousues : PORTAIL_BANCABLES_4BIG.md (nouvelle étape 0 → générateur) ; brief.schema.json du 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é), YAML ci.yml valide.
  • 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 .md FR/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).