gmao/docs/ui-audit/BUGS.md
root ff90923f8f
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
audit(ui): tester les doublons de références
2026-08-22 12:15:29 +00:00

11 KiB
Raw Blame History

Bugs et anomalies

UI-001 — Transvasement inaccessible

  • Priorité : P1
  • Module : Matériel & Produits d'entretien
  • URL : /cleaning/transvasement
  • Compte : chatgpt / super_admin
  • Résultat : HTTP 500, écran générique.
  • Attendu : formulaire utilisable ou message métier explicite si le stock est vide.
  • Impact : dilution et transvasement impossibles.

UI-002 — Configuration des prévisions inaccessible

  • Priorité : P1
  • Module : Matériel & Produits d'entretien
  • URL : /cleaning/forecast-config
  • Compte : chatgpt / super_admin
  • Résultat : HTTP 500.
  • Attendu : coefficients par défaut affichés et modifiables.
  • Impact : coefficients de permanence impossibles à configurer.

UI-003 — Création de salle bloquée

  • Priorité : P1
  • Module : Établissement
  • URL : /equipments/rooms/new
  • Résultat : le select « Bâtiment » est vide malgré des bâtiments visibles dans /equipments/buildings/.
  • Attendu : bâtiments proposés, puis zones filtrées par bâtiment.
  • Impact : impossibilité de poursuivre les scénarios équipements/interventions.

UI-004 — Confusion Site/Bâtiment

  • Priorité : P2
  • URL : /equipments/buildings/
  • Résultat : le formulaire principal crée un Site (Collège), tandis que le véritable bâtiment se crée via /equipments/buildings/new.
  • Recommandation : séparer les deux actions et afficher la hiérarchie établissement → bâtiment → zone → salle.

UI-005 — Commit Docker non identifié

  • Priorité : P2
  • URL : /health/, setup
  • Résultat : version 0.1.0-dev.2, commit unknown.
  • Recommandation : fournir GIT_VERSION=$(git rev-parse HEAD) au build.

UI-006 — Instabilité sous navigation séquentielle

  • Priorité : P1 à confirmer
  • Résultat : temps de réponse parfois supérieur à 830 secondes, puis indisponibilité temporaire.
  • Recommandation : surveiller CPU/RAM, Gunicorn, connexions MariaDB et documenter les temps de réponse sans lancer de test de charge.

UI-007 — Disponibilités et horaires semblent partager le même écran

  • Priorité : P2
  • URL : /planning/availability
  • Résultat : titre « Horaires et suivi annuel » et structure identique à /planning/time.
  • Attendu : redirection explicite ou écran distinct avec un libellé cohérent.
  • Impact : l'utilisateur peut croire qu'il existe deux écrans différents.

UI-008 — Requête 401 visible dans la console au chargement du login

  • Priorité : P3 à confirmer
  • Résultat : Playwright signale une ressource 401 sur /auth/login.
  • Impact : bruit console et appel potentiellement lancé avant la session.

UI-009 — Soumission produit très lente/non confirmée

  • Priorité : P1 à confirmer (environnementale ou applicative)
  • URL : /cleaning/products/new
  • Compte : chatgpt / super_admin
  • Étapes : remplir un produit TEST_UI_DETERGENT_SOL puis soumettre une seule fois.
  • Résultat : l'action Playwright est restée bloquée plus de 30 secondes ; la requête n'a pas été répétée.
  • Impact : impossible de confirmer la création d'un produit dans cette passe.
  • Qualification : vérifier les logs et la charge VM avant de conclure à un bug applicatif.

UI-010 — Soumission prévention très lente/non confirmée

  • Priorité : P1 à confirmer (environnementale ou applicative)
  • URL : /prevention/
  • Compte : chatgpt / super_admin
  • Étapes : remplir le formulaire d'agent prévention avec des données TEST_UI_*, puis soumettre une seule fois.
  • Résultat : clic bloqué au-delà du délai ; aucune répétition.
  • Impact : impossible de confirmer la création d'un personnel de prévention dans cette passe.

