# Relevé de décisions — Atelier de cadrage Phase 0

**Source** : `Atelier_cadrage_P0_EFEKTIVACADEMIE RETOURS EB.docx` (retours Enguerran Brembilla),
complété par les 4 arbitrages pris en conversation le 05/08/2026.
**Statut** : Phase 0 close. Ces décisions font foi et remplacent les recommandations par défaut
du support d'atelier (`04_ATELIER_CADRAGE_P0.md`).

Légende : **D** = décision actée · **I** = interprétation appliquée, à corriger si elle trahit
l'intention · **O** = point encore ouvert.

---

## Session A — Modèle de contenu & expérience apprenant

### F1 · Modèle Formation > Leçon > Support
- **D** Option **A** retenue : renommage (section = Leçon, lesson = Support) + typage explicite.
- **D** Types de supports : **tous** ceux proposés (vidéo, podcast, réel, article, fiche) **+ Infographie**.
- **D** Le **quiz est un support** comme un autre dans la liste d'une leçon.
- **D** L'admin peut **créer de nouveaux types**, selon le modèle *étiquette + famille de rendu* :
  il définit un nom et une icône, et rattache le type à une **famille de rendu existante**
  (vidéo, audio, document, page). « Infographie » se rattache ainsi à la famille document/image.
  Conséquence : aucun développement à chaque nouveau type, et le front sait toujours l'afficher.
  Un type entièrement libre (rendu configurable) reste possible plus tard, à chiffrer à part.
