correctif
This commit is contained in:
@@ -666,6 +666,13 @@ export default function InvestissementDetail() {
|
||||
// Si tout le capital est remboursé (capRestant = 0), fallback sur le dernier remboursement
|
||||
const rembByExactDate = new Map(remb.map(r => [r.date_remb, r]));
|
||||
const rembByMonth = new Map(remb.map(r => [r.date_remb.slice(0, 7), r]));
|
||||
// Groupement multi-remb par mois (pour les mois avec plusieurs versements / rattrapages)
|
||||
const rembsArrayByMonth = new Map();
|
||||
remb.forEach(r => {
|
||||
const m = r.date_remb.slice(0, 7);
|
||||
if (!rembsArrayByMonth.has(m)) rembsArrayByMonth.set(m, []);
|
||||
rembsArrayByMonth.get(m).push(r);
|
||||
});
|
||||
const lastRemb = remb.length > 0
|
||||
? remb.reduce((latest, r) => r.date_remb > latest.date_remb ? r : latest, remb[0])
|
||||
: null;
|
||||
@@ -673,6 +680,15 @@ export default function InvestissementDetail() {
|
||||
rembByExactDate.get(date_prevue)
|
||||
?? rembByMonth.get(date_prevue?.slice(0, 7))
|
||||
?? (capRestant === 0 ? lastRemb : null);
|
||||
// Retourne tous les remboursements correspondant à une date de projection (pour somme exacte)
|
||||
const matchRembsAll = (date_prevue) => {
|
||||
const exact = rembByExactDate.get(date_prevue);
|
||||
if (exact) return [exact];
|
||||
const monthRembs = rembsArrayByMonth.get(date_prevue?.slice(0, 7));
|
||||
if (monthRembs?.length) return monthRembs;
|
||||
if (capRestant === 0 && lastRemb) return [lastRemb];
|
||||
return [];
|
||||
};
|
||||
|
||||
// ── Export dossier JSON ────────────────────────────────────────
|
||||
const exportDossier = () => {
|
||||
@@ -1192,22 +1208,25 @@ export default function InvestissementDetail() {
|
||||
</thead>
|
||||
<tbody>
|
||||
{simul.map(s => {
|
||||
const matched = matchRemb(s.date_prevue);
|
||||
const isPaid = !!matched;
|
||||
const matched = matchRemb(s.date_prevue);
|
||||
const matchedAll = matchRembsAll(s.date_prevue);
|
||||
const isPaid = matchedAll.length > 0;
|
||||
const rates = getRatesForYear(s.date_prevue);
|
||||
const reduction = rates ? (rates.prelev_sociaux + rates.impot_revenu) / 100 : 0;
|
||||
const interets = netMode
|
||||
? (s.interets_prevus || 0) * (1 - reduction)
|
||||
: (s.interets_prevus || 0);
|
||||
|
||||
// Montants réels pour comparaison
|
||||
// Montants réels — somme de tous les remboursements du mois
|
||||
const interetsReels = isPaid
|
||||
? (netMode ? (matched.interets_nets || 0) : (matched.interets_bruts || 0))
|
||||
? (netMode
|
||||
? matchedAll.reduce((sum, r) => sum + (r.interets_nets || 0), 0)
|
||||
: matchedAll.reduce((sum, r) => sum + (r.interets_bruts || 0), 0))
|
||||
: null;
|
||||
const totalRecu = isPaid
|
||||
? (netMode
|
||||
? (matched.net_recu || 0)
|
||||
: (matched.capital || 0) + (matched.cashback || 0) + (matched.interets_bruts || 0))
|
||||
? matchedAll.reduce((sum, r) => sum + (r.net_recu || 0), 0)
|
||||
: matchedAll.reduce((sum, r) => sum + (r.capital || 0) + (r.cashback || 0) + (r.interets_bruts || 0), 0))
|
||||
: null;
|
||||
const interetsDiffers = isPaid && Math.abs(interetsReels - interets) > 0.01;
|
||||
const totalDiffers = isPaid && Math.abs(totalRecu - s.total_prevu) > 0.01;
|
||||
|
||||
Reference in New Issue
Block a user