DocType custom porteur des dossiers d'incitation touristique CONFOTUR (Ley 158-01, RD), référencé par RBAC (3 rôles) et le workflow vente mais jamais généré. Permissions = permissions_cibles RBAC mot pour mot ; is_submittable déduit de l'action submit ; estado/dossier_vente dérivés du workflow ; aucun taux/loi/montant fabriqué (#6). 14 invariants, 44 tests, hand-off dans out/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.2 KiB
Rapport de session · 2026-07-30 · session 16
Tâche
Sprint 5 · ONAPI/Legal — Générateur du DocType porteur CONFOTUR Application
(roadmap L55 « Refactor oto_module_confotur_application.py → dépôts
automatiques »).
Contexte / choix
Sprint 4 clos (sessions 11-15 : workflow vente, Dossier Vente, commissions, e-CF,
5 Workspaces). Prochain jalon = Sprint 5. Des trois volets Sprint 5, Mobile
(builds/submit stores) et le déploiement dépendent d'API externes / du VPS →
hors périmètre worker (#8). Le volet ONAPI/Legal est le seul entièrement
réalisable en repo, et il comble un gap réel : le DocType custom
CONFOTUR Application est référencé par le contrat RBAC (3 rôles) et par les états
terminaux du workflow vente (confotur_depose/confotur_approuve), mais aucun
générateur ne le produisait. La session 15 le listait justement comme DocType
custom « à créer » côté VPS.
Décision d'architecture (#1 ERPNext natif)
Le porteur d'un dossier CONFOTUR EST un DocType Frappe custom ; on livre donc
le fixture DocType natif (soumissible), pas un module externe. On refactorise
l'intention de oto_module_confotur_application.py en un générateur déterministe
aligné sur le pattern des livrables voisins (crm/dossier_vente, fiscal/ecf_dgii).
Fichiers créés — 05_deliverables_mvp/legal/confotur/
confotur_spec.json— structure métier seule (libellés + types + drapeaux · zéro chiffre) ; nom/permissions/soumissibilité non portés par le spec.cflib/frappe.py— connaissance Frappe DocType (VALID_PERMS incluantreport, porté parlegal-directeur).cflib/rbac_scan.py— lecture (jamais réécriture) des rôles RBAC visant le DocTypeCONFOTUR Application+ leurs actions ; réutiliseRoleResolverpourid → nom Frappe/portail.cflib/builder.py— assemblage déterministe{manifest, doctype}.confotur_application_gen.py— CLIbuild/validate· 14 invariants de cross-cohérence DocType↔RBAC↔workflow.confotur.schema.json— contrat de sortie draft-07.out/{doctype_confotur_application,MANIFEST}.json— hand-off (commité).tests/test_confotur.py— 44 tests (dont 8 négatifs + 3 gardes builder).README.md·.gitignore.
Fichiers modifiés
.gitea/workflows/ci.yml: joblegal-confotur-tests+ ajout augate.
Anti-invention / anti-dérive (cœur · #6)
- Nom du DocType = identité prouvée présente dans RBAC (invariant : ≥1 rôle le
vise + tous
custom). - Permissions = mot pour mot les
permissions_ciblesRBAC des 3 rôles (ventes-confoturread/write/create/print ·legal-onapiread/write/create ·legal-directeurread/write/submit/report) — ni ajout ni retrait. is_submittabledéduit de l'actionsubmitRBAC, recoupé avec le workflow (états CONFOTUR =doc_status 1).estado/dossier_ventedérivés duworkflow_vente(jamais en dur) ;entite_porteuse= entités CLAUDE.md.- Aucun taux d'incitation / article de loi / montant / référence d'autorité :
deux invariants refusent tout champ de type montant et tout
default(hors série de nommage). Paramètres légaux réels →data_room P05/P07côté VPS. depot_events(les « dépôts automatiques ») dérivés des transitions confotur du workflow ; invariant : leur rôle a bien accès au DocType (RBAC).
Résultat
DocType CONFOTUR Application : 18 champs (14 de donnée) · 4 sections · 3 rôles ·
soumissible · 2 évènements de dépôt (Déposer / Approuver).
Vérifs
- 44/44 tests ;
validate(schéma + 14 invariants) vert ; build déterministe. - Gate CI local vert (guard constraints · JSON · docs · YAML
ci.yml). - Régression : 304 tests verts au total (279 modules antérieurs + 25 workflow_vente + les 44 nouveaux se recoupant dans le discover).
Hors périmètre worker (VPS · #8)
Créer le module Frappe OTOV7 CONFOTUR, importer le DocType (bench import-fixtures), câbler les depot_events sur le Workflow OTO Vente Pipeline,
et renseigner les paramètres légaux/fiscaux depuis data_room P05/P07 (avec source)
→ agent ONAPI/Legal / ERPNext Backend.