103 lines
4.3 KiB
Markdown
103 lines
4.3 KiB
Markdown
|
|
# 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é.
|