[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,49 @@
|
||||
"""Réutilisation des briques déjà livrées (workflow #5 · zéro duplication).
|
||||
|
||||
L'audit 5D ne redéfinit rien qui existe ailleurs dans le mandat. On importe —
|
||||
jamais on ne duplique — :
|
||||
- `validate` : le validateur JSON-Schema maison du Publiciste (draft-07,
|
||||
sous-ensemble) → valider le rapport SANS pip, le gate CI
|
||||
Gitea Actions tournant sans réseau (CLAUDE.md #2).
|
||||
- `is_filled` : la notion partagée de « champ réellement rempli » (un
|
||||
placeholder ou un `null` n'est PAS rempli) — au cœur de
|
||||
l'anti-invention #6.
|
||||
- `RoleResolver` : la table `role_id → nom de rôle Frappe` du module CRM,
|
||||
seule autorité de nommage des rôles (contrat RBAC).
|
||||
- `roles_targeting` : la lecture des rôles RBAC qui visent un DocType, déjà
|
||||
écrite pour le générateur CONFOTUR.
|
||||
|
||||
Import par `sys.path` (idiome des modules voisins) — une seule source de vérité.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
_HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
# qa/audit_5d/qalib → 05_deliverables_mvp
|
||||
_DELIVERABLES = os.path.normpath(os.path.join(_HERE, "..", "..", ".."))
|
||||
|
||||
_GEN = os.path.join(_DELIVERABLES, "faisabilite", "generator")
|
||||
_PUB = os.path.join(_DELIVERABLES, "publiciste")
|
||||
_WF = os.path.join(_DELIVERABLES, "crm", "workflow_vente")
|
||||
_CONF = os.path.join(_DELIVERABLES, "legal", "confotur")
|
||||
|
||||
for _p in (_GEN, _PUB, _WF, _CONF):
|
||||
if _p not in sys.path:
|
||||
sys.path.insert(0, _p)
|
||||
|
||||
from genlib import model # type: ignore # noqa: E402
|
||||
from lib import validator # type: ignore # noqa: E402
|
||||
from wflib.rbac import RoleResolver # type: ignore # noqa: E402
|
||||
from cflib import rbac_scan # type: ignore # noqa: E402
|
||||
|
||||
is_filled = model.is_filled
|
||||
validate = validator.validate
|
||||
roles_targeting = rbac_scan.roles_targeting
|
||||
load_contract = rbac_scan.load_contract
|
||||
|
||||
__all__ = [
|
||||
"is_filled", "validate", "RoleResolver", "roles_targeting", "load_contract",
|
||||
]
|
||||
Reference in New Issue
Block a user