gmao/docs/ui-audit/BUGS.md
root 0132018e38
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
audit(ui): documenter l'erreur du tableau de bord
2026-08-22 00:31:57 +00:00

186 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.