# Réaudit fonctionnel, technique et UI Date : 14 août 2026 État audité : branche `main`, commit `8f276b5` Périmètre : routes Flask, templates actifs, permissions, données MariaDB, planification, intégrations, Docker, sauvegardes et tests. ## Verdict Le projet est utilisable comme environnement de développement et de démonstration. Il n'est pas encore prêt pour une utilisation réelle au collège. Les principaux blocages sont la planification préventive incohérente, plusieurs pages en erreur, les vocabulaires de statuts divergents, le compte de test `admin/admin`, l'autorisation des documents et une stratégie de restauration incomplète. Le dépôt était propre et synchronisé au début de l'audit. L'audit n'a modifié ni la base ni les données de production. ## Mesures et contrôles - 319 règles d'URL et 317 endpoints enregistrés ; - 121 routes GET fixes testées avec un compte administrateur ; - 67 tests automatisés réussis ; - 163 appels à `render_template`, pour 138 templates distincts ; - 15 liens `url_for()` invalides dans les templates actifs ; - 32 noms de templates dupliqués entre le dossier global et les blueprints ; - 5 pages fixes reproduisent une erreur ; - 376 équipements et 470 tâches planifiées dans la base auditée ; - environ 1,15 Mo de HTML pour la liste des 376 équipements. ## Blocages P0 ### Authentification Le compte de test `admin/admin` est actif. Avant ouverture à d'autres utilisateurs, il faut supprimer ce mot de passe, imposer un changement au premier accès, refuser les mots de passe faibles et journaliser les échecs de connexion. ### Planification préventive La base contient 330 tâches de lot et 470 échéances, dont 300 placées un week-end. Les 330 tâches importées sont actuellement classées comme calendaires. Les règles gel, orage, saison, compteur et événement ne sont donc pas correctement représentées. Deux chemins de génération coexistent. Le chemin historique ignore une partie du calendrier de travail. Le moteur récent traite mieux les déclencheurs mais ne recalcule pas toujours la prochaine date à partir de la dernière réalisation. Un seul moteur doit : - partir de la dernière exécution ; - respecter périodicité, anticipation et jours travaillés ; - fermer les vacances scolaires par défaut ; - accepter les jours exceptionnels avec horaires propres à chaque date ; - distinguer calendrier, saison, météo, événement et compteur ; - prévisualiser et réconcilier les échéances avant écriture ; - empêcher les doublons par une contrainte en base. ### Pages en erreur et navigation Les routes fixes suivantes ont échoué pendant le test : - `/admin/room-types/new` : template absent ; - `/planning/availability/leave/new` : endpoint de retour inexistant ; - `/room-types/new` : formulaire non transmis au template ; - `/yeastar/api/extensions` : erreur 500 lorsque Yeastar est absent ; - `/yeastar/config` : accès incorrect à une configuration vide. La création d'une tâche préventive référence aussi `LotTask` sans import local, et les routes de formation construisent des attributs absents de leurs modèles. ### Statuts et tableau de bord Les équipements présents utilisent notamment `en_service`, `en_panne`, `en_maintenance`, `hs`, `a_jeter` et `jete`, tandis que certains indicateurs recherchent encore `actif` ou `panne`. Les totaux du tableau de bord peuvent donc être faux. L'urgence mélange par endroits le statut et la priorité, et le stock faible est encore fixé à zéro. Une énumération unique, une migration des valeurs et des tests de statistiques sont nécessaires. ### Intégrité des interventions Une intervention générale sans équipement peut être associée silencieusement au premier équipement de la base. Une intervention doit pouvoir cibler un équipement, une salle, une zone, un bâtiment, un logement ou aucun objet patrimonial, sans attribution artificielle. Le message Outlook ou ENT à l'origine d'une intervention doit être conservé en lecture seule au lieu d'être supprimé après conversion. ### API, documents et historique L'authentification API lit un attribut `api_key` absent du modèle clé/valeur. Les futures clés doivent être hachées, révocables, expirables, limitées par permission et auditées. Le blueprint `documents` n'est pas classé explicitement dans les permissions : la lecture peut hériter d'un droit trop large tandis que les mutations exigent un droit système. Les droits doivent venir de l'objet parent. Il faut également contrôler MIME, contenu, taille, checksum et suppression logique. Les changements de statut et autres historiques ne sont pas réellement immuables s'ils sont supprimés en cascade avec l'intervention. ### Sauvegarde et exploitation La sauvegarde actuelle ne constitue pas encore un plan de reprise : les uploads et la configuration ne sont pas couverts de bout en bout, il n'y a pas de copie chiffrée hors machine et aucune restauration régulière n'est vérifiée. Avant production : reverse proxy HTTPS, cookies sécurisés, sauvegarde complète, copie hors machine, restauration automatisée de contrôle et supervision des échecs. ## État fonctionnel des données | Objet | Nombre | |---|---:| | Bâtiments | 7 | | Zones | 22 | | Salles | 228 | | Logements | 0 | | Catégories | 36 | | Lots | 91 | | Équipements | 376 | | Interventions | 0 | | Tâches de lot | 330 | | Tâches planifiées | 470 | Points de qualité : 29 salles n'ont pas de zone, 87 lots déclarés présents n'ont pas d'équipement directement associé et aucun lot n'est marqué absent. Le diagnostic des lots devra compter séparément les équipements directs et les équipements héritant du lot de leur groupe. ## Navigation et pages orphelines Le contrôle automatique a trouvé 34 routes GET sans lien entrant. Elles ne sont pas toutes destinées à la navigation : 19 sont des API, exports, redirections ou formulaires enfants qui doivent être ouverts depuis leur liste parente. Les accès directs utiles ajoutés au menu sont : - profil utilisateur ; - zones et historique des compteurs ; - ajout de compte et dossiers surveillés Outlook ; - messages et interprétations ENT ; - salles, personnels et professeurs PRONOTE ; - configuration des identifiants et du watchdog DND Yeastar. Les routes historiques `/admin/room-types`, `/admin/services` et `/admin/staff` dupliquent des écrans métier existants. Elles ne doivent pas être ajoutées comme seconds écrans dans le menu : elles doivent être redirigées vers les pages canoniques puis supprimées. Les API et téléchargements ne sont pas des pages de menu. Une vérification automatique de navigation doit être ajoutée à la CI : toute nouvelle page HTML GET sans paramètre doit soit recevoir un lien, soit être explicitement déclarée comme page enfant, redirection ou écran interne. ## Proposition UI ### Architecture de navigation Conserver cinq espaces principaux : Accueil, Patrimoine, Interventions, Planning et Prévention. Les intégrations et l'administration restent réservées aux utilisateurs autorisés. À terme, la longue liste actuelle d'intégrations devrait devenir une page d'accueil « Intégrations » composée de cartes avec état, configuration, dernière synchronisation et journaux. ### Tableau de bord Afficher des cartes dépendant du rôle : tâches du jour, retards, urgences, attente de pièce ou prestataire, contrats proches de l'échéance, stocks faibles, lots incohérents et temps de prévention. Chaque carte doit ouvrir une liste déjà filtrée. ### Inventaire Ne plus rendre l'arbre complet. Charger progressivement : catégorie, bâtiment ou logement, zone, salle, groupe puis unité. Ajouter recherche instantanée, filtres mémorisés, sélection multiple et compteurs par niveau. ### Création d'équipements Proposer trois parcours : fiche rapide, groupe quantitatif et assistant multi-salles. Les valeurs venant du lot doivent être visibles comme héritées. La création en masse doit offrir aperçu, validation des anomalies, rapport et annulation. ### Interventions Ajouter liste, Kanban et calendrier. La fiche doit utiliser une chronologie unique pour statut, diagnostic, commentaires, photos, temps, pièces et visite prestataire. La détection de récurrence doit être paramétrable selon la catégorie : prise, fenêtre ou luminaire ne se traitent pas comme chaise ou graffiti. ### Logements Ajouter historique des occupants, états des lieux, clés, compteurs, documents, inventaire et interventions. Les données personnelles de l'occupant exigent une permission séparée de la simple consultation du patrimoine. ### Prévention Séparer tableau de bord, agents, risques, actions, habilitations, formations, incidents, DUERP et temps consacré. La cible de 10 % doit être calculée depuis le temps réellement travaillé et tenir compte de chaque journée exceptionnelle pendant les petites et grandes vacances. ### Composants et accessibilité Réduire les pages de plusieurs centaines de lignes et les nombreux styles ou scripts intégrés. Construire des composants communs pour champs, badges, tableaux, filtres, états vides et erreurs. Corriger les blocs JavaScript nommés `scripts` alors que le layout rend `extra_scripts`, ajouter des libellés aux boutons icône et fournir les ressources critiques localement plutôt que par CDN seulement. ## Feuille de route ### Lot 1 — Stabilisation - supprimer le mot de passe de test ; - corriger les cinq routes en erreur et les 15 liens invalides ; - réparer création de tâche et formations ; - unifier les statuts et les statistiques ; - empêcher l'attribution artificielle des interventions ; - tester chaque page fixe en CI. ### Lot 2 — Fiabilité métier - fusionner les moteurs de maintenance ; - réconcilier les 470 tâches ; - intégrer complètement calendrier scolaire et horaires exceptionnels ; - corriger permissions documents et clés API ; - rendre les historiques non destructibles ; - tester une restauration complète. ### Lot 3 — Parcours quotidiens - refondre navigation et tableau de bord ; - charger l'inventaire progressivement ; - finaliser la création en masse ; - compléter les logements ; - ajouter le workflow et la récurrence des interventions. ### Lot 4 — Fonctions avancées - générer les visites contractuelles ; - tracer tous les mouvements de stock ; - fiabiliser compteurs et consommables ; - compléter prévention et DUERP ; - fournir exports métier et suivi des coûts. ### Lot 5 — Mise en production - HTTPS et configuration de production ; - dépendances verrouillées et analyse de vulnérabilités ; - sauvegardes chiffrées hors machine ; - test de restauration ; - supervision, accessibilité, tests mobiles et test de charge.