v1.0 Novembre 2025
DOCUMENT 5.3

Schéma Technique
Flux Bancaire

La solution de cashback nouvelle génération

24 novembre 2025
Version 1.0
1

VUE D'ENSEMBLE

1.1 Objectif du Document

Ce document présente le schéma technique complet de l'intégration bancaire REWAPP. Il décrit l'architecture, les composants, les flux de données et les mécanismes de sécurité permettant la détection automatique des transactions bancaires et le crédit des points de cashback.

1.2 Contexte Fonctionnel

Le flux bancaire constitue le cœur technologique de REWAPP, permettant :

  • La liaison sécurisée des cartes bancaires via OpenBanking (PSD2)
  • La détection automatique des achats chez les partenaires
  • Le calcul et le crédit instantané des points de cashback
  • L'initiation des virements SEPA pour le cashback bancaire

1.3 Fournisseur OpenBanking Recommandé

BUDGET INSIGHT (POWENS)

Fournisseur recommandé pour l'intégration OpenBanking

  • Agrément ACPR (Autorité de Contrôle Prudentiel et de Résolution)
  • Couverture de plus de 350 banques françaises
  • SDK natif compatible Capacitor
  • Conformité PSD2 et RGPD
  • Webhooks temps réel pour détection des transactions

Alternatives supportées : Tink, Plaid

1.4 Prérequis Techniques

  • Infrastructure CapRover déployée (Docker Containers, PostgreSQL, Redis)
  • API Gateway Kong configuré
  • Services backend NestJS opérationnels
  • Certificats SSL/TLS 1.3 actifs
  • Contrat signé avec le fournisseur OpenBanking
2

ARCHITECTURE DU FLUX BANCAIRE

2.1 Vue d'Ensemble de l'Architecture

L'architecture du flux bancaire repose sur une approche microservices avec communication asynchrone via Bull Queue (Redis). Cette architecture garantit :

Scalabilité Horizontale pour pics de transactions
Découplage Entre services, maintenance simplifiée
Résilience Mécanismes de retry automatiques
Traçabilité Audit trail complet

2.2 Schéma d'Architecture Globale

Architecture Technique - Flux Bancaire REWAPP
3

COMPOSANTS DU SYSTÈME

3.1 Composants Internes

Composants Internes du Système

Composant Technologie Responsabilité SLA
API Gateway Traefik (CapRover) Routing, authentification JWT, rate limiting 99.99%
Banking Service NestJS + TypeScript Card linking, gestion tokens, virements SEPA 99.9%
Transaction Service NestJS + TypeScript Réception webhooks, matching commerçants, calcul cashback 99.9%
Points Service NestJS + TypeScript Gestion solde points, crédit/débit FIFO, paliers 99.9%
Merchant Service NestJS + TypeScript Base partenaires, taux cashback, matching 99.9%
Notification Service NestJS + TypeScript Push FCM, emails SendGrid, SMS Twilio 99.5%
Webhook Handler NestJS + TypeScript Validation signature, anti-replay, routage 99.99%
PostgreSQL RDS PostgreSQL 15+ Stockage persistant, transactions ACID 99.95%
Redis Cluster Redis Docker 7+ Cache, sessions, queues Bull 99.9%

3.2 Composants Externes

Services Externes Intégrés

Composant Fournisseur Fonction Intégration
OpenBanking Provider Budget Insight (Powens) Agrégation bancaire, webhooks transactions SDK + REST API
Banques Utilisateurs 350+ établissements Source des transactions, authentification SCA Via Budget Insight (PSD2)
Push Notifications Firebase Cloud Messaging Notifications temps réel iOS/Android SDK Firebase
Email Service SendGrid / Brevo Emails transactionnels API REST
SMS Service Twilio Alertes critiques, 2FA API REST

3.3 Description Détaillée du Banking Service

Le Banking Service est le composant central de l'intégration bancaire. Ses responsabilités incluent :

Liaison de Carte (Card Linking)

Gestion du flux OAuth2 avec Budget Insight
  • Initialisation du flux OAuth2 avec Budget Insight
  • Génération et gestion des sessions temporaires (TTL 10 min)
  • Stockage sécurisé des tokens (chiffrement AES-256-GCM)
  • Configuration des webhooks pour la connexion

