Document 5.2
Diagrammes de Séquence
La solution de cashback nouvelle génération
1
INTRODUCTION
1.1 Objectif du Document
Ce document présente les diagrammes de séquence des principaux flux métier de l'application REWAPP. Ces diagrammes décrivent les interactions temporelles entre les différents composants du système pour chaque processus critique.
1.2 Portée
Les diagrammes couvrent les cinq flux fondamentaux :
- Inscription d'un nouveau client
- Liaison de carte bancaire via OpenBanking
- Détection automatique des transactions et crédit de points
- Génération de QR code pour paiement commerçant
- Scan du QR code et débit des points
1.3 Public Cible
- Équipe de développement
- Architectes techniques
- Équipe QA pour validation des scénarios
- Product Owners pour compréhension des flux
2
CONVENTIONS ET NOTATION
2.1 Notation PlantUML
Tous les diagrammes de ce document utilisent la notation PlantUML standard pour les diagrammes de séquence.
2.2 Symboles Utilisés
Légende des symboles
| Symbole | Signification |
|---|---|
actor | Utilisateur humain (Client, Partenaire, Admin) |
participant | Composant système (Service, API, Base de données) |
-> | Message synchrone |
--> | Réponse |
alt/else | Cas alternatifs |
opt | Bloc optionnel |
loop | Boucle |
note | Annotation explicative |
2.3 Conventions de Nommage
Acteurs et Composants
| Acteur/Composant | Description |
|---|---|
| Client | Utilisateur final de l'application mobile |
| Partenaire | Commerçant utilisant le dashboard partenaire |
| App Mobile | Application Angular + Ionic iOS/Android |
| API Gateway | Point d'entrée Kong/AWS API Gateway |
| Auth Service | Service NestJS d'authentification |
| User Service | Service de gestion des utilisateurs |
| Banking Service | Service d'intégration OpenBanking (Budget Insight) |
| Transaction Service | Service de gestion des transactions |
| Points Service | Service de gestion des points de fidélité |
| QR Service | Service de génération et validation QR codes |
| Notification Service | Service d'envoi de notifications (FCM) |
| PostgreSQL | Base de données principale |
| Redis | Cache et gestion des sessions |
3
DIAGRAMME 5.2.1 - INSCRIPTION CLIENT
3.1 Acteurs et Composants
Participants au flux
| Acteur/Composant | Rôle |
|---|---|
| Client | Nouvel utilisateur souhaitant s'inscrire |
| App Mobile | Interface de saisie des informations |
| API Gateway | Validation et routage des requêtes |
| Auth Service | Gestion authentification et création compte |
| User Service | Persistance des données utilisateur |
| PostgreSQL | Stockage des informations |
| Redis | Gestion des sessions et tokens |
| Notification Service | Envoi email de bienvenue |
3.2 Flux Nominal (PlantUML)
Diagramme de Séquence - Inscription Client
PlantUML
@startuml
skinparam backgroundColor #FFFFFF
skinparam handwritten false
skinparam sequenceArrowThickness 2
skinparam roundcorner 10
skinparam sequenceParticipant underline
skinparam participant {
BackgroundColor #E8F5E9
BorderColor #4CAF50
}
skinparam database {
BackgroundColor #FFF3E0
BorderColor #FF9800
}
skinparam actor {
BackgroundColor #E3F2FD
BorderColor #2196F3
}
title Inscription Client - REWAPP
actor "Client" as C #LightBlue
participant "App Mobile" as APP #LightGreen
participant "API Gateway" as GW #Orange
participant "Auth Service" as AUTH #Yellow
participant "User Service" as USER #LightCyan
database "PostgreSQL" as DB #Pink
database "Redis" as REDIS #LightGray
participant "Notification" as NOTIF #Plum
== Saisie des Informations ==
C -> APP : Ouvre ecran inscription
APP -> C : Affiche formulaire
C -> APP : Saisit informations + CGU
== Validation ==
APP -> APP : Validation locale
== Envoi Backend ==
APP -> GW : POST /api/v1/auth/register
GW -> GW : Rate limiting check
GW -> AUTH : Route vers Auth Service
== Verification Unicite ==
AUTH -> USER : Verifie email existant
USER -> DB : SELECT FROM users
DB --> USER : Resultat
USER --> AUTH : Email disponible
alt #LightGreen Email disponible
AUTH -> AUTH : Hash password Bcrypt
AUTH -> USER : Creer utilisateur
USER -> DB : INSERT INTO users
DB --> USER : User cree
USER --> AUTH : User cree
AUTH -> AUTH : Genere JWT Access Token
AUTH -> AUTH : Genere Refresh Token
AUTH -> REDIS : Stocke refresh token
REDIS --> AUTH : OK
AUTH --> GW : 201 Created
GW --> APP : Reponse succes
APP -> APP : Stocke tokens
APP --> C : Ecran bienvenue
AUTH ->> NOTIF : Email bienvenue
NOTIF ->> C : Email Bienvenue REWAPP
else #Pink Email deja utilise
AUTH --> GW : 409 Conflict
GW --> APP : Erreur 409
APP --> C : Email deja utilise
end
@enduml
3.3 Cas Alternatifs et Erreurs
Gestion des erreurs
| Code Erreur | Condition | Message Utilisateur | Action |
|---|---|---|---|
| 400 | Format email invalide | "Adresse email invalide" | Correction formulaire |
| 400 | MDP < 8 caractères | "Mot de passe trop faible (min. 8 caractères)" | Saisir MDP plus fort |
| 409 | Email déjà enregistré | "Cette adresse email est déjà utilisée" | Connexion ou récupération MDP |
| 429 | Rate limit atteint | "Trop de tentatives, réessayez dans 5 min" | Attendre |
| 500 | Erreur interne | "Une erreur est survenue, réessayez" | Retry avec backoff |
3.4 Règles de Validation
- Email : format RFC 5322, domaines jetables bloqués
- Mot de passe : minimum 8 caractères, 1 majuscule, 1 chiffre
- Nom/Prénom : 2-50 caractères, lettres et accents uniquement
- CGU : acceptation obligatoire (checkbox)
- Âge minimum : 18 ans (date de naissance optionnelle)
4
DIAGRAMME 5.2.2 - LIAISON CARTE BANCAIRE
4.1 Acteurs et Composants
Participants au flux OpenBanking
| Acteur/Composant | Rôle |
|---|---|
| Client | Utilisateur souhaitant lier sa carte |
| App Mobile | Interface d'initiation |
| API Gateway | Routage sécurisé |
| Banking Service | Orchestration flux OpenBanking |
| Budget Insight API | Fournisseur OpenBanking (agrégateur) |
| Banque Client | Établissement bancaire de l'utilisateur |
| PostgreSQL | Stockage tokens chiffrés |
| Notification Service | Confirmation liaison |
4.2 Flux Nominal (PlantUML)
Liaison Carte Bancaire
4.3 Cas Alternatifs et Erreurs
Scénarios d'erreur OpenBanking
| Scénario | Code | Description | Action |
|---|---|---|---|
| Auth banque échouée | 401 | Identifiants bancaires incorrects | Réessayer avec bons identifiants |
| Consentement refusé | 403 | Client refuse l'autorisation | Expliquer les bénéfices, reproposer |
| Banque non supportée | 422 | Établissement non couvert | Afficher liste banques compatibles |
| Session expirée | 408 | Timeout WebView (5 min) | Relancer le processus |
| Token invalide | 502 | Erreur côté Budget Insight | Support + retry automatique |
| Connexion déjà active | 409 | Carte déjà liée | Proposer déliaison/remplacement |
4.4 Conformité et Sécurité
EXIGENCES RÉGLEMENTAIRES
- PSD2 : Consentement explicite obligatoire, durée max 90 jours
- RGPD : Données bancaires non stockées, uniquement tokens
- Chiffrement : Tokens AES-256, clés en AWS KMS
- Révocation : Client peut révoquer à tout moment depuis l'app
- Renouvellement : Refresh automatique avant expiration
5
DIAGRAMME 5.2.3 - DÉTECTION TRANSACTION
5.1 Acteurs et Composants
Participants au flux de détection
| Acteur/Composant | Rôle |
|---|---|
| Budget Insight | Émetteur des webhooks transactions |
| Webhook Handler | Réception et validation des webhooks |
| Transaction Service | Traitement et enrichissement |
| Points Service | Calcul et crédit des points |
| Partner Service | Vérification éligibilité partenaire |
| Notification Service | Notification utilisateur |
| Redis | Cache taux cashback partenaires |
| Bull Queue | File d'attente traitement async |
5.2 Flux Nominal (PlantUML)
Detection Transactions
5.3 Règles de Calcul des Points
RÈGLE FONDAMENTALE
1 point = 0,10€ — Points = Cashback ÷ 0.10
Paramètres de calcul
| Paramètre | Valeur | Formule |
|---|---|---|
| Ratio de base | 1 point = 0,10€ | points = cashback ÷ 0.10 |
| Taux commerçant | Variable (2-10%) | cashback = montant × taux |
| Bonus Bronze | +0% | cashback × 1.00 |
| Bonus Silver | +5% | cashback × 1.05 |
| Bonus Gold | +10% | cashback × 1.10 |
| Bonus Platine | +15% | cashback × 1.15 |
| Bonus Diamant | +20% | cashback × 1.20 |
| Arrondi | Inférieur | floor(points) |
| Expiration | 12 mois | date_credit + 365 jours |
5.4 Cas d'Erreur et Retry
Stratégie de retry
| Erreur | Action | Retry | Délai |
|---|---|---|---|
| Webhook invalide | Log + ignore | Non | - |
| Partenaire inconnu | Stocke en pending | Oui (1x) | 24h |
| Erreur DB | Retry automatique | Oui (3x) | Backoff exponentiel |
| Points Service down | Requeue | Oui (5x) | 1min, 5min, 15min, 1h, 6h |
6
DIAGRAMME 5.2.4 - GÉNÉRATION QR CODE
6.1 Acteurs et Composants
Participants au flux QR
| Acteur/Composant | Rôle |
|---|---|
| Client | Utilisateur générant le QR code |
| App Mobile | Interface de génération |
| API Gateway | Validation requête |
| QR Service | Génération et signature du QR code |
| Points Service | Vérification et blocage des points |
| Redis | Stockage temporaire QR code (60s TTL) |
6.2 Flux Nominal (PlantUML)
Generation QR Code
6.3 Structure du QR Code
Payload JSON du QR Code
| Champ | Type | Description |
|---|---|---|
qr_id | UUID v4 | Identifiant unique du QR code |
user_id | String (chiffré) | ID utilisateur (AES-256) |
points | Integer | Nombre de points |
value | Decimal | Valeur en euros (points × 0,105) |
created_at | Timestamp | Date/heure génération |
expires_at | Timestamp | Date/heure expiration (+60s) |
signature | String | HMAC-SHA256 du payload |
6.4 Comportement Visuel du Compteur
Animation du compteur
| Temps Restant | Couleur | Animation |
|---|---|---|
| 60s - 31s | ● Vert (#22C55E) | Statique |
| 30s - 11s | ● Orange (#F59E0B) | Clignotement lent |
| 10s - 0s | ● Rouge (#EF4444) | Clignotement rapide + vibration |
IMPORTANT
QR Code valide 60 secondes, usage UNIQUE. À l'expiration, les points sont automatiquement débloqués.
6.5 Cas d'Erreur
Gestion des erreurs QR
| Code | Erreur | Message | Solution |
|---|---|---|---|
| 400 | INSUFFICIENT_BALANCE | "Solde insuffisant" | Réduire montant |
| 400 | BELOW_MINIMUM | "Minimum 10 points requis" | Augmenter montant |
| 409 | QR_ALREADY_ACTIVE | "Un QR code est déjà actif" | Attendre expiration |
| 429 | RATE_LIMITED | "Trop de QR générés" | Attendre 1 minute |
| 500 | GENERATION_ERROR | "Erreur de génération" | Réessayer |
7
DIAGRAMME 5.2.5 - SCAN QR ET DÉBIT POINTS
7.1 Acteurs et Composants
Participants au flux de scan
| Acteur/Composant | Rôle |
|---|---|
| Partenaire | Commerçant effectuant le scan |
| Client | Utilisateur dont les points sont débités |
| Dashboard Partenaire | Interface PWA de scan |
| API Gateway | Routage et authentification |
| QR Service | Validation et décodage QR |
| Points Service | Débit effectif des points |
| Transaction Service | Enregistrement transaction |
| Notification Service | Notification client et partenaire |
7.2 Flux Nominal (PlantUML)
Scan QR et Debit Points
7.3 Codes de Réponse
Codes HTTP de validation
| Code HTTP | Code Erreur | Description | Action Partenaire |
|---|---|---|---|
| 200 | SUCCESS | Paiement validé | Confirmer au client |
| 400 | INVALID_SIGNATURE | QR falsifié/corrompu | Refuser, demander nouveau QR |
| 400 | INVALID_FORMAT | Format QR incorrect | Vérifier scan correct |
| 400 | BALANCE_CHANGED | Solde client insuffisant | Demander autre moyen paiement |
| 409 | QR_ALREADY_USED | Double scan | Informer client (déjà débité) |
| 410 | QR_EXPIRED | Délai 60s dépassé | Demander génération nouveau QR |
| 403 | PARTNER_MISMATCH | Mauvais partenaire | QR pour autre commerce |
| 500 | PROCESSING_ERROR | Erreur système | Réessayer ou support |
7.4 Logs et Traçabilité
Toutes les tentatives de scan sont enregistrées :
qr_id: Identifiant du QR codepartner_id: Commerçant ayant scannétimestamp: Date/heure exacteresult: SUCCESS / ERROR + codeip_address: IP du dashboarddevice_info: Infos appareil scan
8
RÉCAPITULATIF DES FLUX
8.1 Vue d'Ensemble
Synthèse des 5 flux
| Flux | Déclencheur | Acteur Principal | Durée Typique | Criticité |
|---|---|---|---|---|
| Inscription | Action utilisateur | Client | 30-60 secondes | Haute |
| Liaison carte | Action utilisateur | Client | 2-5 minutes | Critique |
| Détection transaction | Webhook automatique | Système | 5-30 secondes | Haute |
| Génération QR | Action utilisateur | Client | < 2 secondes | Haute |
| Scan QR | Action partenaire | Partenaire | < 3 secondes | Critique |
8.2 Dépendances entre Flux
Pré-requis et post-conditions
| Flux | Pré-requis | Post-condition |
|---|---|---|
| Inscription | Aucun | Compte créé, accès app |
| Liaison carte | Inscription | Détection transactions activée |
| Détection transaction | Liaison carte + Achat partenaire | Points crédités |
| Génération QR | Points disponibles (min 10) | QR actif 60s, points bloqués |
| Scan QR | QR valide + non expiré | Points débités, transaction enregistrée |
8.3 Points de Sécurité Critiques
⚠️ POINTS D'ATTENTION SÉCURITÉ
- Rate limiting sur tous les endpoints sensibles
- Validation signature HMAC-SHA256 pour webhooks et QR codes
- Chiffrement AES-256 pour tokens bancaires
- JWT RS256 avec rotation des clés
- Audit logs sur toutes les transactions financières
- Anti-replay avec vérification timestamp (±5 min)
8.4 Métriques de Performance Cibles
< 200ms
Temps réponse API (p95)
> 99%
Taux succès scan QR
< 30s
Délai crédit points
99.9%
Disponibilité globale
Seuils d'alerte
| Métrique | Objectif | Seuil Alerte |
|---|---|---|
| Temps réponse API | < 200ms (p95) | > 500ms |
| Taux de succès scan QR | > 99% | < 95% |
| Délai crédit points | < 30 secondes | > 2 minutes |
| Disponibilité globale | 99.9% | < 99.5% |