Aller au contenu principal

ADR-002 — CSV-first, Nordigen repoussé en V2

Date : 2026-04-16 · Statut : Accepté · Décideurs : Clement Molotkoff

Contexte

Le cahier des charges initial (EB.md) prévoyait GoCardless / Nordigen (Open Banking) comme mécanisme principal d'ingestion bancaire en V1, avec le CSV en fallback. Après analyse, cette priorité s'inverse.

Problèmes identifiés avec Nordigen en V1

  1. Fenêtre glissante de 90 jours — L'API limite l'accès aux transactions à 90 jours, avec renouvellement manuel du consentement. Inadapté à un suivi patrimonial long terme.
  2. Compte business requis — GoCardless exige un compte business même pour un usage personnel. Démarche administrative non triviale pour un projet privé.
  3. OAuth bancaire complexe — Surface d'erreur élevée (sessions à renouveler, erreurs d'API bancaires externes, consentements révoqués).
  4. Valeur métier équivalente — L'import CSV couvre le même périmètre (transactions, soldes) avec une complexité bien moindre.
  5. Schéma sans code mort — Ajouter nordigenId, nordigenAccountId, lastSyncedAt au schéma Prisma en V1 = colonnes inutilisées. Elles seront introduites via migration lors du passage en V2.

Options considérées

Option A — CSV-first en V1, Nordigen V2 (retenu)

  • Pour : livraison rapide de la valeur métier, schéma propre, zéro dépendance externe
  • Contre : import manuel (export CSV depuis chaque banque), pas de sync automatique

Option B — Nordigen dès V1, CSV en fallback

  • Pour : sync automatique
  • Contre : les 5 problèmes ci-dessus, retarde la V1 de plusieurs semaines

Option C — Scraping headless des interfaces bancaires

  • Pour : pas de dépendance à un service externe
  • Contre : fragile, probablement contre les CGU, maintenance élevée

Décision

CSV-first en V1 pour trois banques cibles : BoursoBank, Revolut, Trade Republic.

Nordigen = V2. La migration Prisma correspondante sera créée au moment de l'implémentation, pas avant.

Conséquences

Positives

  • Schéma Prisma propre, sans champs inutilisés
  • Livraison V1 accélérée
  • Aucune dépendance externe payante ou OAuth en V1

Risques acceptés

  • Import manuel périodique (acceptable pour un usage perso)
  • Parseurs CSV à maintenir si les banques changent de format (rare, signalé par un import qui échoue)
  • Dédoublonnage critique : SHA256 hash sur les champs signifiants pour des imports successifs sans doublons

Règles dérivées

  • Interdit (CLAUDE.md) : champs Nordigen dans le schéma Prisma avant V2
  • UX d'import à soigner : prévisualisation, correction manuelle, feedback d'import
  • Parseurs dans src/lib/parsers/ avec signature commune (voir CSV parsers)

Révision

Cette décision serait à remettre en question si :

  • GoCardless assouplit la fenêtre 90 jours ou supprime l'exigence business
  • L'utilisateur demande une sync temps réel multi-banques (cas d'usage différent)
  • Un autre agrégateur (Tink, Plaid EU) propose des conditions adaptées