Files
crowdlending-app/_to_delete/gestion_pilotee_fix_migration.py
T
2026-09-27 15:09:18 +02:00

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))