---
name: feedback_adjustsimul
description: "Règles complètes pour adjustSimulForActuals — capital effectif, capital soldé, reprocess"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: cce8aa12-fe3a-4aa6-a101-357b5ce867e8
---

`adjustSimulForActuals` dans `backend/src/utils/schedule.js` est le point central déclenché après chaque remboursement. Trois règles à toujours respecter :

**1. Capital effectif = initial + réinvestissements**

**Why:** Après l'ajout des réinvestissements (mai 2026), la projection s'affichait correctement après un réinvestissement, mais dès qu'un remboursement était saisi, `adjustSimulForActuals` recalculait sur `montant_investi` seul, effaçant l'impact.

**How to apply:** À chaque nouvelle fonctionnalité modifiant le capital réel (réinvestissement, abondement…), vérifier et adapter :
1. `adjustSimulForActuals` dans `schedule.js`
2. `syncInvestissementStatut` dans `remboursements.js`
3. Le bouton ↺ (recalcul manuel) dans `simul.js`

**2. Capital soldé (remainingCapital <= 0)**

**Why:** Sans correction, l'échéance courante gardait `capital_prevu = 0` pour les prêts in fine, et des lignes à 0,00 € restaient dans le tableau au lieu d'être supprimées.

**How to apply:** Quand `remainingCapital <= 0` :
- L'échéance courante (date_prevue <= last_date) reçoit `capital_prevu = capitalAtLastDate`
- Les échéances futures (date_prevue > last_date) sont **supprimées** (DELETE), pas mises à zéro

**3. Route /reprocess doit appeler adjustSimulForActuals**

**Why:** Sans cet appel, recalculer les champs fiscaux en masse ne mettait pas à jour les échéanciers.

**How to apply:** La route `POST /api/remboursements/reprocess` doit sélectionner `r.investissement_id`, collecter les IDs dans un `Set` pendant la transaction, puis itérer avec `adjustSimulForActuals(db, invId)` après le `transaction()()`.
