[DTP-Worker] Sprint 8 · buffer · Fiscal/e-CF DGII : gate d'IDENTITÉ des ÉVÈNEMENTS D'ÉMISSION (« le cœur du livrable ») — ENSEMBLE émetteurs {réservation,contrat} ⨯ DISJONCTION des brouillons (jamais de facture sur brouillon) ⨯ base_field ⨯ rôle unique compta-fiscaliste-ecf double-ancré RBAC portail compta ⨯ FormaPago défaut 3/Tarjeta/Cardnet #10, recomputés d'ecf_plan.json
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1508,3 +1508,66 @@ taux_a_confirmer` périmé 5→4 (c seul) · promesse anti-invention retirée du
|
||||
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; la
|
||||
confirmation réelle des taux + le câblage du calcul restent côté Direction/VPS).
|
||||
- **Auto-score 4Big** : 96/100.
|
||||
|
||||
## Session `20260801_140334` · Buffer S8 · Domaine Fiscal/e-CF DGII : l'**IDENTITÉ des ÉVÈNEMENTS D'ÉMISSION** — la section §Cross-cohérence présentée comme **« le cœur du livrable »** (README:40-59) — était transcrite À LA MAIN SANS aucun gate d'identité. Le SEUL gate fiscal existant couvre le **contrat de format e-NCF** (`E+tipo(2)+seq(10)=13`) + le compte de tests ; le bloc racine, le seul agrégat « e-CF 39 tests ». RIEN ne confrontait à l'artefact byte-gaté QUEL évènement du pipeline émet un e-CF, sur quel `base_field`, par quel rôle Compta, ni la FormaPago défaut.
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement
|
||||
close ; poursuite de la série anti-dérive (CLAUDE.md #6). Même classe « identité
|
||||
d'un ENSEMBLE » que la colonne « Entité » de la SPEC §4, l'énumération des onglets
|
||||
Mobile ou les transitions à séparation des pouvoirs du workflow — appliquée à la
|
||||
**surface data-derived la plus critique du module fiscal** : les `emission_events`
|
||||
d'`ecf_plan.json`, jamais gatés hors le format e-NCF et le compte de tests.
|
||||
|
||||
**Dérive silencieuse fermée** :
|
||||
- `05_deliverables_mvp/fiscal/ecf_dgii/README.md:40-59` (§Cross-cohérence, « le cœur
|
||||
du livrable ») — transcrit À LA MAIN : (L48) l'ENSEMBLE des évènements émetteurs
|
||||
(« seulement réservation et contrat ») + l'ENSEMBLE exclu des brouillons (« on ne
|
||||
facture pas un brouillon (lead/visite/devis) ») ; (L50) l'ENSEMBLE des `base_field`
|
||||
(`montant_reservation`/`montant_contrat`) ; (L53-54) le rôle UNIQUE
|
||||
(`compta-fiscaliste-ecf` · « OTO Compta Fiscaliste eCF » · portail compta) ;
|
||||
(L59) la FormaPago défaut (« = 3 (Tarjeta) » · Cardnet #10).
|
||||
- Source faisant autorité (byte-gatée par `check_artifacts`) :
|
||||
`out/ecf_plan.json` — `emission_events[]` (`update_value`/`base_field`/`role_id`/
|
||||
`erpnext_role_name`), `forma_pago_defaut` + catalogue `formas_pago`. Double
|
||||
ancrage du rôle sur `rbac/rbac_50_roles.json` (id → `portail` compta → nom ERPNext).
|
||||
- Piège #6/#5, la dérive la plus dommageable ici : **AJOUTER un `emission_event` sur
|
||||
un état BROUILLON** (ex. `devis`) — l'anti-pattern EXACT que le module interdit
|
||||
(« on ne facture pas un brouillon ») — pendant que L48 dit encore « seulement
|
||||
réservation et contrat » → l'agent ERPNext Backend câblerait une **facture émise
|
||||
avant soumission/encaissement**. Aucune suite `tests/` (FONCTIONS de résolution/
|
||||
composition, jamais la prose vs l'artefact) ne l'attrape.
|
||||
- **État courant** : émetteurs `{contrat, reservation}`, base_field
|
||||
`{montant_contrat, montant_reservation}`, rôle unique `compta-fiscaliste-ecf`
|
||||
(portail compta · RBAC concordant), FormaPago défaut `3`/Tarjeta/Cardnet —
|
||||
tout recoupe l'artefact EXACTEMENT (anti-invention #6, rien à réécrire). Le
|
||||
défaut est la **surface ungated**.
|
||||
|
||||
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « Fiscal · e-CF DGII —
|
||||
IDENTITÉ des ÉVÈNEMENTS D'ÉMISSION » avant `sys.exit`) : (0) **cohérence interne** —
|
||||
rôle UNIQUE sur tous les évènements · défaut ∈ catalogue FormaPago ; (1) **ENSEMBLE
|
||||
émetteurs** — set-diff README `seulement …` == `update_value` de l'artefact (ni
|
||||
fantôme ni manquant · accents/casse normalisés) ; (2) **DISJONCTION** — l'ensemble
|
||||
exclu `(lead/visite/devis)` ∩ émetteurs = ∅ (jamais de facture sur brouillon — mord
|
||||
un `devis` émetteur ET la self-contradiction du README) ; (3) **ENSEMBLE `base_field`**
|
||||
— set-diff README == artefact ; (4) **rôle unique** cité backtické + nom ERPNext,
|
||||
**double-ancré** sur `rbac_50_roles` (id → portail compta → nom concordant) ; (5)
|
||||
**FormaPago défaut** — code == artefact · label ∈ catalogue · motif cite Cardnet (#10).
|
||||
Un claim absent échoue AUSSI (traçabilité #6).
|
||||
|
||||
**6 morsures vérifiées** : artefact facture un BROUILLON (`devis` émetteur → mismatch
|
||||
d'ensemble **ET** clash de disjonction · 2 morsures en une) · artefact renomme un
|
||||
`base_field` (`montant_reservation→montant_acompte`) · artefact change FormaPago défaut
|
||||
`3→1` (Efectivo) · artefact casse le rôle unique (2ᵉ évènement → `compta-comptable`) ·
|
||||
README périmé « seulement contrat » (réservation retiré) · motif du défaut ne cite
|
||||
plus « Cardnet » (#10) ; restauré = green : émetteurs · disjonction · base_field ·
|
||||
rôle == RBAC · FormaPago == artefact · exit 0. Working tree byte-restauré
|
||||
(`git checkout --`, **JAMAIS** `git clean`, interdit absolu) · **7 gates re-verts**
|
||||
(`check_readme_claims`/`check_docs`/`guard_constraints`/`check_artifacts`/
|
||||
`check_ci_integrity`/`validate_json`/`check_regression`).
|
||||
|
||||
- `ci/README.md` (clause récap du pipeline `check-readme-claims` + paragraphe détaillé
|
||||
« IDENTITÉ des évènements d'émission e-CF ancrée sur `ecf_plan.json` ») mis à jour.
|
||||
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
|
||||
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; la connexion
|
||||
Compupar réelle + l'émission e-CF en production restent côté ERPNext Backend/VPS).
|
||||
- **Auto-score 4Big** : 96/100.
|
||||
|
||||
Reference in New Issue
Block a user