Gestion des Tokens

Sécurisation et rotation des tokens d'accès
  • Rotation automatique des tokens avant expiration
  • Chiffrement au repos avec clés gérées via variables d'environnement CapRover
  • Révocation sur demande utilisateur

Virements SEPA

Initiation et suivi des virements bancaires
  • Validation de l'IBAN destinataire
  • Initiation des virements via API bancaire
  • Suivi du statut (pending → processing → completed)
4

DIAGRAMME D'ARCHITECTURE TECHNIQUE

4.1 Diagramme de Flux Principal

Schéma Technique - Flux Bancaire Complet
5

FLUX DE DONNÉES DÉTAILLÉS

5.1 Flux 1 : Liaison de Carte Bancaire

Ce flux est exécuté une seule fois par carte lors de l'onboarding ou depuis le profil utilisateur.

Étapes du Card Linking

Étape Source Destination Données Protocole
1.1App MobileAPI GatewayuserId, deviceIdHTTPS/TLS 1.3
1.2API GatewayBanking ServiceRequête routéeHTTP interne
1.3Banking ServiceRedissessionId, TTL 10minRedis Protocol
1.4Banking ServiceBudget InsightclientId, redirectUriHTTPS REST
1.5Budget InsightBanking ServiceauthUrl, stateTokenHTTPS REST
1.6App MobileSDK Budget InsightauthUrl, configSDK natif
1.7SDKBanqueIdentifiants utilisateurHTTPS OAuth2
1.8BanqueBudget Insightauthorization_codeOAuth2 callback
1.9Budget InsightApp MobileconnectionIdSDK callback
1.10App MobileBanking ServicesessionId, connectionIdHTTPS REST
1.11Banking ServicePostgreSQLbank_connections (chiffré)SQL/TLS

5.2 Flux 2 : Détection et Crédit de Points

Ce flux est déclenché automatiquement à chaque transaction détectée.

Étapes de Détection Transaction

Étape Source Destination Données Latence Max
2.1BanqueBudget InsightTransaction bruteVariable (1s-24h)
2.2Budget InsightWebhook HandlerWebhook payload<1s
2.3Webhook HandlerRedis QueueJob transaction.received<50ms
2.4Redis QueueTransaction ServiceJob consommé<100ms
2.5Transaction ServiceMerchant ServiceRequête matching<50ms
2.6Transaction ServicePoints ServiceRequête palier<50ms
2.7Transaction ServicePostgreSQLINSERT transaction<100ms
2.8Redis QueuePoints ServiceJob points.credit<100ms
2.9Points ServicePostgreSQLCredit points (ACID)<100ms
2.10Redis QueueNotification ServiceJob notification.send<100ms
2.11Notification ServiceFCMPush notification<500ms

5.3 Flux 3 : Demande de Virement Bancaire

Étapes du Virement SEPA

Étape Source Destination Données Délai
3.1App MobileBanking ServiceDemande (points, IBAN)Immédiat
3.2Banking ServicePoints ServiceVérification solde<100ms
3.3Banking ServicePoints ServiceBlocage points<100ms
3.4Banking ServicePostgreSQLINSERT withdrawal<100ms
3.5Banking ServiceBudget InsightInitiation paiement<1s
3.6Budget InsightBanqueOrdre SEPA2-3 semaines
3.7BanqueBudget InsightConfirmationVariable
3.8Budget InsightWebhook HandlerWebhook payment.completed<1s
3.9Banking ServiceNotification ServiceNotification succès<500ms
6

INTÉGRATION OPENBANKING

6.1 Architecture de l'Intégration Budget Insight

Architecture Intégration OpenBanking - Budget Insight

6.2 Endpoints Budget Insight Utilisés

API Endpoints Budget Insight

Endpoint Méthode Usage Fréquence
/auth/initPOSTInitialiser flux OAuth2À chaque card linking
/auth/tokenPOSTÉchanger code contre tokensÀ chaque card linking
/connectionsGETListe des connexions activesSelon besoin
/connections/{id}GETDétails d'une connexionAprès card linking
/connections/{id}DELETERévoquer une connexionSur demande utilisateur
/connections/{id}/renewPOSTRenouveler consentementTous les 90 jours
/transactionsGETSynchronisation manuelleSur demande
/webhooksPOSTEnregistrer webhookÀ chaque card linking
/payments/initiatePOSTInitier virement SEPAÀ chaque demande

