This commit is contained in:
ocroguennec committed 2026-09-27 15:09:18 +02:00
1 parent 1e3994f17f
commit 624d32ff7c
17 files changed
+2192 -1

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
path = "backend/src/db/index.js"
with open(path, "r", encoding="utf-8") as f:
content = f.read()
anchor = """ })();
}
export default db;
"""
assert content.count(anchor) == 1, f"anchor count={content.count(anchor)}"
block = ''' })();
}
// Extension du 29/09/26 (demande Olivier, à propos de produits Spiko/Regular Finance) : "sais-tu
// comment les classifier ?" — Spiko et Regular Finance ne sont pas des enveloppes mais des
// PLATEFORMES/INSTITUTIONS donnant accès à un fonds monétaire (OPCVM monétaire, y compris
// lorsqu'il est tokenisé sur blockchain comme chez Spiko) : elles ont vocation à rejoindre
// institutions_referentiel (catégorie à créer, ex. "Gestion de trésorerie"), pas
// enveloppes_referentiel — le rattachement viendra en Phase 3. Ce qui manquait réellement à CE
// référentiel, c'est le SUPPORT lui-même : "OPCVM / fonds actifs" existant désigne des fonds
// actions/obligations/diversifiés gérés activement, pas un fonds monétaire (quasi-cash, duration
// très courte, profil de risque très différent) — les deux ne doivent pas être confondus.
// Toujours exécuté (INSERT OR IGNORE, clés UNIQUE sur nom), même principe que les extensions
// précédentes.
{
db.prepare("INSERT OR IGNORE INTO supports_referentiel (nom, description) VALUES (?, ?)").run(
'Fonds monétaires (OPCVM monétaire)',
"Fonds monétaire classique ou tokenisé sur blockchain (ex. Spiko, Regular Finance) — quasi-cash, duration très courte, distinct d'un OPCVM actions/obligations/diversifié."
);
const getSuppRefIdMonetaire = db.prepare('SELECT id FROM supports_referentiel WHERE nom = ?');
const suppMonetaire = getSuppRefIdMonetaire.get('Fonds monétaires (OPCVM monétaire)');
if (suppMonetaire) {
const getEnvRefIdMonetaire = db.prepare('SELECT id FROM enveloppes_referentiel WHERE nom = ?');
const linkEnvSuppMonetaire = db.prepare('INSERT OR IGNORE INTO enveloppes_supports_disponibles (enveloppe_id, support_id) VALUES (?, ?)');
// Enveloppes où un fonds monétaire a sa place (menu de supports déjà large, cohérent avec un
// placement défensif) — PEA/PEA-PME exclus (non éligibles réglementairement), enveloppes
// "cash" (Livret A, comptes courants...) exclues (déjà sans menu de supports par nature).
for (const envNom of [
'Compte-titres ordinaire (CTO)', 'Assurance-vie multisupport', 'PER individuel',
'PER collectif / obligatoire (PERCOL, article 83)', 'Contrat de capitalisation',
'Assurance-vie luxembourgeoise',
]) {
const env = getEnvRefIdMonetaire.get(envNom);
if (env) linkEnvSuppMonetaire.run(env.id, suppMonetaire.id);
}
}
}
export default db;
'''
content = content.replace(anchor, block, 1)
with open(path, "w", encoding="utf-8") as f:
f.write(content)
print("Fonds monétaires support + links inserted OK, new length:", len(content))