v1.0 Novembre 2025
2.1

Spécifications App Mobile

La solution de cashback nouvelle génération

24 novembre 2025
Version 1.0
iOS & Android
1

VUE D'ENSEMBLE

1.1Objectif de l'Application

L'application mobile REWAPP permet aux utilisateurs de bénéficier automatiquement de cashback lors de leurs achats chez les commerçants partenaires, de gérer leurs points de fidélité et de les convertir en virement bancaire ou en paiement chez les partenaires via QR code.

1.2Plateformes Supportées

Compatibilité

Plateforme Version Minimum Technologie
iOS iOS 14+ Angular + Ionic (Capacitor)
Android Android 10+ Angular + Ionic (Capacitor)

1.3Fonctionnalités Principales

  • Authentification sécurisée (email, social login, 2FA TOTP)
  • Liaison de compte OpenBanking pour la détection automatique des transactions
  • Dashboard avec solde de points et palier de fidélité
  • Génération de QR code pour paiement commerçant (15 minutes, usage unique)
  • Demande de virement bancaire (minimum 10€)
  • Historique complet des transactions
  • Recherche et localisation de partenaires
  • Notifications push
  • Gestion du profil et des paramètres

1.4Règles Métier Fondamentales

RÈGLE FONDAMENTALE

1 point = 0,20€

Ratios de Conversion

Type de Conversion Ratio Calcul
Cashback Bancaire 10 pts = 2,00€ Points × 0,200
Cashback Commerçant 10 pts = 2,00€ Points × 0,200
Stratégie

Ratio identique partout (100 points = 20€). Le cashback bancaire est crédité sur le compte REWAPP, puis l'utilisateur peut demander un virement (min. 10€).

2

MODULE D'AUTHENTIFICATION

2.1Écran de Bienvenue (Onboarding)

Éléments Visuels

Premier lancement uniquement
  • Logo REWAPP centré
  • Slider de 3-4 écrans présentant les avantages :
Écran 1Gagnez des points automatiquement
Écran 2Double cashback : bancaire + commerçant
Écran 3Virement asynchrone via Stripe (cf. cycle cashback PENDING / AVAILABLE)
Écran 4100% gratuit, sans frais
  • Bouton "Créer un compte" (primaire)
  • Lien "J'ai déjà un compte" (secondaire)
  • Indicateurs de pagination (dots)

Comportement

  • Affiché uniquement au premier lancement
  • Peut être passé via bouton "Passer" (coin supérieur droit)
  • Mémorisé pour ne plus afficher (Ionic Storage)
  • Swipe gauche/droite pour navigation

2.2Inscription

2.2.1 Inscription Email/Mot de Passe

Champs du Formulaire

Champ Type Obligatoire Validation
Prénom Texte 2-50 caractères, lettres uniquement
Nom Texte 2-50 caractères, lettres uniquement
Email Email Format email valide (RFC 5322)
Mot de passe Password 8+ caractères, maj+min+chiffre
Confirmation MDP Password Identique au MDP
CGU Checkbox Doit être coché
Validation Mot de Passe
  • Minimum 8 caractères
  • Au moins 1 majuscule (A-Z)
  • Au moins 1 minuscule (a-z)
  • Au moins 1 chiffre (0-9)
Faible< 8 caractères ou manque critère
Moyen8-12 caractères, tous critères
Fort12+ caractères + spécial
Processus d'Inscription
  1. 1

    Remplissage du formulaire

    Validation temps réel des champs

  2. 2

    Validation côté client

    Champs obligatoires et formats

  3. 3

    Envoi au backend

    POST /api/auth/register

  4. 4

    Vérification unicité email

  5. 5

    Création du compte

    Statut : non vérifié

  6. 6

    Envoi email de validation

    Lien valable 24h

  7. 7

    Écran "Vérifiez votre email"

  8. 8

    Redirection vers l'accueil / dashboard

    La liaison OpenBanking est proposée plus tard via le profil

Messages d'Erreur
  • "Cette adresse email est déjà utilisée"
  • "Format d'adresse email invalide"
  • "Les mots de passe ne correspondent pas"
  • "Mot de passe trop faible. Ajoutez une majuscule, un chiffre..."
  • "Vous devez accepter les Conditions Générales d'Utilisation"
  • "Une erreur est survenue. Veuillez réessayer."