UI-011 — Lien Documents renvoie 404

  • Priorité : P2
  • URL : /documents/
  • Compte : chatgpt / super_admin
  • Résultat : HTTP 404.
  • Attendu : liste documentaire ou redirection vers le module documentaire réellement utilisé.
  • Impact : lien cassé pour un utilisateur qui cherche les documents.

UI-012 — Menu non filtré selon les permissions

  • Priorité : P1
  • Comptes : TEST_UI_USER_MULTI et TEST_UI_USER_NONE.
  • Résultat : les deux dashboards contiennent les mêmes liens équipements, interventions et nettoyage, y compris pour TEST_UI_USER_NONE sans rôle.
  • Backend : TEST_UI_USER_NONE reçoit bien 403 sur ces URLs ; le backend est donc plus strict que le menu.
  • Résultat multi-rôles : TEST_UI_USER_MULTI reçoit 200 sur patrimoine et interventions, puis 403 patrimoine après un refus individuel, tandis que les interventions restent accessibles.
  • Impact : UX trompeuse et risque d'erreurs ; un utilisateur voit des liens qu'il ne peut pas ouvrir.

UI-013 — Pagination absente ou non supportée sur plusieurs listes

  • Priorité : P2
  • /lots/?page=2 et /equipments/?page=2 répondent 200.
  • /interventions/?page=2 et /companies/?page=2 répondent 404.
  • Attendu : pagination cohérente, ou absence explicite du paramètre avec une interface qui ne l'affiche pas.
  • Impact : incohérence de navigation lorsque le volume de données augmente.

UI-014 — Entreprises sans recherche ni filtre visible

  • Priorité : P2
  • URL : /companies/
  • Résultat : aucune zone de recherche ou de tri dans la liste.
  • Attendu : recherche par nom/contact lorsque le nombre d'entreprises croît.

UI-015 — Formulaire entreprise vide provoque une erreur 500

  • Priorité : P1
  • URL : /companies/new
  • Étapes : soumettre le formulaire vide avec un CSRF valide.
  • Résultat : HTTP 500 au lieu d'une validation utilisateur.
  • Attendu : HTTP 400 ou retour formulaire avec champ obligatoire signalé.

UI-016 — Formulaire intervention vide provoque une erreur 500

  • Priorité : P1
  • URL : /interventions/new
  • Étapes : soumettre le formulaire vide avec un CSRF valide.
  • Résultat : HTTP 500.
  • Attendu : validation des champs obligatoires et message compréhensible.

UI-017 — Liste interventions casse avec une intervention sans salle

  • Priorité : P1
  • URL : /interventions/
  • Donnée : TEST_UI_INTERVENTION_ELECTRICITE (ID 1), créée sans salle ni équipement pour tester le cas autorisé par le formulaire.
  • Résultat : le détail /interventions/1 répond 200, mais la liste renvoie HTTP 500.
  • Attendu : afficher l'intervention avec « Salle non renseignée » ou demander une salle avant validation.
  • Impact : une intervention valide au niveau formulaire rend la liste principale inutilisable.

UI-018 — Titre d'édition ambigu

  • Priorité : P2
  • URL : /interventions/1/edit
  • Résultat : le titre HTML reste « Nouvelle intervention » en édition.
  • Attendu : « Modifier l'intervention » avec identifiant/titre existant.

UI-019 — Tableau de bord en erreur avec une intervention sans équipement

  • Priorité : P1
  • URL : /
  • Utilisateur : chatgpt (super-administrateur)
  • Précondition : l'intervention de test ID 1 existe sans équipement associé.
  • Étapes : ouvrir une session puis demander /.
  • Résultat : HTTP 500. Le journal indique dashboard/index.html:495 et l'expression interv.equipment.name alors que interv.equipment vaut None.
  • Attendu : le tableau de bord doit afficher une valeur de remplacement (« Aucun équipement ») ou exclure proprement la relation absente.
  • Impact : erreur critique pour la page d'entrée et perte d'accès au tableau de bord dès qu'une intervention sans équipement est enregistrée.

