---
suivi: 1164
date: 2026-08-03
sujet: Commercial — suppression lot alerte + audit complet
chantier: commercialisation
type: fix
statut: poussé
hash: 47c8c0c0
fichiers:
  - app/Models/LotCommercial.php
  - app/Models/LotCommercialHistorique.php
  - app/Http/Controllers/LotCommercialController.php
  - app/Http/Controllers/CommercialController.php
  - app/Http/Controllers/CommercialisationController.php
  - app/Http/Controllers/ReservationController.php
  - app/Http/Controllers/AcquereurController.php
  - app/Services/ReservationAcquereurUpdateService.php
  - app/Support/LotCommercialHistoriquePresenter.php
  - app/Support/ReservationHistoriquePresenter.php
  - resources/js/Components/Commercialisation/LotsGrillePanel.vue
  - resources/js/Pages/Programmes/Acquereur/Show.vue
  - routes/web.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1164_commercial_suppression_lot_historique.md
---

## PROMPT ENVOYÉ

SUIVI #1164 — (1) suppression lot : alerte chiffrée au lieu de refus
(sauf AF) ; (2) audit complet des livraisons du jour. Réf. SUIVI_1154.
HEAD prod au départ = 44b9b4f7 (rebase sur origin/main post-#1163).

## SYNTHÈSE

### Fiches lues
- `SUIVI_1154` / `SUIVI_1159` — soft-delete + CASCADE ; refus données.
- `SUIVI_1162` / `SUIVI_1163` — AF compteurs ; suppression hors annulation.

### Couverture audit AVANT → APRÈS

| Modification | Avant | Après |
|---|---|---|
| #1156 plan PDF | NON | OUI `lot_commercial_historique` `plan_pdf_modifie` |
| #1156 dates suivi (3) | NON (hors snapshot) | OUI via `fiche_modifiee` (snapshot étendu) |
| #1157 motif annulation | NON | OUI `annulation` (avant/après motif) |
| #1159 suppression lot | NON | OUI `lot_supprime` + snapshot |
| #1160 co-acq / situation / régime | NON | OUI entrées distinctes `co_acquereur_ajoute` / `_retire` / `situation_regime_modifie` |
| #1162 prix fiche | PARTIEL | OUI (avant/après dans `fiche_modifiee`) |
| #1162 prix ReservationController | NON | OUI `logPatchReservationNonBlocking` |
| #1162 passage acte | NON | OUI `passage_acte` |
| #1163 soft-delete résa | OUI | OUI (non bloquant + Log::error) |
| #1163 type financement | PARTIEL | OUI (contact snapshot) |
| #1163 notaire texte↔FK | PARTIEL (FK seule) | OUI (texte + FK dans snapshot) |
| #1164 lot avec données | — | OUI `lot_supprime` + snapshot |

### Objet 1 — Suppression lot
- Soft-delete uniquement.
- Sans rattachement → confirmation simple.
- Avec résa/TMA/annexes/offres → alerte chiffrée + case de confirmation explicite.
- **Refus AF conservé** (legacy `appels_fonds` + Intacct) avec nombre + montant.
- Fiche acquéreur : badge « Lot archivé » si lot trashed (`lotCommercial` déjà `withTrashed`).

### Restauration
**Aucun écran de restauration.** Moyen actuel : Tinker / SQL —
`LotCommercial::withTrashed()->find($id)->restore()`.
Manque à signaler (1 lot déjà trashed en prod) — hors périmètre de ce lot.

### Affichage historique
- Lots : dialogue « Historique des lots » sur Commercialisation (inclut lots
  archivés via `withTrashed`).
- Réservation : section « Historique des modifications » sur fiche acquéreur
  (lecture seule, append-only).
- Permission : même accès que la page (commercialisation / fiche) ; écriture
  métier déjà gated `lots.ecriture` / `acquereurs.ecriture`. Pas d’API de
  modification/suppression de l’historique.

## DÉPLOIEMENT / TEST
OVH : `git pull` + `view:clear` + `journal:sync` (pas de migrate).

## LEÇON
- Soft-delete lot ≠ CASCADE MySQL ; AF seuls restent un refus comptable.
- Audit commercial ≠ `entity_field_audits` (foncier) — réutiliser les deux
  tables existantes.
- `whereHas(lotCommercial)` sans `withTrashed` faisait disparaître l’historique
  des lots archivés.
