# Rôles & permissions Zammad (Phase 2)

> Modèle **hybride** de visibilité des tickets (cf. `docs/prod-readiness.md` Phase 2).
> Implémenté via `config/routing/seed_roles.rb` (console Rails, idempotent).
> Domaine-indépendant → créé sur l'instance de test, rejouable tel quel en prod.

## Principe

- L'**isolation par département** est portée par l'**accès groupe** de rôles dédiés.
- Le rôle **`Agent`** par défaut a un **accès groupe vide** et fournit `ticket.agent`, l'UX agent
  et les **overviews par défaut**. Il ne crée donc aucune fuite d'isolation.
- **Règle d'assignation** : chaque agent = **`Agent`** + **un rôle département** ci-dessous.
  Les leads/managers prennent **`Supervisor`** à la place du rôle département.

> ⚠️ **La case « accès groupe » de la fiche agent apparaît VIDE — c'est normal.** L'accès est porté
> par le **rôle** (`Sales & Engineering`, `Operations`, …), pas assigné directement sur l'user.
> L'accès effectif se vérifie en console (`User#group_ids_access('read'|'full'|…)`) ou se gère via
> **Manage → Roles**, jamais depuis la fiche user. Un tableau vide sur la fiche agent n'indique donc
> **pas** un rôle mal configuré.

## Rôles département (accès groupe)

| Rôle | Quote | Sales | CAD | Logistics | Accounting | After-sales | Triage |
|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| **Sales & Engineering** | full | full | full | — | — | — | read/create |
| **Operations** | — | — | — | full | — | full | read/create |
| **Accounting** | — | — | — | — | full | — | read |
| **Supervisor** | full | full | full | full | full | full | full |

- **Supervisor** porte en plus la permission **`report`** (reporting).
- **Triage (`contact@`)** : la plupart des tickets sont **auto-routés à l'ingestion par les
  Postmaster Filters** mots-clés (`config/routing/seed_postmaster_filters.rb`) et quittent Triage seuls. Le résiduel non classé est visible
  par Supervisor (full) et récupérable par les agents (read/create). Déplacer un résiduel vers un
  groupe isolé (ex. Accounting) requiert **Supervisor**.

## Overviews

Pas de custom pour l'instant : les **overviews par défaut** (My Assigned, Unassigned & Open, Open,
Escalated…) sont liées au rôle `Agent` et, combinées au filtrage par accès groupe, donnent à chaque
équipe sa liste de travail (elle ne voit que ses groupes). On ajoutera du custom **seulement si un
manque apparaît** (limite Zammad ~15-20 overviews).

### Overviews (test hybride — `Dev-Hybride`)

Test de l'**option C hybride** (décision Roma 2026-07-02) : 2 files ajoutées via
`config/routing/seed_overviews.rb` (idempotent), défauts **intacts** :

- **Quote — to handle** : tickets Quote / Estimating sans owner, new/open, tri priorité puis
  FIFO. Visible : **Sales & Engineering, Supervisor, Admin**.
- **Triage — to sort** : tout General / Triage en new/open (avec ou sans owner), FIFO.
  Visible : rôle **Agent** (tous — Noppon n'a que read sur Triage, voulu).

Détails : `docs/demande-infos/2026-07-02-ticket-queue-layout/ANSWER.md` et `DESIGN.md` (même dossier).

## Reste à faire (hors test)

- **Agents réels** : ✅ 4 agents créés via import CSV Zammad (2026-07-01) — Cartoon (`Agent` +
  Sales & Engineering + Operations), Noc (Sales & Engineering), Noppon (Accounting), Phrom
  (Supervisor). Accès groupes effectif vérifié en console. Roster extensible via le même import.
- Revoir le besoin d'overviews custom une fois les vrais volumes observés.
