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>
41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
"""Réutilisation des briques déjà livrées (workflow #5 · zéro duplication).
|
|
|
|
Le dossier bancable dérive du MÊME brief que le générateur Faisabilité 4 volets
|
|
et doit rester cohérent avec lui :
|
|
- `is_filled` : même notion de « champ réellement rempli » que le générateur
|
|
(un placeholder / « non défini » / 0-inventé n'est pas rempli).
|
|
- `CANONICAL` : les paramètres canoniques CLAUDE.md #9/#10 (3 % / 8.5 % / 52 % ·
|
|
USD+DOP · Cardnet · Letter US) — jamais issus du brief.
|
|
- `validate` : le validateur JSON-Schema maison du Publiciste (draft-07,
|
|
sous-ensemble), pour valider le manifeste SANS installation pip
|
|
(le gate CI Gitea Actions tourne sans réseau · CLAUDE.md #2).
|
|
|
|
On importe par manipulation de `sys.path` (comme `faisabilite_gen.py`) plutôt que
|
|
de dupliquer ces valeurs — une seule source de vérité pour tout le mandat.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
_HERE = os.path.dirname(os.path.abspath(__file__))
|
|
# faisabilite/bancable/banclib → générateur (genlib) : ../../generator
|
|
_GEN = os.path.normpath(os.path.join(_HERE, "..", "..", "generator"))
|
|
# faisabilite/bancable/banclib → Publiciste (lib) : ../../../publiciste
|
|
_PUB = os.path.normpath(os.path.join(_HERE, "..", "..", "..", "publiciste"))
|
|
|
|
for _p in (_GEN, _PUB):
|
|
if _p not in sys.path:
|
|
sys.path.insert(0, _p)
|
|
|
|
from genlib import model # type: ignore # noqa: E402
|
|
from lib import validator # type: ignore # noqa: E402
|
|
|
|
is_filled = model.is_filled
|
|
CANONICAL = model.CANONICAL
|
|
TEMPLATE_VERSION = model.TEMPLATE_VERSION
|
|
validate = validator.validate
|
|
|
|
__all__ = ["is_filled", "CANONICAL", "TEMPLATE_VERSION", "validate"]
|