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>
7.2 KiB
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) :
- Générer les fixtures
Role+Custom DocPermdepuisrbac_50_roles.json. bench --site frontend migratepour installer les rôles.- Créer les DocTypes DTP
custommanquants (§6) après confirmation. - Mapper les
scope_donneesenUser Permissionpar utilisateur. - 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 -v→ 10/10 verts (schéma maison + oraclejsonschema, 50 rôles, unicité, couverture 5 portails, séparation des pouvoirs).rbac_50_roles.json: JSON strict valide (couvert parci/validate_json.sh).- Job CI dédié
rbac-testsajouté 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).