54 lines
3.6 KiB
Python
54 lines
3.6 KiB
Python
path = "backend/src/db/index.js"
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
content = f.read()
|
|
|
|
# 1) Retrait de "Gestion pilotée / mandat" du seed initial des supports (SEED_SUPPORTS) — ne
|
|
# concerne que les installations neuves, ce bloc étant gardé par COUNT()===0.
|
|
old_seed_line = " { nom: 'Gestion pilotée / mandat', description: 'Allocation déléguée à un gérant selon un profil de risque — mode par défaut de nombreux PER.' },\n"
|
|
assert content.count(old_seed_line) == 1, f"old_seed_line count={content.count(old_seed_line)}"
|
|
content = content.replace(old_seed_line, "", 1)
|
|
|
|
# 2) Retrait de 'Gestion pilotée / mandat' des deux listes de supports "classiques" AV/PER
|
|
# (AV_PER_SUPPORTS et AV_PER_SUPPORTS_EXTRA) — présent dans les deux car dupliqué (la seconde
|
|
# liste, hors de portée du bloc de seed initial, a été recopiée lors de l'extension du 29/09/26
|
|
# pour Contrat de capitalisation / Assurance-vie luxembourgeoise).
|
|
old_list_fragment = "'Produits structurés', 'Matières premières / métaux précieux', 'Gestion pilotée / mandat',"
|
|
assert content.count(old_list_fragment) == 2, f"old_list_fragment count={content.count(old_list_fragment)}"
|
|
new_list_fragment = "'Produits structurés', 'Matières premières / métaux précieux',"
|
|
content = content.replace(old_list_fragment, new_list_fragment) # replace_all (2 occurrences)
|
|
|
|
# 3) Nouveau bloc toujours exécuté : supprime la ligne "Gestion pilotée / mandat" pour les
|
|
# installations déjà seedées (le retrait du texte source ci-dessus ne corrige que les
|
|
# installations neuves). ON DELETE CASCADE sur enveloppes_supports_disponibles nettoie
|
|
# automatiquement les liens existants vers ce support — c'est un pur catalogue (aucune donnée
|
|
# d'investissement réelle n'y est aujourd'hui rattachée), donc la suppression est sans risque.
|
|
# Toujours exécuté et idempotent (DELETE sans WHERE de garde spécifique au-delà du nom — un
|
|
# deuxième passage ne trouve simplement plus rien à supprimer).
|
|
anchor = "\nexport default db;\n"
|
|
assert content.count(anchor) == 1, f"anchor count={content.count(anchor)}"
|
|
|
|
block = '''
|
|
// Correctif du 29/09/26 (suite) — retrait du support "Gestion pilotée / mandat" (demande
|
|
// Olivier, à propos d'une capture d'écran distinguant "3 modes de gestion" — libre / pilotée /
|
|
// mixte — d'un contrat d'assurance-vie) : le "mode de gestion" décrit QUI décide de l'allocation
|
|
// (le titulaire, ou un gérant délégué selon un mandat), c'est une dimension orthogonale au
|
|
// SUPPORT (le type d'instrument financier détenu — ETF, actions, SCPI...). Une gestion pilotée
|
|
// s'applique justement à un panier de vrais supports (fonds euros, fonds datés, SCPI, produits
|
|
// structurés...), elle n'en est pas un elle-même. Cette ligne datait du seed initial du 28/09/26
|
|
// et n'aurait pas dû être modélisée comme support ; elle est retirée du référentiel et de la
|
|
// liste de supports "classiques" AV/PER (voir plus haut). Toujours exécuté et idempotent —
|
|
// DELETE cascade automatiquement les liens vers cette entrée (enveloppes_supports_disponibles,
|
|
// ON DELETE CASCADE) ; aucune donnée d'investissement réelle n'est rattachée à ce catalogue à ce
|
|
// stade, la suppression est donc sans risque de perte de données utilisateur.
|
|
db.prepare("DELETE FROM supports_referentiel WHERE nom = 'Gestion pilotée / mandat'").run();
|
|
|
|
export default db;
|
|
'''
|
|
|
|
content = content.replace(anchor, block, 1)
|
|
|
|
with open(path, "w", encoding="utf-8") as f:
|
|
f.write(content)
|
|
|
|
print("Gestion pilotée / mandat removed from supports OK, new length:", len(content))
|