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, biométrie)
- Liaison de carte bancaire via OpenBanking
- Dashboard avec solde de points et palier de fidélité
- Génération de QR code pour paiement commerçant (60 secondes, usage unique)
- Demande de virement bancaire (minimum 100 points)
- 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,10€
Ratios de Conversion
| Type de Conversion | Ratio | Calcul |
|---|---|---|
| Cashback Bancaire | 10 pts = 0,95€ |
Points × 0,095 (-5%) |
| Cashback Commerçant | 10 pts = 1,05€ |
Points × 0,105 (+5%) |
Stratégie
Le ratio favorise l'utilisation chez les partenaires (+5%) pour créer un cercle vertueux dans l'écosystème.
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 onboarding
Liaison carte bancaire
- "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 liaison carte
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
- 7
Proposition biométrie
Si disponible et non configurée
- 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)
2.3.2 Connexion Biométrique
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 CARTE BANCAIRE
3.1Onboarding Première Liaison
Après inscription, l'utilisateur est guidé pour lier sa première carte bancaire.
É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 ma carte" (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 carte
Intégration SDK Solution Bancaire
Fournisseur recommandé : Budget Insight (Powens)
- 1
Clic sur "Lier ma carte"
- 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
"Carte liée avec succès !"
- "Authentification bancaire échouée"
- "Banque temporairement indisponible"
- "Consentement refusé"
- "Session expirée, veuillez réessayer"
3.2Gestion des Cartes
Accès : Profil → Cartes bancaires
Liste des Cartes Liées
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 Principale si carte 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 la carte"
Suppression d'une Carte
Avertissement Dernière Carte
Si c'est la dernière/unique carte : popup spécial "Sans carte liée, 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 points | Nombre total de points disponibles (grande police) | 1 250 pts |
| Équivalence euros | Calcul automatique (solde × 0,10€) | ≈ 125,00€ |
| Points bloqués | Si demande virement en cours (🔒) | 100 pts 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 | +0% | 🥉 | #CD7F32 |
| Silver | +5% | 🥈 | #C0C0C0 |
| Gold | +10% | 🥇 | #FFD700 |
| Platine | +15% | 💎 | #4169E1 |
| Diamant | +20% | 💠 | #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 grand (ex: "1 250 pts disponibles")
- Input numérique central avec clavier numérique natif
- Affichage temps réel équivalence € :
100 pts = 10,50€ - Suggestions rapides (chips) : 50, 100, 200, 500, Max
- Bouton "Générer le QR Code"
Validations
| Règle | Condition | Message d'Erreur |
|---|---|---|
| Montant minimum | ≥ 10 points |
"Montant minimum : 10 points" |
| Montant maximum | ≤ solde disponible |
"Solde insuffisant (XXX pts disponibles)" |
| Format | Nombre entier uniquement | "Veuillez saisir un nombre entier" |
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 points affiché au-dessus du QR
- Équivalence € affichée en dessous
- Compteur à rebours circulaire : 60 secondes
Sécurité du QR Code
Contenu encodé (JSON signé) :
- ID utilisateur (hashé)
- Montant en points
- Timestamp de génération
- Nonce unique
- Signature
HMAC-SHA256
PROTECTIONS
Usage UNIQUE (rejet si déjà scanné) • Validité 60 secondes exactement • Vérification signature côté backend • Blocage si screenshot détecté (optionnel)
Expiration (après 60 secondes)
- 1
Compteur atteint 0
- 2
QR code disparaît
Animation fondu + icône horloge
- 3
Points automatiquement débloqués
- 4
Écran "QR code expiré"
Message : "Vos points ont été recrédités"
Scan Réussi
- 1
Notification backend (WebSocket)
- 2
Écran devient vert
Grande icône ✓ animée + vibration
- 3
"Paiement validé !"
- 4
Retour dashboard après 3s
DEMANDE DE VIREMENT BANCAIRE
6.1Formulaire de Demande
Convertir mes points en €
- Card solde disponible
- Input nombre de points + boutons 100, 500, 1000, Max
- Calcul automatique :
points × 0,095€(bancaire -5%) - Champ IBAN (pré-rempli si déjà saisi)
- Checkbox "Enregistrer cet IBAN"
Validations
| Règle | Condition | Message d'Erreur |
|---|---|---|
| Montant minimum | ≥ 100 points |
"Minimum 100 points requis (= 9,50€)" |
| 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 bénéficiez maintenant de +5% de bonus |
| 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 →
- Cartes bancaires →
- 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 | 📍 | Partenaires | Carte/Liste partenaires |
| 3 | 📱 | QR Code | Génération QR (bouton central) |
| 4 | 📋 | Historique | Historique transactions |
| 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,10€ |
| Conversion bancaire | Points × 0,095€ (-5%) |
| Conversion commerçant | Points × 0,105€ (+5%) |
| Seuil virement minimum | 100 points (= 9,50€) |
| Délai virement | 2-3 semaines maximum |
| Validité QR code | 60 secondes |
| Usage QR code | Unique (rejet si réutilisé) |
| Validité points | 12 mois |
| Méthode utilisation | FIFO (plus anciens d'abord) |
| Montant minimum QR | 10 points |
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 100 points requis |
12.3Intégrations Techniques
Services Intégrés
| Service | Usage | SDK/API |
|---|---|---|
| Budget Insight (Powens) | Card 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é, biométrie |
| Refresh Token | Keychain / Keystore | Chiffré, biométrie |
| 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