2.2.2 Inscription via Google

  1. 1

    Clic sur "Continuer avec Google"

  2. 2

    Redirection OAuth2 Google

    Popup native

  3. 3

    Authentification utilisateur

  4. 4

    Récupération données

    Email, prénom, nom, photo profil

  5. 5

    Vérification compte existant

  6. 6

    Création automatique

    Pas de validation email nécessaire

  7. 7

    Acceptation CGU

    Popup interstitiel

  8. 8

    Redirection vers l'accueil / dashboard

    Pas de redirection obligatoire vers OpenBanking

2.2.3 Inscription via Apple (iOS uniquement)

  • Clic sur "Continuer avec Apple"
  • Sign In with Apple (popup native iOS)
  • Option "Masquer mon email" supportée (relay Apple)
  • Si prénom/nom vides → Écran complémentaire pour saisie

2.3Connexion

2.3.1 Connexion Email/Mot de Passe

Champs de Connexion

  • Email (obligatoire, clavier email)
  • Mot de passe (obligatoire, masqué avec icône œil)
  • Checkbox "Se souvenir de moi" (optionnel)
  • Lien "Mot de passe oublié ?"
Processus de Connexion
  1. 1

    Saisie identifiants

  2. 2

    Validation format côté client

  3. 3

    Envoi backend

    POST /api/auth/login

  4. 4

    Vérification identifiants

  5. 5

    Génération tokens

    JWT access (15 min) + refresh (30 jours)

  6. 6

    Stockage sécurisé

    Keychain iOS / Keystore Android

  7. 8

    Redirection dashboard

Messages d'Erreur
  • "Email ou mot de passe incorrect" (générique pour sécurité)
  • "Compte non activé. Vérifiez votre email."
  • "Compte suspendu. Contactez le support."
  • "Trop de tentatives. Réessayez dans 15 minutes." (après 5 échecs)
Prérequis

Disponible uniquement après une première connexion email/mot de passe réussie

iOSNon implémenté
AndroidNon implémenté

2.3.3 Mot de Passe Oublié

  1. 1

    Clic sur "Mot de passe oublié ?"

  2. 2

    Écran avec champ email

  3. 3

    Saisie de l'email

  4. 4

    Envoi backend

    POST /api/auth/forgot-password

  5. 5

    Message neutre

    "Si un compte existe avec cet email..."

  6. 6

    Email envoyé

    Lien valable 1h, usage unique

  7. 7

    Nouveau mot de passe

  8. 8

    Redirection connexion

3

LIAISON COMPTE OPENBANKING

3.1Onboarding Première Liaison

Après inscription, l'utilisateur est guidé pour lier son premier compte OpenBanking.

Écran d'Explication

Liez votre carte pour gagner des points
  • Détection automatique des achats partenaires
  • Sécurité bancaire maximale (agrément ACPR)
  • Aucun paiement depuis l'application
  • Compatible toutes banques françaises

Bouton "Lier mon compte OpenBanking" (primaire) + Lien "Plus tard" (skip)

Comportement "Plus tard"

Badge rappel sur icône profil • Popup rappel après 3 et 7 jours • Fonctionnalités limitées sans compte OpenBanking

Intégration SDK Solution Bancaire

Fournisseur recommandé : Plaid

  1. 1

    Clic sur "Lier mon compte OpenBanking"

  2. 2

    Lancement du SDK natif

  3. 3

    Sélection de banque

    Recherche + liste

  4. 4

    Authentification bancaire sécurisée

  5. 5

    Validation 2FA

    SMS, app bancaire

  6. 6

    Sélection des comptes

  7. 7

    Consentement

    Durée 90 jours renouvelable

  8. 8

    Confirmation

    "Compte OpenBanking lié avec succès !"

Erreurs possibles
  • "Authentification bancaire échouée"
  • "Banque temporairement indisponible"
  • "Consentement refusé"
  • "Session expirée, veuillez réessayer"

3.2Gestion des Comptes OpenBanking

Accès : Profil → Comptes OpenBanking

Liste des Comptes Liés

Affichage par Carte

  • Logo de la banque (récupéré via API)
  • Nom de la banque (ex: "Crédit Agricole")
  • 4 derniers chiffres (ex: •••• 1234)
  • Badge Principal si compte par défaut
  • Date de liaison
  • Statut : 🟢 Active ou 🟠 Reconnexion requise

Actions du Menu

  • "Définir comme principale"
  • "Voir les transactions"
  • "Reconnecter" (si statut orange)
  • "Supprimer le compte"

