{
  "audit": "OTO QA · Audit 4Big Qualité",
  "version": "1.0",
  "reference_cadre": "CLAUDE.md #5 (score minimum 95/100 · niveau 4Big obligatoire) · Roadmap Sprint 7 · QA « Audit 4Big niveau 95+/100 sur 100% deliverables »",
  "thresholds": {
    "pass_score": 95,
    "min_doc_bytes": 400,
    "min_test_methods": 8
  },
  "seuil_note": "pass_score = 95 est repris VERBATIM de CLAUDE.md #5. min_doc_bytes / min_test_methods sont des planchers structurels (pas des chiffres métier) — aucun chiffre de projet n'est fabriqué ici.",
  "criteria": [
    {
      "id": "DOC",
      "label": "Documentation livrable (README / SPEC ≥ seuil)",
      "weight": 20,
      "reference": "4Big · un livrable non documenté n'est pas bancable (check_docs.sh)"
    },
    {
      "id": "CONTRAT",
      "label": "Contrat de sortie explicite (*.schema.json)",
      "weight": 20,
      "reference": "4Big · toute sortie hand-off est validée contre un schéma draft-07"
    },
    {
      "id": "TESTS",
      "label": "Couverture de tests (≥ seuil de méthodes test_*)",
      "weight": 25,
      "reference": "4Big · zéro régression silencieuse — le gate CI exige des tests"
    },
    {
      "id": "CLI",
      "label": "CLI reproductible (entrypoint __main__ + sous-commandes argparse)",
      "weight": 15,
      "reference": "Workflow #2 · build/validate reproductible sans réseau (Gitea Actions)"
    },
    {
      "id": "HANDOFF",
      "label": "Hand-off VPS présent et intègre (out/MANIFEST.json + artefact JSON valide)",
      "weight": 20,
      "reference": "#8 VPS · chaque générateur produit un hand-off importable côté desk"
    }
  ],
  "archetypes": {
    "generator": {
      "description": "Produit un hand-off out/ importable côté VPS (fixtures/plan Frappe). Les 5 critères s'appliquent.",
      "applicable": ["DOC", "CONTRAT", "TESTS", "CLI", "HANDOFF"]
    },
    "data_room": {
      "description": "Écrit dans data_room/PXX (template faisabilité / dossier bancable), pas de hand-off out/. HANDOFF non applicable.",
      "applicable": ["DOC", "CONTRAT", "TESTS", "CLI"]
    },
    "parser": {
      "description": "Parse data_room/ → projets_master.json ; son contrat de sortie vit chez le consommateur (faisabilite/projets_master.schema.json). CONTRAT local et HANDOFF non applicables.",
      "applicable": ["DOC", "TESTS", "CLI"]
    },
    "contract": {
      "description": "Contrat de données pur (JSON + schéma + tests), sans entrypoint exécutable. CLI et HANDOFF non applicables.",
      "applicable": ["DOC", "CONTRAT", "TESTS"]
    }
  },
  "self_module": "qa/audit_4big",
  "self_note": "L'auditeur ne s'auto-audite pas (séparation des pouvoirs · ISA 315). Le périmètre couvre 100% des AUTRES livrables gated par le CI. La couverture est prouvée par l'invariant : {working-directory CI sous 05_deliverables_mvp} \\ {self_module} == {modules registre}.",
  "modules": [
    { "id": "publiciste", "path": "publiciste", "sprint": "S2", "archetype": "parser", "source": "roadmap Sprint 2 · Publiciste (parser faisabilité → projets_master.json) · ci.yml publiciste-tests" },
    { "id": "rbac", "path": "rbac", "sprint": "S2", "archetype": "contract", "source": "roadmap Sprint 2 · RBAC 50 rôles (contrat rbac_50_roles.json) · ci.yml rbac-tests" },
    { "id": "faisabilite-generator", "path": "faisabilite/generator", "sprint": "S3", "archetype": "data_room", "source": "roadmap Sprint 3 · Faisabilité générateur 4 volets → data_room/PXX · ci.yml faisabilite-gen-tests" },
    { "id": "rbac-fixtures", "path": "rbac/fixtures_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · fixtures Role + Custom DocPerm · ci.yml rbac-fixtures-tests" },
    { "id": "rbac-userperm", "path": "rbac/userperm_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · plan User Permission · ci.yml rbac-userperm-tests" },
    { "id": "rbac-roleprofile", "path": "rbac/roleprofile_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · Role Profile par portail · ci.yml rbac-roleprofile-tests" },
    { "id": "rbac-applyplan", "path": "rbac/apply_plan", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · agrégateur run-book RBAC · ci.yml rbac-applyplan-tests" },
    { "id": "bancable", "path": "faisabilite/bancable", "sprint": "S3", "archetype": "data_room", "source": "roadmap Sprint 3 · dossier bancable trilingue → data_room/PXX/50_financier_bancable · ci.yml bancable-tests" },
    { "id": "crm-workflow-vente", "path": "crm/workflow_vente", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · workflow vente lead→CONFOTUR · ci.yml crm-workflow-vente-tests" },
    { "id": "crm-dossier-vente", "path": "crm/dossier_vente", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · DocType OTO Dossier Vente · ci.yml crm-dossier-vente-tests" },
    { "id": "crm-commissions", "path": "crm/commissions", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · barème commissions vendeurs · ci.yml crm-commissions-tests" },
    { "id": "crm-financement-bancaire", "path": "crm/financement_bancaire", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · workflow vente end-to-end (volet financement bancaire) · DIRECTIVE_FINANCEMENT_BANCAIRE_COMPLET_20260803.md · ci.yml crm-financement-bancaire-tests" },
    { "id": "fiscal-ecf", "path": "fiscal/ecf_dgii", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · e-CF DGII Compupar · ci.yml fiscal-ecf-tests" },
    { "id": "frontend-portails", "path": "frontend/portails", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · Workspaces 5 portails rôle · ci.yml frontend-portails-tests" },
    { "id": "legal-confotur", "path": "legal/confotur", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · DocType CONFOTUR Application · ci.yml legal-confotur-tests" },
    { "id": "qa-audit-5d", "path": "qa/audit_5d", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · Audit 5D conformité · ci.yml qa-audit-5d-tests" },
    { "id": "seo", "path": "seo", "sprint": "S6", "archetype": "generator", "source": "roadmap Sprint 6 · SEO trilingue mots-clés/schema.org/hreflang · ci.yml seo-tests" },
    { "id": "frontend-chat-otoia", "path": "frontend/chat_otoia", "sprint": "S6", "archetype": "generator", "source": "roadmap Sprint 6 · Chat OTOIA embarqué (Custom Block) · ci.yml chat-otoia-tests" },
    { "id": "demo-scenarios", "path": "demo/scenarios", "sprint": "S7", "archetype": "generator", "source": "roadmap Sprint 7 · Scénarios démo (P07 banquier / P05 client) · ci.yml demo-scenario-tests" },
    { "id": "qa-regression", "path": "qa/regression", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · Regression tests exhaustifs (matrice méta-niveau) · ci.yml qa-regression-tests" },
    { "id": "devops-deploy-runbook", "path": "devops/deploy_runbook", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · DevOps Deployment production complet (run-book VPS unifié) · ci.yml devops-deploy-runbook-tests" },
    { "id": "qa-acceptance", "path": "qa/acceptance", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · QA buffer (matrice d'acceptation / traçabilité MVP roadmap → preuve) · ci.yml qa-acceptance-tests" },
    { "id": "mobile-app-config", "path": "mobile/app_config", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · Mobile (config app Expo/EAS + navigation par rôle) · ci.yml mobile-app-config-tests" },
    { "id": "pie-manifest", "path": "pie/manifest", "sprint": "S8", "archetype": "generator", "source": "directive PIE (Project Identity Engine · Annexe 12 · V10.1 · 2026-08-03) livrée durant le buffer S8 (roadmap L72-76) · manifest de dépendances faisabilité(SSOT)→downstream · ci.yml pie-manifest-tests" }
  ],
  "notes": [
    "Audit de MÉTA-NIVEAU : chaque note de module est CALCULÉE depuis des faits du dépôt (présence README/schéma, nombre de méthodes test_*, entrypoint CLI, intégrité out/) — jamais saisie à la main (#6).",
    "Un critère non applicable à l'archétype d'un module est EXCLU du dénominateur (pas de pénalité pour un hand-off qu'un module de contrat n'a jamais vocation à produire) ; les poids restants sont renormalisés à 100.",
    "Le verdict global est PASS si et seulement si TOUS les modules du registre atteignent ≥ 95/100 ET la couverture == 100% des livrables gated (hors auditeur)."
  ]
}
