Audit de second niveau : lit les hand-off out/ des livrables (workflow vente, Dossier Vente, commissions, e-CF DGII, CONFOTUR) et vérifie 17 contrôles en 5 dimensions (D1 Traçabilité/ISA 500 · D2 AML-UAF/Ley 155-17 · D3 Fiscal e-CF/Ley 32-23 · D4 Intégrité/IFRS · D5 Gouvernance-SoD/ISA 315). Anti-invention #6 : paramètre réglementaire non confirmé → A_CONFIRMER (open item assigné au métier), jamais fabriqué. Verdict PASS_WITH_OPEN_ITEMS (13 PASS, 0 FAIL, 4 à confirmer). Réutilise validateur Publiciste + RoleResolver CRM + roles_targeting CONFOTUR (zéro duplication). 37 tests · 15 invariants · build déterministe · régression 341 tests verts. Job CI qa-audit-5d-tests + gate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
16 KiB
Activity Log · 2026-07-30 · Claude Code DTP
Session 20260730_082714 (session 17)
Tâche : Sprint 5 · QA — Générateur de l'Audit 5D de conformité (roadmap Sprint 5 · QA « Audit UAF + normes ISA/IFRS 5D »). Dernier volet Sprint 5 réalisable en repo : ONAPI/Legal livré (session 16) et Mobile (builds/submit stores) dépend d'API externes / VPS (hors périmètre worker · #8).
Décision d'architecture : audit de second niveau — sa matière première
est le hand-off out/ déjà commité par les générateurs amont (workflow
vente, DocType Dossier Vente, barème commissions, plan e-CF DGII, DocType
CONFOTUR). Il ne relance rien et ne fabrique aucune donnée : il vérifie la
conformité + la cohérence croisée sur 17 contrôles en 5 dimensions :
D1 Traçabilité (ISA 500) · D2 AML/UAF (Ley 155-17) · D3 Fiscal e-CF (Ley 32-23 ·
DGII · Cardnet) · D4 Intégrité IFRS · D5 Gouvernance/SoD (ISA 315).
Fichiers créés — 05_deliverables_mvp/qa/audit_5d/ :
audit_spec.json(catalogue des 17 contrôles + bloc UAF déclaratif ·seuil_operacion: null)qalib/{__init__,deps,artifacts,controls,builder}.py(depsréutilise le validateur maison Publiciste,is_filled, leRoleResolverdu CRM etroles_targetingde CONFOTUR ·controls= 17 contrôles purs ·builderdéterministe)audit_5d_gen.py(CLIbuild/validate· 15 invariants)audit.schema.json(contrat de sortie draft-07)out/{audit_report,MANIFEST}.json(hand-off) ·tests/test_audit_5d.py(37 tests · une injection négative par contrôle) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobqa-audit-5d-tests+ ajout augate.
Anti-invention (cœur · #6) : l'audit remonte, ne fabrique pas. Un
paramètre réglementaire non confirmé produit A_CONFIRMER (open item assigné au
métier), jamais une valeur inventée « pour faire PASS ». FAIL = incohérence
inter-livrables OU valeur chiffrée sans source. Un invariant refuse tout
FAIL sur les livrables courants ; un test injecte une fabrication par contrôle
et vérifie le basculement en FAIL.
Résultat : verdict PASS_WITH_OPEN_ITEMS — 13 PASS · 0 FAIL · 4 à
confirmer (D1.1 taux → Direction ; D1.2 RNC émetteur → Compta ; D1.3
ITBIS/TipoCambio → Fiscaliste eCF ; D2.3 seuil UAF → Oficial de Cumplimiento).
Ce sont les 4 mêmes paramètres null des générateurs amont, consolidés en une
check-list unique de confirmation VPS.
Vérifs : 37/37 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 341 tests verts au total ; build déterministe.
Hors périmètre worker (VPS · #8) : confirmation des 4 paramètres
réglementaires (avec source, dans data_room PXX) + tests E2E Playwright sur
le desk réel → métiers propriétaires / agent QA VPS.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session17.md.
Auto-score 4Big : 96/100.
Session 20260730_075712 (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 »). Sprint 4 étant clos (sessions 11-15), c'est le premier
volet Sprint 5 réalisable en repo — Mobile (builds/submit stores) et déploiement
dépendent d'API externes / VPS (hors périmètre worker · #8).
Gap comblé : 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 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 soumissible → on livre le fixture natif, pas de module externe.
Fichiers créés — 05_deliverables_mvp/legal/confotur/ :
confotur_spec.json(structure métier seule · zéro chiffre)cflib/{__init__,frappe,rbac_scan,builder}.py(frappeVALID_PERMS incluantreport·rbac_scanlit les rôles RBAC visant le DocType · réutilise leRoleResolverdeworkflow_vente)confotur_application_gen.py(CLIbuild/validate· 14 invariants)confotur.schema.json(contrat de sortie draft-07)out/{doctype_confotur_application,MANIFEST}.json(hand-off) ·tests/test_confotur.py(44 tests dont 8 négatifs) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: joblegal-confotur-tests+ ajout augate.
Anti-invention (cœur · #6) : les permissions du DocType SONT, mot pour mot,
les permissions_cibles RBAC (ventes-confotur/legal-onapi/legal-directeur) — ni
ajout ni retrait ; is_submittable déduit de l'action submit RBAC ;
estado/dossier_vente dérivés du workflow ; aucun taux/loi/montant/référence
d'autorité (deux invariants refusent tout champ de type montant et tout default) ;
paramètres légaux réels → data_room P05/P07 côté VPS. Les depot_events (« dépôts
automatiques ») dérivent des transitions confotur du workflow.
Résultat : DocType CONFOTUR Application — 18 champs (14 de donnée), 4 sections,
3 rôles, soumissible, 2 évènements de dépôt.
Vérifs : 44/44 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 304 tests verts au total ; build déterministe.
Hors périmètre worker (VPS · #8) : créer le module OTOV7 CONFOTUR, importer
le DocType, câbler les depot_events sur le Workflow, renseigner les paramètres
légaux/fiscaux depuis data_room P05/P07 → agent ONAPI/Legal / ERPNext Backend.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session16.md.
Auto-score 4Big : 96/100.
Session 20260730_072711 (session 15)
Tâche : Sprint 4 · Frontend Console — Générateur de Workspaces ERPNext (5 portails rôle) (roadmap ligne 49 « 5 portails (Ventes/Construction/Achat/ Compta/Direction) » ; dernier volet ouvert de Sprint 4, les volets CRM et ERPNext Backend ayant été livrés sessions 11-14).
Décision d'architecture (#1 ERPNext natif) : dans ERPNext v15, le portail de
landing par rôle EST le DocType Workspace → on livre 5 Workspaces natifs,
pas de framework de dashboard externe.
Fichiers créés — 05_deliverables_mvp/frontend/portails/ :
portails_spec.json(mise en page seule : cartes/raccourcis/thème · aucun DocType ni rôle hors contrat)wslib/{__init__,frappe,builder}.py(connaissance FrappeWorkspace+ enfants · dérive rôles et DocTypes du contratrbac_50_roles.json)workspaces_gen.py(CLIbuild/validate· 12 invariants de cross-cohérence)workspace.schema.json(contrat de sortie draft-07)out/{workspace,MANIFEST}.json(hand-off) ·tests/test_workspaces.py(19 tests dont 4 négatifs) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobfrontend-portails-tests+ ajout augate.
Anti-invention (cœur · #6) : la source de vérité est le contrat RBAC, jamais
la spec. Tout lien/raccourci vise un DocType présent dans les permissions_cibles
du portail (droit prouvé) ; couverture exhaustive sans doublon ; flag custom
issu du contrat ; aucun chiffre stocké (compteurs live du desk) ; tokens de marque
(#0a0a12/#f0b429/Fraunces/Cormorant) repris verbatim de CLAUDE.md #4 avec source.
Résultat : 5 Workspaces (Ventes/Construction/Achat/Compta/Direction), 44 rôles
restreints ; console technique plateforme exclue (roadmap = 5 portails métier).
Vérifs : 19/19 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 260 tests verts au total ; build déterministe.
Hors périmètre worker (VPS · #8) : fixer Workspace.module à l'import + créer
les DocTypes custom (CONFOTUR Application, Faisabilité, Publiciste Log) +
appliquer le thème desk → agents ERPNext Backend / Frontend Console.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session15.md.
Auto-score 4Big : 96/100.
Session 20260730_065711 (session 14)
Tâche : Sprint 4 · ERPNext Backend — Générateur de configuration e-CF DGII (Compupar) (roadmap ligne 51 « e-CF DGII intégration (Compupar) » ; les commissions ayant été livrées session 13, l'e-CF restait ouvert · GAP §Backend).
Fichiers créés — 05_deliverables_mvp/fiscal/ecf_dgii/ :
ecf_spec.json(catalogue 10 types e-CF DGII · table FormaPago · format e-NCF · moneda USD/DOP · RNC/ITBIS/TipoCambionull· provider Compupar · 2 évènements d'émission ·field_mapDossier Vente → e-CF)ecflib/{__init__,deps,ncf,builder}.py(réutiliseis_filled/CANONICAL/validate+RoleResolverdu moduleworkflow_vente· composeur e-NCF traçableE+tipo(2)+seq(10)façonfinance.py)ecf_dgii_gen.py(CLIbuild/validate· 12 invariants de cross-cohérence)ecf.schema.json(contrat de sortie draft-07)fixtures/dossier_exemple.json(test only · opérandes fictifs sourcés)out/{ecf_plan,MANIFEST}.json(hand-off) ·tests/test_ecf_dgii.py(39 tests) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobfiscal-ecf-tests+ ajout augate.
Anti-invention (cœur · #6) : aucun chiffre fiscal OTO n'est documenté →
rnc_emisor / taux ITBIS / TipoCambio / endpoints Compupar restent null
(a_confirmer) ; un invariant refuse toute valeur fixée sans source. Seules
les données de référence DGII (types e-CF, FormaPago, format e-NCF) sont encodées,
avec source. Le composeur e-NCF reste None tant qu'un opérande manque.
Cross-cohérence : chaque émission se déclenche sur un état soumis du
workflow (réservation/contrat), sur un champ Currency réel du Dossier Vente,
par le rôle compta compta-fiscaliste-ecf résolu depuis RBAC ; FormaPago
défaut = 3 (Tarjeta) car Cardnet (#10).
Vérifs : 39/39 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 241 tests verts au total.
Hors périmètre worker (VPS · #8) : confirmation RNC/ITBIS/TipoCambio par la Compta + configuration Compupar (endpoints/certificat/credentials) + câblage sur les transitions Workflow → agent ERPNext Backend.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session14.md.
Auto-score 4Big : 96/100.
Session 20260730_062706 (session 13)
Tâche : Sprint 4 · ERPNext Backend — Générateur du barème de commissions vendeurs (roadmap ligne 51 « commissions vendeurs auto »).
Fichiers créés — 05_deliverables_mvp/crm/commissions/ :
bareme_spec.json(5 évènements · toustaux_pct: null· anti-invention #6)commlib/{__init__,deps,finance,builder}.py(réutiliseis_filled/CANONICAL/validate+RoleResolverdu moduleworkflow_vente· calcul traçablecommission = base × tauxfaçonbanclib/finance.py)commissions_gen.py(CLIbuild/validate· 10 invariants de cross-cohérence)bareme.schema.json(contrat de sortie draft-07)fixtures/dossier_exemple.json(test only · chiffres fictifs sourcés)out/{commission_plan,MANIFEST}.json(hand-off) ·tests/test_commissions.py(25 tests) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobcrm-commissions-tests+ ajout augate.
Anti-invention (cœur · #6) : aucun taux de commission n'est documenté dans
CLAUDE.md → le barème livré porte taux_pct: null partout ; un invariant refuse
tout taux fourni sans source. Le calcul reste None tant qu'un opérande
manque (jamais 0-inventé · formule toujours affichée).
Cross-cohérence : chaque évènement paie sur un état soumis du workflow
(pas de brouillon), sur un champ Currency réel du Dossier Vente, pour un rôle
ventes résolu depuis rbac_50_roles.json.
Vérifs : 25/25 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 202 tests verts au total.
Hors périmètre worker (VPS · #8) : confirmation des taux réels par la Direction + câblage du calcul sur les transitions Workflow → agent ERPNext Backend.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session13.md.
Auto-score 4Big : 96/100.
Session 20260730_055704 (session 12)
Tâche : Sprint 4 · CRM — Générateur du DocType porteur OTO Dossier Vente
(complète le hand-off du workflow vente : le document réel que le Workflow pilote).
Fichiers créés — 05_deliverables_mvp/crm/dossier_vente/ :
doctype_spec.json(structure métier · zéro chiffre · Projet P01..P09 · USD/DOP)dvlib/{__init__,frappe,builder}.py(connaissance Frappe + assemblage cross-cohérent · réutilise_UPDATE_FIELD+RoleResolverdeworkflow_vente)doctype_dossier_vente_gen.py(CLIbuild/validate· 12 invariants)doctype.schema.json(contrat de sortie draft-07)out/{doctype_oto_dossier_vente,MANIFEST}.json(hand-off)tests/test_dossier_vente.py(31 tests) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobcrm-dossier-vente-tests+ ajout augate.
Cross-cohérence (cœur du livrable) : nom / champ d'état / valeurs de statut /
is_submittable / permissions tous dérivés de workflow_vente_spec.json
(source unique · anti-dérive) ; rôles résolus depuis rbac_50_roles.json (#6).
Vérifs : 31/31 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 177 tests verts au total.
Hors périmètre worker (VPS · #8) : création module OTO Ventes + import réel
DocType puis Workflow → agent ERPNext Backend.
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session12.md.
Auto-score 4Big : 96/100.
Session 20260730_052701 (session 11)
Tâche : Sprint 4 · CRM — Générateur de workflow vente ERPNext
(lead → visite → devis → réservation → contrat → CONFOTUR).
Fichiers créés — 05_deliverables_mvp/crm/workflow_vente/ :
workflow_vente_spec.json(contrat pipeline · 9 états / 11 transitions)wflib/{__init__,rbac,erpnext,builder}.py(résolution RBAC + connaissance Frappe + assemblage déterministe)workflow_vente_gen.py(CLIbuild/validate· 9 invariants de graphe)workflow.schema.json(contrat de sortie draft-07)out/{workflow,workflow_state,workflow_action_master,MANIFEST}.json(hand-off)tests/test_workflow_vente.py(25 tests) ·README.md·.gitignore
Fichiers modifiés :
.gitea/workflows/ci.yml: jobcrm-workflow-vente-tests+ ajout augate.
Réutilisation (zéro duplication · #6) : rôles résolus depuis
rbac/rbac_50_roles.json (jamais de nom Frappe en dur) + validateur maison
Publiciste.
Vérifs : 25/25 tests ; gate CI local vert (guard + JSON + docs + YAML) ; régression 146 tests verts au total.
Hors périmètre worker (VPS) : création DocType OTO Dossier Vente + import
fixtures (bench migrate) → agent ERPNext Backend (#8).
Détail complet : voir
05_deliverables_mvp/daily_reports/2026-07-30-session11.md.
Auto-score 4Big : 96/100.