---
name: project-investissement-detail-features
description: "Fonctionnalités ajoutées à InvestissementDetail — modifier DPE, traitement en masse remboursements, correction ConfirmModal"
metadata: 
  node_type: memory
  type: project
  originSessionId: 06bf2c9d-6350-45bd-a65f-4399f1218408
---

## Fonctionnalités du menu ⋮ bloc Projections (simulMenu)

Trois items dans le menu `simulMenu` de la carte "Projections de remboursements", dans cet ordre :
1. **Modifier la date de la 1ère échéance** — ouvre `editDpeModal` ; champ date pré-rempli avec `inv.date_premiere_echeance` ; sauvegarde via `PUT /investissements/:id` (payload minimal, pas de spread `inv`) puis `POST /simul/recalculate` → `load()`.
2. **Traitement en masse des remboursements** — ouvre `bulkRembModal` ; calcule les échéances simul antérieures à aujourd'hui sans remboursement correspondant (match exact date ou mois, sans fallback capRestant), affiche tableau récap + totaux, crée les remboursements séquentiellement via `POST /remboursements` avec barre de progression, écran succès final.
3. **Régénérer l'échéancier** — existant.

## États ajoutés à InvestissementDetail

- `editDpeModal`, `editDpeValue`, `editDpeErr`, `editDpeSaving`
- `bulkRembModal`, `bulkRembItems`, `bulkRembProcessing`, `bulkRembProgress`, `bulkRembDone`

## Bug corrigé — ConfirmModal manquant

Le state `rowDeleteConfirm` (suppression remboursement via menu ⋮ du tableau) était alimenté mais le composant `<ConfirmModal>` n'était jamais monté dans le JSX. Ajouté en fin de template.

**Why:** Oubli lors d'une précédente session — le state existait mais le point de montage manquait.
**How to apply:** Toujours vérifier que chaque état de type `*Confirm` ou `*Modal` a bien son composant `<ConfirmModal>` ou `<Modal>` correspondant dans le return.
