---
suivi: 1341
date: 2026-08-14
sujet: recherche_commune_normalisation
chantier: marches_reprise
type: fix
statut: poussé
hash: 131e936f
fichiers:
  - app/Support/Foncier/CommuneNomNormalizer.php
  - app/Services/Foncier/CommuneSearchService.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1341_recherche_commune_normalisation.md
---

## PROMPT ENVOYÉ

SUIVI #1341 — recherche commune insensible aux tirets / espaces /
apostrophes / accents / casse. Cas « entre vignes » ≠ « Entre-Vignes ».

## SYNTHÈSE

### Inventaire points d’entrée (avant code)
1. `GET /foncier/communes/search` → `CommuneSearchController`
2. `GET /siwi-import/communes/search` → `SiwiImportController::rechercherCommunes`
3. UI unique `CommuneSelect.vue` (min. 2 car., défaut route foncière ;
   SIWI passe `searchUrl=/siwi-import/communes/search`)

Logique unique : `CommuneSearchService` + `CommuneNomNormalizer`.
**3 points publics, 1 service → correctif dans le helper, pas de copie.**

Colonnes `communes` (migration #1073/#1079) : `code_insee`, `nom`,
`nom_ascii`, `code_postal`, `departement`, …

### Fix
- `searchKey()` : compacte normalize (tiret/espace/apostrophe retirés).
- SQL : `REPLACE(REPLACE(nom_ascii,'-',''),' ','') LIKE clé%` (deux côtés).
- INSEE 5 chiffres : `orWhere code_insee` (en plus du CP).
- Min. **2** caractères ; limite **20** résultats (service + Vue).
- **Pas** de st/saint (aucune expansion dans le code ; hors lot).
- `puissergier` ≠ `puisserguier` (typo u) : hors lot, comme st/saint.

### Perf
Scan PHP 34 875 clés compactes : **3,54 ms**. MySQL local indisponible
ici ; 35 k REPLACE reste << 300 ms. Colonne persistée **non proposée**
sauf si prod `duree_ms` > 300.

### Vérification écran
**NON faite** (MySQL local refusé, pas de session prod).

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear && php artisan view:clear
php artisan journal:sync
```

Pas de migrate. Tester « entre vignes », INSEE 34246, CP 34400, « le ».

## LEÇON

`nom_ascii` gardait le tiret : LIKE préfixe sur la saisie espacée ne
matche pas. Compacter les **deux** côtés ; ne pas réécrire 35 k lignes.
