# Rapport des droits d’accès de l’ERP

**Destinataire** : Robin (DSI) — référence pour se souvenir de qui peut faire quoi.  
**Date** : 2026-08-07 · **Baseline** : HEAD `57088b48` · **Source** : lecture du code + diagnostic #1234 (pas de modification de droits).  
**Écran compagnon** : `/admin/droits` (par permission) — ce document part de l’**écran**.

> Les effectifs utilisateurs cités ci-dessous (36 utilisateurs, 35 dans `GS_GROUPE`, 0 dans `GS_DAF`, 107 permissions / 414 liens en base) viennent du diagnostic #1234 sur **production**. Les mappings « intention initiale » du fichier de configuration peuvent différer de ce que montre `/admin/droits` aujourd’hui : en cas de doute, **l’écran `/admin/droits` prime**, et les anomalies sont signalées sans être corrigées ici.

---

## À quoi sert ce document ? (sommaire d’usage)

| Votre question | Où lire |
|----------------|---------|
| Qui peut comptabiliser une facture ? | [Comptabilisation](#13-comptabilisation) |
| Qu’est-ce que GS_COMPTABILITE peut faire ? | [Vue par groupe — Comptabilité](#groupe-gs_comptabilite--comptabilité) |
| Pourquoi Untel ne voit-il pas ce dossier foncier alors qu’il a le droit ? | [Les trois natures](#les-trois-natures-droit--visibilité--confort) + [Dossiers fonciers](#3-dossiers-fonciers) |
| Si je décoche cette permission, qu’est-ce qui change vraiment ? | [Les deux (voire trois) court-circuits](#les-court-circuits--pourquoi-admindroits-nest-pas-toujours-exact) |
| Ce droit, puis-je le changer moi-même ou faut-il développer ? | Colonne **Administrable ?** de chaque écran + [Droits écrits en dur](#droits-écrits-en-dur--feuille-de-route) |
| Qui peut supprimer un marché ? | [Marchés (dans un programme)](#92-marchés-avenants-situations) |
| Qui peut voir les montants du foncier ? | [Dossiers / prix](#3-dossiers-fonciers) |

Légende de la colonne **Administrable dans `/admin/droits` ?**

| Valeur | Signification |
|--------|----------------|
| **OUI** | Vous changez le droit en cochant / décochant un groupe sur une permission. |
| **NON — écrit en dur dans le code** | Il faut un développement (déploiement) pour changer la règle. |
| **NON — dépend d’une habilitation par enregistrement** | Ce n’est pas un droit global : c’est une habilitation dossier par dossier (ou équivalent). |

---

## Les trois natures (droit · visibilité · confort)

Confondre ces trois idées est la source d’erreur la plus courante : quelqu’un qui « ne voit pas » un programme n’est pas forcément privé de droit.

### 1. Le DROIT — « Ai-je le droit de comptabiliser une facture ? »

C’est ce que `/admin/droits` administre (quand la règle passe bien par une permission). Exemple : la permission **Comptabilisation** (`factures.comptabilisation`).  
**Administrable** : en principe oui — **sauf** si l’écran réel contrôle encore les groupes Microsoft en dur (cas de la page Comptabilisation : voir plus bas).

### 2. La VISIBILITÉ — « Ce dossier foncier m’est-il ouvert ? »

Même avec le droit de lire le module Foncier, un dossier peut rester invisible s’il est cloisonné (ex. dossiers D62) et que vous n’êtes pas habilité **sur ce dossier**. Même logique pour certaines factures (auteur, validateur, enseigne) et pour les tâches (on ne voit pas forcément toutes les tâches du groupe).  
**Ne se règle pas** dans `/admin/droits`.

### 3. Le CONFORT — filtre enseigne du dépôt de factures

Si vous êtes Hectare, Gemme ou Envol, la liste des programmes dans le dépôt peut être **réduite** à votre enseigne pour aller plus vite. Ce n’est **pas** une interdiction : l’utilisateur peut élargir l’affichage. La comptabilité (sans groupe enseigne) voit tout par défaut.  
**Ne doit jamais** être traité comme un droit d’accès.

---

## Les court-circuits : pourquoi `/admin/droits` n’est pas toujours exact

Il existe des règles qui s’appliquent **avant** (ou à côté de) ce que montre l’écran des droits. C’est l’information la plus importante pour faire confiance à cet écran.

### Court-circuit A — Administrateurs ERP (`GS_ADMIN_ERP`)

Les membres de **Administrateurs ERP** sont traités comme s’ils avaient **presque toutes** les permissions du catalogue (sauf l’administration système et la maintenance), **même si vous décochez** leur groupe sur une permission dans `/admin/droits`.

De plus, pour les contrôles du type « appartient-il à tel groupe ? », un administrateur ERP est considéré comme appartenant à **tous** les groupes. Et pour certaines protections d’objets (appels d’offres, tâches, projets, dossiers), un administrateur ERP **passe avant** la règle normale.

**Conséquence** : l’écran peut afficher une restriction qui **ne s’applique pas** à `GS_ADMIN_ERP`.

### Court-circuit B — DSI (`GS_DSI`)

Les membres de **DSI** reçoivent **toutes** les permissions du catalogue, **même décochées** dans `/admin/droits`.

**Conséquence** : pour la DSI, décocher une case dans `/admin/droits` **ne retire pas** le droit calculé via le catalogue.

### Court-circuit C (lié) — listes de groupes en dur

Certaines pages (CIE, compte prorata, NF Habitat, écriture d’appels d’offres, certaines actions programme VEFA, et plusieurs entrées du menu) vérifient directement les **noms de groupes**, sans passer par `/admin/droits`. Modifier l’écran des droits **ne change rien** à ces contrôles.

### Pour que l’écran devienne exact un jour

Il faudrait que **tout** contrôle d’accès lise uniquement les permissions (et que les raccourcis DSI / Admin ERP soient soit retirés, soit affichés explicitement comme « toujours accordé »). Ce n’est **pas** fait dans ce lot — seulement documenté. Emplacements techniques : annexe.

---

# Partie 1 — Écran par écran

Ordre de navigation : **Foncier → Programme → Comptabilité → Groupe → GEMME → Patrimoine**, puis administration et écrans transverses.

Noms de groupes en clair : **DSI** (`GS_DSI`), **Administrateurs ERP** (`GS_ADMIN_ERP`), **Direction générale** (`GS_DIRECTION_GENERALE`), **Comptabilité** (`GS_COMPTABILITE`), **Envol** (`GS_ENVOL`), **Hectare** (`GS_HECTARE`), **Communication** (`GS_COMMUNICATION`), **Juridique** (`GS_JURIDIQUE`), **DAF** (`GS_DAF`), **Groupe** (`GS_GROUPE`), **Gemme** (`GS_GEMME`).

---

## 1. Accueil (tableau de bord)

**Qui peut y accéder** : tout utilisateur connecté qui a au moins un groupe Microsoft reconnu (contrôle d’entrée au tableau de bord).  
**À vérifier** : comportement exact si aucun groupe — l’utilisateur peut quand même être authentifié mais avec un périmètre très réduit.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir le tableau de bord | Utilisateurs avec groupe(s) | Entrée réservée aux personnes ayant un groupe Microsoft | NON — écrit en dur |
| Voir le compteur « factures en attente » | Selon rôle (validateur, PDG Envol, compta) | Règles d’affichage du bandeau | NON — écrit en dur |
| Compteur PDG Envol (NV2) | Groupe `GS_PDG_ENVOL` | **Condition morte** : ce groupe n’est pas dans la table des groupes → le compteur PDG ne se déclenche jamais | NON — écrit en dur |

**Restrictions supplémentaires** : aucune (accueil).  
**Pièges** : le badge « factures en attente » pour un hypothétique PDG Envol ne fonctionne pas tant que `GS_PDG_ENVOL` n’est pas géré comme les autres groupes.

---

## 2. Foncier — Prospection

**Qui peut y accéder** : personnes ayant la permission **Foncier — lecture**, et dont l’enseigne a le module foncier actif. En intention initiale : surtout **Hectare** (+ DSI / Admin via court-circuits).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Ouvrir le menu Foncier / Prospection | Permission `foncier.lecture` | Droit catalogue + module enseigne | OUI |
| Consulter | Idem | Même permission | OUI |
| Créer / modifier (si actions d’écriture) | Permission `foncier.gestion` | Droit d’écriture foncier | OUI |

**Restrictions** : certaines données restent liées à des dossiers habilités.  
**Pièges** : le menu peut être masqué sans le droit de lecture même si d’autres droits fonciers existent.

---

## 3. Dossiers fonciers

**Qui peut y accéder** : `foncier.lecture` (+ module).  
**Écriture** : `foncier.gestion`. **Montants / prix** : `foncier.prix`.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Lister / ouvrir un dossier | Lecture foncier **et** habilitation sur le dossier si cloisonné | Droit + éventuelle habilitation par dossier | Lecture : OUI · Visibilité dossier : NON — habilitation par enregistrement |
| Créer / modifier le dossier | `foncier.gestion` | Droit d’écriture | OUI |
| Voir / modifier les montants et valorisations | `foncier.prix` | Droit prix (contrôlé dans les écrans, pas seulement le menu) | OUI |
| Déposer / gérer des documents du dossier | Gestion foncier (selon écran) | Droit d’écriture | OUI |
| Rouvrir une promesse verrouillée | `foncier.deverrouillage` | Droit direction / déverrouillage | OUI |

**Restrictions supplémentaires** : sur les dossiers cloisonnés (ex. D62), **avoir le droit ne suffit pas** : il faut aussi être habilité sur **ce** dossier. La direction générale et les administrateurs ERP ont des règles élargies de visibilité (à confirmer au cas par cas sur un dossier réel).

**Pièges** : un utilisateur Hectare avec lecture peut « avoir le droit » et pourtant ne pas voir un dossier — ce n’est pas un bug de permission, c’est la visibilité.

---

## 4. Actes fonciers

**Qui peut y accéder** : comme le module foncier (`foncier.lecture` / `foncier.gestion`).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter | Lecture foncier | Permission | OUI |
| Créer / modifier | Gestion foncier | Permission | OUI |

**Restrictions** : liées au dossier parent si cloisonnement.  
**Pièges** : à vérifier si certaines actions d’acte exigent en plus `foncier.prix`.

---

## 5. Secteurs d’intervention

**Qui peut y accéder** : lecture via le menu foncier ; **écriture** réservée à `foncier.secteurs`.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter | Lecture foncier | Permission | OUI |
| Créer / modifier / supprimer un secteur | `foncier.secteurs` | Permission dédiée (pas seulement « gestion ») | OUI |

**Pièges** : avoir `foncier.gestion` **ne suffit pas** pour administrer les secteurs — il faut la permission secteurs. En intention seed, Hectare n’a **pas** secteurs / référentiels / déverrouillage.

---

## 6. Groupe de travail (foncier)

**Qui peut y accéder** : menu foncier (`foncier.lecture`).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter / participer | Lecture / gestion selon actions | Permissions foncier | OUI (pour le droit module) |

**À vérifier** : détail fin des actions (invitation, droits d’édition) écran par écran — non exhaustif ici.

---

## 7. Patrimoine

**Qui peut y accéder** : même condition que le menu Foncier (`foncier.lecture` + module).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter le patrimoine | Lecture foncier | Permission | OUI |
| Modifier (si proposé) | Gestion foncier | Permission | OUI |

---

## 8. Programme — liste

**Qui peut y accéder** : le lien **Programme** est visible pour tout utilisateur connecté dans le menu (pas de filtre de permission dans la barre de navigation). L’accès réel aux données d’un programme peut encore dépendre de règles d’appartenance / d’enseigne (**à vérifier** via le service d’accès programme).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir la liste | Utilisateur connecté (menu ouvert) | Pas de permission de menu | NON — écrit en dur (menu) ; accès données : à vérifier |
| Créer / modifier un programme | `programmes.ecriture` (quand l’action l’exige) | Permission | OUI (si l’action l’utilise) |
| Filtrer par enseigne (confort) | Hectare / Gemme / Envol | Confort d’affichage, pas un refus | NON — confort (pas un droit) |

**Pièges** : menu ouvert ≠ droit d’écrire sur tous les onglets du programme.

---

## 9. Fiche programme (onglets)

Sous-écrans les plus utilisés. Les permissions listées sont celles du **catalogue** ; certaines routes n’imposent **pas** encore la permission (trou ou contrôle ailleurs) — signalé.

### 9.1 Résumé, responsables, financement, associés, société bancaire, stades

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter | Souvent lecture programme / sous-permissions | Permissions `programmes.*` | OUI (si branché) |
| Modifier responsables / financement / associés / stades / société bancaire | Permissions `programmes.*.ecriture` correspondantes | Catalogue | OUI |
| Certaines modifications VEFA (responsables, etc.) | Admin ERP ou Direction générale, parfois responsable programme | **Groupes en dur** (en plus ou à la place) | NON — écrit en dur |

### 9.2 Marchés, avenants, situations

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter / créer / modifier un marché | Souvent ouvert aux connectés sur la fiche ; permissions `marches.lecture` / `marches.ecriture` existent au catalogue | **Les routes marchés n’imposent pas** ces permissions aujourd’hui | OUI pour le catalogue · **mais** l’écran réel : à traiter comme **partiellement NON — écrit en dur / absente** |
| Supprimer un marché | **Administrateurs ERP uniquement** | Contrôle « est administrateur ERP » | NON — écrit en dur (pas de case `/admin/droits`) |
| Restaurer un marché soft-supprimé | DSI ou Admin ERP (écran admin) | Groupes en dur | NON — écrit en dur |
| Avenants / situations | Permissions `avenants.*` / `situations.*` au catalogue | Idem : vérifier si l’action réelle les appelle | OUI si branché |

**Piège majeur** : supprimer un marché **n’est pas** dans `/admin/droits`. Décrocher `marches.ecriture` ne retire pas forcément la suppression (qui exige Admin ERP).

### 9.3 Commercialisation, lots, acquéreurs, offres commerciales

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter / gérer lots | `lots.lecture` / `lots.ecriture` | Permission sur les actions d’écriture | OUI |
| Acquéreurs / réservations | `acquereurs.*` | Permission | OUI |
| Commercialisation | `commercialisation.*` | Permission | OUI |
| Offres commerciales | `offres_commerciales.*` | Permission | OUI |
| Purge commercialisation / import Pegão | DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

### 9.4 Bilan financier et budget

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter le bilan | `bilan.lecture` (historique) ; reste souvent ouvert | Permission partielle | Partiel — OUI pour ce qui est branché |
| Modifier bilan / postes / trésorerie | `bilan.ecriture`, `postes_budgetaires.*`, `tresorerie.*` | Catalogue | OUI |
| Écrire le budget programme | Direction générale + Admin ERP | Groupes en dur | NON — écrit en dur |

### 9.5 Documents / GED programme

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter / déposer | Permissions `documents.*` au catalogue ; routes souvent sans garde permission | Mixte | OUI pour le catalogue · routes : à vérifier |

### 9.6 CIE (Compte d’intérêts intercalaires)

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter | Envol, DSI, Admin ERP, Direction générale, Comptabilité | **Groupes en dur** (pas la permission `cie.lecture` seule) | NON — écrit en dur |
| Modifier | Envol, DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

Les permissions `cie.lecture` / `cie.ecriture` existent dans `/admin/droits` mais **ne suffisent pas** tant que le contrôle en dur reste.

### 9.7 Compte prorata

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter | Envol, DSI, Admin ERP, DG, Comptabilité | Groupes en dur | NON — écrit en dur |
| Modifier | Envol, DSI, Admin ERP | Groupes en dur | NON — écrit en dur |
| Saisie historique | Responsable programme, Admin ERP, DSI ou DG | Groupes + rôle programme | NON — écrit en dur |

### 9.8 TMA, appels de fonds, appels d’offres, NF Habitat

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| TMA programme / bibliothèque | Permissions `tma.*` | Permission | OUI |
| Appels de fonds | `programmes.appels_de_fonds.*` | Permission | OUI |
| Appels d’offres — lecture | `ao.lecture` (catalogue) | Permission / écran | OUI si branché |
| Appels d’offres — écriture | Envol, DSI, Admin ERP **en dur** (+ permission `ao.ecriture` au catalogue) | Groupes en dur pour l’écriture | NON — écrit en dur (écriture) |
| NF Habitat — lecture | Envol, DSI, Admin ERP, DG, Communication | Groupes en dur | NON — écrit en dur |
| NF Habitat — modification | Envol, DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

---

## 10. Comptabilité — Toutes les factures

**Qui peut y accéder** : le menu est visible pour tous ; l’accès à la page / aux fiches dépend de la **visibilité facture** (voir natures) et/ou de `factures.lecture`.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir la liste / une fiche | Socle (Admin, DSI, DG, Compta) voient tout ; sinon auteur, validateur, membre enseigne, ou permission lecture | Visibilité + éventuellement permission | Permission : OUI · Visibilité ligne : NON — habilitation / règles métier |
| Créer / modifier une facture | Permission `factures.ecriture` | Catalogue | OUI |
| Valider NV1 / NV2 | Permissions `factures.validation_nv1` / `_nv2` **et** règles de workflow (désignation validateur, etc.) | Permission + workflow | Permission : OUI · Étape : NON — dépend du workflow / enregistrement |
| Supprimer un groupe de factures | DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

**Anomalie probable à vérifier par Robin** : d’après des captures de `/admin/droits`, `factures.lecture` et `factures.ecriture` seraient attribuées à **Admin ERP + Groupe** (`GS_GROUPE`, ~tous les utilisateurs), et **Comptabilité en aurait été retirée** (journal du 16/07/2026). Si c’est exact : presque tout le monde pourrait créer/modifier une facture, et la comptabilité ne le pourrait plus **via cette permission** (tout en voyant encore les factures via le « socle total » de visibilité pour `GS_COMPTABILITE`). **À confirmer dans `/admin/droits` sans rien changer ici.**

---

## 11. Boîte de dépôt

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter le dépôt | `factures.depot.lecture` (+ visibilité) | Permission | OUI |
| Déposer / modifier | `factures.depot.ecriture` | Permission | OUI |
| Valider une étape | Autorisé sur **cette** facture (`can_validate`) | Workflow + désignation | NON — dépend du workflow |
| Archiver l’historique | Comptabilité, Admin ERP, DSI | Groupes en dur | NON — écrit en dur |
| Filtre enseigne dans le sélecteur | Hectare / Gemme / Envol | Confort | NON — confort |

**Pièges** : un bouton de validation peut être visible puis refusé si vous n’êtes pas le validateur de l’étape. Le filtre enseigne n’est pas un refus d’accès.

---

## 12. Demandes fournisseurs

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Déposer une demande | **Tout utilisateur connecté** | Droit accordé automatiquement à tout le monde | OUI (listé) mais accordé hors mapping groupe |
| Consulter / traiter | `demandes_fournisseurs.lecture` / `.validation` | Permission | OUI |

---

## 13. Comptabilisation

**Qui peut y accéder (menu et page)** : **Comptabilité**, **Administrateurs ERP**, **DSI** — contrôlé par **groupes en dur**, pas par la case `factures.comptabilisation` de `/admin/droits`.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Ouvrir l’écran / comptabiliser | Compta, Admin ERP, DSI | Groupes Microsoft en dur | **NON — écrit en dur** |
| Permission catalogue `factures.comptabilisation` | Figurée dans `/admin/droits` | **Non utilisée** pour protéger la route aujourd’hui | L’écran admin est **trompeur** sur ce point |

**Piège critique** : décocher `factures.comptabilisation` pour la comptabilité dans `/admin/droits` **ne retire pas** l’accès à l’écran tant que le contrôle par groupe reste. Inversement, cocher la permission pour un autre groupe **ne donne pas** l’accès à l’écran.

---

## 14. Mise en paiement

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir le menu Paiement | Compta, Admin ERP, DSI, Direction générale | Groupes (menu) | NON — écrit en dur (menu) |
| Mettre en paiement | Permission `factures.paiement` (+ groupes sur certaines routes) | Mixte permission + groupes | Partiel — OUI pour la permission · routes : NON — groupes |
| Confirmer paiement / virement exécuté | Compta/DG/Admin ou DG/DAF (+ liste d’e-mails configurée pour le virement) | Groupes (+ config) | NON — écrit en dur / config |
| Sync paiements Sage | Compta, Admin, DSI, DG | Groupes en dur | NON — écrit en dur |

**Piège** : `GS_DAF` est prévu pour le « virement exécuté » mais **aucun utilisateur** n’a ce groupe en prod → cette voie est inactive ; reste DG (et éventuelle liste d’e-mails).

---

## 15. Paramétrage comptable (sous-menu)

Intacct, audit fournisseurs, codes frais généraux, nomenclature bilan.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir les entrées de menu | Compta / Admin / DG (ou DSI selon l’entrée) | Groupes en dur (menu) | NON — écrit en dur |
| Synchro Intacct | Permissions `intacct.*` + groupes | Mixte | Partiel |
| Codes frais généraux | `admin.categories_frais_generaux.*` | Permission (+ groupes menu) | OUI |
| Nomenclature bilan | `admin.nomenclature.*` | Permission (+ groupes menu) | OUI |
| Référentiels fournisseurs / comptes | `referentiels.*` | Permission | OUI |

---

## 16. Groupe — META (marketing)

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir META | `marketing.lecture` | Permission (menu) | OUI |
| Gérer campagnes / leads | `marketing.*`, `leads_marketing.*`, `codes_campagnes.*` | Permission | OUI |

En intention seed : surtout **Communication** (+ DSI / Admin).

---

## 17. Groupe — GED

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Ouvrir la GED | Lien toujours proposé dans le menu | Menu ouvert | NON — écrit en dur (menu) |
| Droits documents | `documents.lecture` / `.ecriture` | Catalogue (si utilisé) | OUI |

---

## 18. Groupe — Juridique

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Déposer / suivre une demande | Utilisateur connecté (menu ouvert) | Peu de garde permission sur les routes | Partiel — à renforcer |
| Registres (contentieux, pré-contentieux, non-conformités) | Juridique, DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

---

## 19. GEMME (gestion locative)

**Qui peut voir le menu** : **DSI** et **Administrateurs ERP** uniquement (et module enseigne actif). Pas de permission dans `/admin/droits` pour ce menu.

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Candidatures / annonces | DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

**Piège** : `GS_GEMME` sert au **filtre de confort** enseigne, pas à ouvrir ce menu.

---

## 20. Administration

**Qui voit l’icône** : DSI, Admin ERP, Comptabilité, Direction générale (groupes en dur).

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Ouvrir le hub `/admin` | Groupes ci-dessus | Groupes en dur | NON — écrit en dur |
| Consulter / modifier les droits | `admin.droits.lecture` / `.ecriture` | Permission | OUI |
| Utilisateurs | `admin.utilisateurs.*` | Permission | OUI |
| Enseignes / chronologie | `admin.enseignes.*` | Permission | OUI |
| Outils système / maintenance | `admin.systeme`, `admin.maintenance` | Permission ; Admin ERP **exclu** du raccourci automatique pour ces deux-là | OUI (mais DSI les a toujours via court-circuit) |
| Groupes Microsoft, super-outils | DSI (± Admin) | Groupes en dur | NON — écrit en dur |

---

## 21. Mes tâches / suivi

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Voir ses tâches | Connecté ; permissions `tasks.*` au catalogue | Mixte + **visibilité** par tâche | Permission : OUI · Liste visible : NON — règles par enregistrement |
| Assigner | `tasks.assigner` | Permission | OUI |

---

## 22. Annuaire

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Consulter / modifier contacts | `annuaire.*` | Permission (si branchée) ; routes souvent ouvertes | Partiel |
| Anonymiser / export RGPD | Nommé « admin ou DAF » dans le code, mais teste **Admin ERP ou Comptabilité** | Groupes en dur (nom trompeur) | NON — écrit en dur |

---

## 23. Aktor (assistant / consolidations)

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Ouvrir Aktor | Groupe **Groupe** (`GS_GROUPE`) + permission `assistant.lecture` | Groupe en dur + permission | Permission lecture : OUI · Porte d’entrée groupe : NON — écrit en dur |
| Consolidations | DSI, Admin ERP | Groupes en dur | NON — écrit en dur |

Comme ~35 utilisateurs sur 36 sont dans `GS_GROUPE`, la porte d’entrée Aktor est en pratique « presque tout le monde » + droit assistant.

---

## 24. Centre d’aide

| Action | Qui peut | Comment c’est contrôlé | Administrable ? |
|--------|----------|------------------------|-----------------|
| Lire l’aide | Tout connecté (`aide.lecture`) | Permission accordée à tous | OUI (mais auto) |
| Administrer l’aide | `aide.gestion` | Permission | OUI |

---

# Partie 2 — Vue par groupe

Effectifs : relancer le diagnostic sur OVH pour les chiffres exacts hors mention #1234. Ici : **ce que le groupe est censé pouvoir faire** (intention seed + contrôles en dur), en rappelant que `/admin/droits` peut avoir divergé.

### Groupe `GS_DSI` — DSI

- **Effectif** : à vérifier (court-circuit : **toutes** les permissions catalogue).  
- **Peut** : tout administrer, y compris outils système ; menus GEMME, admin, comptabilisation, etc.  
- **Ne peut pas (théorique)** : rien via le catalogue — le raccourci DSI couvre tout.  
- **Attention** : décocher une case dans `/admin/droits` ne retire pas les droits DSI.

### Groupe `GS_ADMIN_ERP` — Administrateurs ERP

- **Effectif** : à vérifier.  
- **Peut** : presque tout le catalogue sauf système/maintenance ; bypass de nombreuses protections d’objets ; considéré comme membre de tous les groupes pour les tests « a-t-il le groupe X ? » ; seul à supprimer un marché.  
- **Ne peut pas** : en théorie `admin.systeme` / `admin.maintenance` via le raccourci (la DSI oui).  
- **Attention** : `/admin/droits` sous-estime ce groupe.

### Groupe `GS_DIRECTION_GENERALE` — Direction générale

- **Peut** (intention) : large lecture hors foncier, nombreuses écritures programmes/commercial/factures NV1/NV2/paiement, budget, etc.  
- **Ne peut pas** (intention) : module foncier (`!foncier.*` dans le seed).  
- Accès hub admin (menu) : oui (groupe en dur).

### Groupe `GS_COMPTABILITE` — Comptabilité

- **Peut** (intention seed) : factures (lecture/écriture/dépôt/validation/compta/paiement), bilan, Intacct, référentiels, trésorerie, ADF, demandes fournisseurs, nomenclature, codes frais généraux, lecture programmes/marchés/situations/documents.  
- **Accès réel comptabilisation** : oui via **groupe en dur**, indépendamment de la case permission.  
- **Visibilité factures** : fait partie du « socle total » (voit toutes les factures).  
- **Anomalie probable** : si `factures.ecriture` / `.lecture` ont été retirées à la compta au profit de `GS_GROUPE`, l’intention seed n’est plus respectée — **à vérifier dans `/admin/droits`**.  
- **Ne peut pas** (typique) : supprimer un marché ; menu GEMME ; outils DSI.

### Groupe `GS_ENVOL` — Envol

- **Peut** (intention) : large lecture hors foncier ; écriture commercial, TMA, marchés/avenants/situations/chronologie/CIE/AO/documents/annuaire ; dépôt de factures.  
- **En dur** : CIE / prorata / NF Habitat / écriture AO.  
- **Ne peut pas** (intention) : foncier ; souvent pas la comptabilisation (sauf si aussi compta).

### Groupe `GS_HECTARE` — Hectare

- **Peut** (intention) : `foncier.lecture`, `foncier.gestion`, `foncier.prix`.  
- **Confort** : filtre programmes → enseigne HECTARE.  
- **Ne peut pas** (intention seed) : secteurs, référentiels, déverrouillage.

### Groupe `GS_COMMUNICATION` — Communication

- **Peut** (intention) : marketing / leads / codes campagnes / admin marketing / santé Meta ; lecture NF Habitat (en dur).  
- **Ne peut pas** : compta, foncier, etc.

### Groupe `GS_JURIDIQUE` — Juridique

- **Peut** : registres contentieux / pré-contentieux / non-conformités (groupes en dur).  
- **Ne peut pas** : le reste sauf permissions éventuellement ajoutées dans `/admin/droits` (à vérifier).

### Groupe `GS_DAF` — DAF

- **Effectif** : **0 utilisateur** (#1234).  
- **Prévu pour** : notamment « virement exécuté » (avec la DG).  
- **Anomalie** : groupe inutile aujourd’hui, ou en attente d’affectation. Le contrôle nommé « admin-ou-daf » teste en réalité la **comptabilité**, pas la DAF.

### Groupe `GS_GROUPE` — Groupe

- **Effectif** : **35 / 36** utilisateurs (#1234) → en pratique « presque tous les connectés ».  
- **Sert surtout à** : ouvrir **Aktor** (avec `assistant.lecture`).  
- **Anomalie probable** : s’il porte aussi `factures.lecture` / `factures.ecriture`, alors presque tout le monde peut créer des factures — **à vérifier**.

### Groupe `GS_GEMME` — Gemme

- **Sert au confort** : filtre enseigne GEMME dans les sélecteurs de programmes.  
- **Ne donne pas** le menu GEMME (réservé DSI / Admin ERP).  
- Si absent de l’ingestion login : le filtre Gemme ne s’applique jamais.

### Groupe `GS_PDG_ENVOL` — (absent de la base)

- **Absent** de `groupes_m365` → **jamais attribué au login**.  
- **Condition morte** : badge factures NV2 côté PDG.  
- Pas un groupe administrable aujourd’hui.

### Autres groupes parmi les 16

La liste complète des 16 libellés en base et leurs effectifs : **à vérifier** en relançant `php tools/diag/diag_controle_acces_1234.php` sur OVH (section groupes). Ne pas inventer ici.

---

# Partie 3 — Droits écrits en dur (feuille de route)

Ces droits **ne sont pas** modifiables dans `/admin/droits`. Les convertir un jour = développement. **Rien n’est converti dans ce lot.**

| Écran / action | Groupes autorisés | Remplacer un jour par (clé existante ou à créer) | Fichier (annexe) |
|----------------|-------------------|--------------------------------------------------|------------------|
| CIE lecture / écriture | Lecture : Envol, DSI, Admin, DG, Compta · Écriture : Envol, DSI, Admin | `cie.lecture` / `cie.ecriture` (existent) | `AuthorizesCieAccess` |
| Compte prorata lecture / écriture | Idem + règles responsable | *(pas de clé dédiée prorata — à créer ou rattacher)* | `AuthorizesCompteProrataAccess` |
| NF Habitat | Lecture : + Communication · Écriture : Envol, DSI, Admin | *(clé à créer, ex. `programmes.nf_habitat.*`)* | `AuthorizesNfHabitatAccess` |
| Écriture appels d’offres | Envol, DSI, Admin | `ao.ecriture` (existe) | `AuthorizesAppelOffreWrites` |
| Modifications programme VEFA (certaines) | Admin ERP, DG, ou responsable programme | `programmes.*.ecriture` (existent) | `AuthorizesProgrammeVefaAccess` |
| Anonymisation / export RGPD annuaire | Admin ERP **ou Comptabilité** (malgré le nom « DAF ») | `annuaire.*` ou permission dédiée | `AppServiceProvider` (`admin-ou-daf`) |
| Comptabilisation (page) | Compta, Admin, DSI | `factures.comptabilisation` (existe mais non branchée) | routes factures |
| Suppression marché | Admin ERP | *(créer `marches.suppression` ou réutiliser admin)* | `MarcheController::destroy` |
| Menu GEMME | DSI, Admin | *(créer `gestion_locative.*`)* | AppShell + contexte |
| Registres juridiques | Juridique, DSI, Admin | *(créer `juridique.registres.*`)* | routes |
| Aktor (porte) | `GS_GROUPE` | *(créer `aktor.acces`)* + garder `assistant.lecture` | routes |
| Budget programme (écriture) | DG, Admin | `bilan.ecriture` ou clé budget | routes |
| Virement exécuté | DG, DAF (+ e-mails config) | `factures.paiement` ou clé dédiée | `FactureValidationPermissions` |

*Exclu volontairement : outil interne de suivi de développement (`SuiviDevController`).*

---

# Annexe technique

Vocabulaire développeur autorisé ici seulement.

### Court-circuits

| Règle | Emplacement |
|-------|-------------|
| `Gate::before` → `isAdminERP()` | `app/Providers/AppServiceProvider.php:60-65` |
| Raccourcis `GS_DSI` / `GS_ADMIN_ERP` catalogue | `app/Services/PermissionService.php:45-54` |
| `hasM365Group` / `hasAnyM365Group` → true si Admin ERP | `app/Models/User.php:132-150` |
| Gate `admin-ou-daf` teste `GS_COMPTABILITE` | `app/Providers/AppServiceProvider.php:52-57` |

### Correspondance écran → mécanisme (extrait)

| Écran | Route / préfixe | Mécanisme | Fichier:ligne (indicatif) |
|-------|-----------------|-----------|---------------------------|
| Foncier module | `/foncier/*` | `feature.permission:foncier.lecture` (+ module) | `routes/web.php` ~640 |
| Foncier écriture | idem | `foncier.gestion` / `assertGestion` | contrôleurs Foncier |
| Foncier prix | — | contrôleur `foncier.prix` (pas middleware route) | Dossier/Offre/Parcelle… |
| Secteurs write | `/foncier/secteurs` | `foncier.secteurs` | `routes/web.php` ~1135 |
| Comptabilisation | `/factures/comptabilisation` | `m365.groups:GS_COMPTABILITE,GS_ADMIN_ERP,GS_DSI` | `routes/web.php` ~359 |
| Paiement | mise-en-paiement | m365 + `factures.paiement` | `routes/web.php` ~397 |
| Marchés CRUD | `/programmes/{p}/marches` | auth seule (routes) | `routes/web.php` ~2027 |
| Marché destroy | idem | `isAdminERP()` | `MarcheController.php:822` |
| CIE | `/programmes/{p}/cie` | trait groupes | `AuthorizesCieAccess.php` |
| Compte prorata | `/compte-prorata` | trait groupes | `AuthorizesCompteProrataAccess.php` |
| AO writes | AO | trait groupes | `AuthorizesAppelOffreWrites.php` |
| NF Habitat | programme | trait groupes | `AuthorizesNfHabitatAccess.php` |
| VEFA writes | programme | trait groupes | `AuthorizesProgrammeVefaAccess.php` |
| Registres juridiques | `/juridique/registres` | m365 JURIDIQUE/DSI/ADMIN | `routes/web.php` ~1174 |
| Aktor | `/aktor` | m365 `GS_GROUPE` + `assistant.lecture` | `routes/web.php` ~458 |
| GEMME menu | `/gestion-locative/*` | groupes DSI/ADMIN + module | `GestionLocativeContext` |
| Admin hub | `/admin` | m365 DSI/ADMIN/COMPTA/DG | `routes/web.php` ~1260 |
| Droits admin | `/admin/droits` | `admin.droits.*` | `DroitsController` |
| Visibilité factures | listes/fiches | `FactureVisibility` | `app/Support/FactureVisibility.php` |
| Validation NV | dépôt/fiche | `FactureValidationPermissions` + `can_validate` | support + contrôleurs |
| Confort enseigne | dépôt / sélecteurs | `ProgrammeEnseigneComfortFiltre` | `app/Support/ProgrammeEnseigneComfortFiltre.php` |
| PDG Envol mort | props Inertia | `GS_PDG_ENVOL` | `HandleInertiaRequests.php:339` |
| Habilitations dossier | foncier | `record_habilitations` | concerns / policies |

### Catalogue

- Fichier : `config/feature_permissions.php` — **109** clés dans le catalogue source au HEAD documenté.  
- Production (#1234) : **107** permissions en table, **414** liens groupe↔permission.  
- Écart 107 vs 109 : **à vérifier** (permissions ajoutées au fichier non encore seedées en prod, ou inversement).

### Points marqués « à vérifier » (incertitudes assumées)

1. Liste exacte et effectifs des **16** groupes hors chiffres #1234 déjà cités.  
2. Contenu **réel** des mappings `factures.lecture` / `factures.ecriture` en prod (anomalie `GS_GROUPE` / retrait compta) — confirmer sur `/admin/droits`.  
3. Accès réel liste programmes / GED / annuaire / tâches quand aucune permission n’est sur la route.  
4. Détail fin « groupe de travail » foncier.  
5. Service d’accès programme (qui voit quel programme) — non déroulé ligne à ligne ici.  
6. Écart catalogue fichier (109) vs base (107).  
7. Comportement utilisateur **sans aucun groupe**.

---

*Document de documentation seule (#1235). Aucun droit modifié. Pour l’administration au quotidien : `/admin/droits` + ce rapport. Pour la cartographie technique : `docs/suivi/SUIVI_1234_diag_controle_acces.md`.*

---

## Inventaire des permissions du catalogue (couverture)

Les **109** clés du fichier catalogue. Production #1234 : **107** en table (écart à vérifier). Chaque clé est listée ici ; le détail action-par-action est dans la partie 1.

| Code permission | Libellé | Catégorie |
|-----------------|---------|-----------|
| `marches.lecture` | Marchés — lecture | Suivi chantier |
| `marches.ecriture` | Marchés — écriture | Suivi chantier |
| `avenants.lecture` | Avenants — lecture | Suivi chantier |
| `avenants.ecriture` | Avenants — écriture | Suivi chantier |
| `situations.lecture` | Situations — lecture | Suivi chantier |
| `situations.ecriture` | Situations — écriture | Suivi chantier |
| `chronologie.lecture` | Chronologie — lecture | Suivi chantier |
| `chronologie.ecriture` | Chronologie — écriture | Suivi chantier |
| `cie.lecture` | CIE — lecture | Suivi chantier |
| `cie.ecriture` | CIE — écriture | Suivi chantier |
| `penalites.lecture` | Pénalités — lecture | Suivi chantier |
| `penalites.ecriture` | Pénalités — écriture | Suivi chantier |
| `factures.lecture` | Factures — lecture | Factures |
| `factures.ecriture` | Factures — écriture | Factures |
| `factures.depot.lecture` | Dépôt factures — lecture | Factures |
| `factures.depot.ecriture` | Dépôt factures — écriture | Factures |
| `factures.validation_nv1` | Validation NV1 | Factures |
| `factures.validation_nv2` | Validation NV2 | Factures |
| `factures.comptabilisation` | Comptabilisation | Factures |
| `factures.paiement` | Mise en paiement | Factures |
| `bilan.lecture` | Bilan — lecture | Bilan financier |
| `bilan.ecriture` | Bilan — écriture | Bilan financier |
| `postes_budgetaires.lecture` | Postes budgétaires — lecture | Bilan financier |
| `postes_budgetaires.ecriture` | Postes budgétaires — écriture | Bilan financier |
| `tresorerie.lecture` | Trésorerie — lecture | Bilan financier |
| `tresorerie.ecriture` | Trésorerie — écriture | Bilan financier |
| `programmes.lecture` | Programmes — lecture | Programmes |
| `programmes.ecriture` | Programmes — écriture | Programmes |
| `programmes.societe_bancaire.lecture` | Société bancaire — lecture | Programmes |
| `programmes.societe_bancaire.ecriture` | Société bancaire — écriture | Programmes |
| `programmes.stades_avancement.lecture` | Stades d'avancement — lecture | Programmes |
| `programmes.stades_avancement.ecriture` | Stades d'avancement — écriture | Programmes |
| `programmes.appels_de_fonds.lecture` | Appels de fonds — lecture | Service client |
| `programmes.appels_de_fonds.ecriture` | Appels de fonds — écriture | Service client |
| `programmes.responsables.lecture` | Responsables — lecture | Programmes |
| `programmes.responsables.ecriture` | Responsables — écriture | Programmes |
| `programmes.financement.lecture` | Financement — lecture | Programmes |
| `programmes.financement.ecriture` | Financement — écriture | Programmes |
| `programmes.associes.lecture` | Associés — lecture | Programmes |
| `programmes.associes.ecriture` | Associés — écriture | Programmes |
| `lots.lecture` | Lots — lecture | Commercial |
| `lots.ecriture` | Lots — écriture | Commercial |
| `acquereurs.lecture` | Acquéreurs — lecture | Commercial |
| `acquereurs.ecriture` | Acquéreurs — écriture | Commercial |
| `tma.lecture` | TMA — lecture | Service client |
| `tma.ecriture` | TMA — écriture | Service client |
| `tma.bibliotheque.lecture` | Bibliothèque TMA — lecture | Service client |
| `tma.bibliotheque.ecriture` | Bibliothèque TMA — écriture | Service client |
| `tma.overrides_programme.lecture` | Overrides TMA programme — lecture | Service client |
| `tma.overrides_programme.ecriture` | Overrides TMA programme — écriture | Service client |
| `commercialisation.lecture` | Commercialisation — lecture | Commercial |
| `commercialisation.ecriture` | Commercialisation — écriture | Commercial |
| `offres_commerciales.lecture` | Offres commerciales — lecture | Commercial |
| `offres_commerciales.ecriture` | Offres commerciales — écriture | Commercial |
| `marketing.lecture` | Marketing — lecture | Marketing |
| `marketing.gestion` | Marketing — gestion | Marketing |
| `leads_marketing.lecture` | Leads marketing — lecture | Marketing |
| `leads_marketing.ecriture` | Leads marketing — écriture | Marketing |
| `codes_campagnes.lecture` | Codes campagnes — lecture | Marketing |
| `codes_campagnes.ecriture` | Codes campagnes — écriture | Marketing |
| `leads_marketing.assigner_commercial` | Assigner commercial | Marketing |
| `ao.lecture` | Appels d'offres — lecture | Appels d'offres |
| `ao.ecriture` | Appels d'offres — écriture | Appels d'offres |
| `ao.devis.lecture` | Devis AO — lecture | Appels d'offres |
| `ao.devis.ecriture` | Devis AO — écriture | Appels d'offres |
| `documents.lecture` | Documents — lecture | Documents |
| `documents.ecriture` | Documents — écriture | Documents |
| `sharepoint.diagnostic` | Diagnostic SharePoint | Documents |
| `annuaire.lecture` | Annuaire — lecture | Annuaire |
| `annuaire.ecriture` | Annuaire — écriture | Annuaire |
| `demandes_fournisseurs.lecture` | Demandes fournisseurs — lecture | Annuaire |
| `demandes_fournisseurs.ecriture` | Demandes fournisseurs — écriture | Annuaire |
| `demandes_fournisseurs.validation` | Validation demandes fournisseurs | Annuaire |
| `intacct.synchro.lecture` | Synchronisation Intacct — lecture | Intacct |
| `intacct.synchro.ecriture` | Synchronisation Intacct — écriture | Intacct |
| `intacct.erreurs` | Erreurs Intacct | Intacct |
| `referentiels.lecture` | Référentiels — lecture | Intacct |
| `referentiels.ecriture` | Référentiels — écriture | Intacct |
| `tasks.lecture` | Tâches — lecture | Tâches |
| `tasks.ecriture` | Tâches — écriture | Tâches |
| `tasks.assigner` | Tâches — assigner | Tâches |
| `alertes.lecture` | Alertes — lecture | Général |
| `aide.lecture` | Centre d'aide — lecture | Général |
| `aide.gestion` | Centre d'aide — gestion | Général |
| `assistant.lecture` | Assistant Hectarion — lecture | Général |
| `assistant.gestion` | Assistant Hectarion — gestion | Général |
| `foncier.lecture` | Foncier — lecture | Foncier |
| `foncier.gestion` | Foncier — gestion | Foncier |
| `foncier.prix` | Foncier — prix | Foncier |
| `foncier.referentiels` | Foncier — référentiels | Foncier |
| `foncier.secteurs` | Foncier — secteurs | Foncier |
| `foncier.deverrouillage` | Foncier — déverrouillage | Foncier |
| `admin.utilisateurs.lecture` | Utilisateurs — lecture | Administration |
| `admin.utilisateurs.ecriture` | Utilisateurs — écriture | Administration |
| `admin.droits.lecture` | Droits — lecture | Administration |
| `admin.droits.ecriture` | Droits — écriture | Administration |
| `admin.systeme` | Administration système | Administration |
| `admin.maintenance` | Maintenance | Administration |
| `admin.parametres` | Paramètres | Administration |
| `admin.nomenclature.lecture` | Nomenclature — lecture | Administration |
| `admin.nomenclature.ecriture` | Nomenclature — écriture | Administration |
| `admin.enseignes.lecture` | Enseignes — lecture | Administration |
| `admin.enseignes.chronologie.lecture` | Chronologie enseignes — lecture | Administration |
| `admin.enseignes.chronologie.ecriture` | Chronologie enseignes — écriture | Administration |
| `admin.categories_frais_generaux.lecture` | Catégories frais généraux — lecture | Frais généraux |
| `admin.categories_frais_generaux.ecriture` | Catégories frais généraux — écriture | Frais généraux |
| `admin.marketing.lecture` | Admin marketing — lecture | Administration |
| `admin.marketing.ecriture` | Admin marketing — écriture | Administration |
| `meta.health.lecture` | Santé Meta — lecture | Administration |

*Couverture : 100 % des clés catalogue listées. Les permissions sans section d’écran dédiée (ex. pénalités, chronologie, alertes, SharePoint diagnostic) restent visibles et administrables dans `/admin/droits` sous leur catégorie.*

