---
suivi: 1911
date: 2026-10-15
sujet: Import des parcelles DGFiP et prise en charge des non attribuées
chantier: module-foncier
type: evolution
statut: poussé
hash: 5cd15e132
fichiers:
  - database/migrations/2026_10_15_120000_add_cadastre_dgfip_to_parcelles.php
  - database/migrations/2026_10_15_143000_add_arrondissement_to_parcelles.php
  - app/Support/Foncier/ArrondissementsMunicipaux.php
  - app/Services/Foncier/ParcelleImportDgfip.php
  - app/Services/Foncier/IgnCadastreParcelleService.php
  - app/Services/Foncier/ParcelleGeometrieImportService.php
  - app/Services/Foncier/ParcellePriseEnCharge.php
  - app/Console/Commands/ParcellesImportDgfipCommand.php
  - app/Models/Parcelle.php
  - app/Models/Scopes/FoncierParcelleVisibiliteScope.php
  - app/Services/Foncier/FoncierParcelleVisibiliteService.php
  - app/Services/Foncier/FieldAuditService.php
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - app/Services/Foncier/ProspectionListeExportService.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Support/Foncier/FoncierReferentiels.php
  - routes/web.php
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - resources/js/Pages/Foncier/Parcelles/Show.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/ParcelleImportDgfip1911Test.php
  - tests/Unit/FoncierProspectionListe1829SourceTest.php
  - public/build/manifest.json
  - docs/suivi/SUIVI_1911_import_dgfip_parcelles.md
---

# SUIVI #1911 — parcelles du cadastre DGFiP et prise en charge

## PROMPT ENVOYÉ

Importer le fichier DGFiP 2025 (personnes morales) sans modifier les parcelles déjà présentes et sans poser de responsable. Droit P : détention groupe sans acte. Droit G ou S : hors groupe, sans détention. Les parcelles sans responsable sont visibles par qui a la lecture foncier, et se prennent avec « Je m'en occupe ».

Complément : colonne categorie. groupe = société détentrice (création seulement avec --creer-societes). tiers = propriétaire déjà en fiche, sans détention groupe.

Ajout : arrondissements municipaux DGFiP (75101-75120, 69381-69389, 13201-13216) rattachés à la commune mère, code d'arrondissement conservé. Journal de la liste des parcelles ramené sous 250 mots.

## Fiches lues

- #1910 : le responsable est la lecture « qui suit ». L'import le laisse vide. La visibilité gagne « responsable vide » en lecture seulement. Usage et modification restent « responsable = moi ».
- #1852 : le normaliseur local (section 2 caractères, numéro 4 chiffres). Pas d'appel HTTP IGN depuis la commande (CLI OVH bloqué, et un numéro court fait un 400).
- #1567 : ne pas vider un responsable déjà posé. La direction change le responsable par le droit existant de la fiche.
- #1695 : seule `ParcelleDetentionGroupeService::synchroniser` écrit la société détentrice. La table n'a pas de colonne d'origine : la source est sur la parcelle.
- #1514 : le dossier et les groupes de contournement restent. Le créateur de dossier dans la branche dossier n'est pas le créateur de la parcelle.

## SYNTHÈSE

Colonnes `droit_cadastral`, `nature_culture_cadastre`, `source_import`. Lecture seule dans Identification. Colonnes de liste masquées par défaut, présentes dans l'export Excel en fin de ligne.

Commande `parcelles:import-dgfip`. Aperçu sans option. `--appliquer` crée par lots de 100, y compris les parcelles en corbeille dans la détection de doublon. `createur_id` et `responsable_id` restent nuls : le compte « Dépôt automatique » sert aux factures. Le statut est recalculé, jamais écrit par l'import. Droit P : détention courante sans acte, donc Détenue et à compléter. Droit G ou S : `hors_groupe`, donc hors totaux, statut Repérée.

Filtre et pastille « Non attribuées ». Bouton « Je m'en occupe » sur la ligne, en masse, et sur la fiche : refus « déjà attribuée à X » si un responsable existe. L'historique dit « Prise en charge par X » quand le responsable passe de vide à une personne.

Complément CSV v2. categorie groupe : mêmes règles. Une société absente du référentiel est listée (SIREN, nom, nombre) et bloque, sauf --creer-societes qui crée l'entité (nom, SIREN, identifiant technique FONCIER-SIREN, pas un code Sage). categorie tiers : pas de détention groupe, hors groupe non, propriétaire courant retrouvé par SIREN puis par nom. Aucune fiche, ou plusieurs : la ligne est en erreur, aucun propriétaire n'est créé. L'aperçu donne les comptes par société et par catégorie, et la fiche tiers retrouvée.

Ajout arrondissements. L'API parcelle IGN, interrogée depuis le poste de développement, ne renvoie rien pour `code_insee` 13209, 13214 ou 75101. La même section et le même numéro sur la commune mère renvoient la géométrie, et pour Paris AB 0001 quatorze parcelles dont l'idu commence par l'arrondissement (75101, 75111, …). Ajouter l'arrondissement comme commune de la parcelle ferait échouer le contour. La parcelle est donc rattachée à 75056, 69123 ou 13055, et `code_insee_arrondissement` garde 75101, 69381 ou 13209. L'unicité vivante inclut ce code : une parcelle déjà enregistrée en 13055 n'est ni modifiée ni prise pour doublon d'un arrondissement. Le contour ne retient que l'idu du bon arrondissement, jamais la première géométrie de la liste. La fiche affiche « Marseille 9e », « Paris 1er », « Lyon 1er » quand ce code est posé.

## DÉPLOIEMENT-TEST

`git pull origin main`, `php artisan optimize:clear`, `php artisan view:clear`, `php artisan route:clear`, `php artisan migrate --force`, `php artisan journal:sync`.

Déposer le CSV v2 dans `storage/app/imports/` (jamais dans git). Aperçu : `php artisan parcelles:import-dgfip storage/app/imports/FICHIER.csv`. Écriture : la même commande avec `--appliquer`. Sociétés du groupe absentes, seulement après lecture de l’aperçu : ajouter `--creer-societes`.

Tests unitaires `ParcelleImportDgfip1911Test` : 5 tests, 115 assertions. Pas de clic navigateur. `journal:controler` : conforme, entrée de la liste des parcelles à 240 mots.

## LEÇON

Le SIREN se lit sur les 9 premiers chiffres de `entites.siret` ou de `proprietaires.siret`. Une société du groupe absente ne se crée pas sans `--creer-societes`. Un tiers se rattache par `attachCourantOrUpdateQuote`, le même geste que la fiche, et ne devient pas une société détentrice. Ne pas passer par `ParcelleCreationService::createPrepared` : il pose le responsable. `hors_groupe` reste l'exclusion des totaux, et ne s'applique pas au tiers. Une seconde exécution ne crée rien parce que la clé commune + arrondissement + section + numéro, corbeille comprise, est un doublon. Pour Paris, Lyon et Marseille, la commune de la clé est la mère (75056, 69123, 13055) et l'arrondissement reste un champ distinct : ne pas réécrire un 13209 en simple doublon d'un 13055. Le contour IGN s'interroge avec la mère, puis filtre l'idu. `journal:controler` compte les mots en découpant sur les espaces après remplacement des deux-points : un `str_word_count` local sous-estime.
