docs(phase15): document Pronote revalidation
This commit is contained in:
parent
90de40e227
commit
5b40037d33
6 changed files with 149 additions and 0 deletions
|
|
@ -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
|
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
|
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.
|
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.
|
||||||
|
|
|
||||||
|
|
@ -138,3 +138,9 @@ de déplacement ; aucune donnée antérieure ni `alban` n'a été supprimée.
|
||||||
conservé pour inspection manuelle.
|
conservé pour inspection manuelle.
|
||||||
- Les tests automatisés créent des objets préfixés `Phase1` dans leur base de
|
- 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.
|
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.
|
||||||
|
|
|
||||||
102
docs/ui-audit/IMPLEMENTATION_PHASE15.md
Normal file
102
docs/ui-audit/IMPLEMENTATION_PHASE15.md
Normal file
|
|
@ -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/<room_id>` 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é.
|
||||||
|
|
@ -120,3 +120,8 @@ activement.
|
||||||
| FDS globales | `/documents/fds` | Implémenté, à revalider après rebuild | Produits d'entretien |
|
| 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 |
|
| 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 |
|
| Nouveau créneau salle | `/planning/rooms/new` | Implémenté | Permission planning.edit |
|
||||||
|
|
||||||
|
### Phase 1.5 — revalidation locale
|
||||||
|
|
||||||
|
| Planning Pronote d'une salle | `/pronote/planning/<id>` | 200 local | Vue interne résolue, provenance et fraîcheur |
|
||||||
|
| Import Pronote d'une semaine | `/pronote/planning/<id>/import` | Raccordé | Synchronisation contrôlée, protection/conflits |
|
||||||
|
|
|
||||||
|
|
@ -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é
|
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.
|
`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é.
|
||||||
|
|
|
||||||
|
|
@ -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
|
également sur la contrainte `gmao_context.user_id NOT NULL`. Aucun nouveau
|
||||||
échec fonctionnel n'a été introduit. La correction d'isolation est dans
|
échec fonctionnel n'a été introduit. La correction d'isolation est dans
|
||||||
`933f0a5`.
|
`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éé.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue