---
suivi: 1625
date: 2026-09-21
sujet: Date d'encaissement avis d'imposition NaN
chantier: patrimoine / avis-imposition
type: fix
statut: poussé
hash: 45570cf5
fichiers:
  - app/Http/Controllers/Foncier/AvisImpositionController.php
  - tests/Unit/AvisImposition1625SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1625_date_encaissement_nan.md
---

# SUIVI #1625 — date d'encaissement NaN au rechargement

## PROMPT ENVOYÉ

Colonne Date d'encaissement de Patrimoine → Avis d'imposition : saisie OK,
rechargement → « NaN/10/202 ». Donnée SQL intacte (date ISO courte).
Cause : cast `date` → Carbon → Inertia ISO datetime → `<input type="date">`
et `formatDate` qui split sur `-`. Formater AAAA-MM-JJ à UNE seule couche.
Vide reste vide. Inventaire des autres champs date → input date. Ne pas
changer le SQL ni retirer le cast sans audit. Ne pas toucher montants /
dégrèvement / verrou. Vérifier Récap / Excel / PDF.

## FICHES LUES

- **#1435 LEÇON** — contrat PATCH `{champ, valeur}` scalaire ; overflow-x-hidden
  interdit. Impact : on ne retouche ni le PATCH ni le Vue métier.
- **#1440** — exports Excel/PDF + Récap. Impact : formater() Excel/PDF déjà
  gère Carbon `format('Y-m-d')` puis JJ/MM/AAAA ; RecapService n'inclut pas
  la date. Cast conservé.
- **#1420** — whitelist `date_encaissement`, type inline `date`.
- **#1465** — groupes accès. Inchangés.
- **#1622** — Vite en série ; ce lot ne touche pas de `.vue` → pas de rebuild.

## SYNTHÈSE

Approche unique : **formater à la source** dans
`AvisImpositionController::serializeRow` via `scalariserPourReponse`
(déjà utilisé par le PATCH). Payload Inertia = `2026-10-26` ou `null`.
Cast modèle conservé (exports, filtres SQL, tests `->format('Y-m-d')`).
Aucun formatage Vue ajouté.

## DÉPLOIEMENT

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

Pas de migrate. Pas de npm. `route:clear` non requis.

## LEÇON

Un cast Eloquent `date` sérialisé tel quel vers Inertia devient
`2026-10-26T00:00:00.000000Z`. `<input type="date">` et un split `-`
côté Vue cassent l'affichage alors que MySQL `date` est juste.
Le PATCH peut déjà renvoyer `Y-m-d` : le trou est le GET index.
Formater au serialize du payload, pas deux fois (Vue + PHP).
Vide = `null`, jamais epoch.