6.3 Configuration des Webhooks

Événements Webhook

Événement Description Traitement REWAPP
transaction.createdNouvelle transaction détectéeMatching partenaire + crédit points
connection.syncedSynchronisation terminéeLog + mise à jour status
connection.expiredConsentement expiré (90j)Notification utilisateur
connection.errorErreur de connexionAlerte + retry
payment.completedVirement effectuéMise à jour status + notification
payment.failedÉchec virementDéblocage points + notification

6.4 Conformité PSD2

Directive PSD2 (Payment Services Directive 2) - Exigences respectées :

Exigences PSD2

Exigence PSD2 Implémentation REWAPP
SCA (Strong Customer Authentication)Authentification 2FA via la banque de l'utilisateur
Consentement expliciteÉcran de consentement clair avec durée (90 jours)
Accès limité (AIS)Lecture seule des transactions
Initiation de paiement (PIS)Via agrégateur agréé ACPR
Durée de consentement90 jours max, renouvellement automatique
RévocationPossible à tout moment via l'application
TraçabilitéAudit trail complet de tous les accès
7

GESTION DES WEBHOOKS

7.1 Architecture de Réception des Webhooks

1. Réception via Load Balancer

Budget Insight envoie POST /webhooks/banking, routé via ALB avec IP whitelisting

2
2. Vérification IP source

Whitelist des IPs Budget Insight autorisées

3
3. Vérification Signature HMAC-SHA256

Validation de l'authenticité du payload

4
4. Vérification Timestamp

Protection anti-replay : webhook doit être < 5 minutes

5
5. Routage vers Queue

Publication du job dans la queue Redis appropriée

7.2 Validation des Webhooks

7.2.1 Vérification de la Signature

La signature HMAC-SHA256 est calculée ainsi :

Pseudo-code
expected = HMAC-SHA256(
  key: webhook_secret,
  data: timestamp + "." + raw_body
)

if (expected !== header['X-Webhook-Signature']) {
  return HTTP 401 WEBHOOK_SIGNATURE_INVALID
}

7.2.2 Protection Anti-Replay

Pseudo-code
webhook_timestamp = header['X-Webhook-Timestamp']
current_timestamp = Date.now()

if (current_timestamp - webhook_timestamp > 300000) { // 5 minutes
  return HTTP 401 WEBHOOK_TIMESTAMP_EXPIRED
}

7.3 Format du Payload Webhook

7.3.1 Événement transaction.created

JSON
{
  "event": "transaction.created",
  "timestamp": "2025-11-24T14:30:00.000Z",
  "data": {
    "transaction_id": "txn_abc123xyz",
    "connection_id": "conn_user456",
    "account_id": "acc_789",
    "amount": 100.00,
    "currency": "EUR",
    "direction": "DEBIT",
    "date": "2025-11-24",
    "merchant": {
      "name": "RESTAURANT LE BISTROT",
      "mcc_code": "5812",
      "city": "PARIS",
      "country": "FR"
    }
  },
  "signature": "sha256=7d38cdd689735b008..."
}

7.3.2 Événement payment.completed

JSON
{
  "event": "payment.completed",
  "timestamp": "2025-11-24T15:45:00.000Z",
  "data": {
    "payment_id": "pay_xyz789",
    "withdrawal_id": "wd_abc123",
    "amount": 9.50,
    "currency": "EUR",
    "status": "COMPLETED",
    "reference": "REWAPP-WD-2025-11-24-001",
    "beneficiary_iban": "FR76****1234"
  }
}
8

SÉCURITÉ ET CONFORMITÉ

8.1 Mesures de Sécurité par Couche

Sécurité Multi-Couches

