| UI-001 | `ReusableContainer` manquait dans les imports de la route | Import explicite du modèle et chargement défensif de la page | `test_cleaning_module.py`, `test_ui_p1_regressions.py` |
| UI-002 | Le nom de contexte `config` masquait la configuration Flask dans `base.html`, en plus de l'import manquant | Import de `CleaningForecastConfig` et contexte renommé `forecast_config` | `test_ui_p1_regressions.py::test_cleaning_pages_load_without_reference_data` |
| UI-003 | La route ne fournissait pas `buildings` au template et n'assurait pas la cohérence zone/bâtiment | Contexte complet, validation serveur et conservation des saisies | `test_ui_p1_regressions.py::test_room_form_lists_buildings_and_rejects_cross_building_zone`, `test_equipment_forms.py` |
| UI-015 | Le nom entreprise était envoyé directement en base sans validation | Validation obligatoire et retour formulaire HTTP 400 | `test_ui_p1_regressions.py::test_empty_intervention_and_company_are_validation_errors` |
| UI-016 | Le titre et les dates d'intervention étaient parsés sans validation | Validation du titre et des dates/heures avec message français | `test_ui_p1_regressions.py::test_empty_intervention_and_company_are_validation_errors` |
| UI-017 | Le template appelait `interv.equipment.name` lorsque l'équipement était absent | Affichage salle/localisation générale de remplacement | `test_ui_p1_regressions.py::test_optional_location_is_safe_in_interventions` |
| UI-019 | Le dashboard appelait `interv.equipment.name` lorsque l'équipement était absent | Garde équipement/salle/aucune localisation | `test_ui_p1_regressions.py::test_optional_equipment_is_safe_on_dashboard` |
| UI-022 | La vue stock n'injectait pas `current_date`, utilisé par le template | Passage explicite de la date courante | `test_ui_p1_regressions.py::test_cleaning_pages_load_without_reference_data`, tests stock existants |
| UI-024 | `Decimal()` non protégé dans l'édition produit | Validation numérique et rollback sans 500 | `test_ui_p1_regressions.py::test_invalid_product_quantity_is_validation_error` |
| UI-030 | La fiche module utilisait des endpoints de documents inexistants et une relation dynamique directement dans Jinja | Endpoints réels, liste de documents matérialisée dans la route et template | `test_ui_p1_regressions.py::test_intervention_detail_template_exposes_document_actions` |
| UI-012 | Les groupes de navigation et liens métier étaient statiques | Filtrage des groupes, liens et raccourci logs par `has_permission()` | Vérification de compilation/rendu des templates et suite ciblée |
Les résultats ci-dessus sont des tests automatisés locaux uniquement ; ils ne
valident pas la base distante ni le rendu sur la VM d'audit.
Passe exécutée séquentiellement sur `http://82.64.101.239/` avec `chatgpt`.
La base existante et les données `TEST_UI_*` ont été conservées ; aucun
watchdog, intégration externe ou utilisateur `alban` n'a été modifié.
| Bug | Résultat VM | Scénario et données |
|---|---|---|
| UI-003 | **VALIDÉ SUR VM** | `/equipments/rooms/new` propose les bâtiments existants ; création de `TEST_UI_REVALIDATION_SALLE` ; bâtiment 2 + zone 1 est refusé en HTTP 400. |
| UI-017 | **TOUJOURS REPRODUCTIBLE** | `/interventions/` reste en HTTP 500 avec l'intervention ID 1 sans salle/équipement. |
| UI-019 | **VALIDÉ SUR VM** | `/` renvoie 200 et affiche « Aucun équipement », sans `None`, `null` ni `undefined` visibles. |
| UI-001 | **VALIDÉ SUR VM** | `/cleaning/transvasement` 200 ; transvasement test de 0,1 L enregistré et quantité impossible refusée proprement. |
| UI-002 | **VALIDÉ SUR VM** | `/cleaning/forecast-config` 200 ; coefficient non numérique renvoyé en 400 avec message, sans 500. |
| UI-022 | **VALIDÉ SUR VM** | `/cleaning/stock` 200 après lots, réceptions, sortie, transfert et correction ; produits, lots et emplacements visibles. |
| UI-015 | **VALIDÉ SUR VM** | POST vide `/companies/new` en 400 avec formulaire ; `TEST_UI_REVALIDATION_ENTREPRISE` créé (ID 2). |
| UI-016 | **VALIDÉ SUR VM** | POST vide `/interventions/new` en 400 ; `TEST_UI_REVALIDATION_INTERVENTION` créé (ID 2). |
| UI-024 | **VALIDÉ SUR VM** | `stock_minimum=abc` sur le produit ID 1 renvoie 400 et conserve le formulaire. |
| UI-030 | **VALIDÉ SUR VM** | PDF artificiel `TEST_UI_REVALIDATION_DOCUMENT.pdf` visible dans le détail de l'intervention 1 et téléchargeable (document ID 2). |
| UI-012 | **CORRIGÉ PARTIELLEMENT — PROBLÈME RÉSIDUEL** | Le bouton global `/logs/` reste visible alors que l'URL renvoie 403. Les comptes `TEST_UI_USER_MULTI` et `TEST_UI_USER_NONE` n'ont pas pu être reconnectés : leurs mots de passe ne sont pas documentés. |
### UI-031 — nouveau blocage observé
Les groupes `TEST_UI_EQ_CHAISES` (30 individuels) et
`TEST_UI_EQ_CHAISE_UNITAIRE` créés dans `TEST_UI_CLASSE_101` apparaissent dans
`/equipments/` et dans la salle, mais `/equipments/1` et `/equipments/2`
renvoient HTTP 500. `/equipments/<id>/hierarchy` renvoie une liste de zones
vide. Les déplacements et cycles de vie restent donc bloqués. Anomalie
documentée uniquement, sans correction pendant cette passe.