chore: sync cowork memory 2026-07-03 17:46
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: project_istaxindicatif
|
||||
description: Règle isTaxIndicatif — prelev indicatifs vs réels, net_recu brut vs net ; route reprocess en masse
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: 5682d634-7345-40a8-8184-f617d1dd8444
|
||||
---
|
||||
|
||||
## Règle centrale `isTaxIndicatif`
|
||||
|
||||
```js
|
||||
isTaxIndicatif = (fiscalite !== 'flat_tax') OR (fiscalite_override === 'exonere')
|
||||
```
|
||||
|
||||
Cas couverts :
|
||||
- Plateforme `sans_fiscalite_locale` ou `avec_fiscalite_locale` (étrangères) → indicatif
|
||||
- Plateforme `flat_tax` mais investissement `exonere` (PEA-PME) → indicatif
|
||||
- Plateforme `flat_tax` sans override → prelev réels
|
||||
|
||||
## Comportement selon la règle
|
||||
|
||||
| `isTaxIndicatif` | Prelev calculés ? | Champs prelev | `net_recu` |
|
||||
|---|---|---|---|
|
||||
| `false` | Oui, réels | Modifiables | capital + cashback + interets_nets |
|
||||
| `true` | Oui, indicatifs | Lecture seule, label "indicatif" | capital + cashback + interets_bruts |
|
||||
|
||||
**Pourquoi** : les plateformes étrangères et les PEA-PME ne prélèvent pas la flat tax à la source. Le montant versé à l'investisseur est le brut. Les prelev sont stockés à titre informatif pour la déclaration fiscale personnelle.
|
||||
|
||||
## Backend — `remboursements.js`
|
||||
|
||||
### Helper `getTaxIndicatif(investissementId)`
|
||||
```js
|
||||
function getTaxIndicatif(investissementId) {
|
||||
const row = db.prepare(`
|
||||
SELECT p.fiscalite, i.fiscalite_override
|
||||
FROM investissements i JOIN plateformes p ON p.id = i.plateforme_id
|
||||
WHERE i.id = ?
|
||||
`).get(investissementId);
|
||||
return row.fiscalite !== 'flat_tax' || row.fiscalite_override === 'exonere';
|
||||
}
|
||||
```
|
||||
|
||||
### `computeChamps(body, isTaxIndicatif)`
|
||||
```js
|
||||
const interets_nets = round2(body.interets_bruts - body.prelev_sociaux - body.prelev_forfaitaire);
|
||||
const net_recu = isTaxIndicatif
|
||||
? round2(capital + cashback + body.interets_bruts)
|
||||
: round2(capital + cashback + interets_nets);
|
||||
```
|
||||
|
||||
Utilisé dans POST et PUT handlers.
|
||||
|
||||
## Frontend — `InvestissementDetail.jsx`
|
||||
|
||||
```js
|
||||
const isExonere = inv?.fiscalite_override === 'exonere';
|
||||
const isIndicatif = isExonere || currentPlat?.fiscalite !== 'flat_tax';
|
||||
```
|
||||
|
||||
- Prelev + interets_nets : `readOnly={isIndicatif}`, style grisé (`var(--surface-2)`), label "— indicatif"
|
||||
- Recalcul auto des prelev depuis taux PFU dans `updateRembField` : toujours calculé, même en mode indicatif
|
||||
- Montant remboursé affiché = capital + cashback + interets_bruts si indicatif
|
||||
|
||||
## Route reprocess en masse
|
||||
|
||||
`POST /api/remboursements/reprocess` — recalcule tous les remboursements `type='normal'` de l'utilisateur connecté (tous ses investisseurs).
|
||||
|
||||
Champs recalculés : `taxe_locale`, `interets_bruts`, `prelev_sociaux`, `prelev_forfaitaire`, `interets_nets`, `net_recu` + montant du retrait auto associé (`depots_retraits` avec `source='auto_remboursement'`).
|
||||
|
||||
Logique : join investissements + plateformes + investisseurs, taux PFU de l'année du remboursement, `isTaxIndicatif` appliqué à `net_recu`.
|
||||
|
||||
Déclenchement UI : bouton dans `Settings.jsx` section `nettoyage` (groupe "Mes données") → modale de confirmation → appel `api.post('/remboursements/reprocess', {})`. ⚠️ Anciennement dans `MonCompte.jsx` — déplacé en Settings lors de la réorganisation NAV (juin 2026).
|
||||
|
||||
**How to apply** : toute nouvelle route ou formulaire manipulant `prelev_sociaux`, `prelev_forfaitaire`, `interets_nets`, `net_recu` doit appliquer cette règle. Checker `getTaxIndicatif()` (backend) ou `isIndicatif` (frontend).
|
||||
Reference in New Issue
Block a user