Files
oto-enterprise-os-dtp/05_deliverables_mvp/rbac/RBAC_50_ROLES_SPEC.md
T
Claude Code DTP Worker cc3e5aef0e [DTP-Worker] Sprint 2 · ERPNext RBAC 50 rôles (schéma + data + spec + gate)
Livrable Sprint 2 (roadmap §S2 l.38 « RBAC 50 rôles configuration »,
GAP_ANALYSIS §3.4). Seul deliverable S2 100% autorable en-repo — les clones
Frontend/CRM dépendent des layouts LIVE (VPS).

- rbac/rbac.schema.json — contrat JSON-Schema draft-07 (sous-ensemble validateur
  maison, zéro pip) : 50 rôles, DocPerm par DocType, scope User Permission.
- rbac/rbac_50_roles.json — 50 rôles × 5 portails métier + console plateforme,
  mappés aux entités CLAUDE.md, ciblant des DocTypes ERPNext v15 natifs.
- rbac/RBAC_50_ROLES_SPEC.md — design RBAC 3 niveaux + séparation des pouvoirs +
  procédure d'application VPS (fixtures bench, hors périmètre worker).
- rbac/tests/test_rbac.py — 10 tests unittest (réutilise le validateur
  Publiciste, pas de doublon) : 50 rôles exacts, unicité, 5 portails, anti-
  élévation de privilège. Oracle jsonschema si présent.
- ci.yml — job rbac-tests ajouté au gate (Gitea Actions uniquement).
- GAP_ANALYSIS §3.4 + daily report 2026-07-30 (session 4) mis à jour.

Anti-invention #6 : aucun plafond monétaire inventé ; DocTypes non natifs
marqués custom → à confirmer VPS. Gate local vert (guard/json/docs + 10 tests
RBAC + 23 tests Publiciste régression).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 02:05:54 +00:00

7.2 KiB
Raw Blame History

Spec RBAC · 50 rôles · OTO Enterprise OS DTP

Livrable Sprint 2 · ERPNext Backend (roadmap ../../04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md §Sprint 2 l.38 : « ERPNext Backend : RBAC 50 rôles configuration » · ../GAP_ANALYSIS_SPRINT1.md §3.4 gap ERPNext).

Date : 2026-07-30 · Auteur : Claude Code DTP Worker · Version : 1.0.0


1. Objet

Design machine-lisible des 50 rôles RBAC (contrainte CLAUDE.md « RBAC 50 rôles ») à créer nativement dans Frappe/ERPNext v15. Le contrat de données est rbac.schema.json ; les données sont rbac_50_roles.json. Ce document ne touche jamais la production : il définit la cible que l'agent ERPNext Backend appliquera sur le VPS via bench / fixtures (voir §7).

