Skip to main content

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