Suppression d'une Carte

Avertissement Dernière Carte

Si c'est le dernier/unique compte : popup spécial "Sans compte OpenBanking lié, vous ne pourrez plus gagner de points chez nos partenaires."

4

DASHBOARD PRINCIPAL

4.1Structure de l'Écran

Header

  • Logo REWAPP (petit, coin gauche, cliquable → scroll top)
  • Barre de recherche condensée (icône loupe)
  • Icône notifications (🔔) avec badge rouge si non lues
  • Photo de profil ronde (coin droit, cliquable → profil)

Section Solde (Card principale)

Éléments du Solde

Élément Description Exemple
Solde en euros Montant total disponible (grande police) 250,00€
Équivalence en points Calcul automatique (€ / 0,20€) 1 250 pts
Montant bloqué Si demande virement en cours (🔒) 20,00€ bloqués
Points expirant Alerte si expiration < 30 jours (⚠️) 50 pts expirent le 15/12

Section Palier de Fidélité

Paliers

Palier Bonus Icône Couleur
Bronze 1% bancaire 🥉 #CD7F32
Silver 2% bancaire 🥈 #C0C0C0
Gold 3% bancaire 🥇 #FFD700
Diamant 5% bancaire 💎 #4169E1
Diamant 5% bancaire (taux par défaut — configurable) 💠 #9400D3

Actions Rapides

Générer QR
Virement
Partenaires

Section Dernières Transactions

Titre : "Dernières transactions" + lien "Voir tout →"

Liste scrollable verticale (5 dernières) avec logo partenaire, nom, date (format relatif), et points gagnés.

4.2Comportements

  • Pull-to-refresh : Actualisation complète (solde, transactions, palier)
  • Animation de loading : Skeleton screens pendant chargement
  • Animation crédit points : Confetti + son lors nouveau gain
  • Real-time : WebSocket pour mise à jour instantanée après scan QR
  • Deep linking : Retour au dashboard après actions externes
5

GÉNÉRATION DE QR CODE

5.1Écran de Saisie

Payer avec mes points

Header de l'écran
  • Solde disponible affiché en euros (ex: "250,00€ disponibles") et en points (ex: "1 250 pts")
  • Input numérique central avec clavier numérique natif — l'utilisateur saisit en euros
  • L'utilisateur saisit le montant en euros — affichage en temps réel en points : 10€ → 50 pts
  • Suggestions rapides (chips en euros) : 5€, 10€, 20€, 50€, Max
  • Bouton "Générer le QR Code"

Validations

Règle Condition Message d'Erreur
Montant minimum ≥ 10€ "Montant minimum : 10€"
Montant maximum ≤ solde disponible "Solde insuffisant (XXX€ disponibles)"
Format Nombre décimal (2 décimales max) "Veuillez saisir un montant valide"

5.2Écran QR Code

ÉCRAN PLEIN

Mode immersif, impossible de quitter sans action volontaire

Affichage QR Code

  • QR code centré, grande taille (70% largeur écran)
  • Luminosité écran automatiquement au maximum
  • Fond blanc pur pour meilleur contraste scan
  • Montant en euros affiché au-dessus du QR (ex: "20,00€")
  • Équivalence en points affichée en dessous (ex: "100 pts")
  • Compteur à rebours circulaire : 15 minutes
60-20sVert
20-10sOrange
10-0sRouge clignotant

Sécurité du QR Code

Contenu encodé (JSON signé) :

  • ID utilisateur (hashé)
  • Montant en euros
  • Timestamp de génération
  • Nonce unique
  • Signature HMAC-SHA256
PROTECTIONS

Usage UNIQUE (rejet si déjà scanné) • Validité 15 minutes exactement • Vérification signature côté backend • Blocage si screenshot détecté (optionnel)

Expiration (après 15 minutes)

  1. 1

    Compteur atteint 0

  2. 2

    QR code disparaît

    Animation fondu + icône horloge

  3. 3

    Points automatiquement recrédités

  4. 4

    Écran "QR code expiré"

    Message : "Vos XXX€ ont été recrédités sur votre compte"

Scan Réussi

  1. 1

    Notification backend (WebSocket)

  2. 2

    Écran devient vert

    Grande icône ✓ animée + vibration

  3. 3

    "Paiement validé !"

    Affichage du montant en euros utilisé

  4. 4

    Retour dashboard après 3s

