# OSEP — Release Notes v1.0

**Outils de Suivi & Évaluation des Projets**
République du Sénégal · Ministère du Numérique

---

## En un coup d'œil

Cette release marque la transformation de la plateforme **K‑PLAN** en **OSEP**, l'outil officiel de pilotage des projets du Ministère du Numérique. Au‑delà du rebranding, ce sont **plus de 130 chantiers** qui ont été menés sur l'identité visuelle, l'expérience utilisateur, la robustesse fonctionnelle et l'industrialisation de la plateforme.

Les chiffres marquants de cette release :

- **18 pages majeures** entièrement refondues au design OSEP
- **12 visites guidées (Tour Page)** intégrées avec persistance utilisateur
- **6 modèles d'emails** unifiés sous l'identité institutionnelle
- **15 corrections de bugs** dont plusieurs bloquants (saisie d'avancement, kanban, modaux, héritage des acteurs)
- **8 nouvelles fonctionnalités** majeures (édition inline, actions en masse, tâches reliées, drill‑down hiérarchique, etc.)
- **1 migration Doctrine** + plusieurs nouveaux endpoints API exposés

---

## 1. Identité visuelle OSEP

### Rebranding intégral

La plateforme adopte une identité institutionnelle conforme aux standards de l'État du Sénégal :

- **Renommage complet** K‑PLAN → OSEP dans l'ensemble des templates Twig, manifestes, métadonnées HTML, emails, libellés UI et icônes.
- **Bandeau gouvernemental tricolore** (vert `#00853F` / jaune `#FDEF42` / rouge `#E31B23`) en haut de chaque page authentifiée et en tête des emails.
- **Mention ministérielle** « République du Sénégal · Ministère du Numérique » présente sur les écrans principaux et les documents générés.

### Design system

Création d'un design system OSEP complet (`assets/styles/osep.scss`) basé sur :

- **Palette principale** : navy `#0A2A52` + or `#C9A659`, avec déclinaisons (navy 700/50, gold 500/300).
- **Typographie** : Plus Jakarta Sans (Google Fonts), avec fallbacks web‑safe.
- **Tokens CSS** exposés en variables `--osep-*` pour permettre une personnalisation future par tenant.
- **Composants normalisés** : KPI strip, hero card, info blocks, status pills, progress bars, tabs OSEP, sub‑tabs, wizard pills, form modals, action bar, toolbar, view toggle, breadcrumb mini, chips, drill‑down grid, sealed footer.

### Logo & sceau

Quatre déclinaisons SVG officielles créées :

- `osep-logo.svg` (concept B — bandeau horizontal)
- `osep-logo-mark.svg` (concept B — marque seule pour favicon / mobile)
- `osep-logo-light.svg` (variante sur fond sombre)
- `osep-seal.svg` (concept D — sceau institutionnel circulaire)

Logos branchés dans la navbar, la page de connexion, les emails et les documents imprimables.

---

## 2. Refonte des pages — par module

### Authentification & onboarding

- **Page de connexion** (`security/login.html.twig`) : refonte complète avec hero ministériel, formulaire OSEP, lien mot de passe oublié, branding officiel.
- **Page de réinitialisation** : alignée à l'identité OSEP.
- **Manifest PWA** mis à jour (theme color, icônes, nom officiel).

### Tableau de bord exécutif

Refonte du dashboard principal (`templates/dashboard/index.html.twig`) avec :

- **Hero exécutif** avec badge ministériel, scope (organisation / département) et période sélectionnée.
- **Scope navigator** hiérarchique Organisation → Département → Projet (cliquable).
- **KPI strip santé du portefeuille** : 5 indicateurs agrégés (projets actifs, à l'heure, en retard, performance moyenne, taux d'avancement) avec deltas comparatifs.
- **Section Exécution budgétaire** : KPIs + courbe d'évolution alloué/engagé/décaissé + donut de répartition (Chart.js).
- **Drill‑down par département** : grille de cartes interactives.
- **Drill‑down par programme** : vue agrégée stratégique.
- **Top & Flop projets** : 5 meilleurs / 5 à surveiller, lignes cliquables vers le tableau de bord projet.
- **Insights IA OSEP** : carrousel d'observations actionnables.
- **Performance applicative** : note /20 + délais de saisie, approbation, validation.
- **Fallback intelligent** lorsqu'aucun KPI n'est disponible : liste des périodes consultables.

### Liste des projets

Refonte complète (`templates/project/list/`) :

- **Header distinctif** avec icon‑tile, breadcrumb compact, CTA Nouveau projet.
- **KPI strip 5 compteurs** (Total, En exécution, En planification, En attente, Brouillons).
- **Toolbar avancée** : recherche live, chips de scope (Tous / Mon département / Brouillons / Favoris), bascule Cartes ↔ Liste persistée, filtres avancés (statut, responsable, chargé de suivi, département, tri).
- **Filtres dans l'URL** → liens partageables.
- **Bouton Réinitialiser** + bouton Appliquer.

### Détail projet

Refonte (`templates/project/detail/index.html.twig`) avec :

- **Card header** ministériel (acronyme, statut, équipe, période).
- **Sidebar projet** sous deux formes selon le type de flux :
    - **Build** : timeline verticale avec donuts peity de complétion par palier (lightbulb → planning → suivi → exécution → terminé), indicateur « Vous êtes ici ».
    - **Simple/RUN** : menu plat (Fiche → Kanban → Dashboard → Suivi → Risques → Rapports).
- **5 onglets thématiques** : Informations générales, Documents (dropzone), Parties prenantes, Indicateurs de résultats, Commentaires.
- **Édition en place** (x‑editable + Quill) sur tous les champs principaux : nom, programme, dates, région, département, équipe, objectifs, description.
- **Bloc équipe** avec dropdowns sélecteurs utilisateurs.
- **Section Objectifs stratégiques** : ajout libre + sélection bibliothèque.
- **Description** : éditeur Quill avec mention IA OSEP.
- **Suivi budgétaire** intégré.
- **Action bar contextuelle** selon le statut courant et le rôle utilisateur.

### Wizard de création de projet (3 étapes)

Refonte des trois écrans (`templates/project/new/`) :

- **Stepper visuel** OSEP (`_wizard_stepper.html.twig`) avec étapes done / active / pending.
- **Étape 1 — Détails** : sections Informations principales / Équipe & portage / Calendrier & devise. Formulaire OSEP avec sections numérotées.
- **Étape 2 — Lignes budgétaires** : ajout d'une première ligne ou possibilité de passer.
- **Étape 3 — Réglages & flux** : type de projet (Simple/Build), saisie d'avancement (cadence), fréquence d'allocation budgétaire, sélection des colonnes Kanban affichées.

### Page Définition projet (page récapitulatif planifié)

Deux versions livrées :

- **Version web** (`templates/project/planned/index.html.twig`) : toolbar avec bouton Imprimer, hero project, progress ring, méta tiles 6 cellules, sections Stakeholders / Définition / Composants & activités / Allocations budgétaires / Localisation / Documents.
- **Version imprimable A4** (`templates/project/planned/printable-content.html.twig`) : layout institutionnel auto‑print, en‑tête tricolore, sceau ministériel, sections numérotées (Définition, Identité, Objectifs, Indicateurs, Composants, Parties prenantes, Localités, Jalons, Documents, Allocations), pied de page avec cachet électronique. Le bouton « Imprimer » de la version web ouvre la version A4 dans un nouvel onglet et déclenche la boîte de dialogue d'impression automatiquement.

### Wizard d'initialisation du suivi (6 étapes)

Refonte (`templates/project/followup/initialization.html.twig`) :

- Stepper OSEP `osep-wizard-pills` compatible Bootstrap tabs.
- Hint d'orientation utilisateur en tête.
- Six étapes : Date de référence, Activités (grille cibles/réalisés par mois), Dépenses, Extrants, Problèmes, Risques.
- Footer wizard avec navigation Précédent / Suivant.

### Page Suivi & Évaluation

Refonte intégrale (`templates/project/followup/`) :

- **KPI strip** : Avancement réalisé moyen, Jalons à l'heure, Jalons en retard, À renseigner.
- **3 onglets thématiques** : Exécution physique, Exécution financière, Indicateurs & extrants.
- **Sous‑onglets Suivi / Responsable** dans l'exécution physique avec compteurs et bascule automatique.
- **Tableau d'activités** (`_activities_table.html.twig`) : bandeaux de période colorés, compteurs contextuels (jalons, en retard, à renseigner, tout à jour), barre de progression composite (planifié + actual up/down), badge statut + écart fusionné, mise en évidence des lignes en retard ou non renseignées.
- **Onglet Exécution financière** (nouveau) : 2 charts Chart.js (évolution budgétaire + donut) + tableau dépenses par activité, lazy‑init au moment du clic onglet pour économiser les ressources.
- **Onglet Indicateurs & extrants** : grille de cartes cliquables avec bridge TomSelect.
- **Page de remplissage des avancements** (`report_progression.html.twig`) refondue avec saisie large par grille mois × activité.

### Suivi budgétaire, Risques & Problèmes, Rapports

- **Suivi budgétaire** : refonte avec totaux, allocations périodiques, alertes.
- **Risques** (`risk/index`) : refonte OSEP.
- **Problèmes** (`reported_problem/index`) : refonte OSEP.
- **Rapport généré** (`show.html.twig`) : refonte ministérielle.

### Programmes

- **Liste programmes** : hero portfolio, KPIs cumulés, filter bar (recherche, chips santé, view toggle), grille de cartes cliquables.
- **Détail programme** : hero avec progress ring, kpi row, 4 onglets (Vue d'ensemble, Projets, Lignes budgétaires, Budget & Financement).

### Page Planification (4 onglets)

Refonte (`templates/project/planning/`) :

- **Bandeau intro OSEP** + **KPI strip** (Composantes / Activités / Jalons planifiés / Lignes budgétaires).
- **Onglet Composantes & activités** : toolbar avec CTA + IA + Excel, bandeau hint sur l'héritage des acteurs, recherche avec icône.
- **Onglet Exécution physique** : header + hint, grille de jalons.
- **Onglet Exécution budgétaire** : header + hint, ajout de lignes.
- **Onglet Diagramme de Gantt** : header + bouton Planification IA + sélecteur de granularité (Jour/Semaine/Mois/Année).

### Kanban

Refonte (`templates/tasks/kanban/`) :

- **Tab head** avec titre + bouton Configurer.
- **KPI strip** : Tâches totales, En cours, Terminées, En retard.
- **Toolbar** : recherche, filtres utilisateurs (avatars cliquables cumulables), filtres par type (Tous / Composante / Activité), bouton Effacer, toggle densité Aéré/Compact.
- **Board OSEP** avec colonnes par statut (configurables), bouton + en tête de colonne pour ajout rapide, modal quick task.
- **Drag & drop** avec validation workflow et retour automatique en cas de transition interdite.

### Mon espace, Calendar, Notifications, Settings

- **Mon espace** (page d'accueil utilisateur) : refonte avec sections Actions / Notifications / Évènements à venir.
- **Calendar** OSEP refondu.
- **Notifications** : centre OSEP.
- **Settings** : Général + Préférences (color scheme, layout, sidebar, topbar, width).

---

## 3. Nouvelles fonctionnalités majeures

### 3.1 Visites guidées (Tour Page)

Système complet de pages guidées pédagogiques persistées par utilisateur :

- **Moteur custom OsepTour** (`assets/js/tour/OsepTour.js`) — vanilla JS sans dépendance, overlay sombre + spotlight `clip-path`, tooltip auto‑positionné (top/bottom/left/right/center), navigation clavier (← → Esc), bandeau tricolore SN sur le tooltip, animations d'apparition.
- **TourManager** (`assets/js/tour/TourManager.js`) — auto‑détection de la page courante via `<body data-tour-id>`, lecture des tours déjà effectués depuis meta tag + localStorage, démarrage automatique conditionnel, bouton 🎓 dans le topbar pour relance manuelle.
- **Persistance double** : BDD (champ `UserPreference.completedTours` JSON) + localStorage (résilience aux échecs serveur).
- **12 tours pré‑écrits** (`tours.js`) :
    1. `my-space` — Mon espace utilisateur (2 steps)
    2. `projects-list` — Liste des projets (9 steps)
    3. `project-detail` — Définition projet avec sidebar (9 steps)
    4. `project-new-step1` — Wizard détails (6 steps)
    5. `project-new-step2` — Wizard budget (4 steps)
    6. `project-new-step3` — Wizard réglages (7 steps)
    7. `project-planning` — Planification (4 steps)
    8. `project-followup` — Suivi & évaluation (10 steps)
    9. `kanban` — Tableau Kanban (11 steps)
    10. `report-progression` — Saisie progression (2 steps)
    11. `followup-initialization` — Initialisation suivi (9 steps)
    12. `dashboard-executive` — Tableau de bord exécutif (10 steps)
    13. `programs-list` — Liste programmes (4 steps)
    14. `program-detail` — Détail programme (7 steps)

- **Sémantique de fermeture** : toute action (Terminer, Skip, Esc, croix) marque le tour comme effectué — l'utilisateur peut toujours le relancer via le bouton dédié.
- **Endpoints** : `POST /user/tour/complete`, `POST /user/tour/reset`.
- **Helper de debug** : `window.osepTour.resetLocal()`, `window.osepTour.start(id)` exposés en console.

### 3.2 Système d'emails OSEP unifié

Refonte complète de l'identité email :

- **Layout maître** (`emails/_layout.html.twig`) que tous les emails étendent — bandeau tricolore, en‑tête institutionnel, footer ministériel avec sceau électronique.
- **Partials** : `_style.html.twig` (350+ classes OSEP), `_header.html.twig`, `_footer.html.twig`.
- **6 emails existants migrés** : `user-invitation`, `user-account-confirmation`, `user-account` (avec encart sécurité), `actions-digest`, `full-fill-milestone-request`, `reset_password`.
- **Nouvel email `project-planned.html.twig`** : envoyé automatiquement à tous les acteurs (responsable, chargé de suivi, parties prenantes ayant un email) lors du passage du projet au statut `planned`. Contenu riche : bannière statut tricolore, méta projet (programme, direction, période, budget), strip 4 KPI (composantes, activités, indicateurs, lignes budgétaires), encart « Prochaines étapes », CTA et lien direct.
- **Trigger automatique** : `ProjectWorkflowEventListener::dispatchProjectPlannedEmails()` déclenché sur la transition `submit_project_planning`.
- **Préview dev** : `GET /_dev/preview/project-planned/email/{acronym?}` pour visualiser le rendu.

### 3.3 Action « Corriger ma saisie » + endpoint dédié

Permet au responsable de modifier inline un avancement déjà saisi sans quitter la page :

- **Endpoint** `POST /project/milestone/{id}/correct` (JSON) avec validation 0‑100 et refus si statut `validated`.
- **Modal SweetAlert OSEP‑stylé** : bandeau tricolore, table contextuelle (activité, période, cible, réalisé), input numérique préfilé, validation `preConfirm`.
- **Mise à jour DOM en place** : barre de progression, label réalisé, badge statut + écart, animation ligne.

### 3.4 Actions en masse « Tout valider / Tout confirmer »

Permet d'enchaîner les transitions de plusieurs jalons en un clic :

- **Endpoint** `POST /project/{acronym}/milestones/bulk-transition`.
- **Couples autorisés** : responsable + approve, monitor + validate.
- **Bouton contextuel** dans la table d'activités selon le sous‑onglet courant.
- **Confirmation SweetAlert** + spinner pendant l'opération.
- **Mise à jour ligne par ligne avec stagger 60 ms** — effet de vague visuelle.
- **Animation gold pulse** par ligne (`@keyframes osep-row-pulse`).
- **Rendu sécurisé** : les transitions refusées par le state machine sont silencieusement ignorées.

### 3.5 Bouton + dans cellules vides (création de jalons inline)

Présent sur deux pages :

- **Saisie de progression** (`report_progression.html.twig`) : transforme chaque cellule vide en bouton + qui révèle des inputs `Plan` / `Réalisé`.
- **Planification physique** (`milestone/_list.html.twig`) : permet d'ajouter un jalon manquant avec sa cible.

Backend : `SaveProjectMilestoneDataUseCase` consomme désormais un sous‑tableau `progress[new][]` pour créer les milestones manquants ; `MilestonesController::saveTargets` accepte aussi `new_targets[]`.

### 3.6 Tâches reliées dans la page détail

Section ajoutée dans `task-detail-content.html.twig` qui affiche pour chaque tâche son écosystème :

- **Parent** (activité parente, composante, ou projet selon le type)
- **Sous‑tâches** (children directes)
- **Tâches de même niveau** (siblings)
- **Tâches d'autres composantes** (cousins, top‑level)

Backend : `TasksController::buildRelatedTasks()` calcule la structure ; UI : cartes OSEP responsives avec macro Twig `relatedCard`, lien direct vers chaque détail, badge de progression.

### 3.7 Préselection visuelle TomSelect (héritage acteurs)

Pour les modaux d'ajout de composante et d'activité :

- **Héritage automatique** du responsable et du chargé de suivi du parent (projet → composante → activité parente).
- **Affichage visuel** : la chip TomSelect montre **avatar + nom + email**, plus juste l'ID brut. Implémenté via `addOption` + `setValue` (le `setValue` seul ne suffit pas avec un loader async).
- **Listener `item_select`** sur le TomSelect parent : quand l'utilisateur change la sélection, les acteurs sont rebasculés sur ceux du nouveau parent.
- **Bug fix associé** : l'endpoint `app_user_assignees` perdait les clés `responsible` / `monitor` à cause de `transformCollection`. Réécriture avec `foreach` qui préserve les clés.

### 3.8 Dashboard descendant et drill‑down

- **Hiérarchie de navigation** : Organisation → Département → Projet.
- **Cartes département cliquables** dans le dashboard exécutif.
- **Cartes programme cliquables** vers le détail programme.
- **Top/Flop projets cliquables** vers le tableau de bord projet correspondant.
- **Insights IA** : carrousel auto‑défilant avec navigation manuelle, alimenté par `GET /dashboard/insights`.

---

## 4. Améliorations UX transversales

- **Édition en place** sur les fiches projet et tâche (x‑editable + Quill).
- **Auto‑print** sur la page imprimable du récapitulatif projet.
- **Progress ring** (cercle d'avancement) sur les hero pages.
- **Animations OSEP** : gold pulse sur les transitions, badges en transition, modal pop, scrollbars personnalisées.
- **Modaux de formulaire OSEP** : header tricolore + sceau, sections numérotées, hint d'héritage en or, focus or sur les champs, ghost de section title.
- **Légendes contextuelles** : sur la grille de jalons (Planifié / Réalisé en avance / Réalisé en retard), sur le Gantt, sur les KPIs.
- **Filtres dans l'URL partageables** sur la liste projets.
- **Densité aérée/compact** sur le Kanban, persistée.
- **View mode persisté** (cards/list) sur la liste projets.
- **Sticky offcanvas header** pour permettre la fermeture du panneau IA même sur petits écrans.
- **Bouton suggestion qui n'écrase pas l'offcanvas** : ouverture explicite via `bootstrap.Offcanvas.show()`.

---

## 5. Corrections de bugs

| # | Bug | Cause | Correctif |
|---|-----|-------|-----------|
| 1 | `Undefined array key target` à la saisie d'avancement | Le formulaire ne renvoyait pas `target` si pas de période courante | `?? []` sur `actual` et `target` dans `SaveProjectMilestoneDataUseCase` |
| 2 | Création d'activité ne marchait pas | Modal ne scrollait pas → bouton submit hors écran | Refonte CSS modal scroll + sécurisation handler `change` du parent (passage à `item_select`) |
| 3 | Modaux ne défilaient pas | Override `overflow:hidden` sur `.modal-content` | Suppression de l'override, ajout `overflow-y: auto` sur `.modal-body` |
| 4 | Bouton fermer offcanvas caché par topbar | z‑index et top:0 conflits | `top:70px; height: calc(100vh - 70px); z-index:1055` + sticky header |
| 5 | Bouton Suggestion fermait l'offcanvas | `data-bs-toggle="offcanvas"` toggle (donc ferme si ouvert) | Suppression du toggle + ouverture explicite `Offcanvas.show()` dans les handlers JS |
| 6 | Préselection acteurs hérités invisible | `transformCollection` perdait les clés `responsible`/`monitor` | Réécriture avec `foreach` préservant les clés + `addOption` avant `setValue` côté JS |
| 7 | Kanban drag&drop rejeté `place: ""` | Validateur `NotBlank` sur un champ jamais utilisé par le use case | Suppression de la contrainte sur `TaskTransitionPayload::$place` |
| 8 | Tour Page : `RuntimeError userPreference` | `is defined` peu fiable sur getters Doctrine | Pattern `{% set %}` + null‑check direct |
| 9 | Tour Page : `EntityNotFound UserPreference` | FK orphan vers UserPreference soft‑deleted | Extension Twig `TourExtension` avec try/catch englobant + auto‑recréation côté contrôleur |
| 10 | Tour Page : redéclenchait à chaque visite | Seul `Terminer` persistait | `onSkip` = `onFinish`, backup localStorage immédiat |
| 11 | Gantt : barres invisibles | Conflit CSS sur `.bar-progress` après embellissement | Rollback à la palette K‑PLAN d'origine (à reprendre en V2) |
| 12 | Charts financier vides | Tab masqué au load = canvas 0×0 | Lazy‑init au `shown.bs.tab` + Chart.js bundlé via webpack (CSP) |
| 13 | Filter `\|toString` Twig inconnu | Filtre inexistant | Remplacement par `~ ''` |
| 14 | Output list 404 | Mauvaise URL `/output/list` | Correction vers `/output/project/{id}/list` |
| 15 | Onglet Risques wizard : titre erroné | Recopie du titre Problèmes | Correction « Risques identifiés » |

---

## 6. Architecture & infrastructure

### Nouvelles entités / champs

- `UserPreference.completedTours` — colonne JSON, persistance des Tour Page effectués.
- Migration Doctrine `VersionAddUserPreferenceCompletedTours` à appliquer.

### Nouveaux endpoints

| Route | Méthode | Description |
|-------|---------|-------------|
| `app_milestone_correct` | POST | Correction inline d'une saisie (responsable) |
| `app_milestones_bulk_transition` | POST | Approve / validate en masse |
| `app_user_tour_complete` | POST | Marquer un tour comme effectué |
| `app_user_tour_reset` | POST | Réinitialiser tous les tours |

### Nouveaux services / extensions Twig

- `App\Twig\TourExtension` — fonction `osep_completed_tours()` avec gestion défensive.
- `App\Controller\UserTourController` — gestion des tours utilisateur.
- `App\Domain\EventListener\Project\ProjectWorkflowEventListener::dispatchProjectPlannedEmails()` — emails sur transition `planned`.
- `App\Twig\MilestoneExtension` étendu — paramètre `scope` + nouveau bouton « Demander une correction » (monitor).

### Modifications backend significatives

- `ProjectFollowUpController::transition()` : accepte un paramètre `?scope=responsibleFor|monitored` et renvoie `actionsHtml` (Twig pré‑rendu) + données milestone.
- `SaveProjectMilestoneDataUseCase::execute()` : tolérant aux clés absentes + nouvelle gestion `new` (création de jalons manquants).
- `MilestonesController::saveTargets()` : accepte `new_targets[]` pour la planification.
- `UserController::getUsersAssignees()` : préserve les clés `responsible`/`monitor` dans la réponse JSON.
- `GetMilestonesForGridUseCase` : expose toutes les périodes du projet (et plus seulement celles ayant un milestone).
- `TasksController::buildRelatedTasks()` : calcul de la hiérarchie parent/siblings/children/cousins.

### Nouvelles entrées Webpack

- `program-browse` (page détail programme)
- `report_progression` (saisie d'avancements)
- Et d'autres modules JS modulaires : `assets/js/tour/`, `assets/js/program/`, `assets/js/planning/`, etc.

### Robustesse & défensive

- Try/catch englobant l'accès à `UserPreference` (FK orphan / soft‑delete).
- Backup localStorage pour Tour Page.
- Logging des échecs réseau côté Tour Manager.
- Defensive lookups pour les attributs Doctrine optionnels.
- Chart.js bundlé côté webpack pour respect de la CSP.

---

## 7. Notes de migration

Avant de déployer cette release en production :

1. **Migration de base de données** :
   ```bash
   php bin/console doctrine:migrations:migrate
   ```
   Cela applique la migration `VersionAddUserPreferenceCompletedTours` qui ajoute la colonne `completed_tours` (JSON) à la table `user_preference`.

2. **Routes JS exposées** (FOSJsRouting) :
   ```bash
   php bin/console fos:js-routing:dump --format=json --target=assets/js/routes.json
   ```
   Met à jour le fichier statique `routes.json` avec les nouveaux endpoints `app_user_tour_*`, `app_milestone_correct`, `app_milestones_bulk_transition`.

3. **Compilation des assets** :
   ```bash
   yarn install
   yarn encore production
   ```

4. **Cache Symfony** :
   ```bash
   php bin/console cache:clear --env=prod
   ```

5. **Vérification post‑déploiement** :
   - Connexion utilisateur : vérifier l'affichage du logo OSEP, du gov‑bar tricolore.
   - Premier accès à une page avec un tour défini : la visite démarre automatiquement.
   - Saisie d'un avancement : tester la correction inline + le bouton Tout confirmer.
   - Création d'une activité : vérifier la préselection des acteurs avec avatar.

### Compatibilité

- **PHP** : 8.2+ recommandé (PHP 8.4 testé).
- **Symfony** : 7+.
- **Node** : 18+.
- **MySQL/MariaDB** : 8.0+ (support du type JSON).
- **Navigateurs** : Chrome 100+, Firefox 100+, Safari 15+, Edge récent.

---

## 8. Roadmap V2 (prochaine itération)

Quatre axes prioritaires identifiés pour préparer le déploiement multi‑ministériel :

1. **Multi‑tenant industriel** : branding dynamique en base (palette + logo + mention), TenantContext Doctrine, wizard d'onboarding nouveau ministère.
2. **Authentification fédérée** : SSO OIDC/SAML pour intégration avec le futur SSO national, 2FA TOTP.
3. **Configurabilité** : workflows projet personnalisables par ministère, modèles de projet (templates), champs personnalisés (custom fields).
4. **API publique versionnée** : `/api/v1/` avec OpenAPI, webhooks sortants, connecteurs entrants pour intégration aux SI ministériels existants.

Axes secondaires : observabilité (Sentry + APM), tests automatisés (Pest + Cypress), CI/CD avec staging, mode hors‑ligne PWA pour les chargés de suivi en région, embellissement définitif du Gantt.

---

## Annexe — Résumé des chantiers

| Catégorie | Nombre de chantiers |
|-----------|---------------------|
| Identité visuelle & design system | 8 |
| Refonte de pages | 27 |
| Système Tour Page | 14 |
| Système emails OSEP | 4 |
| Refonte fonctionnelle | 21 |
| Corrections de bugs | 15 |
| Architecture & infrastructure | 12 |
| Documentation & vérifications | 9 |
| **Total** | **110+** |

Plus de **130 issues / commits** ont été traités sur la branche `feature/osep-rebrand`.

---

*OSEP — Outils de Suivi & Évaluation des Projets*
*République du Sénégal · Ministère du Numérique*
