---
suivi: 1583
date: 2026-09-16
sujet: Simplification du journal dossier foncier
chantier: foncier / dossiers
type: fix
statut: poussé
hash: a2a48ef2
fichiers:
  - app/Services/Foncier/DossierFoncierSuiviAggregator.php
  - app/Http/Controllers/Foncier/DossierFoncierEchangeController.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Support/Foncier/DossierFoncierEchangeReferentiels.php
  - resources/js/Components/Foncier/DossierSuiviColumn.vue
  - tests/Unit/DossierFoncier1583JournalSourceTest.php
  - tests/Unit/DossierFoncier1579SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1583_simplification_journal_dossier.md
---

# SUIVI #1583 — Journal du dossier (saisie + dates métier)

## PROMPT ENVOYÉ

Simplifier la saisie d’échange (formulaire replié, plus d’issue ni
propriétaire, plus d’opposition depuis le fil). Dates métier des
événements automatiques, sans repli silencieux sur created_at.
Plusieurs fichiers par échange. Renommer la colonne, pas l’onglet.

## FICHES LUES

- **#1579 LEÇON** — journal ≠ discussion ; dates déjà listées avec
  repli `date_offre sinon created_at`. Impact : supprimer ce repli
  silencieux ; garder la table d’échanges et l’agrégation lecture.
- **#1578** — opposition uniquement fiche propriétaire. Impact :
  retirer la proposition depuis le fil, ne pas toucher
  `poserOpposition`.
- **#1117** — un pipeline documents, cap 5 / 10 Mo. Impact :
  `multiple` + liste avant envoi, même `storeMany`.

## DATES MÉTIER RETENUES (avant code)

| Type | Colonne métier | Citation | created_at ? |
|---|---|---|---|
| `creation` | `dossiers_fonciers.created_at` | `DossierFoncierSuiviAggregator.php` pushCreation ; pas d’autre date de « naissance » du dossier | **c’est** la date de l’événement — rien à signaler |
| `parcelle_rattachee` | pivot `dossier_foncier_parcelle.created_at` | même fichier pushParcelles ; le rattachement n’a pas de date notariée | **c’est** l’événement — rien à signaler |
| `parcelle_retiree` | `entity_field_audits.created_at` (champ `perimetre_parcelle`, action=retrait) | pushParcelles ; pas de date métier de « retrait cadastral » | **c’est** l’événement — rien à signaler |
| `offre_emise` | `offres_foncieres.date_offre` | `OffreFonciere.php` fillable + auditedFields « Date offre » L40 / L95 / L117 | si absente : `created_at` **signalé** « date de saisie » |
| `promesse_signee` | `promesses.date_signature` | `PromesseFonciere.php` fillable L35, cast date L65. L’entrée n’est émise que si cette date est remplie (#1579, liste inchangée) | pas de repli : pas de date = pas d’entrée (comme #1579) |
| `acte_enregistre` | `actes_fonciers.date_acte` | `ActeFoncier.php` fillable L27, cast L39 | si absente : `created_at` **signalé** « date de saisie » |
| `document_depose` | `entity_documents.created_at` | `EntityDocument` n’a pas d’autre date ; l’événement **est** le dépôt | **c’est** l’événement — rien à signaler |
| `tache_creee` | `taches_suivi.created_at` | titre « Tâche créée » ; `date_echeance` est l’échéance, pas la création | **c’est** l’événement — rien à signaler |
| `statut_change` | `entity_field_audits.created_at` (champ `statut`) | le statut n’a pas de date métier parallèle (`date_revue` = revue, autre fait) | **c’est** l’événement — rien à signaler |

Production DF-2026-0005 : les trois faits au 07/09/2026 venaient du
repli `date_offre ?? created_at` (#1579 L172). Corrigé.

## ISSUE / PROPRIETAIRE SANS MIGRATION

`issue` est NOT NULL au #1579 (`string('issue', 32)`). Aucune
migration. L’UI n’envoie plus le champ ; le serveur enregistre `''`
(pas une des 4 issues). L’affichage n’écrit l’issue que si la valeur
est dans `ISSUES` (`issueLibelleAffiche`). `proprietaire_id` déjà
nullable : omis. Les 4 constantes d’issue restent dans le référentiel.

## DROITS

Inchangés : voir = visibilité dossier ; saisir = `userCanManageRecord`
+ `abort_unless`. Plus de `foncier.gestion` sur ce POST (plus
d’opposition depuis le fil).

## MAPPING CANAL / SENS

| Libellé affiché | Valeur postée | Libellé back |
|---|---|---|
| Courrier | `courrier` | Courrier |
| Email | `email` | Email |
| Appel | `appel` | Appel |
| Rendez-vous | `rendez_vous` | Rendez-vous |
| Salon | `salon` | Salon |
| Notaire | `notaire` | Notaire |
| Intermédiaire | `intermediaire` | Intermédiaire |
| Autre | `autre` | Autre |
| Sortant (nous vers lui) | `sortant` | Sortant (nous vers lui) |
| Entrant (lui vers nous) | `entrant` | Entrant (lui vers nous) |

## DÉPLOIEMENT-TEST

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

Pas de migrate.

## LEÇON

Ne jamais afficher `created_at` sous une étiquette d’événement métier
(`date_offre`, `date_acte`). Si la date métier manque, le dire
(« date de saisie »). Un journal libre n’a pas d’issue DPO dans le
formulaire ; garder la colonne pour le compteur 5 ans, sans l’alimenter.
L’opposition reste un acte sur la fiche propriétaire (#1578), pas un
sous-produit du fil.
