This commit is contained in:
ocroguennec committed 2026-09-18 08:55:38 +02:00
1 parent d5792fb3e2
commit 4cd4cbce71
4 files changed
+79 -12

No files matched your search

+33
View File
@@ -3360,6 +3360,39 @@ if (!invPeValCols.includes('plus_value_latente')) {
db.exec('ALTER TABLE investissements_pe_valorisations ADD COLUMN plus_value_latente REAL');
}
// Migration : capital investissable (18/09/26, demande Olivier — bug remonté : le "capital non
// déployé" d'une valorisation détaillée était calculé sur montant_investi (le montant souscrit
// BRUT), alors qu'une partie a pu être immédiatement prélevée en frais "à la source" à la
// souscription (cf. syncValorisationInitiale, InvestissementsPe.jsx) — le capital réellement
// disponible à déployer est montant_investi − ces frais, jamais le montant brut. Colonne
// nullable, calculée et fournie par le front à chaque sauvegarde du deal (POST/PUT
// /investissements-pe) à partir des frais "à la source" saisis à l'étape "Frais" de la modale ;
// NULL = deal sans frais à la source connus, auquel cas montant_investi fait référence partout
// où capital_investissable est utilisé (cf. investissementsPe.js).
const invPeCols = db.prepare('PRAGMA table_info(investissements_pe)').all().map(c => c.name);
if (!invPeCols.includes('capital_investissable')) {
db.exec('ALTER TABLE investissements_pe ADD COLUMN capital_investissable REAL');
// Backfill : pour tout deal ayant déjà une "Valorisation initiale" auto-générée (créée par
// syncValorisationInitiale AVANT cette migration, donc déjà nette des frais à la source), son
// montant EST la définition de capital_investissable — évite d'obliger Olivier à rouvrir et
// ré-enregistrer chaque deal existant pour que le calcul se corrige. Les libellés doivent
// rester synchronisés avec AUTO_VAL_NOTE / AUTO_VAL_NOTE_LEGACY (InvestissementsPe.jsx).
db.exec(`
UPDATE investissements_pe
SET capital_investissable = (
SELECT v.valorisation_nette FROM investissements_pe_valorisations v
WHERE v.investissement_pe_id = investissements_pe.id
AND v.notes IN ('Valorisation initiale (souscription)', 'Valorisation initiale (frais de souscription)')
ORDER BY v.date_valorisation ASC, v.id ASC LIMIT 1
)
WHERE EXISTS (
SELECT 1 FROM investissements_pe_valorisations v
WHERE v.investissement_pe_id = investissements_pe.id
AND v.notes IN ('Valorisation initiale (souscription)', 'Valorisation initiale (frais de souscription)')
)
`);
}
// Lien optionnel remboursement → deal PE (17/09/26) : une distribution (retour
// de capital, plus-value) perçue sur un deal PE est saisie comme un
// remboursement bonus_plateforme/interets_plateforme, comme demandé par