---
suivi: 1558
date: 2026-09-15
sujet: Récupérer les contours manquants depuis la synthèse dossier
chantier: foncier
type: feature
statut: poussé
hash: dee46aa6
fichiers:
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - routes/web.php
  - resources/js/Components/Foncier/DossierSyntheseTab.vue
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - tests/Unit/DossierFoncier1558SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1558_recuperer_contours_manquants.md
---

# SUIVI #1558 — Récupérer les contours manquants depuis la synthèse

## PROMPT ENVOYÉ

Bouton dans l’encadré « parcelles sans contour » de la synthèse : une parcelle
→ « Récupérer le contour » ; plusieurs → « Récupérer les contours manquants ».
Réutiliser le service IGN de la fiche parcelle, ne pas réécrire. Échec isolé,
chargement, droit = fiche parcelle (foncier.gestion). Séquentiel client.
Pas de migration. Rebase avant build.

## FICHES LUES

- **#1557 LEÇON** — emprise via périmètre vivant ; extraire la synthèse hors
  Show.vue. Impact : bouton dans `DossierSyntheseTab`, reload `only: emprise`.
- **#1109 LEÇON / SYNTHÈSE** — `POST …/geometrie/ign` WEB only, service
  `ParcelleGeometrieImportService`. Impact : même `importFromIgn()`, pas
  d’artisan, pas de boucle serveur longue.
- **#1550** — appels externes en PHP-FPM. Impact : une requête web JSON
  par parcelle, pas un POST unique multi-IGN.

## SYNTHÈSE

Route dossier `POST /foncier/dossiers/{dossierFoncier}/parcelles/{parcelle}/geometrie/ign`
(`foncier.gestion` + `assertGestion` via `userHasPermission`, jamais Gate).
Vérifie l’appartenance au périmètre. Refuse d’écraser un contour existant
(409). Sinon délègue à `ParcelleGeometrieImportService::importFromIgn`.

Le client enchaîne les parcelles de `emprise.sans_contour`, affiche
« Récupération i/n — référence », puis recharge `emprise`. Rapport succès /
échec conservé à l’écran. Fiche parcelle inchangée.

## DÉPLOIEMENT-TEST

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

Pas de migrate. Cas : DF-2026-0003 AC 0071 ; plusieurs sans contour ;
échec IGN isolé ; sans encadré si tout est tracé ; loading anti double-clic ;
compte sans `foncier.gestion` → bouton absent + 403.

## LEÇON

Ne pas POSTer la route fiche parcelle depuis la synthèse : elle redirige
vers la fiche. Une route dossier JSON, une parcelle à la fois, réutilise
le service sans modifier #1109. Un POST serveur unique multi-IGN dépasserait
le timeout FPM (#1550).
