From 7189507998cc4f4297c3424bc240b0ea4955d0ff Mon Sep 17 00:00:00 2001 From: Olivier Date: Mon, 13 Jul 2026 07:16:46 +0200 Subject: [PATCH] XIRR Label --- frontend/src/pages/InvestissementDetail.jsx | 30 +++++++++++++++------ frontend/src/styles.css | 8 ++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/InvestissementDetail.jsx b/frontend/src/pages/InvestissementDetail.jsx index a363e40..8f79d16 100644 --- a/frontend/src/pages/InvestissementDetail.jsx +++ b/frontend/src/pages/InvestissementDetail.jsx @@ -971,15 +971,29 @@ export default function InvestissementDetail() { {(() => { const rendement = netMode ? rendementReel : rendementReelBrut; - const baseTip = netMode ? 'XIRR sur flux nets réels (après fiscalité)' : 'XIRR sur flux bruts (avant fiscalité)'; - const titleTip = rendement !== null - ? baseTip + (rendementEstime ? ' — estimation : capital restant dû valorisé à la date du jour' : '') - : 'Nécessite au moins un remboursement enregistré'; + const xirrExplication = + `XIRR (taux de rendement interne actualisé) : taux annualisé calculé à partir des flux réels datés ` + + `(versement initial, réinvestissements, remboursements ${netMode ? 'nets, après fiscalité' : 'bruts, avant fiscalité'}). ` + + `Chaque flux est pondéré par sa date exacte — deux prêts au même total mais versés à des rythmes différents auront un XIRR différent.\n\n` + + (rendementEstime + ? "Prêt pas encore soldé : le capital restant dû est ajouté en flux final, valorisé à la date du jour — c'est donc une estimation, pas un taux définitif." + : 'Prêt intégralement remboursé : taux définitif.'); return ( -
-
- Rendement annualisé — {netMode ? 'Net' : 'Brut'} - {rendementEstime && rendement !== null ? (estimé) : ''} +
+
+ + XIRR — {netMode ? 'Net' : 'Brut'} + {rendementEstime && rendement !== null ? (estimé) : ''} + + + + + +
= 0 ? 'var(--success)' : 'var(--danger)') : 'var(--text-muted)' }}> {rendement !== null diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 1cf0fdc..50d43d0 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1417,6 +1417,14 @@ tr:hover td { background: var(--surface-2); } } .cell-tooltip:hover::after { opacity: 1; } +/* Variante ouvrant vers le bas — pour les éléments proches du haut de la fenêtre + (ex. icône d'info dans une carte KPI), où le popup par défaut (vers le haut) + sortirait de l'écran. */ +.cell-tooltip.tooltip-down::after { + top: calc(100% + 6px); + bottom: auto; +} + /* ── Tableau Remboursements enregistrés (InvestissementDetail) ────────── */ .remb-table { table-layout: fixed; width: 100%; } .remb-table th, .remb-table td { text-align: center; }