Files
oto-enterprise-os-dtp/05_activity_log/2026-07-30.md
T
Claude Code DTP Worker 7117394651 [DTP-Worker] Sprint 4 · Générateur configuration e-CF DGII (Compupar) (ERPNext Backend · roadmap L51)
Facturation électronique dominicaine cross-cohérente workflow↔DocType↔RBAC :
émission sur état soumis, base Currency réelle, rôle compta-fiscaliste-ecf.
Anti-invention (#6) : RNC/ITBIS/TipoCambio/endpoints Compupar null (a_confirmer,
jamais sans source) ; seules les données de référence DGII encodées avec source.
Composeur e-NCF traçable (E+tipo(2)+seq(10)). 39 tests · 12 invariants · gate CI
(job fiscal-ecf-tests) · 241 tests de régression verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 07:08:55 +00:00

7.4 KiB
Raw Blame History

Activity Log · 2026-07-30 · Claude Code DTP

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éés05_deliverables_mvp/fiscal/ecf_dgii/ :

  • ecf_spec.json (catalogue 10 types e-CF DGII · table FormaPago · format e-NCF · moneda USD/DOP · RNC/ITBIS/TipoCambio null · provider Compupar · 2 évènements d'émission · field_map Dossier Vente → e-CF)
  • ecflib/{__init__,deps,ncf,builder}.py (réutilise is_filled/CANONICAL/ validate + RoleResolver du module workflow_vente · composeur e-NCF traçable E+tipo(2)+seq(10) façon finance.py)
  • ecf_dgii_gen.py (CLI build/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 : job fiscal-ecf-tests + ajout au gate.

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éés05_deliverables_mvp/crm/commissions/ :

  • bareme_spec.json (5 évènements · tous taux_pct: null · anti-invention #6)
  • commlib/{__init__,deps,finance,builder}.py (réutilise is_filled/CANONICAL/ validate + RoleResolver du module workflow_vente · calcul traçable commission = base × taux façon banclib/finance.py)
  • commissions_gen.py (CLI build/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 : job crm-commissions-tests + ajout au gate.

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éés05_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 + RoleResolver de workflow_vente)
  • doctype_dossier_vente_gen.py (CLI build/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 : job crm-dossier-vente-tests + ajout au gate.

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éés05_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 (CLI build/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 : job crm-workflow-vente-tests + ajout au gate.

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.