---
suivi: 1198
date: 2026-08-05
sujet: Foncier — statut négociation inline liste
chantier: module-foncier
type: feature
statut: poussé
hash: a2d64912
fichiers:
  - app/Support/Foncier/OffreStatutTransitions.php
  - app/Http/Controllers/Foncier/OffreFonciereController.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - resources/js/Components/Foncier/OffreStatutInline.vue
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - tests/Feature/Foncier/FoncierOffreStatutInline1198SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1198_foncier_negociation_statut_inline.md
---

## PROMPT ENVOYÉ

SUIVI #1198 — retirer Envoyer/Réponse de la liste négociations ; statut
modifiable inline avec données associées ; après #1195–#1197.

## SYNTHÈSE

### Étape 0
1. **Envoyer** (`marquerEnvoyee`) : `statut=envoyee` + `date_offre=aujourd’hui`.
   Pas de mail/document/notification. ACL = `authorize('update', dossier)`.
2. **Réponse** (`repondre`) : statut (≠ a_envoyer) + `date_reponse` (défaut
   aujourd’hui) + optionnel `montant_contre_offre` (obligatoire si contre) +
   `commentaire_reponse` + fichiers contexte réponse. Clôture alerte expiration.
3. Statuts (`string` 20) : a_envoyer, envoyee, acceptee, refusee, contre_offre,
   expiree, sans_reponse. Local : 0 offres ; prod annoncée : 3.
4. Données associées : → Envoyée exige date_offre ; → réponses exigent
   date_reponse (+ montant si contre). a_envoyer / retour envoyee sans donnée.
5. Pas de machine type LotCommercial avant #1198 — **OffreStatutTransitions**
   ajoutée. a_envoyer ↛ réponse directe.
6. Alerte expiration filtrée sur `envoyee` ; réponse clôture l’alerte. Statut
   dossier **non** dérivé aujourd’hui (#1194 inventaire seulement).

### Objets
- Liste : plus que Ouvrir + Dupliquer. Envoyer/Réponse **conservés sur la fiche**.
- Statut inline via `OffreStatutInline` (Select + petite boîte date) → PATCH
  `updateChamp` durci (transitions + données). `InlineEditableField` reste sur
  la fiche ; la liste a besoin de la boîte date → composant dédié.
- Règle : boîte pour date_offre / date_reponse (jamais statut sans date).
- Droit : même `update` dossier que Envoyer.

## DÉPLOIEMENT-TEST

1. pull ; view:clear ; journal:sync ; route:clear
2. Liste : pas Envoyer/Réponse ; statut inline Offre 2 → Envoyée avec date
3. Fiche : Envoyer + Réponse OK ; Dupliquer OK
4. Transition interdite → erreur visible
5. Audit statut ancien/nouveau

## LEÇON

Un statut déjà en whitelist inline sans machine de transitions permettait de
poser « Envoyée » sans date. Durcir updateChamp avant d’exposer le sélecteur
en liste.
