---
suivi: 1542
date: 2026-09-15
sujet: Refonte de la page Alertes
chantier: alertes / ui
type: feature
statut: poussé
hash: dad0718d
fichiers:
  - app/Models/Alerte.php
  - app/Http/Controllers/AlerteController.php
  - resources/js/Pages/Alertes/Index.vue
  - resources/js/Components/Alertes/AlerteTexteAvecMentions.vue
  - tests/Unit/Alertes1542SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1542_refonte_page_alertes.md
---

# SUIVI #1542 — Refonte page Alertes

## PROMPT ENVOYÉ

Liste unique : non lues puis lues, plus de regroupement module/niveau.
Étiquette module, pastille non lue, ligne cliquable, mentions lisibles,
libellés métier. Filtres conservés. Marquage lu au clic. Cloche inchangée.
Rebase Vite. Push main.

## BASE GIT

HEAD = origin/main `3a4ebbe6` au départ. Rebase Vite : déjà à jour.
Index.vue n’est pas partagé avec la cloche (AppShell = lien + count).

## FICHES LUES

- **#1077 LEÇON** — génération Teams/cloche hors sujet (web terminate).
- **#1081** — `Foncier/Alertes/Index` = config admin, pas `/alertes`.
- **#1541** — hors sujet (décompte facture).

## SYNTHÈSE

### Niveaux (`alertes.type`)

| Valeur | Constante | Affichage #1542 |
| --- | --- | --- |
| info | TYPE_INFO | pas de libellé ; étiquette module grise |
| a_faire | TYPE_A_FAIRE | pas de libellé ; étiquette grise |
| warning | TYPE_WARNING | étiquette module **ambre** (CS à échéance, etc.) |

Pas d’autre niveau en base. « INFORMATION » retiré.

### Libellés module

Voir tableau dans le livrable. `uppercase` CSS sur l’ancien h2
transformait `taches_suivi` en `TACHES_SUIVI`.

### Mentions

`parseFactureCommentBody` (`factureCommentMentions.js`) → `@Nom`.

### Marquage lu

**Déjà** : clic « Voir » POST `/alertes/{id}/lire` puis navigation.
Ouvrir `/alertes` ne marquait rien. Conservé : la **ligne** fait le
même POST. « Tout marquer lu » inchangé. Cloche = `/alertes/count`.

Tri serveur : non lues d’abord, puis `created_at` DESC.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear` + `journal:sync`
3. Non lues en haut, tous modules, date desc
4. Lues sous « Déjà lues »
5. Clic ligne → cible + lu
6. Mention `@Nom` sans uuid
7. Étiquette Tâches / ambre CS
8. Filtres sur les deux sections
9. Tout marquer lu
10. Compteur cloche = non lues

Pas de migration. JAMAIS npm/composer/optimize/config:cache sur OVH.

## LEÇON

Un `uppercase` Tailwind sur un code technique produit le libellé
brut en capitales : le mapper ne suffit pas si le CSS le recapitalise.
La cloche ne partage pas Index.vue : ne pas toucher AppShell pour une
refonte de liste.
