From 5b40037d33eae0017d71623c79d78b82cc510fa0 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 22 Aug 2026 23:26:02 +0000 Subject: [PATCH] docs(phase15): document Pronote revalidation --- docs/ui-audit/BUGS.md | 9 +++ docs/ui-audit/CREATED_TEST_DATA.md | 6 ++ docs/ui-audit/IMPLEMENTATION_PHASE15.md | 102 ++++++++++++++++++++++++ docs/ui-audit/PAGES_MATRIX.md | 5 ++ docs/ui-audit/PROGRESS.md | 19 +++++ docs/ui-audit/REPORT.md | 8 ++ 6 files changed, 149 insertions(+) create mode 100644 docs/ui-audit/IMPLEMENTATION_PHASE15.md diff --git a/docs/ui-audit/BUGS.md b/docs/ui-audit/BUGS.md index 09ac421..624cca3 100644 --- a/docs/ui-audit/BUGS.md +++ b/docs/ui-audit/BUGS.md @@ -518,3 +518,12 @@ faux échec ultérieur du smoke stock selon l'ordre d'exécution. Le test restau maintenant le lien dans un bloc `finally` (`933f0a5`). La suite ciblée passe 22/22 et la suite complète ne conserve plus que l'échec historique GMAO lookback hors périmètre et son erreur de teardown. + +## Phase 1.5 — anomalies revalidées + +- Aucun nouveau bug bloquant observé sur la copie locale. +- L'ancien bouton d'import Pronote « non implémenté » est raccordé au + planning interne ; les erreurs de récupération sont gérées sans vider les + créneaux connus. +- Responsive/accessibilité visuels restent à confirmer avec un navigateur + instrumenté avant VM distante. diff --git a/docs/ui-audit/CREATED_TEST_DATA.md b/docs/ui-audit/CREATED_TEST_DATA.md index f2b4983..41b581c 100644 --- a/docs/ui-audit/CREATED_TEST_DATA.md +++ b/docs/ui-audit/CREATED_TEST_DATA.md @@ -138,3 +138,9 @@ de déplacement ; aucune donnée antérieure ni `alban` n'a été supprimée. conservé pour inspection manuelle. - Les tests automatisés créent des objets préfixés `Phase1` dans leur base de test isolée ; aucune donnée `TEST_UI_*` existante n'a été nettoyée. + +## Données ajoutées — Phase 1.5 locale — 22/08/2026 + +- Créneau `TEST_UI_PLANNING_PROTECTED`, salle `TEST_UI_CLASSE_101`, semaine du + 07/09/2026, vendredi 14:00–16:00, réunion exceptionnelle manuelle avec + protection contre les mises à jour Pronote. Donnée conservée pour inspection. diff --git a/docs/ui-audit/IMPLEMENTATION_PHASE15.md b/docs/ui-audit/IMPLEMENTATION_PHASE15.md new file mode 100644 index 0000000..9924cb8 --- /dev/null +++ b/docs/ui-audit/IMPLEMENTATION_PHASE15.md @@ -0,0 +1,102 @@ +# Phase 1.5 — raccord Pronote et revalidation des fondations + +Date : 22 août 2026 +Base : copie locale MariaDB issue de la VM +Version conservée : `0.1.0-dev.5` +Commit de départ : `e006f4f` + +## Baseline + +- Working tree propre au démarrage. +- Docker : `gmao-flask:0.1.0-dev.5`, MariaDB et Adminer sains. +- `/health/` : HTTP 200, base connectée, Pronote/watchdogs non configurés. +- Migration courante : `g1a2b3c4d5e6`. +- Données `TEST_UI_*` présentes et conservées ; `alban` inchangé. +- Baseline global connue : 125 passed, 1 failed, 1 error ; l'échec et + l'erreur concernent le lookback de configuration GMAO hors périmètre. + +## Pipeline Pronote + +### Avant + +Le client `get_lessons_for_room()` récupérait et normalisait des cours, mais +la page `/pronote/planning/` les affichait directement et le bouton +d'import était un simple message « non implémenté ». La disponibilité interne +utilisait déjà `RoomSchedule`, mais aucun raccord réel ne persistait ces +données. + +### Après + +Le pipeline est désormais : + +`Pronote → get_lessons_for_room(strict=True) → normalize_pronote_lessons() → sync_pronote_schedules() → RoomSchedule → active_room_schedules() → disponibilité/planning` + +Les identifiants de cours absents sont déterministes (empreinte des attributs +du créneau), les horodatages sont conservés et l'import est limité à la +semaine demandée. Une erreur de récupération n'appelle pas la synchronisation +et conserve donc les dernières données connues. + +Pronote ne participe plus au calcul direct de disponibilité. Avec Pronote +désactivé ou non configuré, le planning interne et la saisie manuelle restent +utilisables. + +## Règles de synchronisation couvertes + +- manuel initial non protégé : supplanté par un Pronote correspondant, sans + doublon actif ; +- horaire Pronote modifié : ancienne ligne manuelle supplantée, nouvelle ligne + Pronote active ; +- manuel protégé : jamais écrasé ; conflit conservé et affiché ; +- rapprochement ambigu : aucune fusion automatique, conflit à valider ; +- créneau absent d'une synchronisation : `disabled`, jamais supprimé ; +- suppression limitée à la semaine synchronisée, sans désactiver les semaines + voisines ; +- panne Pronote : planning et fraîcheur précédents conservés ; +- retour Pronote : `last_synced_at` avancé et lignes réconciliées. + +La page de planning interne affiche l'origine en termes métier, la protection +et les conflits. Une action permet de protéger/déprotéger un manuel et de +désactiver un créneau Pronote sans effacer son historique. + +## Centre documentaire revalidé + +La V1 a été retestée avec documents intervention, équipement et produit/FDS : +agrégation, recherche par titre/fichier/contexte, source/type, pagination, +fichier manquant, chemin hors racine, source inconnue et restriction de +permission source. Aucun fichier n'est copié. + +## Tests + +- tests Phase 1.5 planning/documents : **7 passed** ; +- suites Phase 1 ciblées (P1, équipements, nettoyage, interventions) : + **26 passed** ; +- tests unitaires de version : passants. + +Les contrôles HTTP sur la copie VM locale après rebuild ont donné 200 pour +`/health/`, `/documents/`, `/documents/fds`, `/planning/rooms`, +`/planning/rooms/new`, `/pronote/planning` et `/pronote/planning/2`. +La création réelle du créneau `TEST_UI_PLANNING_PROTECTED` a été vérifiée, +avec protection persistée en base. + +## Responsive et accessibilité ciblés + +Les nouvelles pages utilisent les composants responsive existants (`table- +responsive`, `table-responsive-stack`), des labels associés aux champs, des +boutons textuels et des messages métier. Aucun navigateur instrumenté n'est +disponible dans cet environnement ; une vérification visuelle manuelle aux +trois tailles demandées reste à effectuer avant déploiement distant. + +## Données ajoutées + +- `TEST_UI_PLANNING_PROTECTED` dans `TEST_UI_CLASSE_101`, semaine du + 07/09/2026, vendredi 14:00–16:00, réunion protégée. + +Aucune donnée `TEST_UI_*` n'a été supprimée. + +## Limitations et hors périmètre + +- aucune modification des identifiants/secrets Pronote ; +- aucune Phase 2 (optimisation de journée, solveur, multi-techniciens) ; +- aucune modification alban, watchdog, contexte GMAO, ENT ou Outlook ; +- résolution humaine des conflits uniquement ; +- le test historique lookback GMAO reste volontairement non corrigé. diff --git a/docs/ui-audit/PAGES_MATRIX.md b/docs/ui-audit/PAGES_MATRIX.md index 4c94791..a4a0a4b 100644 --- a/docs/ui-audit/PAGES_MATRIX.md +++ b/docs/ui-audit/PAGES_MATRIX.md @@ -120,3 +120,8 @@ activement. | FDS globales | `/documents/fds` | Implémenté, à revalider après rebuild | Produits d'entretien | | Planning interne des salles | `/planning/rooms` | Implémenté, à revalider après rebuild | Saisie manuelle et créneaux résolus | | Nouveau créneau salle | `/planning/rooms/new` | Implémenté | Permission planning.edit | + +### Phase 1.5 — revalidation locale + +| Planning Pronote d'une salle | `/pronote/planning/` | 200 local | Vue interne résolue, provenance et fraîcheur | +| Import Pronote d'une semaine | `/pronote/planning//import` | Raccordé | Synchronisation contrôlée, protection/conflits | diff --git a/docs/ui-audit/PROGRESS.md b/docs/ui-audit/PROGRESS.md index 97ab311..949eb31 100644 --- a/docs/ui-audit/PROGRESS.md +++ b/docs/ui-audit/PROGRESS.md @@ -405,3 +405,22 @@ interdit (configuration GMAO). Aucun nouvel échec lié à cette phase. Version : `0.1.0-dev.4` → `0.1.0-dev.5` (commit de version séparé `676becd`), source de vérité `VERSION` et valeurs Docker/Compose alignées. + +## Phase 1.5 — raccord Pronote et revalidation + +Baseline : commit `e006f4f`, version `0.1.0-dev.5`, migration +`g1a2b3c4d5e6`, Docker sain et Pronote non configuré. Le pipeline Pronote est +maintenant raccordé à `normalize_pronote_lessons()` puis +`sync_pronote_schedules()` ; la disponibilité et les pages métier ne lisent +que la vue interne `RoomSchedule` résolue. + +Cas couverts : relais manuel → Pronote sans doublon, horaire modifié, manuel +protégé et conflit, rapprochement ambigu, suppression limitée à la semaine, +panne/retour Pronote et fraîcheur. Le bouton d'import Pronote persiste enfin +les créneaux normalisés ; une panne conserve les derniers créneaux. + +Tests Phase 1.5 : **7 passed** ; suites Phase 1 ciblées : **26 passed**. +Sur la copie locale de la VM, `/health/`, `/documents/`, `/documents/fds`, +`/planning/rooms`, `/planning/rooms/new`, `/pronote/planning` et +`/pronote/planning/2` répondent 200. Le scénario réel +`TEST_UI_PLANNING_PROTECTED` a été créé et conservé. diff --git a/docs/ui-audit/REPORT.md b/docs/ui-audit/REPORT.md index 34394f0..28a3353 100644 --- a/docs/ui-audit/REPORT.md +++ b/docs/ui-audit/REPORT.md @@ -300,3 +300,11 @@ variantes de planning et la validation sur installation neuve. également sur la contrainte `gmao_context.user_id NOT NULL`. Aucun nouveau échec fonctionnel n'a été introduit. La correction d'isolation est dans `933f0a5`. + +## Phase 1.5 — raccord Pronote + +Pronote alimente désormais réellement `RoomSchedule` via une normalisation +déterministe et un import explicite par semaine. Pronote désactivé ou en panne +ne vide pas le planning et ne bloque pas la disponibilité interne. Les conflits +protégés, rapprochements ambigus et suppressions distantes sont conservés et +visibles ; aucun nouveau système de planning n'a été créé.