---
suivi: 1237
date: 2026-08-07
sujet: auto_mention_commentaires
chantier: commentaires / mentions
type: feature
statut: poussé
hash: d10ff575
fichiers:
  - app/Support/Commentaires/MentionAutocompleteSelfInclusion.php
  - app/Http/Controllers/GraphUserSearchController.php
  - app/Support/Commentaires/FoncierEntiteCommentaireContext.php
  - app/Support/Juridique/DemandeJuridiqueParticipantResolver.php
  - app/Support/Juridique/JuridiqueRegistreParticipantResolver.php
  - app/Services/EntiteCommentaireService.php
  - app/Services/FactureCommentaireService.php
  - app/Services/TacheSuiviService.php
  - tests/Unit/MentionAutocompleteSelfInclusionTest.php
  - tests/Feature/FactureCommentaireMentionTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1237_auto_mention.md
---

# SUIVI #1237 — Auto-mention dans les commentaires

## PROMPT ENVOYÉ

Permettre à un utilisateur de se mentionner lui-même dans un commentaire (rappel /
figurer dans le fil). Mention enregistrée ; **pas** de notification (cloche / Teams)
à l'auteur. Si helper commun → partout ; sinon Foncier d'abord. Pas de migration,
pas de SharePoint, pas de changement du parseur `@`.

## FICHES LUES

Aucune fiche antérieure sur un filtre d'exclusion de soi dans l'autocomplete.
`#1236` en cours / poussé — SharePoint non touché ici.

## OBJET 1 — Inventaire des filtres

### Verdict

**Pas un filtre unique** qui confondait enregistrement et notification.

| Usage | Constat |
|-------|---------|
| Liste mentionnables | **Aucun** `where('id', '!=', auth()->id())` / `reject(self)` trouvé. Le ressenti « on ne peut pas se taguer » vient surtout de la recherche Graph (`startswith` displayName/mail/UPN) : une frappe partielle au milieu du nom ne remonte pas soi-même. |
| Enregistrement pivot | Déjà autorisé (create avant skip notif). |
| Notification | Skips **par destinataire** déjà en place (copies du même motif). |

### Liste (fichier:ligne / forme / partagé ou copie)

| # | Fichier:ligne | Forme | Rôle | Helper / copie |
|---|----------------|-------|------|----------------|
| 1 | `EntiteCommentaireService.php` ~98 | `if ($mentionne->id === $auteur->id) continue` après create | Skip notif (foncier / offre / juridique via contexte) | Motif partagé sémantique, **copie** locale |
| 2 | `FactureCommentaireService.php` ~126 | idem | Skip notif facture | Copie |
| 3 | `TacheSuiviService.php` ~623 | idem | Skip notif tâche | Copie |
| 4 | `AlerteService.php` ~334, 389, 441, 488, 530 | `mentionne->id === auteur->id` early return | Garde-fou cloche (facture, tâche, juridique, offre, registre…) | **Copies** du même garde-fou |
| 5 | `factureCommentMentions.js` | parse / rendu `@[…](…)` | Aucune exclusion de soi | N/A |
| 6 | `TacheSuiviPersonnesEditor` `excludedNames` | personnes associées tâche | **Pas** les mentions commentaire | Hors périmètre |
| 7 | Graph `searchUtilisateursTenant` | `startswith` | Effet UX : soi souvent absent des résultats | Infra Graph, pas un filtre métier volontaire |

**Décompte** : 0 filtre d'exclusion volontaire de soi dans les listes ; **1** nouveau helper partagé pour l'inclusion autocomplete ; **N copies** de skip notif (conservées / clarifiées).

### Périmètre retenu

Helper unique d'autocomplete → **toutes** les surfaces mention (Foncier, offres foncières via contexte, factures, tâches/collaborateurs Graph, juridique demande + registre).

## OBJET 2 — Correction

- `MentionAutocompleteSelfInclusion` : injecte l'utilisateur courant (azure_id) si la requête matche nom/e-mail (`str_contains`), sans dupliquer, sans élargir le cloisonnement.
- Branché sur : `GraphUserSearchController` (facture + collaborateurs), `FoncierEntiteCommentaireContext`, résolveurs juridique.
- Enregistrement : inchangé (pivot) ; skip notif explicite documenté dans les 3 services create.
- Teams reste déclenché côté PHP-FPM web (pas déplacé).

## OBJET 3 — Soi + autres

Skip **par destinataire** dans la boucle mentions + `AlerteService` : les autres reçoivent cloche/Teams ; l'auteur non. Test feature `test_auto_mention_avec_autre_notifie_uniquement_lautre`.

## SYNTHÈSE

Auto-mention proposée dans l'autocomplete partout via un helper ; mention persistée ; notification auteur toujours absente, destinataire par destinataire.

## DÉPLOIEMENT-TEST

OVH : `git pull` + `view:clear` + `journal:sync`. Pas de migrate. Pas de rebuild serveur.

Tests prod manuels : se mentionner (foncier) sans notif ; soi+autre ; autre seule ; surfaces factures/tâches/offres ; cloisonnement inchangé.

## LEÇON

Ne pas confondre « absent de l'autocomplete Graph startswith » avec « filtré à l'enregistrement ». Distinguer **inclusion liste** et **skip notif** dès le design.
