---
name: Calcul solde porte-monnaie
description: Formule correcte du solde porte-monnaie plateforme — inclut la soustraction du capital investi non remboursé
type: project
originSessionId: 680bfd99-577f-454e-b5b8-ea58460277f9
---
## Formule solde porte-monnaie par plateforme

```
solde = dépôts − retraits_manuels + net_recu_portefeuille + bonus_wallet − capital_total_investi
```

- **retraits_manuels** : retraits hors `source='auto_remboursement'` (les auto-retraits sont générés par les remboursements compte_courant et ne représentent pas un mouvement du porte-monnaie)
- **remb_wallet** : montant crédité au porte-monnaie selon la fiscalité de la plateforme :
  - `flat_tax` → `net_recu` (PFU 30% prélevé à la source par la plateforme française)
  - `sans_fiscalite_locale` ou `avec_fiscalite_locale` → `capital + cashback + interets_bruts` (pas de PFU prélevé à la source ; l'investisseur déclare le PFU séparément ; `interets_bruts` est déjà net de la retenue locale si applicable)
  - Uniquement pour `methode_remboursement = 'portefeuille'`
- **bonus_wallet** : cashback des remboursements `type IN ('bonus_parrainage', 'bonus_plateforme')`
- **capital_total_investi** : `montant_investi + SUM(reinvestissements)` par investissement souscrit, groupé par plateforme

Le capital revient progressivement via `net_recu` au fil des remboursements — il n'est pas nécessaire de le déduire partiellement.

## Implémentations

### Backend — `dashboard.js` (vue "Toutes les années")
Quatre requêtes SQL fusionnées dans `walletMap` :
1. `drManuelPerPlat` — dépôts − retraits manuels
2. `rembWalletPerPlat` — net_recu portefeuille (fiscalité ajustée selon plateforme)
3. `bonusWalletPerPlat` — cashback bonus
4. `capitalInvestiPerPlat` — capital_total soustrait

### Frontend — `DepotsRetraits.jsx` (vue filtrée par année)
Calcul cumulatif jusqu'à `yearEnd = YYYY-12-31` dans `drPlatData` (useMemo) et `kpiSoldePortefeuille` :
1. Boucle sur `allRows` : exclure `auto_remboursement`, cumuler dépôts/retraits
2. Boucle sur `allRemb` : ajouter `net_recu` si `methode_remboursement === 'portefeuille'`
3. Boucle sur `allInv` (chargé via `/investissements`) : soustraire `capital_total ?? montant_investi`

**Why:** Sans la soustraction du capital investi, le porte-monnaie affichait les dépôts comme disponibles même quand le capital était engagé dans des prêts actifs.

**How to apply:** Toute nouvelle vue ou export affichant un "solde porte-monnaie" doit appliquer cette formule complète, y compris la soustraction du capital.
