Mise en place de la notion de perte définitive, ainsi que la révision avec statut Polongation

This commit is contained in:
ocroguennec committed 2026-08-22 16:27:41 +02:00
1 parent 4ad6ea79e8
commit 8e1b82d161
21 files changed
+1069 -184

No files matched your search

+8 -1
View File
@@ -3,7 +3,7 @@ import { z } from 'zod';
import db from '../db/index.js';
import { HttpError } from '../middleware/errorHandler.js';
import { requireInvestisseur } from '../middleware/investisseurScope.js';
import { buildSchedule, adjustSimulForActuals } from '../utils/schedule.js';
import { buildSchedule, adjustSimulForActuals, replayAdjustSimulForActuals } from '../utils/schedule.js';
const router = Router();
@@ -149,7 +149,14 @@ router.post('/recalculate', (req, res, next) => {
const { investissement_id } = req.body;
if (!investissement_id) throw new HttpError(400, 'investissement_id required');
assertOwnedInvestissement(Number(investissement_id), req.user.id);
// adjustSimulForActuals() gère aussi la régénération complète quand aucun capital n'a
// encore été remboursé ; replayAdjustSimulForActuals() rejoue ensuite tout l'historique des
// remboursements de capital anticipés pour reconstruire fidèlement les valeurs
// intermédiaires qu'un simple appel unique ne peut pas restaurer (cf. bug "L'Olympique" du
// 22/08/26, feedback_generateSimul_restructuration_dates.md) — sans effet si l'échéancier
// était déjà cohérent.
adjustSimulForActuals(db, Number(investissement_id));
replayAdjustSimulForActuals(db, Number(investissement_id));
const rows = db.prepare(
'SELECT * FROM simul_remboursements WHERE investissement_id=? ORDER BY numero_echeance'
).all(investissement_id);