Priorité ERPNext natif (contrainte #1) : chaque rôle est un DocType Role Frappe standard — aucun RBAC externe. CRM = ERPNext natif (jamais EspoCRM ni HubSpot — contrainte #3).

2. Modèle RBAC

Le RBAC Frappe combine trois niveaux, tous couverts par le schéma :

Niveau Frappe Champ du schéma Rôle
Role (DocType) erpnext_role_name Un DocType Role par ligne, préfixe OTO (anti-collision natif).
Permissions par DocType permissions_cibles[] Verbes Frappe (read/write/create/submit/cancel/report/…) par DocType.
Row-level (User Permission) scope_donnees own · equipe · entite (Company) · groupe (consolidé).

Défense en profondeur : le pouvoir set_user_permissions (gestion des habilitations) est réservé au seul rôle OTO Plateforme RBAC Admin (scope_donnees = groupe, famille = plateforme) — séparation des pouvoirs vérifiée par test automatisé.

3. Cartographie portails ↔ familles

Les 5 portails métier (roadmap Sprint 4 « 5 portails rôle ») + 1 console technique transversale (plateforme, hors du compte de 5) :

Portail Familles rattachées Nb rôles
direction direction, finance (CFO), faisabilite (analyste), legal 10
ventes ventes, marketing 12
construction construction, faisabilite (rendu/IFC/économiste) 10
achat achat 5
compta finance 8
plateforme (technique) plateforme 5
Total 50

Répartition indicative issue de rbac_50_roles.json ; la source de vérité reste le JSON (le test impose exactement 50 rôles et la couverture des 5 portails).

4. Cartographie rôles ↔ entités (CLAUDE.md §Entités)

Chaque rôle porte une entite_principale. « Groupe » = périmètre consolidé transversal (direction, contrôle de gestion, audit UAF, BI).

Entité Exemples de rôles
WAF (holding) Président, Directeur Juridique, Agent ONAPI
WA SRL Contrats de vente, Achats, Comptable général, Fiscaliste e-CF, Analyste faisabilité
AC Arias Cuevas Directeur/Chef de projet Construction, Ingénieur, Économiste, Magasinier
Consortium ECR DR (paymaster RH) Gestionnaire Paie
Helios RD (marque publique) Directeur des Ventes, Conseiller, Marketing, Comptable clients AR
Ploutos (patrimoine/monétaire) Trésorier
9060 QC (World Activities Cdn.) DevOps, RBAC Admin, QA, OTOIA, Mobile
Groupe (consolidé) DG, CFO, COO, CCO, Conseil, Contrôle de gestion, Audit UAF, BI

5. Les 50 rôles (résumé)

Détail complet (permissions par DocType, modules, scope) dans rbac_50_roles.json.

Direction / Gouvernance (6) — Président WAF · Directeur Général · CFO · COO · CCO · Conseil d'Administration (lecture).

Ventes (8) — Directeur des Ventes · Chef d'Équipe · Conseiller · Courtier externe · Coordinateur Réservations · Gestionnaire Contrats · Coordinateur CONFOTUR · Support Après-Vente.

Marketing (4) — Directeur Marketing · Publiciste (agent) · SEO · Social.

Construction (7) — Directeur · Chef de Projet · Ingénieur · Architecte · QA/QC · Coordinateur BIM · Superviseur Sous-traitants.

Achat (5) — Directeur · Acheteur · Gestionnaire Fournisseurs · Magasinier · Contrôleur Réception.

Finance / Compta (8) — Contrôleur de Gestion · Comptable Général · AP · AR · Trésorier (Ploutos) · Paie (Consortium ECR DR) · Fiscaliste e-CF · Audit UAF.

Faisabilité / AEC (4) — Analyste Faisabilité · Rendu 3D · IFC/Speckle · Économiste de la Construction.

Legal (2) — Directeur Juridique · Agent ONAPI.

Plateforme technique (6) — DevOps · RBAC Admin · QA · OTOIA (système) · Mobile · BI.

(6+8+4+7+5+8+4+2+6 = 50.)

6. Conformité aux contraintes CLAUDE.md

# Contrainte Application ici
1 ERPNext natif prioritaire 100 % DocType Role Frappe, aucun RBAC externe.
3 CRM = ERPNext natif Rôles ventes → Lead/Opportunity/Quotation/Customer natifs.
6 Zéro invention Aucun chiffre/plafond monétaire inventé ; seuls rôles, entités et DocTypes natifs (+ DocTypes DTP marqués custom à confirmer VPS).
8 VPS pour tous projets Application des fixtures = VPS (§7), jamais local.
Séparation des pouvoirs set_user_permissions réservé au RBAC Admin (test).

DocTypes custom: true (Faisabilité, Publiciste Log, CONFOTUR Application, API Access) = DocTypes DTP à créer — existence à confirmer VPS par l'agent ERPNext avant application (cohérent avec l'interdit « documenter du code sans vérifier l'existence courante »).

7. Application sur VPS (hors périmètre worker)

Ce worker n'écrit jamais sur le VPS. L'agent ERPNext Backend appliquera la cible côté serveur (erpnext-backend-1) :

  1. Générer les fixtures Role + Custom DocPerm depuis rbac_50_roles.json.
  2. bench --site frontend migrate pour installer les rôles.
  3. Créer les DocTypes DTP custom manquants (§6) après confirmation.
  4. Mapper les scope_donnees en User Permission par utilisateur.
  5. Vérification HTTP post-déploiement (workflow #3) + audit QA 4Big.

Un générateur de fixtures rbac_50_roles.json → fixtures/ est le prochain incrément (branchable sur le même patron que le Publiciste) ; il reste autorable en-repo sans toucher au VPS.

8. Vérification (en-repo, sans toucher au VPS)

  • python3 -m unittest discover -s tests -v10/10 verts (schéma maison + oracle jsonschema, 50 rôles, unicité, couverture 5 portails, séparation des pouvoirs).
  • rbac_50_roles.json : JSON strict valide (couvert par ci/validate_json.sh).
  • Job CI dédié rbac-tests ajouté au gate (.gitea/workflows/ci.yml, Gitea Actions uniquement · #2).

9. Auto-score 4Big du livrable : 95/100

Réserve 5 : application des fixtures + création des DocTypes custom + mapping User Permission = côté VPS (agent ERPNext, hors périmètre worker) ; plafonds d'approbation monétaires par rôle volontairement non chiffrés ici (anti-invention #6 — à définir avec la Direction sur pièces). Validé statiquement en-repo (10 tests verts + schéma conforme + gate CI).