---
suivi: 1099
date: 2026-07-30
sujet: Fix migration #1092 — drop index bloqué par FK (erreur 1553)
chantier: module-foncier
type: fix
statut: poussé
hash: 9aaf1044
fichiers:
  - database/migrations/2026_07_30_170000_extend_parcelle_proprietaire_detention.php
  - database/migrations/2026_07_30_170100_add_entite_id_to_proprietaires_table.php
  - database/migrations/2026_07_30_170200_create_actes_fonciers_table.php
  - database/migrations/2026_07_30_170300_create_acte_parcelle_table.php
  - database/migrations/2026_07_30_170400_add_detention_courante_unique_parcelle_proprietaire.php
  - docs/suivi/SUIVI_1099_fix_migration_pivot_detention.md
---

## PROMPT ENVOYÉ

SUIVI #1099 — FIX MIGRATION #1092 drop index bloqué FK 1553. Code déployé,
migrations Pending. Idempotence 170000→170400. Diagnostic régression active.

## LEÇON

1. Une migration validée sur une base **sans clés étrangères réelles** (SQLite /
   schéma incomplet) ne prouve rien pour MySQL InnoDB : le unique composite
   `pp_parcelle_proprio_uq` est le **seul** index couvrant `parcelle_id`, donc
   la FK s’y appuie → drop refusé (1553).
2. Une migration susceptible d’échouer à mi-parcours (DDL MySQL = commit
   implicite) doit être **rejouable par construction** : chaque étape conditionnée
   à l’état réel (`hasIndex` / `hasColumn` / `hasTable`), jamais supposée.

## SYNTHÈSE

### Correction 170000
1. Créer `pp_parcelle_idx` sur `parcelle_id` **si absent**.
2. Dropper `pp_parcelle_proprio_uq` **si présent**.
3. Ajouter colonnes / index de lecture **si absents**.
4. Ne pas toucher aux FK existantes.

### Idempotence 170100–170400
Même principe (hasColumn / hasTable / hasIndex / getForeignKeys).
`170400` inchangé fonctionnellement (#1096) — garde-fou index `pp_courante_uq`.

### Diagnostic complémentaire (origine = état prod)
Voir livrable : rattachements / batch / actes cassés tant que migrate non passé.

## DÉPLOIEMENT OVH

```
git pull origin main
php artisan migrate --force
```

Les 5 migrations 170000→170400 (puis 180xxx #1089) doivent passer d’affilée.
