[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>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 02:05:54 +00:00
parent f0a7d71357
commit cc3e5aef0e
8 changed files with 1291 additions and 4 deletions
+832
View File
@@ -0,0 +1,832 @@
{
"version": "1.0.0",
"generated_at": "2026-07-30T00:00:00Z",
"cible_rbac_roles": 50,
"portails_business": ["ventes", "construction", "achat", "compta", "direction"],
"roles": [
{
"id": "direction-president-waf",
"nom_fr": "Président · WAF (Holding)",
"famille": "direction",
"portail": "direction",
"entite_principale": "WAF",
"niveau": 5,
"erpnext_role_name": "OTO Direction Président",
"scope_donnees": "groupe",
"description": "Vue consolidée toutes entités ; approbations stratégiques et plafonds haut niveau. Lecture large, écriture limitée aux validations.",
"modules": ["Accounts", "CRM", "Selling", "Buying", "Projects", "OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "Sales Invoice", "actions": ["read", "report", "print", "export"] },
{ "doctype": "Purchase Invoice", "actions": ["read", "report", "export"] },
{ "doctype": "Opportunity", "actions": ["read", "report"] },
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "report"] }
]
},
{
"id": "direction-dg",
"nom_fr": "Directeur Général",
"famille": "direction",
"portail": "direction",
"entite_principale": "Groupe",
"niveau": 5,
"erpnext_role_name": "OTO Direction Générale",
"scope_donnees": "groupe",
"description": "Pilotage opérationnel du groupe ; approbation devis/commandes au-delà des plafonds directeurs.",
"modules": ["Accounts", "CRM", "Selling", "Buying", "Projects", "HR"],
"permissions_cibles": [
{ "doctype": "Quotation", "actions": ["read", "write", "submit", "cancel", "report"] },
{ "doctype": "Sales Order", "actions": ["read", "write", "submit", "cancel", "report"] },
{ "doctype": "Purchase Order", "actions": ["read", "write", "submit", "cancel", "report"] },
{ "doctype": "Project", "actions": ["read", "write", "report"] }
]
},
{
"id": "direction-cfo",
"nom_fr": "Directeur Financier (CFO)",
"famille": "finance",
"portail": "direction",
"entite_principale": "Groupe",
"niveau": 5,
"erpnext_role_name": "OTO Direction Financière",
"scope_donnees": "groupe",
"description": "Responsable comptabilité/trésorerie consolidées ; validation des écritures et des paiements.",
"modules": ["Accounts", "Buying", "Selling", "Report"],
"permissions_cibles": [
{ "doctype": "Journal Entry", "actions": ["read", "write", "create", "submit", "cancel", "report"] },
{ "doctype": "Payment Entry", "actions": ["read", "write", "submit", "cancel", "report"] },
{ "doctype": "Sales Invoice", "actions": ["read", "write", "submit", "cancel", "report", "export"] },
{ "doctype": "Purchase Invoice", "actions": ["read", "write", "submit", "cancel", "report", "export"] }
]
},
{
"id": "direction-coo",
"nom_fr": "Directeur des Opérations (COO)",
"famille": "direction",
"portail": "direction",
"entite_principale": "Groupe",
"niveau": 4,
"erpnext_role_name": "OTO Direction Opérations",
"scope_donnees": "groupe",
"description": "Coordination construction/achat/logistique multi-projets ; supervision des jalons.",
"modules": ["Projects", "Buying", "Stock", "Report"],
"permissions_cibles": [
{ "doctype": "Project", "actions": ["read", "write", "create", "report"] },
{ "doctype": "Task", "actions": ["read", "write", "create", "report"] },
{ "doctype": "Purchase Order", "actions": ["read", "report"] }
]
},
{
"id": "direction-cco",
"nom_fr": "Directeur Commercial (CCO)",
"famille": "direction",
"portail": "direction",
"entite_principale": "Groupe",
"niveau": 4,
"erpnext_role_name": "OTO Direction Commerciale",
"scope_donnees": "groupe",
"description": "Stratégie commerciale groupe ; supervision pipeline et marketing.",
"modules": ["CRM", "Selling", "Website", "Report"],
"permissions_cibles": [
{ "doctype": "Opportunity", "actions": ["read", "write", "report", "export"] },
{ "doctype": "Quotation", "actions": ["read", "write", "report"] },
{ "doctype": "Lead", "actions": ["read", "report"] }
]
},
{
"id": "direction-board",
"nom_fr": "Conseil d'Administration (lecture consolidée)",
"famille": "direction",
"portail": "direction",
"entite_principale": "Groupe",
"niveau": 5,
"erpnext_role_name": "OTO Conseil Administration",
"scope_donnees": "groupe",
"description": "Accès strictement lecture aux tableaux de bord consolidés et rapports 4Big (aucune écriture).",
"modules": ["Accounts", "Report", "OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "Sales Invoice", "actions": ["read", "report"] },
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "report"] }
]
},
{
"id": "ventes-directeur",
"nom_fr": "Directeur des Ventes",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 4,
"erpnext_role_name": "OTO Ventes Directeur",
"scope_donnees": "entite",
"description": "Pilote le pipeline Helios RD ; approuve devis et remises ; assigne les leads aux équipes.",
"modules": ["CRM", "Selling", "Report"],
"permissions_cibles": [
{ "doctype": "Lead", "actions": ["read", "write", "create", "share", "report"] },
{ "doctype": "Opportunity", "actions": ["read", "write", "create", "report", "export"] },
{ "doctype": "Quotation", "actions": ["read", "write", "create", "submit", "cancel", "report"] },
{ "doctype": "Sales Order", "actions": ["read", "write", "submit", "report"] }
]
},
{
"id": "ventes-chef-equipe",
"nom_fr": "Chef d'Équipe Ventes",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 3,
"erpnext_role_name": "OTO Ventes Chef Équipe",
"scope_donnees": "equipe",
"description": "Supervise les conseillers de son équipe ; réaffecte leads et suit les objectifs.",
"modules": ["CRM", "Selling"],
"permissions_cibles": [
{ "doctype": "Lead", "actions": ["read", "write", "create", "report"] },
{ "doctype": "Opportunity", "actions": ["read", "write", "create", "report"] },
{ "doctype": "Quotation", "actions": ["read", "write", "create", "submit"] }
]
},
{
"id": "ventes-conseiller",
"nom_fr": "Conseiller Ventes",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Ventes Conseiller",
"scope_donnees": "own",
"description": "Gère ses propres leads/opportunités et produit des devis (soumis à approbation).",
"modules": ["CRM", "Selling"],
"permissions_cibles": [
{ "doctype": "Lead", "actions": ["read", "write", "create"] },
{ "doctype": "Opportunity", "actions": ["read", "write", "create"] },
{ "doctype": "Quotation", "actions": ["read", "write", "create", "print", "email"] }
]
},
{
"id": "ventes-courtier-externe",
"nom_fr": "Agent Externe / Courtier",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 1,
"erpnext_role_name": "OTO Ventes Courtier Externe",
"scope_donnees": "own",
"description": "Partenaire externe : soumet des leads et suit ses propres réservations/commissions, sans accès aux données internes.",
"modules": ["CRM"],
"permissions_cibles": [
{ "doctype": "Lead", "actions": ["read", "create"] },
{ "doctype": "Opportunity", "actions": ["read"] }
]
},
{
"id": "ventes-reservations",
"nom_fr": "Coordinateur Réservations",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Ventes Réservations",
"scope_donnees": "entite",
"description": "Enregistre les réservations/dépôts, gère la disponibilité des unités et l'agenda des visites.",
"modules": ["Selling", "CRM"],
"permissions_cibles": [
{ "doctype": "Sales Order", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Payment Entry", "actions": ["read", "create"] }
]
},
{
"id": "ventes-contrats",
"nom_fr": "Gestionnaire Contrats de Vente",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "WA SRL",
"niveau": 3,
"erpnext_role_name": "OTO Ventes Contrats",
"scope_donnees": "entite",
"description": "Établit et suit les contrats (promesse → contrat définitif) ; assure la cohérence avec le devis validé.",
"modules": ["Selling", "Accounts"],
"permissions_cibles": [
{ "doctype": "Sales Order", "actions": ["read", "write", "submit", "print", "email"] },
{ "doctype": "Sales Invoice", "actions": ["read", "create", "print"] }
]
},
{
"id": "ventes-confotur",
"nom_fr": "Coordinateur CONFOTUR (Ventes)",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "WA SRL",
"niveau": 3,
"erpnext_role_name": "OTO Ventes CONFOTUR",
"scope_donnees": "entite",
"description": "Monte les dossiers d'incitation CONFOTUR côté vente (pièces client, éligibilité) ; liaison avec l'agent ONAPI/Legal.",
"modules": ["Selling", "OTOV7 CONFOTUR"],
"permissions_cibles": [
{ "doctype": "CONFOTUR Application", "custom": true, "actions": ["read", "write", "create", "print"] },
{ "doctype": "Customer", "actions": ["read"] }
]
},
{
"id": "ventes-apres-vente",
"nom_fr": "Support Après-Vente",
"famille": "ventes",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Ventes Après-Vente",
"scope_donnees": "entite",
"description": "Traite les demandes clients post-signature (livraison, garanties) via les tickets et les tâches.",
"modules": ["CRM", "Support", "Projects"],
"permissions_cibles": [
{ "doctype": "Issue", "actions": ["read", "write", "create"] },
{ "doctype": "Customer", "actions": ["read"] }
]
},
{
"id": "marketing-directeur",
"nom_fr": "Directeur Marketing",
"famille": "marketing",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 4,
"erpnext_role_name": "OTO Marketing Directeur",
"scope_donnees": "entite",
"description": "Pilote la marque publique Helios RD, les campagnes et la validation du contenu du site vente.otov7.com.",
"modules": ["CRM", "Website", "Report"],
"permissions_cibles": [
{ "doctype": "Web Page", "actions": ["read", "write", "create"] },
{ "doctype": "Publiciste Log", "custom": true, "actions": ["read", "report"] }
]
},
{
"id": "marketing-publiciste",
"nom_fr": "Éditeur Contenu / Publiciste",
"famille": "marketing",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Marketing Publiciste",
"scope_donnees": "entite",
"description": "Compte applicatif de l'agent Publiciste : publie le site public à partir des faisabilités validées (jamais d'invention de prix — CLAUDE.md #6).",
"modules": ["Website", "OTOV7 Publiciste"],
"permissions_cibles": [
{ "doctype": "Web Page", "actions": ["read", "write", "create"] },
{ "doctype": "Publiciste Log", "custom": true, "actions": ["read", "write", "create"] }
]
},
{
"id": "marketing-seo",
"nom_fr": "Spécialiste SEO",
"famille": "marketing",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Marketing SEO",
"scope_donnees": "entite",
"description": "Optimise l'indexation trilingue FR/EN/ES (hreflang, schema.org) ; suit Google Search Console.",
"modules": ["Website", "Report"],
"permissions_cibles": [
{ "doctype": "Web Page", "actions": ["read", "write"] }
]
},
{
"id": "marketing-social",
"nom_fr": "Community / Réseaux Sociaux",
"famille": "marketing",
"portail": "ventes",
"entite_principale": "Helios RD",
"niveau": 1,
"erpnext_role_name": "OTO Marketing Social",
"scope_donnees": "entite",
"description": "Gère les publications réseaux sociaux et remonte les leads sociaux dans le CRM.",
"modules": ["CRM", "Website"],
"permissions_cibles": [
{ "doctype": "Lead", "actions": ["read", "create"] }
]
},
{
"id": "construction-directeur",
"nom_fr": "Directeur Construction",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 4,
"erpnext_role_name": "OTO Construction Directeur",
"scope_donnees": "entite",
"description": "Dirige AC Arias Cuevas ; approuve les projets, budgets travaux et jalons de chantier.",
"modules": ["Projects", "Buying", "Stock", "Report"],
"permissions_cibles": [
{ "doctype": "Project", "actions": ["read", "write", "create", "submit", "report"] },
{ "doctype": "Task", "actions": ["read", "write", "create", "report"] },
{ "doctype": "Purchase Order", "actions": ["read", "write", "submit"] }
]
},
{
"id": "construction-chef-projet",
"nom_fr": "Chef de Projet Construction",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 3,
"erpnext_role_name": "OTO Construction Chef Projet",
"scope_donnees": "equipe",
"description": "Pilote un projet : planning, tâches, avancement et demandes d'achat de chantier.",
"modules": ["Projects", "Buying"],
"permissions_cibles": [
{ "doctype": "Project", "actions": ["read", "write", "report"] },
{ "doctype": "Task", "actions": ["read", "write", "create"] },
{ "doctype": "Material Request", "actions": ["read", "write", "create", "submit"] }
]
},
{
"id": "construction-ingenieur",
"nom_fr": "Ingénieur de Chantier",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 2,
"erpnext_role_name": "OTO Construction Ingénieur",
"scope_donnees": "equipe",
"description": "Suit l'exécution technique sur site ; met à jour l'avancement des tâches et les feuilles de temps.",
"modules": ["Projects"],
"permissions_cibles": [
{ "doctype": "Task", "actions": ["read", "write"] },
{ "doctype": "Timesheet", "actions": ["read", "write", "create"] }
]
},
{
"id": "construction-architecte",
"nom_fr": "Architecte",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 3,
"erpnext_role_name": "OTO Construction Architecte",
"scope_donnees": "entite",
"description": "Produit le volet Architecture des faisabilités ; valide les plans et les modèles IFC.",
"modules": ["Projects", "OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write", "create"] },
{ "doctype": "Project", "actions": ["read"] }
]
},
{
"id": "construction-qaqc",
"nom_fr": "Contrôleur Qualité Chantier (QA/QC)",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 2,
"erpnext_role_name": "OTO Construction QAQC",
"scope_donnees": "entite",
"description": "Contrôle la conformité qualité du chantier ; consigne inspections et non-conformités.",
"modules": ["Projects", "Quality"],
"permissions_cibles": [
{ "doctype": "Quality Inspection", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Task", "actions": ["read"] }
]
},
{
"id": "construction-bim",
"nom_fr": "Coordinateur BIM",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 3,
"erpnext_role_name": "OTO Construction BIM",
"scope_donnees": "entite",
"description": "Coordonne les maquettes BIM (Blender/Bonsai/IFC/Speckle) ; publie les modèles vers bim-cloud.otov7.com.",
"modules": ["Projects", "OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write"] },
{ "doctype": "File", "actions": ["read", "write", "create"] }
]
},
{
"id": "construction-sous-traitants",
"nom_fr": "Superviseur Sous-traitants",
"famille": "construction",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 2,
"erpnext_role_name": "OTO Construction Sous-traitants",
"scope_donnees": "equipe",
"description": "Suit les sous-traitants et leurs livrables ; valide l'avancement pour paiement.",
"modules": ["Projects", "Buying"],
"permissions_cibles": [
{ "doctype": "Purchase Order", "actions": ["read", "report"] },
{ "doctype": "Task", "actions": ["read", "write"] }
]
},
{
"id": "achat-directeur",
"nom_fr": "Directeur des Achats",
"famille": "achat",
"portail": "achat",
"entite_principale": "WA SRL",
"niveau": 4,
"erpnext_role_name": "OTO Achat Directeur",
"scope_donnees": "entite",
"description": "Pilote la fonction achats ; approuve commandes fournisseurs au-delà des plafonds acheteurs.",
"modules": ["Buying", "Stock", "Accounts", "Report"],
"permissions_cibles": [
{ "doctype": "Purchase Order", "actions": ["read", "write", "create", "submit", "cancel", "report"] },
{ "doctype": "Supplier", "actions": ["read", "write", "create"] },
{ "doctype": "Material Request", "actions": ["read", "write", "submit"] }
]
},
{
"id": "achat-acheteur",
"nom_fr": "Acheteur / Approvisionneur",
"famille": "achat",
"portail": "achat",
"entite_principale": "WA SRL",
"niveau": 2,
"erpnext_role_name": "OTO Achat Acheteur",
"scope_donnees": "entite",
"description": "Émet demandes de prix et commandes fournisseurs (soumises à approbation) ; suit les délais.",
"modules": ["Buying", "Stock"],
"permissions_cibles": [
{ "doctype": "Material Request", "actions": ["read", "write", "create"] },
{ "doctype": "Request for Quotation", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Purchase Order", "actions": ["read", "write", "create"] }
]
},
{
"id": "achat-fournisseurs",
"nom_fr": "Gestionnaire Fournisseurs",
"famille": "achat",
"portail": "achat",
"entite_principale": "WA SRL",
"niveau": 2,
"erpnext_role_name": "OTO Achat Fournisseurs",
"scope_donnees": "entite",
"description": "Tient à jour la base fournisseurs, les conditions et la conformité documentaire.",
"modules": ["Buying"],
"permissions_cibles": [
{ "doctype": "Supplier", "actions": ["read", "write", "create"] },
{ "doctype": "Contact", "actions": ["read", "write", "create"] }
]
},
{
"id": "achat-magasinier",
"nom_fr": "Magasinier / Inventaire",
"famille": "achat",
"portail": "achat",
"entite_principale": "AC Arias Cuevas",
"niveau": 2,
"erpnext_role_name": "OTO Achat Magasinier",
"scope_donnees": "entite",
"description": "Gère les stocks de chantier/dépôt : entrées, sorties et inventaires.",
"modules": ["Stock"],
"permissions_cibles": [
{ "doctype": "Stock Entry", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Item", "actions": ["read"] }
]
},
{
"id": "achat-reception",
"nom_fr": "Contrôleur Réception Matériaux",
"famille": "achat",
"portail": "achat",
"entite_principale": "AC Arias Cuevas",
"niveau": 2,
"erpnext_role_name": "OTO Achat Réception",
"scope_donnees": "entite",
"description": "Réceptionne et contrôle les livraisons ; établit les bons de réception.",
"modules": ["Stock", "Buying"],
"permissions_cibles": [
{ "doctype": "Purchase Receipt", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Purchase Order", "actions": ["read"] }
]
},
{
"id": "compta-controleur-gestion",
"nom_fr": "Contrôleur de Gestion",
"famille": "finance",
"portail": "compta",
"entite_principale": "Groupe",
"niveau": 4,
"erpnext_role_name": "OTO Compta Contrôle Gestion",
"scope_donnees": "groupe",
"description": "Suit budgets, marges et point d'équilibre (52% pré-vente) ; produit les rapports de gestion consolidés.",
"modules": ["Accounts", "Report"],
"permissions_cibles": [
{ "doctype": "Budget", "actions": ["read", "write", "create", "report"] },
{ "doctype": "GL Entry", "actions": ["read", "report", "export"] },
{ "doctype": "Cost Center", "actions": ["read", "report"] }
]
},
{
"id": "compta-comptable-general",
"nom_fr": "Comptable Général",
"famille": "finance",
"portail": "compta",
"entite_principale": "WA SRL",
"niveau": 3,
"erpnext_role_name": "OTO Compta Général",
"scope_donnees": "entite",
"description": "Tient la comptabilité générale de l'entité ; saisit et rapproche les écritures.",
"modules": ["Accounts"],
"permissions_cibles": [
{ "doctype": "Journal Entry", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Account", "actions": ["read"] }
]
},
{
"id": "compta-fournisseurs-ap",
"nom_fr": "Comptable Fournisseurs (AP)",
"famille": "finance",
"portail": "compta",
"entite_principale": "WA SRL",
"niveau": 2,
"erpnext_role_name": "OTO Compta Fournisseurs AP",
"scope_donnees": "entite",
"description": "Traite les factures fournisseurs et prépare les paiements (soumis à approbation trésorier/CFO).",
"modules": ["Accounts", "Buying"],
"permissions_cibles": [
{ "doctype": "Purchase Invoice", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Payment Entry", "actions": ["read", "create"] }
]
},
{
"id": "compta-clients-ar",
"nom_fr": "Comptable Clients (AR)",
"famille": "finance",
"portail": "compta",
"entite_principale": "Helios RD",
"niveau": 2,
"erpnext_role_name": "OTO Compta Clients AR",
"scope_donnees": "entite",
"description": "Émet les factures clients et suit les encaissements (Cardnet · USD/DOP) et relances.",
"modules": ["Accounts", "Selling"],
"permissions_cibles": [
{ "doctype": "Sales Invoice", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Payment Entry", "actions": ["read", "create"] }
]
},
{
"id": "compta-tresorier",
"nom_fr": "Trésorier · Ploutos",
"famille": "finance",
"portail": "compta",
"entite_principale": "Ploutos",
"niveau": 3,
"erpnext_role_name": "OTO Compta Trésorier",
"scope_donnees": "entite",
"description": "Gère la trésorerie et le patrimoine monétaire (Ploutos) ; valide les décaissements.",
"modules": ["Accounts"],
"permissions_cibles": [
{ "doctype": "Payment Entry", "actions": ["read", "write", "submit", "cancel"] },
{ "doctype": "Bank Transaction", "actions": ["read", "write", "submit"] }
]
},
{
"id": "compta-paie",
"nom_fr": "Gestionnaire Paie · Consortium ECR DR",
"famille": "finance",
"portail": "compta",
"entite_principale": "Consortium ECR DR",
"niveau": 3,
"erpnext_role_name": "OTO Compta Paie",
"scope_donnees": "entite",
"description": "Traite la paie (paymaster RH Consortium ECR DR) ; établit et soumet les bulletins.",
"modules": ["Payroll", "HR"],
"permissions_cibles": [
{ "doctype": "Salary Slip", "actions": ["read", "write", "create", "submit"] },
{ "doctype": "Employee", "actions": ["read"] }
]
},
{
"id": "compta-fiscaliste-ecf",
"nom_fr": "Fiscaliste / e-CF DGII",
"famille": "finance",
"portail": "compta",
"entite_principale": "WA SRL",
"niveau": 3,
"erpnext_role_name": "OTO Compta Fiscaliste eCF",
"scope_donnees": "entite",
"description": "Gère la facturation électronique e-CF (Compupar/DGII) et la conformité fiscale RD.",
"modules": ["Accounts", "Report"],
"permissions_cibles": [
{ "doctype": "Sales Invoice", "actions": ["read", "write", "submit", "export"] },
{ "doctype": "Purchase Invoice", "actions": ["read", "export"] }
]
},
{
"id": "compta-audit-uaf",
"nom_fr": "Auditeur Interne / Conformité UAF",
"famille": "finance",
"portail": "compta",
"entite_principale": "Groupe",
"niveau": 4,
"erpnext_role_name": "OTO Compta Audit UAF",
"scope_donnees": "groupe",
"description": "Audit interne et conformité anti-blanchiment (UAF) ; accès lecture/rapport étendu, aucune écriture comptable.",
"modules": ["Accounts", "Report"],
"permissions_cibles": [
{ "doctype": "GL Entry", "actions": ["read", "report", "export"] },
{ "doctype": "Payment Entry", "actions": ["read", "report"] },
{ "doctype": "Sales Invoice", "actions": ["read", "report"] }
]
},
{
"id": "faisabilite-analyste",
"nom_fr": "Analyste Faisabilité",
"famille": "faisabilite",
"portail": "direction",
"entite_principale": "WA SRL",
"niveau": 3,
"erpnext_role_name": "OTO Faisabilité Analyste",
"scope_donnees": "entite",
"description": "Produit les faisabilités 4 volets (Masterplan/Architecture/Paysage/Ingénierie) niveau 4Big ; versionne et score.",
"modules": ["OTOV7 Faisabilité", "Projects", "Report"],
"permissions_cibles": [
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write", "create", "submit", "report"] },
{ "doctype": "Project", "actions": ["read"] }
]
},
{
"id": "faisabilite-rendu-3d",
"nom_fr": "Spécialiste Rendu 3D",
"famille": "faisabilite",
"portail": "construction",
"entite_principale": "WA SRL",
"niveau": 2,
"erpnext_role_name": "OTO Faisabilité Rendu 3D",
"scope_donnees": "entite",
"description": "Génère les rendus Flux liés au projet réel (❌ IA générique interdite — CLAUDE.md) ; 6 vues/projet.",
"modules": ["OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "File", "actions": ["read", "write", "create"] },
{ "doctype": "Faisabilité", "custom": true, "actions": ["read"] }
]
},
{
"id": "faisabilite-ifc-speckle",
"nom_fr": "Gestionnaire IFC / Speckle",
"famille": "faisabilite",
"portail": "construction",
"entite_principale": "WA SRL",
"niveau": 2,
"erpnext_role_name": "OTO Faisabilité IFC Speckle",
"scope_donnees": "entite",
"description": "Exporte IFC→GLB et publie les modèles sur bim-cloud.otov7.com pour le viewer console.",
"modules": ["OTOV7 Faisabilité"],
"permissions_cibles": [
{ "doctype": "File", "actions": ["read", "write", "create"] },
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write"] }
]
},
{
"id": "faisabilite-economiste",
"nom_fr": "Économiste de la Construction (métrés)",
"famille": "faisabilite",
"portail": "construction",
"entite_principale": "AC Arias Cuevas",
"niveau": 3,
"erpnext_role_name": "OTO Faisabilité Économiste",
"scope_donnees": "entite",
"description": "Produit métrés et quantitatifs (BIM compras) pour le volet Ingénierie ; chiffre les coûts travaux.",
"modules": ["OTOV7 Faisabilité", "Buying", "Stock"],
"permissions_cibles": [
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write"] },
{ "doctype": "Item", "actions": ["read"] }
]
},
{
"id": "legal-directeur",
"nom_fr": "Directeur Juridique",
"famille": "legal",
"portail": "direction",
"entite_principale": "WAF",
"niveau": 4,
"erpnext_role_name": "OTO Legal Directeur",
"scope_donnees": "groupe",
"description": "Supervise les contrats, la conformité et les dépôts légaux du groupe ; valide les documents à portée juridique.",
"modules": ["OTOV7 CONFOTUR", "Accounts", "Report"],
"permissions_cibles": [
{ "doctype": "CONFOTUR Application", "custom": true, "actions": ["read", "write", "submit", "report"] },
{ "doctype": "Contract", "actions": ["read", "write", "create", "submit"] }
]
},
{
"id": "legal-onapi",
"nom_fr": "Agent ONAPI / Propriété Intellectuelle",
"famille": "legal",
"portail": "direction",
"entite_principale": "WAF",
"niveau": 2,
"erpnext_role_name": "OTO Legal ONAPI",
"scope_donnees": "groupe",
"description": "Prépare et suit les dépôts ONAPI (marques, Classes 36/37/43) et les dossiers CONFOTUR (P05/P07).",
"modules": ["OTOV7 CONFOTUR"],
"permissions_cibles": [
{ "doctype": "CONFOTUR Application", "custom": true, "actions": ["read", "write", "create"] }
]
},
{
"id": "plateforme-devops",
"nom_fr": "Administrateur Système (DevOps)",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "9060 QC",
"niveau": 5,
"erpnext_role_name": "OTO Plateforme DevOps",
"scope_donnees": "groupe",
"description": "Administre l'infrastructure (Docker, Gitea, systemd, nginx) et les déploiements. Aucune plateforme git hors Gitea (CLAUDE.md #2).",
"modules": ["Core", "Website", "Report"],
"permissions_cibles": [
{ "doctype": "Scheduled Job Type", "actions": ["read", "write"] },
{ "doctype": "Server Script", "actions": ["read", "write", "create"] }
]
},
{
"id": "plateforme-rbac-admin",
"nom_fr": "Administrateur RBAC / Sécurité",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "9060 QC",
"niveau": 5,
"erpnext_role_name": "OTO Plateforme RBAC Admin",
"scope_donnees": "groupe",
"description": "Gère utilisateurs, rôles et User Permissions ; seul habilité à modifier les habilitations (séparation des pouvoirs).",
"modules": ["Users and Permissions", "Core"],
"permissions_cibles": [
{ "doctype": "User", "actions": ["read", "write", "create", "set_user_permissions"] },
{ "doctype": "Role", "actions": ["read", "write", "create"] },
{ "doctype": "Role Profile", "actions": ["read", "write", "create"] },
{ "doctype": "User Permission", "actions": ["read", "write", "create", "delete"] }
]
},
{
"id": "plateforme-qa",
"nom_fr": "Ingénieur QA Plateforme",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "9060 QC",
"niveau": 3,
"erpnext_role_name": "OTO Plateforme QA",
"scope_donnees": "groupe",
"description": "Exécute les audits qualité 4Big (Playwright, night-audit) ; accès lecture large + rapports, aucune écriture métier.",
"modules": ["Report", "Core"],
"permissions_cibles": [
{ "doctype": "Report", "actions": ["read", "report", "export"] },
{ "doctype": "Error Log", "actions": ["read"] }
]
},
{
"id": "plateforme-otoia",
"nom_fr": "Orchestrateur OTOIA (compte système)",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "9060 QC",
"niveau": 4,
"erpnext_role_name": "OTO Plateforme OTOIA",
"scope_donnees": "groupe",
"description": "Compte de service de l'agent OTOIA (AEC + RAG + prompt engine). Écrit faisabilités et logs via API ; périmètre limité aux DocTypes DTP.",
"modules": ["OTOV7 Faisabilité", "OTOV7 Publiciste", "Core"],
"permissions_cibles": [
{ "doctype": "Faisabilité", "custom": true, "actions": ["read", "write", "create"] },
{ "doctype": "Publiciste Log", "custom": true, "actions": ["read", "write", "create"] }
]
},
{
"id": "plateforme-mobile",
"nom_fr": "Développeur Mobile",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "9060 QC",
"niveau": 2,
"erpnext_role_name": "OTO Plateforme Mobile",
"scope_donnees": "groupe",
"description": "Maintient l'app Expo/React Native et l'API mobile ; gère les builds EAS et les soumissions stores.",
"modules": ["Core", "Website"],
"permissions_cibles": [
{ "doctype": "API Access", "custom": true, "actions": ["read", "write"] }
]
},
{
"id": "plateforme-bi",
"nom_fr": "Analyste Données / BI",
"famille": "plateforme",
"portail": "plateforme",
"entite_principale": "Groupe",
"niveau": 3,
"erpnext_role_name": "OTO Plateforme BI",
"scope_donnees": "groupe",
"description": "Construit tableaux de bord et rapports consolidés (lecture seule) pour la direction ; aucune écriture transactionnelle.",
"modules": ["Report", "Accounts", "CRM"],
"permissions_cibles": [
{ "doctype": "Dashboard", "actions": ["read", "write", "create"] },
{ "doctype": "Report", "actions": ["read", "write", "create", "export"] }
]
}
]
}