[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:
@@ -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.
|
||||
Reference in New Issue
Block a user