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
|
// 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 rembByExactDate = new Map(remb.map(r => [r.date_remb, r]));
|
||||||
const rembByMonth = new Map(remb.map(r => [r.date_remb.slice(0, 7), 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
|
const lastRemb = remb.length > 0
|
||||||
? remb.reduce((latest, r) => r.date_remb > latest.date_remb ? r : latest, remb[0])
|
? remb.reduce((latest, r) => r.date_remb > latest.date_remb ? r : latest, remb[0])
|
||||||
: null;
|
: null;
|
||||||
@@ -673,6 +680,15 @@ export default function InvestissementDetail() {
|
|||||||
rembByExactDate.get(date_prevue)
|
rembByExactDate.get(date_prevue)
|
||||||
?? rembByMonth.get(date_prevue?.slice(0, 7))
|
?? rembByMonth.get(date_prevue?.slice(0, 7))
|
||||||
?? (capRestant === 0 ? lastRemb : null);
|
?? (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 ────────────────────────────────────────
|
// ── Export dossier JSON ────────────────────────────────────────
|
||||||
const exportDossier = () => {
|
const exportDossier = () => {
|
||||||
@@ -1193,21 +1209,24 @@ export default function InvestissementDetail() {
|
|||||||
<tbody>
|
<tbody>
|
||||||
{simul.map(s => {
|
{simul.map(s => {
|
||||||
const matched = matchRemb(s.date_prevue);
|
const matched = matchRemb(s.date_prevue);
|
||||||
const isPaid = !!matched;
|
const matchedAll = matchRembsAll(s.date_prevue);
|
||||||
|
const isPaid = matchedAll.length > 0;
|
||||||
const rates = getRatesForYear(s.date_prevue);
|
const rates = getRatesForYear(s.date_prevue);
|
||||||
const reduction = rates ? (rates.prelev_sociaux + rates.impot_revenu) / 100 : 0;
|
const reduction = rates ? (rates.prelev_sociaux + rates.impot_revenu) / 100 : 0;
|
||||||
const interets = netMode
|
const interets = netMode
|
||||||
? (s.interets_prevus || 0) * (1 - reduction)
|
? (s.interets_prevus || 0) * (1 - reduction)
|
||||||
: (s.interets_prevus || 0);
|
: (s.interets_prevus || 0);
|
||||||
|
|
||||||
// Montants réels pour comparaison
|
// Montants réels — somme de tous les remboursements du mois
|
||||||
const interetsReels = isPaid
|
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;
|
: null;
|
||||||
const totalRecu = isPaid
|
const totalRecu = isPaid
|
||||||
? (netMode
|
? (netMode
|
||||||
? (matched.net_recu || 0)
|
? matchedAll.reduce((sum, r) => sum + (r.net_recu || 0), 0)
|
||||||
: (matched.capital || 0) + (matched.cashback || 0) + (matched.interets_bruts || 0))
|
: matchedAll.reduce((sum, r) => sum + (r.capital || 0) + (r.cashback || 0) + (r.interets_bruts || 0), 0))
|
||||||
: null;
|
: null;
|
||||||
const interetsDiffers = isPaid && Math.abs(interetsReels - interets) > 0.01;
|
const interetsDiffers = isPaid && Math.abs(interetsReels - interets) > 0.01;
|
||||||
const totalDiffers = isPaid && Math.abs(totalRecu - s.total_prevu) > 0.01;
|
const totalDiffers = isPaid && Math.abs(totalRecu - s.total_prevu) > 0.01;
|
||||||
|
|||||||
Reference in New Issue
Block a user