59 lines
2.8 KiB
Python
59 lines
2.8 KiB
Python
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))
|