---
name: Fiscalité locale sur remboursements
description: Nouveaux champs interets_bruts_avant_local et taxe_locale pour les plateformes avec retenue à la source locale
type: project
originSessionId: c7a8bfe3-1a9f-476a-be50-c4f412629322
---
Ajout de la prise en charge de la fiscalité locale (retenue à la source) dans les remboursements, pour les plateformes configurées avec `fiscalite = 'avec_fiscalite_locale'`.

**Modèle financier :**
- `interets_bruts_avant_local` = montant saisi par l'utilisateur (brut avant retenue)
- `taxe_locale` = `interets_bruts_avant_local × taux_fiscalite_locale / 100` (auto-calculé, éditable)
- `interets_bruts` = `interets_bruts_avant_local − taxe_locale` (auto-calculé, lecture seule)
- PFU français s'applique sur `interets_bruts` (après retenue locale)

**Why:** Les plateformes hors zone française peuvent prélever une taxe locale avant reversement ; celle-ci doit être stockée séparément pour la réconciliation fiscale.

**How to apply:** Toute future page ou export affichant des intérêts sur ces plateformes doit distinguer `interets_bruts_avant_local` (brut plateforme) de `interets_bruts` (base PFU).

**Migrations DB (backend/src/db/index.js) :**
- `ALTER TABLE remboursements ADD COLUMN interets_bruts_avant_local REAL NOT NULL DEFAULT 0`
- `ALTER TABLE remboursements ADD COLUMN taxe_locale REAL NOT NULL DEFAULT 0`

**Backend (backend/src/routes/remboursements.js) :**
- Les deux champs ajoutés au schéma Zod, INSERT et UPDATE (normal type uniquement, pas les bonus)

**Frontend — formulaires modifiés :**
- `Remboursements.jsx` : champs conditionnels dans le formulaire modal (visible si `avec_fiscalite_locale`)
- `InvestissementDetail.jsx` : idem dans la modale remboursement + 2 colonnes conditionnelles dans le tableau des remboursements enregistrés ("Int. bruts Plateforme" et "Taxe Locale")

**Logique setField / setRembField :**
1. Saisie `interets_bruts_avant_local` → calcule `taxe_locale` et `interets_bruts`, puis PFU
2. Correction manuelle `taxe_locale` → recalcule `interets_bruts` (`avant_local − taxe_locale`), puis PFU
3. `interets_bruts` est en lecture seule quand `hasLocalTax` est actif

**openRembFromSimul :** si plateforme avec retenue locale, les `interets_prevus` de la projection sont traités comme `interets_bruts_avant_local` et la taxe est pré-calculée.

**Calcul solde porte-monnaie — règle définitive (corrigé dans dashboard.js et DepotsRetraits.jsx) :**
- `flat_tax` → `net_recu` (PFU prélevé à la source)
- Hors France (`sans_fiscalite_locale` ou `avec_fiscalite_locale`) → `capital + cashback + interets_bruts` (pas de PFU à la source ; l'investisseur déclare le PFU séparément ; `interets_bruts` est déjà net de la retenue locale)
