---
suivi: 1423
date: 2026-09-03
sujet: Import CSV avis d'imposition
chantier: foncier
type: feature
statut: poussé
hash: 1423a0b1
fichiers:
  - app/Console/Commands/ImportAvisImpositionCommand.php
  - app/Services/Foncier/AvisImpositionCsvImporter.php
  - tests/Unit/AvisImpositionImport1423SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
---

# SUIVI #1423 — Import CSV avis d'imposition

## PROMPT ENVOYÉ

Reprise des 313 lignes du CSV consolidé `avis_imposition_import.csv` dans `avis_impositions`. Commande artisan CLI, dry-run, idempotence, historique `import_excel`.

## SYNTHÈSE

- Commande : `php artisan avis-imposition:import {fichier} --dry-run`
- Import réel : même commande sans `--dry-run`
- Idempotence : **refus si la table n'est pas vide**. Écrasement uniquement avec `--force` (DELETE SQL des lignes, historique et documents liés).
- BOM UTF-8 retiré sur l'en-tête. Montants vides → NULL. Insertion par paquets de 100 + historique groupé. `user_id` NULL en CLI.
- Aucune migration, aucun `.vue`, contrôleur / page / droits inchangés.

## DÉPLOIEMENT-TEST

1. Déposer le CSV sur le serveur.
2. `php artisan avis-imposition:import /chemin/avis_imposition_import.csv --dry-run`
3. Vérifier 313 / répartitions / totaux.
4. `php artisan avis-imposition:import /chemin/avis_imposition_import.csv`

## LEÇON

- Idempotence d'un import additif = refus si table peuplée, pas « upsert approximatif ».
- BOM UTF-8 : toujours stripper `\xEF\xBB\xBF` / `\u{FEFF}` sur la première cellule d'en-tête.
