Spécifications App Mobile
La solution de cashback nouvelle génération
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€).
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 :
- 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 |
| ✅ | 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)
Processus d'Inscription
- 1
Remplissage du formulaire
Validation temps réel des champs
- 2
Validation côté client
Champs obligatoires et formats
- 3
Envoi au backend
POST /api/auth/register - 4
Vérification unicité email
- 5
Création du compte
Statut : non vérifié
- 6
Envoi email de validation
Lien valable 24h
- 7
Écran "Vérifiez votre email"
- 8
Redirection vers l'accueil / dashboard
La liaison OpenBanking est proposée plus tard via le profil
- "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
Clic sur "Continuer avec Google"
- 2
Redirection OAuth2 Google
Popup native
- 3
Authentification utilisateur
- 4
Récupération données
Email, prénom, nom, photo profil
- 5
Vérification compte existant
- 6
Création automatique
Pas de validation email nécessaire
- 7
Acceptation CGU
Popup interstitiel
- 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
Saisie identifiants
- 2
Validation format côté client
- 3
Envoi backend
POST /api/auth/login - 4
Vérification identifiants
- 5
Génération tokens
JWT access (15 min) + refresh (30 jours)
- 6
Stockage sécurisé
Keychain iOS / Keystore Android
- 8
Redirection dashboard
- "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
2.3.3 Mot de Passe Oublié
- 1
Clic sur "Mot de passe oublié ?"
- 2
Écran avec champ email
- 3
Saisie de l'email
- 4
Envoi backend
POST /api/auth/forgot-password - 5
Message neutre
"Si un compte existe avec cet email..."
- 6
Email envoyé
Lien valable 1h, usage unique
- 7
Nouveau mot de passe
- 8
Redirection connexion
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
Clic sur "Lier mon compte OpenBanking"
- 2
Lancement du SDK natif
- 3
Sélection de banque
Recherche + liste
- 4
Authentification bancaire sécurisée
- 5
Validation 2FA
SMS, app bancaire
- 6
Sélection des comptes
- 7
Consentement
Durée 90 jours renouvelable
- 8
Confirmation
"Compte OpenBanking lié avec succès !"
- "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."
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
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
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
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
Compteur atteint 0
- 2
QR code disparaît
Animation fondu + icône horloge
- 3
Points automatiquement recrédités
- 4
Écran "QR code expiré"
Message : "Vos XXX€ ont été recrédités sur votre compte"
Scan Réussi
- 1
Notification backend (WebSocket)
- 2
Écran devient vert
Grande icône ✓ animée + vibration
- 3
"Paiement validé !"
Affichage du montant en euros utilisé
- 4
Retour dashboard après 3s
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"
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.
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. |
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
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)
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
Clic sur "Supprimer mon compte"
- 2
Écran d'avertissement
- 3
Saisie du mot de passe
- 4
Popup final de confirmation
- 5
Anonymisation des données (RGPD)
Délai de rétractation : 30 jours
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
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
ANNEXES TECHNIQUES
12.1Récapitulatif des Règles Métier
Règles Métier
| Règle | Valeur |
|---|---|
| 1 point | 0,20€ |
| Conversion bancaire | Points × 0,200€ |
| Conversion commerçant | Points × 0,200€ |
| Seuil virement minimum | 10€ minimum |
| Délai virement | Dispatch asynchrone Stripe |
| Validité QR code | 15 minutes |
| Usage QR code | Unique (rejet si réutilisé) |
| Validité points | 12 mois |
| Méthode utilisation | FIFO (plus anciens d'abord) |
| Montant minimum QR | 10€ minimum |
12.2Messages d'Erreur Standards
Codes d'Erreur
| Code | Message Utilisateur |
|---|---|
NETWORK_ERROR | Vérifiez votre connexion internet |
SERVER_ERROR | Une erreur est survenue. Réessayez. |
INVALID_CREDENTIALS | Email ou mot de passe incorrect |
ACCOUNT_DISABLED | Compte suspendu. Contactez le support. |
TOO_MANY_ATTEMPTS | Trop de tentatives. Réessayez dans 15 minutes. |
INSUFFICIENT_BALANCE | Solde de points insuffisant |
QR_EXPIRED | QR code expiré |
QR_ALREADY_USED | Ce QR code a déjà été utilisé |
INVALID_IBAN | Format IBAN invalide |
TRANSFER_MIN_AMOUNT | Minimum 10€ requis pour un virement |
12.3Intégrations Techniques
Services Intégrés
| Service | Usage | SDK/API |
|---|---|---|
| Plaid | OpenBanking / Account linking | SDK natif |
| Firebase Cloud Messaging | Notifications push | @capacitor/push-notifications |
| Sentry | Error tracking | Sentry Angular |
| Mixpanel | Analytics | Mixpanel SDK |
| Google Maps / Apple Maps | Cartographie | @capacitor/google-maps |
12.4Stockage Local
Données Stockées
| Donnée | Méthode | Sécurité |
|---|---|---|
| Access Token | Keychain / Keystore | Chiffré |
| Refresh Token | Keychain / Keystore | Chiffré |
| IBAN sauvegardé | Keychain / Keystore | Chiffré |
| Préférences | Ionic Storage | Non sensible |
| Cache données | Ionic Storage | TTL 24h |
| Onboarding vu | Ionic Storage | Flag 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