- Impact : EA-027 (+ écran d'administration des types), EA-028/030/031/036/063/079.

### F2 · Source de vérité des durées
- **D** Ordre de priorité : **(1)** durée transmise par l'**import automatique du module**
  (manifeste SCORM / xAPI / JSON pipeline microlearning) ; **(2)** à défaut, **extraction
  automatique** (ffprobe à l'upload, oEmbed côté serveur pour les URLs, stockée une fois) ;
  **(3)** l'admin peut **toujours** modifier la durée de chaque support.
- **D** Articles/fiches : règle d'estimation proposée retenue (nombre de mots ÷ 200 mots/min),
  applicable au niveau (2), toujours corrigeable au niveau (3).
- **D** Précision d'affichage : **à la seconde**.
- **I** La mention « B » dans le retour est lue comme *la saisie admin fait autorité en dernier
  ressort*, et non comme « tout est saisi à la main » — c'est ce que décrit le texte qui suit.
- Impact : EA-028 (réécrite), EA-030, EA-033, EA-060, EA-081.

### F3 · Formule du % d'avancement
- **D** Option **B** retenue : **pondération par la durée** des supports, à deux conditions
  posées par le métier : (a) l'affichage doit rester **explicite pour l'apprenant**,
  (b) les **sections (leçons) terminées** sont visualisées en complément du pourcentage.
- **D** Règles annexes validées : *Non débutée* = 0 support complété ; *En cours* = ≥ 1 ;
  *Terminée* = statut de complétion existant.
- **I** Poids d'un support **sans durée intrinsèque** (quiz notamment) : durée estimée par défaut
  (proposition : 30 s par question pour un quiz), **modifiable par l'admin** comme toute autre
  durée (F2 niveau 3). Sans cela, une pondération par la durée est impossible à calculer.
- **I** Affichage apprenant : pourcentage **+ compteur explicite** (« 3 leçons terminées sur 5 »),
  pour satisfaire la condition (a) sans exposer la mécanique de pondération.
- Impact : EA-018 (réécrite), EA-033, EA-047, EA-049, EA-051.

### F4 · Deeplinks, minutage et URLs
- **D** Format validé.
- **I** Le format retenu est `/courses/{slug}?support={id}&t={secondes}` (et non `/cours/{id}-{slug}`
  du support annoté) : le front utilise déjà `/courses/:slug` sur `development`, et l'identifiant
  numérique reste accepté. Aucune migration.
- **D** Passif des anciennes URLs : traité hors atelier par
  [EFEKTIVACADEMIE-FRONT#18](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-FRONT/issues/18).
- Reste à traiter : **résolution du slug côté API** (EA-038) — sans elle, un lien partagé ne
  fonctionne toujours pas dans un autre navigateur.

### F5 · Badge de leçon vs certificat
- **D** Option **A** : le certificat reste au niveau **formation** ; le badge de leçon est un
  **jalon visuel**, cliquable vers le certificat une fois la formation achevée.
- Impact : EA-039, EA-033.

### F6 · Tuto — définition cible
- **D** Certificat sur tuto : **non**.
- **D** Définition cible (remplace l'usage actuel « ensemble de vidéos courtes ») :
  **un tuto = une vidéo courte**, rattachable à **un ou plusieurs processus**, l'ensemble des
  tutos d'un processus s'affichant **dans l'ordre de traitement**.
- **D** Modélisation : le « processus » **réutilise le mécanisme existant des parcours**
  (rattachement multiple + ordre déjà en base via `learning_path_courses`), sans créer d'entité
  concurrente. Un tuto peut donc appartenir à plusieurs processus.
- **D** Catalogue : la section Tuto adopte une **navigation de type YouTube** (vignettes,
  lecture enchaînée, tutos liés).
- **D** Suivi différencié (cf. F11) : pour les tutos, le cockpit affiche **nombre de tutos
  visionnés, temps passé, liste des tutos visionnés** — **sans** statut de formation ni résultat
  de quiz.
- Impact : nouvelle issue EA-084 (tutos + processus + catalogue), EA-085 (cockpit tutos),
  EA-058, EA-062.

---

## Session B — Rôles, organisation, RGPD

### F7 · Matrice des rôles
- **D** Matrice validée, avec **une correction** : le **Manager RH** voit la **hiérarchie directe
  et indirecte** (et non « tous les utilisateurs » par défaut) ; l'accès à l'ensemble des
  utilisateurs passe par son **onglet dédié « Tous les collaborateurs »**.
- **D** Rôle `manager` : **plus d'admin opérationnel**. Il est **rétrogradé au niveau manager
  d'équipe** — même périmètre qu'un `sub_manager` (ses seuls rattachés), aucune portée globale.
  Les droits globaux restent à `admin`. Aucun compte à migrer.
- **D** `manager_general` et `director` : **droits identiques**, distinction de libellé seulement.
- **D** Règle de profondeur validée : l'onglet « Mes équipes » s'affiche dès qu'il existe plus
  d'un niveau hiérarchique sous l'utilisateur (piloté par la donnée, pas par le rôle).
- **D** Périmètre du **formateur** : **suivi détaillé** (temps, connexions, résultats) sur les
  apprenants de **ses** formations.
- **I** Ce dernier point **prévaut sur la matrice RGPD de F11**, qui limitait le formateur aux
  seuls résultats pédagogiques : la réponse de F7 est la réponse spécifique à cette question.
- **O → à investiguer (F20)** : à quoi sert réellement `sub_manager` en production ? L'hypothèse
  métier est qu'il recouvre à la fois le « manager » et le « manager RH » actuels, avec de simples
  masquages d'écrans — à nettoyer. La requête « rôles réellement présents » du kit F20 tranchera.
- Impact : EA-043 (réécrite), EA-003, EA-008, EA-046, EA-048 à EA-056.

### F8 · Société
- **D** Option **A** : référentiel simple (table `companies` + `users.company_id`), **pas** de
  cloisonnement multi-tenant.
- **D** Liste initiale : **Efektiv Groupe, Aïkan, ACS**, l'admin pouvant en ajouter.
- Impact : EA-041.

### F9 · Création d'utilisateurs vs invitations
- **D** **Création ET modification de compte = admin uniquement** (retrait des routes des quatre
  autres rôles). C'est plus strict que la proposition initiale, qui ne visait que la création.
- **D** Les managers (`manager`, `manager_general`, `director`, `manager_rh`) conservent :
  l'**inscription d'utilisateurs existants** à des formations dans leur périmètre, la **relance
  des non-inscrits**, et la possibilité d'**inviter un utilisateur inconnu**.
- **D** Inviter un inconnu **ne crée pas un compte** : cela crée un **compte inactif** qui ne
  devient réel qu'à l'**acceptation** de l'invitation (lien à expiration). C'est ce mécanisme qui
  réconcilie « seul l'admin crée des comptes » et « les managers peuvent inviter ».
- **D** Un email par utilisateur et par envoi, listant toutes les formations concernées.
- **D** Mail d'onboarding avec lien sécurisé de définition du mot de passe — plus aucun mot de
  passe transmis en clair.
- **I** L'admin dispose évidemment des mêmes possibilités d'invitation.
- Impact : EA-003, EA-044, EA-045, EA-046.

### F10 · Menu manager « Rôle »
- **D** Option **d** : **l'écran n'a pas lieu d'être**. La partie Pilotage se limite à
  Dashboard / Invitation / Mes collaborateurs (+ Mes équipes / Tous les collaborateurs selon rôle).
- Impact : EA-056.

### F11 · Exports, données de suivi, RGPD
- **D** Matrice d'accès validée (avec la correction F7 sur le formateur).
- **D** Rétention des événements : **24 mois**, **paramétrable par l'admin**.
- **D** Fenêtre anti-bruit des vues : **30 secondes**, **paramétrable par l'admin**.
- **D** Comptes de test : **l'admin sélectionne lui-même** les comptes à exclure des compteurs
  (pas de liste figée en configuration).
- **D** Mention d'information des utilisateurs : à rédiger.
- **D** Volumétrie cible confirmée (500 – 5 000 apprenants).
- **D** **Profils d'usage** (jamais actif / one-shot / occasionnel / récurrent) : ce sont **deux
  besoins distincts** — le **profil qualifie l'utilisateur au niveau plateforme**, toutes
  formations et tutos confondus ; **et** le cockpit doit offrir en parallèle la **vision par
  formation**.
- **D** Période de calcul du profil : **90 jours glissants, paramétrable** (acté 05/08).
  Seuils inchangés : 1 jour actif = one-shot, 2-3 = occasionnel, ≥ 4 = récurrent.
- **D** **Vue tutos différenciée** dans le cockpit : nombre de tutos visionnés, temps passé, liste
  des tutos visionnés — sans statut ni résultat de quiz.
- **D** **Analyse des formations les plus consultées**, tous utilisateurs confondus, **avec le
  détail par leçon (section)**.
- Impact : EA-016, EA-017, EA-011, EA-051, EA-055, EA-085, spec `05_SPEC_PILOTAGE_ANALYTICS.md`.

---

## Session C — Périmètres fonctionnels

### F12 · SCORM
- **D** **A + étude B** : ingestion du manifeste pipeline maintenant, instruction d'un player
  SCORM générique en parallèle (étude E2).
- **D** Besoin de contenus tiers : **non identifié pour le moment**.
- Impact : EA-081, E2.

### F13 · Tickets
- **D** Modèle validé : tickets formels réservés aux managers ; demandes apprenants traitées en
  chat étiqueté « support ».
- **D** **Conversion chat → ticket** par l'admin : **oui**.
- **D** Priorité : **2 niveaux** (normal / urgent).
- Impact : EA-071, EA-073.

### F14 · Notifications
- **D** Canaux : **in-app (cloche) + email**.
- **D** Préférences par utilisateur : **oui**.
- **D** Digest : **oui** (immédiat pour chat, annonces et tickets ; digest pour les événements de
  faible priorité type « cours ajouté »).
- Impact : EA-024, EA-025.

### F15 · Visio
- **D** **Retrait complet** de la visio ZegoCloud, « pour le moment, à étudier plus tard ».
  Le secret d'API exposé dans le front est révoqué à cette occasion.
- Impact : EA-007.

### F16 · Politique de passage des quiz
- **D** Valeurs par défaut validées (seuil 70 %, tentatives illimitées, pas de délai, pas de
  limite de temps, feedback en fin de quiz, mélange activé) — **à condition que tout soit
  modifiable par l'admin, quiz par quiz**.
- **D** Acquis existants préservés : **oui**, aucune dé-certification rétroactive.
- Rappel : le seuil est déjà appliqué pour l'avenir par la PR de sécurité
  ([EFEKTIVACADEMIE-BACK#11](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/pull/11)).
- Impact : EA-065, EA-066.

### F17 · Chatbot (étude E1)
- **D** **Étude finalisée : chatnode retenu.**
- **D** Périmètre fonctionnel : **les deux** — FAQ / support **et** contenu des formations
  (acté 05/08). Le chatbot répond donc aussi bien aux questions d'usage de la plateforme qu'aux
  questions portant sur le contenu pédagogique.
- **O** Reste à cadrer : constitution et mise à jour de la base de connaissance (les contenus de
  formation évoluent à chaque publication), périmètre de visibilité par rôle, et moment
  d'intégration dans la roadmap.

### F18 · Gamification de la banque de questions (étude E3)
- **D** Étude séparée, avec une cible précisée : construire des **contests par thématique**,
  s'appuyant sur **l'ensemble des données d'une thématique donnée** (toutes formations et tutos
  confondus), **ouverts y compris à ceux qui n'ont pas suivi les cours en ligne**. Scoring tenant
  compte des **bonnes réponses** et du **délai de réponse**, ce dernier **paramétrable**.
- Prérequis : banque de questions taguée par thème (EA-067).

---

## Session D — Audit technique

### F19 · Environnements et portage
- **D** Des éléments de **CI/CD et de stratégie d'intégration Git existent déjà** : à cadrer
  **avec le développeur Lilian**.
- **D** À creuser dans le même mouvement : **tests unitaires et de non-régression** intégrés au
  dépôt (la PR de sécurité fournit déjà un premier socle : 11 tests, suite complète rejouée).

### F20 · Audit du schéma de production
- **D** « Ok lance le » — audit à réaliser.
- **O → bloqué** : l'audit nécessite un **accès en lecture à la base de production** (identifiants
  MySQL ou export du schéma). Aucun `.env` n'est présent dans le dépôt local. Trois options :
  transmettre un accès lecture seule, exécuter le kit SQL de la fiche F20 et me renvoyer les
  résultats, ou me fournir un `mysqldump --no-data`.
- Cet audit répondra aussi à la question ouverte de F7 sur l'usage réel de `sub_manager`.

---

## Récapitulatif des points encore ouverts

| # | Point | Nature |
|---|---|---|
| 1 | Accès base de production pour l'audit F20 | Bloquant pour le chiffrage ferme — procédure pas à pas dans `07_AUDIT_SCHEMA_PROD.md` |
| 2 | Usage réel de `sub_manager` en production | Sera tranché par l'audit F20 |
| 3 | Base de connaissance du chatbot (périmètre acté : FAQ **et** contenu) | À cadrer, hors sprints |
| 4 | Rédaction de la mention d'information RGPD | Responsable à désigner |
| 5 | Date de démarrage du sprint 1 | Conditionne le calendrier (cf. `02_PLAN_ACTION.md`) |
