7117394651
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>
150 lines
7.4 KiB
Markdown
150 lines
7.4 KiB
Markdown
# 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éé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/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`](../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 · 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`](../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` + `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`](../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` (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`](../05_deliverables_mvp/daily_reports/2026-07-30-session11.md).
|
||
|
||
**Auto-score 4Big** : 96/100.
|