---
suivi: 1899
date: 2026-10-14
sujet: Parcelles vendues masquées, cohérence limitée à l'achat
chantier: foncier / parcelles
type: correctif
statut: poussé
hash: 2b5cf81e8
fichiers:
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Services/Foncier/ParcelleEtatTransitionService.php
  - app/Services/Foncier/ParcelleStatutService.php
  - app/Support/Foncier/Alertes/Types/PromesseParcelleCoherenceType.php
  - app/Console/Commands/ParcellesRecalculerStatutPromesseVenteCommand.php
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Feature/Foncier/FoncierParcellesVendues1899Test.php
  - tests/Unit/ParcelleVendues1899SourceTest.php
  - tests/Unit/Parcelle1569SourceTest.php
  - tests/Feature/Foncier/FoncierAlerteColonnes1884Test.php
  - public/build/
  - docs/suivi/SUIVI_1899_parcelles_vendues_promesse_vente.md
---

# SUIVI #1899 — parcelles vendues et promesse de vente

## PROMPT ENVOYÉ

Phase 2 du diagnostic #1897. Case « Afficher les parcelles vendues », décochée par défaut. Filtre `cedee` une fois dans `applyFilters`. Compteur Vendues seulement case cochée. Cohérence promesse limitée à l'achat (bandeau, alerte branche a, fait `promesse_signee`). Branche (b) inchangée. Commande d'aperçu `parcelles:recalculer-statut-promesse-vente`. Pas de recalcul de masse.

## Fiches lues

- #1897 : les vendues entraient par l'absence de filtre métier ; les remplacées sont un drapeau d'URL, pas une préférence ; `promesses.sens` existe ; `cedee` n'est pas un statut dispensé.
- #1562 LEÇON : le drapeau doit être visible et immédiat. Le `where` des vendues est dans `applyFilters`, que toutes les portes appellent.
- #1225 LEÇON : la transition se fait au recalcul, pas par une écriture directe du statut. La commande ne touche que les sous-compromis dont la seule promesse signée est une vente.
- #1698 LEÇON : `cedee` est produit par l'acte de vente. Le test #1569 qui l'interdisait est aligné, sans retirer cette production.
- #1876 : l'entonnoir Statut poste `etats[]=cedee`. Case décochée, ce compteur retombe à 0 parce que le filtre d'`applyFilters` s'applique avant.

## Mapping

| Case affichée | Paramètre d'URL | Condition SQL | Libellé chip / compteur |
|---|---|---|---|
| Afficher les parcelles vendues, décochée | paramètre absent | `parcelles.statut != cedee` ou statut vide, dans `applyFilters` | aucun |
| Afficher les parcelles vendues, cochée | `inclure_vendues=1` | pas de condition | chip « Parcelles vendues » ; compteur « Vendues » (`nb_statut_cedee`) |

| Sens promesse | Valeur | Effet cohérence |
|---|---|---|
| Achat | `sens` vide ou `achat` | bandeau, alerte (a) et fait `promesse_signee` |
| Vente | `sens = vente` | ignorée par ces trois lectures. Branche (b) inchangée |

## SYNTHÈSE

La case est dans Options, sous les remplacées. Décochée, les vendues sortent de la liste, des KPI (nombre, Achat, Estimé, Cible), des totaux de groupe, des facettes, des pastilles, de l'export et du mode commune. Cochée, elles reviennent et la barre affiche Vendues. Détenues, Négociation et Prospects ne changent pas de formule.

Une promesse de vente signée ne demande plus Sous compromis. Une promesse d'achat signée sur une parcelle vendue reste un écart. Le select de la fiche charge `sens`.

Commande `php artisan parcelles:recalculer-statut-promesse-vente` : aperçu, aucune écriture. `--appliquer` recalcule seulement les parcelles Sous compromis dont la seule promesse signée est une vente.

Patrimoine, supervision, fiche propriétaire et carte de dossier ne sont pas modifiés.

## DÉPLOIEMENT-TEST

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

Pas de migrate. Pas de route:clear. Puis, en aperçu :

```
php artisan parcelles:recalculer-statut-promesse-vente
```

`--appliquer` seulement après lecture de la liste.

1. Liste Parcelles : les vendues sont absentes, les trois compteurs Détenues / Négociation / Prospects tiennent. Options, cocher « Afficher les parcelles vendues » : elles reviennent, le compteur Vendues s'affiche, la chip aussi.
2. Fiche AL 0213 : le bandeau de promesse de vente disparaît.
3. Une promesse d'achat signée sur une parcelle vendue garde le bandeau.

## LEÇON

Le drapeau des remplacées est répété à cinq endroits. Le filtre métier des vendues tient dans `applyFilters`, sinon une porte (export, facette, pastille) le rate. `sens` absent du select de la fiche vaut vide et serait lu comme un achat. La branche (b) ne filtre pas le sens : une promesse de vente signée reste une promesse vivante pour « sous compromis sans promesse ».
