| Plateforme — Détenteur | + {MOIS_LABELS.map(m => ( +{m} | + ))} +Total | +
|---|---|---|
| + {l.plateforme_nom} + — {fullName(l)} + | + {MOIS_NUMS.map(m => { + const v = getMonthVal(l, m); + return0 ? 'var(--text)' : 'var(--text-muted)' }}>{v > 0 ? fmtN(v) + ' €' : '—'} | ; + })} +{total > 0 ? fmtN(total) + ' €' : '—'} | +
| Total | + {MOIS_NUMS.map(m => { + const v = totalByMonth(m); + return0 ? footerColor : 'var(--text-muted)' }}>{v > 0 ? fmtN(v) + ' €' : '—'} | ; + })} +{fmtN(grandTotal)} € | +
Aucune donnée pour {annee} (deals en détention directe).
Aucun deal en détention directe avec des distributions pour {annee}.
+ )} + ++ À utiliser uniquement lorsque le capital est réellement irrécouvrable (fonds liquidé + sans distribution, société sous-jacente radiée…) — pas une simple baisse de + valorisation latente. Une fois déclaré, ce deal sort du capital investi/en risque et + le montant est reporté dans votre synthèse fiscale PE (case 2TY), pour l'année de la + date d'effet ci-dessous. +
+ +Aucun flux pour cette année.
+ ) : ( +{bucket.fiscal.note}
++ {bucket.fiscal.note} +
+ )} ++ ⚠ Ce module est une aide à la préparation de votre déclaration ; il ne la remplace pas. Les onglets et cases + ci-dessous ne concernent que vos deals en détention directe — le PEA-PME et l'assurance-vie + suivent des régimes fiscaux distincts, sans formulaire CERFA dédié (cf. cartes ci-dessus). Vérifiez chaque + montant avant de le reporter. Vous restez seul responsable de l'exactitude de votre déclaration fiscale — + Crowdlending ne saurait être tenu responsable des données déclarées. +
++ Ces distributions n'indiquent pas de deal PE précis (champ « Investissement PE » + du formulaire) — leur régime de détention (direct / PEA-PME / assurance-vie) ne + peut donc pas être déterminé, et elles ne sont pas comptées dans les cartes + ci-dessus. Rattachez-les à leur deal (page Remboursements) pour qu'elles soient + prises en compte. +
+| Date d'effet | +Deal | +Plateforme | +Mode de détention | +Motif | +Montant | +
|---|---|---|---|---|---|
| {fmtDate(p.date_effet)} | +{p.nom_deal} | +{p.plateforme_nom} | +{MODE_DETENTION_LABELS[p.mode_detention] || p.mode_detention} | +{p.motif} | +{fmtEUR(p.montant_perte)} | +
+ {data.cases?.note} +
+ > + )} + > + ); +} diff --git a/frontend/src/utils/format.js b/frontend/src/utils/format.js index 3a40897..6f6edfb 100644 --- a/frontend/src/utils/format.js +++ b/frontend/src/utils/format.js @@ -77,6 +77,26 @@ export const STATUT_LABELS = { /** Retourne le libellé affiché d'un statut (première lettre majuscule). */ export const fmtStatut = (s) => STATUT_LABELS[s] ?? s; +/* ── Nature d'une distribution PE ────────────────────────────── + * Extrait en constante partagée (20/09/26, chantier "Fiscalité PE") — jusqu'ici dupliquée entre + * RemboursementsSimple.jsx (objet local) et PlateformesPe.jsx (ternaire à 2 branches) ; un seul + * endroit à mettre à jour quand une nature est ajoutée (comme 'plus_value' ici). */ +export const DISTRIBUTION_NATURE_LABELS = { + capital: 'Restitution de capital', + interet_non_deploye: 'Intérêt sur capital non déployé', + plus_value: 'Plus-value réalisée', +}; + +/** Libellés des 3 régimes de détention d'un deal PE (investissements_pe.mode_detention) — + * reprend exactement les libellés déjà utilisés dans InvestissementPeDetail.jsx (19/09/26), + * extraits ici en constante partagée le 20/09/26 (chantier "Fiscalité PE", réutilisée aussi + * par TaxReportPe.jsx). */ +export const MODE_DETENTION_LABELS = { + direct: 'Direct', + pea_pme: 'PEA / PEA-PME', + assurance_vie: 'Assurance-vie', +}; + /** Initiales pour l'avatar (2 caractères max). * - Si prenom est renseigné : 1re lettre du prénom + 1re lettre du reste du nom complet * - Sinon (données migrées) : 1re lettre du 1er mot + 1re lettre du dernier mot du nom complet