6

DEMANDE DE VIREMENT BANCAIRE

6.1Formulaire de Demande

Convertir mes points en €

  • Card solde disponible (en euros et en points)
  • Input du montant en euros + boutons 10€, 25€, 50€, 100€, Max
  • Affichage automatique en points : XX,XX€ → YYY pts
  • Champ IBAN (pré-rempli si déjà saisi)
  • Checkbox "Enregistrer cet IBAN"
DélaiDispatch asynchrone via Stripe
FraisGratuit
PointsBloqués pendant traitement

Validations

Règle Condition Message d'Erreur
Montant minimum ≥ 10€ "Minimum 10€ requis pour un virement"
Montant maximum ≤ solde disponible "Solde insuffisant"
Format IBAN FR + 25 caractères alphanumériques "Format IBAN invalide"
Validité IBAN Vérification checksum (ISO 13616) "IBAN incorrect, vérifiez votre saisie"
Pas de doublon Aucune demande en cours "Une demande de virement est déjà en cours"

6.2Suivi des Demandes

Accès : Profil → Mes virements OU Dashboard (si demande en cours)

Statuts des Demandes

Statut Couleur Description Actions
En attente 🟡 Orange Demande reçue, traitement à venir Annuler
En cours 🔵 Bleu Virement en préparation Aucune
Effectué 🟢 Vert Virement réalisé Voir détails
Annulé ⚫ Gris Demande annulée Voir détails
Annulation

Possible uniquement si statut = "En attente". Les points sont immédiatement recrédités.

7

HISTORIQUE DES TRANSACTIONS

7.1Écran Principal

Accès : Tab bar "Historique" OU Dashboard → "Voir tout"

Structure

  • Filtres (chips) : Tout | Points gagnés | Points dépensés | Virements
  • Recherche : Par nom de partenaire
  • Période : Semaine | Mois | 3 mois | Tout

Types de Transactions

Type Icône Couleur Informations
Achat partenaire Logo partenaire +XXX pts (vert) Nom, date, montant
Paiement QR 📱 -XXX pts (rouge) Nom partenaire, date
Virement 💳 -XXX pts (rouge) IBAN masqué, statut
Expiration -XXX pts (gris) "Points expirés", date
Bonus 🎁 +XXX pts (violet) "Bonus inscription", etc.
8

RECHERCHE ET LOCALISATION DES PARTENAIRES

8.1Écran Principal

Accès : Tab bar "Partenaires" OU Dashboard → Bouton "Partenaires"

  • Toggle vue : Carte 🗺️ | Liste 📋
  • Recherche : Nom, catégorie, adresse
  • Filtres : Catégories, distance, cashback minimum, ouvert maintenant, premium
  • Tri : Distance | Cashback | Popularité | Nouveaux

Catégories de Partenaires

Catégorie Icône Exemples
Restauration 🍽️ Restaurants, cafés, boulangeries, food trucks
Alimentation 🛒 Supermarchés, épiceries, primeurs, cavistes
Mode et Beauté 👗 Prêt-à-porter, chaussures, coiffeurs, instituts
Services 🔧 Garages, pressing, salles de sport
Loisirs et Culture 🎭 Librairies, cinémas, boutiques sport, jouets
Santé et Bien-être 💊 Pharmacies, parapharmacies, opticiens

8.2Fiche Partenaire

  • Header : Image couverture, logo, nom, catégorie, note, favori
  • Infos : Taux cashback, palier, bonus, total effectif
  • Localisation : Adresse, mini-carte, distance, boutons itinéraire/appeler
  • Horaires : Tableau par jour, indicateur ouvert/fermé
  • Statistiques : Points gagnés, dernière visite, nombre de visites
  • Actions : Générer QR, Partager, Signaler erreur
9

NOTIFICATIONS

9.1Types de Notifications

Notifications

Type Icône Titre Exemple Corps Exemple
Points gagnés 🎉 +50 points ! Votre achat chez [Partenaire] vous a rapporté 50 points
QR scanné Paiement validé 100 points utilisés chez [Partenaire]
Virement effectué 💰 Virement reçu ! XX,XX€ ont été virés sur votre compte
Expiration proche ⚠️ Points bientôt expirés 50 points expirent dans 7 jours
Palier atteint 🏆 Palier Silver atteint ! Vous avez maintenant 2% de cashback bancaire
Sécurité 🔒 Nouvelle connexion Connexion détectée depuis [Appareil]

