Aller au contenu principal

Règles — Snapshots

BR-SNAP-001 — Un seul snapshot par compte par jour [DB]

Snapshot @@unique([accountId, date])

Pour un compte donné, il ne peut exister qu'un snapshot par date. Les créations/imports utilisent un upsert sur la clé (accountId, date). Tenter d'insérer deux snapshots le même jour met à jour le snapshot existant.


BR-SNAP-002 — Heure fixée à midi UTC [APP]

Lors d'une saisie manuelle via createManualSnapshot(), la date reçue en string ("2024-03-15") est convertie en :

new Date(data.date + "T12:00:00.000Z")

Midi UTC évite les problèmes de décalage horaire (un snapshot 2024-03-15T00:00Z pourrait apparaître le 2024-03-14 en UTC+1).


BR-SNAP-003 — Priorité MANUAL sur COMPUTED [APP]

Deux sources de snapshots coexistent :

SnapshotSourceOrigine
MANUALSaisie directe par l'utilisateur
COMPUTEDCalculé depuis les lignes du CSV importé

Règle : un snapshot MANUAL n'est jamais écrasé par un import CSV. Lors de l'import (processImportCSV), si un snapshot MANUAL existe déjà pour un (accountId, date) donné, il est ignoré.

Un snapshot COMPUTED peut être mis à jour par un import ultérieur (upsert sur update).


BR-SNAP-004 — Snapshot initial à la création de compte [APP]

Si initialBalance est fourni à createAccount(), un snapshot MANUAL est créé automatiquement à la date du jour. Ce snapshot sert de point de départ pour le graphique d'évolution du patrimoine.

Voir BR-ACCOUNT-007.


BR-SNAP-005 — balanceEur et conversion [APP]

Chaque snapshot stocke deux balances :

  • balance — solde dans la devise native du compte
  • balanceEur — solde converti en EUR

En V1, balanceEur = balance pour tous les comptes (pas de conversion FX sur les snapshots). La conversion réelle est prévue en V2.

// V1 : balanceEur = balance (même valeur, pas de conversion)
balanceEur: data.balance
// TODO V2 : conversion FX si account.currency !== "EUR"

BR-SNAP-006 — Utilisation dans les graphiques [CALC]

Le graphique d'évolution du patrimoine (getDashboardData) utilise les snapshots de 12 derniers mois. L'algorithme forward-fill est appliqué :

  • Les snapshots sont groupés par jour et par compte.
  • Pour chaque jour, si un compte n'a pas de snapshot, le dernier solde connu est reconduit (lastKnown).
  • Le total journalier est la somme des derniers soldes connus de tous les comptes actifs.

Cela évite les trous dans le graphique quand un compte n'a pas de snapshot quotidien.


Voir aussi