UI-020 — Lien Journaux visible mais accès refusé

  • Priorité : P2
  • URL : /logs/
  • Utilisateur : chatgpt (rôle personnalisé chatgpt)
  • Étapes : ouvrir une page autorisée contenant la navigation, puis suivre le lien « Journaux » ; ouvrir également /logs/ directement.
  • Résultat : le lien /logs/ est présent dans le HTML de navigation, mais le serveur répond HTTP 403. Le compte possède les permissions d'audit visibles dans sa matrice, sans permission effective acceptée par cette route.
  • Attendu : masquer le lien si l'accès est refusé, ou attribuer/vérifier la permission réellement requise par la route.
  • Impact : incohérence UI/backend et perte de temps pour l'utilisateur.

UI-021 — Certains formulaires planning dépendent de l'injection JavaScript du CSRF

  • Priorité : P2
  • URLs : /planning/availability/closure/new, /planning/tasks/new
  • Résultat : le HTML initial ne contient pas de champ caché csrf_token ; le jeton est ajouté par le JavaScript global. Une soumission sans JavaScript reçoit bien 400, mais le formulaire ne peut alors pas être utilisé.
  • Attendu : rendre le champ CSRF dans le formulaire serveur, tout en gardant l'injection JS comme secours pour les requêtes dynamiques.
  • Impact : dépendance inutile à JavaScript et accessibilité dégradée.

UI-022 — État du stock en erreur après une réception valide

  • Priorité : P1
  • URL : /cleaning/stock
  • Précondition : produit, référence, conditionnement, emplacement et deux lots TEST_UI_* réceptionnés avec succès.
  • Étapes : ouvrir l'état du stock après les réceptions.
  • Résultat : HTTP 500, alors que le journal des mouvements reste accessible et affiche les réceptions, la sortie FEFO, le transfert et la correction d'inventaire.
  • Attendu : afficher les soldes par lot et emplacement, même lorsque les mouvements précédents ont modifié les quantités.
  • Impact : l'écran central de consultation du stock est inutilisable dès qu'un stock réel existe.

UI-023 — Aucun contrôle UI pour autoriser un produit sur les fiches de demande

  • Priorité : P2
  • URLs : /cleaning/products/new, /cleaning/products/1/edit, /cleaning/requests/new
  • Résultat : le modèle distingue request_enabled, mais les formulaires du produit ne proposent aucun champ pour l'activer. Le formulaire de profil affiche donc zéro produit sélectionnable, et la fiche imprimée ne contient aucune ligne.
  • Attendu : case « Autoriser sur les fiches de demande » dans le produit, avec un état visible dans le profil.
  • Impact : la fonctionnalité de fiches papier ne peut pas être configurée depuis l'interface.

UI-024 — Valeur numérique invalide sur l'édition d'un produit → 500

  • Priorité : P1
  • URL : /cleaning/products/1/edit
  • Étapes : remplacer « Stock minimum » par abc et soumettre le produit de test.
  • Résultat : HTTP 500 au lieu d'un message de validation.
  • Attendu : conserver les valeurs saisies et signaler que les quantités doivent être numériques, comme le fait déjà la création.
  • Impact : une faute de saisie rend l'écran d'édition inutilisable.

UI-025 — Doublon de référence commerciale accepté sans avertissement

  • Priorité : P2
  • URL : /cleaning/references/new
  • Étapes : créer une seconde référence TEST_UI_REF_DETERGENT_SOL pour le même produit générique.
  • Résultat : la soumission est acceptée (302) et deux occurrences apparaissent dans la liste, sans avertissement ni indication d'historique.
  • Attendu : avertir l'utilisateur ou demander une référence fabricant/ fournisseur distincte avant de créer un doublon involontaire.
  • Impact : catalogue commercial ambigu et risque d'erreur lors des réceptions.