9.2Configuration

Paramètres → Notifications

  • Points et transactions (recommandé : ON)
  • Virements (recommandé : ON)
  • Promotions et offres (défaut : ON)
  • Nouveaux partenaires (défaut : ON)
  • Alertes sécurité (toujours ON, non modifiable)
10

PROFIL ET PARAMÈTRES

10.1Écran Profil

Accès : Tab bar "Profil" OU clic photo profil (dashboard)

Sections du Profil

Statistiques
  • Total points gagnés (all time)
  • Total économies réalisées (€)
  • Nombre de partenaires visités
  • Partenaire favori
Mes Informations
  • Modifier mon profil →
  • Comptes OpenBanking →
  • IBAN enregistré →
  • Mes favoris →
Paramètres
  • Notifications →
  • Sécurité →
  • Langue →
  • Apparence (clair/sombre/système) →

10.2Suppression de Compte

ACTION IRRÉVERSIBLE

Toutes les données seront supprimées • Les points seront perdus • Les demandes de virement en cours seront annulées

  1. 1

    Clic sur "Supprimer mon compte"

  2. 2

    Écran d'avertissement

  3. 3

    Saisie du mot de passe

  4. 4

    Popup final de confirmation

  5. 5

    Anonymisation des données (RGPD)

    Délai de rétractation : 30 jours

11

NAVIGATION ET ÉTATS GLOBAUX

11.1Tab Bar

Navigation Principale

Position Icône Label Écran
1 🏠 Accueil Dashboard principal
2 🎁 Avantages Partenaires, cashback, bons plans
3 💳 Carte Carte REWAPP / carte physique
4 📅 Events Événements, promotions spéciales
5 👤 Profil Profil et paramètres

11.2États d'Erreur Globaux

Pas de connexionVérifiez votre connexion internet
Erreur ServeurService temporairement indisponible
Session ExpiréeVeuillez vous reconnecter
MaintenanceNous revenons très vite !

11.3Accessibilité & Mode Sombre

  • Support VoiceOver (iOS) et TalkBack (Android)
  • Labels accessibilité sur tous les éléments interactifs
  • Contraste suffisant (WCAG AA minimum)
  • Taille de texte dynamique
  • Mode sombre : Clair / Sombre / Système
12

ANNEXES TECHNIQUES

12.1Récapitulatif des Règles Métier

Règles Métier

Règle Valeur
1 point0,20€
Conversion bancairePoints × 0,200€
Conversion commerçantPoints × 0,200€
Seuil virement minimum10€ minimum
Délai virementDispatch asynchrone Stripe
Validité QR code15 minutes
Usage QR codeUnique (rejet si réutilisé)
Validité points12 mois
Méthode utilisationFIFO (plus anciens d'abord)
Montant minimum QR10€ minimum

12.2Messages d'Erreur Standards

Codes d'Erreur

Code Message Utilisateur
NETWORK_ERRORVérifiez votre connexion internet
SERVER_ERRORUne erreur est survenue. Réessayez.
INVALID_CREDENTIALSEmail ou mot de passe incorrect
ACCOUNT_DISABLEDCompte suspendu. Contactez le support.
TOO_MANY_ATTEMPTSTrop de tentatives. Réessayez dans 15 minutes.
INSUFFICIENT_BALANCESolde de points insuffisant
QR_EXPIREDQR code expiré
QR_ALREADY_USEDCe QR code a déjà été utilisé
INVALID_IBANFormat IBAN invalide
TRANSFER_MIN_AMOUNTMinimum 10€ requis pour un virement

12.3Intégrations Techniques

Services Intégrés

Service Usage SDK/API
PlaidOpenBanking / Account linkingSDK natif
Firebase Cloud MessagingNotifications push@capacitor/push-notifications
SentryError trackingSentry Angular
MixpanelAnalyticsMixpanel SDK
Google Maps / Apple MapsCartographie@capacitor/google-maps

12.4Stockage Local

Données Stockées

Donnée Méthode Sécurité
Access TokenKeychain / KeystoreChiffré
Refresh TokenKeychain / KeystoreChiffré
IBAN sauvegardéKeychain / KeystoreChiffré
PréférencesIonic StorageNon sensible
Cache donnéesIonic StorageTTL 24h
Onboarding vuIonic StorageFlag booléen
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