Couche Mesure Implémentation
RéseauTLS 1.3 obligatoireALB avec certificat ACM
RéseauIP Whitelisting webhooksFirewall CapRover / Traefik
API GatewayRate limiting1000 req/min auth, 100 req/min non-auth
API GatewayJWT validationRS256, expiration 15 min
ApplicationChiffrement tokensAES-256-GCM, clés variables CapRover
ApplicationSignature webhooksHMAC-SHA256
ApplicationProtection replayFenêtre 5 minutes
Base de donnéesChiffrement au reposRDS encryption AES-256
Base de donnéesChiffrement transitSSL/TLS
CacheChiffrement transitRedis TLS
AuditJournalisationCapRover Logs / Grafana, 90 jours

8.2 Données Sensibles et Protection

DONNÉES JAMAIS STOCKÉES PAR REWAPP
  • Identifiants bancaires (login/mot de passe banque)
  • Numéros de carte complets
  • Codes CVV/CVC
  • Codes PIN
  • Soldes bancaires complets

Données Stockées (Chiffrées AES-256)

Donnée Chiffrement Usage
Tokens Budget InsightAES-256-GCMAccès API OpenBanking
connectionIdAES-256-GCMRéférence connexion
4 derniers chiffres carteNon (non sensible)Affichage UX
Nom de la banqueNonAffichage UX
Transactions partenairesNonCalcul cashback

8.3 Conformité RGPD

Principes RGPD Appliqués

Principe RGPD Application REWAPP
LicéitéConsentement explicite (double : REWAPP + banque)
FinalitéDonnées utilisées exclusivement pour le cashback
MinimisationSeules les transactions partenaires conservées
ExactitudeSynchronisation régulière avec source bancaire
Limitation conservationTransactions : 3 ans, tokens : jusqu'à révocation
IntégritéChiffrement AES-256, audit trail
ConfidentialitéAccès restreint, principe du moindre privilège

8.4 Conformité PCI DSS

CONFORMITÉ ASSURÉE

REWAPP ne stocke aucune donnée de carte (numéro complet, CVV, date expiration). La conformité PCI DSS est assurée par le fournisseur OpenBanking (Budget Insight) qui est agréé ACPR.

9

GESTION DES ERREURS ET RÉSILIENCE

9.1 Stratégie de Retry

Configuration des Retry

Composant Tentatives Délais Action si Échec
Webhooks (réception)1-Log + alerte (pas de retry côté REWAPP)
Jobs Bull Queue31s, 2s, 4s (exponential backoff)Dead Letter Queue
Appels API externes31s, 2s, 4sErreur propagée
Transactions DB1-Rollback automatique

9.2 Dead Letter Queue (DLQ)

Les jobs échoués après 3 tentatives sont placés dans la DLQ pour analyse manuelle :

Queues DLQ

Queue DLQ Contenu Traitement
dlq:transactionsTransactions non traitablesAnalyse quotidienne
dlq:pointsCrédits points échouésTraitement manuel prioritaire
dlq:notificationsNotifications non envoyéesRetry manuel
dlq:withdrawalsVirements échouésInvestigation + contact utilisateur

9.3 Circuit Breaker

Protection contre les cascades de pannes :

Configuration Circuit Breakers

Service Seuil Ouverture Délai Recovery Action
Budget Insight API5 erreurs/10s30 secondesFallback: queue pour retry
Points Service10 erreurs/10s15 secondesErreur utilisateur
Notification Service20 erreurs/10s10 secondesSilencieux (non bloquant)

9.4 Codes d'Erreur Bancaires

Codes d'Erreur

Code HTTP Description Retry Action Utilisateur
BANK_CARD_LINKING_FAILED400Liaison carte échouéeNonRéessayer
BANK_CARD_ALREADY_LINKED409Carte déjà liéeNonUtiliser carte existante
BANK_CONNECTION_EXPIRED401Consentement expiré (90j)NonReconnecter
BANK_PROVIDER_UNAVAILABLE503Budget Insight indisponibleOuiRéessayer plus tard
BANK_IBAN_INVALID400IBAN invalideNonCorriger IBAN
BANK_WITHDRAWAL_MINIMUM400Solde < 100 pointsNonAccumuler plus de points
BANK_WITHDRAWAL_PENDING409Virement déjà en coursNonAttendre fin traitement
WEBHOOK_SIGNATURE_INVALID401Signature webhook invalideNonLog sécurité
WEBHOOK_TIMESTAMP_EXPIRED401Webhook trop ancienNonLog (replay attack)
10

