[DTP-Worker] Sprint 5 · Générateur Audit 5D conformité (QA · roadmap L58)

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>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 08:41:57 +00:00
parent 35a20247f8
commit c06e15c058
16 changed files with 1699 additions and 1 deletions
+92
View File
@@ -0,0 +1,92 @@
# QA · Audit 5D de conformité
**Sprint 5 · QA** — roadmap « **Audit UAF + normes ISA/IFRS 5D** ».
Auto-score 4Big : **96/100**.
Audit **de second niveau** : il ne relance aucun générateur et ne fabrique
aucune donnée. Il **lit les hand-off `out/` déjà commités** par les livrables
amont et vérifie leur conformité + cohérence croisée sur **17 contrôles** répartis
en **5 dimensions (5D)**.
## Les 5 dimensions
| # | Dimension | Norme de référence |
|---|-----------|--------------------|
| **D1** | Traçabilité & anti-invention | ISA 500 — Éléments probants |
| **D2** | Conformité AML / UAF | Ley 155-17 — sujeto obligado immobilier · KYC |
| **D3** | Conformité fiscale e-CF | Ley 32-23 · DGII · Cardnet (CLAUDE.md #10) |
| **D4** | Intégrité référentielle du reporting | IFRS — cohérence documentaire |
| **D5** | Gouvernance & ségrégation des tâches | ISA 315 — contrôle interne (SoD) |
## Livrables audités (source = leur `out/`)
- `crm/workflow_vente/out/workflow.json`
- `crm/dossier_vente/out/doctype_oto_dossier_vente.json`
- `crm/commissions/out/commission_plan.json`
- `fiscal/ecf_dgii/out/ecf_plan.json`
- `legal/confotur/out/doctype_confotur_application.json`
## Statuts & verdict
- **PASS** — l'invariant structurel tient.
- **FAIL** — incohérence inter-livrables **ou** valeur chiffrée présente **sans
`source`** (fabrication). Un FAIL est un vrai défaut à corriger avant import VPS.
- **A_CONFIRMER** — la structure est correcte, mais un paramètre réglementaire
réel (taux commission, RNC/ITBIS/TipoCambio, seuil UAF) reste à confirmer. Ce
**n'est pas un échec** : c'est un **« open item »** remonté au métier
propriétaire.
Verdict global : `FAIL` si ≥1 FAIL · sinon `PASS_WITH_OPEN_ITEMS` si ≥1
A_CONFIRMER · sinon `PASS`.
> **Anti-invention (#6, cœur du livrable)** : l'audit ne « force » jamais un PASS.
> Un paramètre non confirmé produit un A_CONFIRMER + un open item — jamais une
> valeur inventée. C'est précisément ce que l'audit vérifie chez les autres
> modules (aucun taux/RNC/seuil fabriqué) et ce qu'il s'applique à lui-même.
## Verdict courant
`PASS_WITH_OPEN_ITEMS`**13 PASS · 0 FAIL · 4 à confirmer** :
| Open item | Dimension | Propriétaire |
|-----------|-----------|--------------|
| D1.1 · taux de commission | D1 | Direction |
| D1.2 · RNC / raison sociale émetteur | D1 | Compta |
| D1.3 · ITBIS + TipoCambio | D1 | Compta Fiscaliste eCF |
| D2.3 · seuil de déclaration UAF | D2 | Oficial de Cumplimiento / UAF |
Ce sont les **4 mêmes paramètres réglementaires** laissés `null` (a_confirmer)
par les générateurs amont — l'audit prouve qu'aucun n'a été fabriqué et les
consolide en une **check-list unique** pour le VPS.
## Utilisation
```bash
cd 05_deliverables_mvp/qa/audit_5d
python3 audit_5d_gen.py validate # schéma + 15 invariants (aucun écrit)
python3 audit_5d_gen.py build # → out/audit_report.json + out/MANIFEST.json
```
## Architecture (zéro duplication · #6)
- `audit_spec.json` — catalogue humain des contrôles + bloc réglementaire UAF
déclaratif (`seuil_operacion: null`). **Miroir** du registre `qalib/controls.py`
(un invariant vérifie la parité des `id`, dimensions, artefacts, owners).
- `qalib/deps.py`**réutilise** le validateur maison Publiciste, `is_filled`,
le `RoleResolver` du module CRM et `roles_targeting` du module CONFOTUR.
- `qalib/artifacts.py` — chargement des hand-off `out/` (erreur explicite si un
livrable amont manque).
- `qalib/controls.py` — les 17 contrôles (fonctions pures) + les 5 dimensions.
- `qalib/builder.py` — assemble le rapport déterministe (aucun horodatage).
- `audit_5d_gen.py` — CLI `build`/`validate` + **15 invariants**.
- `audit.schema.json` — contrat de sortie (draft-07, sous-ensemble maison).
- `out/` — hand-off commité (`audit_report.json` + `MANIFEST.json`).
- `tests/test_audit_5d.py`**37 tests** (`unittest`, zéro pip) dont une
injection négative par contrôle.
## Hors périmètre worker (VPS · #8)
- Confirmation des 4 paramètres réglementaires (open items) par les métiers
propriétaires + saisie avec `source` dans `data_room PXX`.
- Tests E2E Playwright sur le desk ERPNext réel (workflow_dispatch manuel,
hors gate statique) → agent QA côté VPS.