MONITORING ET OBSERVABILITÉ

10.1 Métriques Clés (Prometheus / Grafana)

Métriques et Seuils d'Alerte

Métrique Seuil Normal Alerte Warning Alerte Critique
Webhooks reçus/min50-500<10 pendant 5 min<1 pendant 10 min
Latence webhook handler<100ms>200ms>500ms
Taux matching partenaire>80%<70%<50%
Jobs DLQ0>10>100
Erreurs Banking Service<1%>2%>5%
Tokens expirés non renouvelés0>10>100
Virements en échec<1%>2%>5%

10.2 Alertes Configurées

Canaux d'Alertes

Canal Type Alerte Destinataires
Slack #alerts-criticalService down, DLQ >100, SécuritéÉquipe on-call
Slack #alerts-warningLatence élevée, Taux matching basÉquipe dev
PagerDutyIndisponibilité >2 minLead technique
Email quotidienRapport anomaliesÉquipe complète

10.3 Logs et Traces

Configuration des Logs

Type Outil Rétention Contenu
Logs applicatifsCapRover Logs / Loki30 joursErreurs, warnings, info
Audit trailCapRover Logs / Loki90 joursActions sensibles, accès données
Traces distribuéesJaeger30 joursLatence inter-services
MétriquesPrometheus / Grafana15 moisKPIs techniques

10.4 Dashboard de Supervision

Tableaux de bord Grafana configurés :

  • Banking Overview : Webhooks/min, latence, erreurs
  • Card Linking : Taux succès liaison, durée moyenne, abandons
  • Transactions : Volume détecté, taux matching, points crédités
  • Withdrawals : Demandes/jour, statuts, délais moyens
  • Security : Tentatives invalides, IP suspectes, alertes
11

RÉCAPITULATIF

11.1 Points Clés de l'Architecture

SÉCURITÉ MAXIMALE

Chiffrement bout-en-bout, tokens jamais exposés, conformité PSD2/RGPD

HAUTE DISPONIBILITÉ

Architecture multi-AZ, circuit breakers, retry automatique

SCALABILITÉ

Microservices stateless, queues asynchrones, auto-scaling

TRAÇABILITÉ

Audit trail complet, logs centralisés, métriques temps réel

RÉSILIENCE

Dead Letter Queue, retry exponential backoff, monitoring proactif

11.2 Composants Critiques

Criticité des Composants

Composant Criticité Backup RTO
Webhook HandlerCRITIQUEMulti-instance ECS<1 min
Banking ServiceCRITIQUEMulti-instance ECS<1 min
PostgreSQLCRITIQUEMulti-AZ, snapshots<5 min
Redis ClusterHAUTERéplication<2 min
Budget InsightEXTERNEN/A (dépendance)N/A

11.3 Checklist d'Implémentation

  • Contrat Budget Insight signé (agrément ACPR)
  • Clés API et secrets configurés (variables CapRover)
  • Webhook Handler déployé avec IP whitelisting
  • Banking Service avec chiffrement AES-256
  • Queues Bull configurées (transactions, points, notifications, withdrawals)
  • Circuit breakers configurés
  • Monitoring Prometheus/Grafana actif
  • Alertes Slack/PagerDuty configurées
  • Tests de bout en bout validés (sandbox Budget Insight)
  • Documentation API interne à jour

11.4 Références Documentaires

Documents Connexes

Document Contenu Lié
1.4 Règles Métier de FidélitéCalcul points, paliers, validité
4.3 Architecture Backend APIServices, endpoints, communication
5.2.2 Liaison Carte BancaireDiagramme séquence card linking
5.2.3 Détection TransactionDiagramme séquence détection
6.1 Document de SécuritéMesures de sécurité globales
6.4 Conformité PCI DSSExigences bancaires
7.3 Intégration Solution BancaireConfiguration détaillée

— Fin du Document —
Document rédigé conformément au Guide de Rédaction REWAPP v1.0
Source de vérité : Section 1 - Documents de Cadrage