Phase 3 · Complète 🔗 Ouvrir le portail live →

Portail Emprunteur

Le portail web auto-service pour les emprunteurs finaux. Design desktop + mobile responsive, installable en PWA, multilingue. Permet l'inscription en ligne, la simulation de prêt, la demande, le suivi temps-réel, le téléchargement de reçus et la génération d'attestations.

26
Pages
3
Méthodes login (Phone · Email · Google)
PWA
Installable mobile
10
Emprunteurs seed

📱 Connexion

Page split-screen : branding Qredon à gauche avec les promesses ("Suivez vos prêts en temps réel", "Demandes 100% en ligne", "Remboursements simplifiés"), formulaire à droite avec :

  • Sélecteur indicatif pays (drapeau + +216 par défaut Tunisie)
  • Champ téléphone
  • Bouton "Continuer" → envoi du SMS OTP
  • Séparateur "OU"
  • Bouton "Continuer avec Google" (OAuth)
  • Lien "Pas encore de compte ? S'inscrire" → page /register
Page de connexion portail emprunteur
🧪 Pour tester la connexion par OTP
  1. 1
    Ouvrir /login
  2. 2
    Saisir un numéro emprunteur seed, ex : +216 55 101 001 (Mohamed Ben Salah, VERIFIED)
  3. 3
    Cliquer "Continuer" → message "Un SMS contenant un code à 6 chiffres sera envoyé"
  4. 4
    Ouvrir MailHog MailHog (interface dev) → récupérer le code 6 chiffres dans le dernier email reçu
  5. 5
    Revenir au portail, saisir le code → connecté → redirigé vers le dashboard

🧮 Simulateur de prêt

Permet de simuler une mensualité en temps réel et compare automatiquement 3 scénarios de durée (court terme · votre choix · long terme) avec recommandation visuelle. Utilisable avant ou après login.

Écran initial — sélection produit + sliders

Sélecteur du produit de prêt, slider Montant (entre min et max du produit), slider Durée (entre durée min et max). Mention légale en bas.

Simulateur — état initial

Écran avec résultats — 3 scénarios calculés

Pour le scénario Micro Credit Express · 3 000 DT · 12 mois, le simulateur affiche automatiquement 3 cartes de résultats. La carte "Votre choix" (9 mois, équilibre court/long terme) est marquée Recommandé.

Simulateur — 3 scénarios calculés
ScénarioMensualitéDuréeTotal à rembourserDont intérêts
Court terme526,58 DT6 mois3 204,45 DT159,45 DT
Votre choix · Recommandé358,83 DT9 mois3 274,47 DT229,47 DT
Long terme275,04 DT12 mois3 345,48 DT300,48 DT
🧪 Scénarios de test du simulateur
  1. 1
    Ouvrir /simulator (depuis un sous-domaine tenant ou avec tenant slug en contexte)
  2. 2
    Sélectionner un produit : Micro Credit Express (500-5000 DT, 6-12 mois, 18%), Pret Equipement (5000-50000 DT, 24-48 mois, 12%) ou Pret Solidaire Groupe (1000-20000 DT, 12-24 mois, 15%)
  3. 3
    Bouger le slider Montant → recalcul instantané (debounce 400ms)
  4. 4
    Bouger le slider Durée → les 3 scénarios apparaissent automatiquement
  5. 5
    Vérifier la cohérence : plus la durée est longue, plus les intérêts cumulés augmentent (compensé par mensualités plus basses)
  6. 6
    Cliquer "Demander un prêt" → redirige vers /apply avec le produit pré-sélectionné
  7. 7
    Vérifier la mention légale en bas : "Cette simulation est fournie à titre indicatif et ne constitue pas une offre de crédit"

📝 Inscription — étape 1 : phone + email

Première étape du parcours d'auto-inscription. Carte centrée avec icône utilisateur, titre "Créer un compte", sous-titre "Inscrivez-vous pour accéder à votre espace emprunteur".

  • Champ Numéro de téléphone (sélecteur indicatif + chiffres)
  • Champ Adresse email
  • Bouton "S'inscrire"
  • Lien "Vous avez déjà un compte ? Se connecter"
Inscription étape 1
🧪 Démarrer une inscription
  1. 1
    Ouvrir /register
  2. 2
    Saisir un numéro non encore utilisé (ex: +216 55 199 999) + email valide
  3. 3
    Cliquer "S'inscrire" → 2 OTPs envoyés (SMS + email)
  4. 4
    Redirigé vers /register/verify

🔢 Vérification OTP (double : SMS + email)

Après soumission de l'étape 1, l'emprunteur reçoit deux codes OTP simultanément : un sur son téléphone par SMS, un sur son email. Il doit saisir les deux pour valider l'inscription.

Page vérification OTP

Note : la page redirige vers /register si aucun flow d'inscription actif (cas d'un accès direct à l'URL).

🧪 Valider la double vérification OTP
  1. 1
    Après l'étape 1, ouvrir MailHog MailHog (interface dev)
  2. 2
    Récupérer le code SMS (envoyé au numéro saisi) + le code email (envoyé à l'adresse saisie)
  3. 3
    Saisir les 2 codes dans les 2 champs de vérification
  4. 4
    Valider → redirigé vers le wizard /register/profile

📋 Wizard profil — 4 onglets

Après la double vérification OTP, l'emprunteur entre dans un wizard à 4 étapes obligatoires. Indicateur visuel des 4 étapes en haut. Bouton "Suivant" pour avancer (filling obligatoire avant passage).

ÉtapeNomChamps principaux
1Informations personnellesPrénom, Nom, Date naissance, Genre, Nationalité (par défaut "Tunisienne"), Situation familiale, Adresse, Ville, Code postal, Région, Nombre de personnes à charge
2Informations professionnellesActivité, Statut emploi, Source revenus, Montant revenus, Charges mensuelles
3DocumentsUpload CIN recto/verso, justificatif revenus, attestation
4ConsentementAcceptation CGU, traitement données personnelles, signature OTP

Étape 1 — Informations personnelles

Wizard profil — étape 1
🧪 Compléter le wizard profil
  1. 1
    Étape 1 — Remplir prénom, nom, date naissance, genre, situation familiale, adresse complète, région
  2. 2
    Cliquer "Suivant" → passage à l'étape 2
  3. 3
    Étape 2 — Activité (commerçant, salarié, artisan...), revenus mensuels, charges
  4. 4
    Étape 3 — Upload des documents requis (CIN, justificatifs)
  5. 5
    Étape 4 — Cocher CGU, signer par OTP → demande soumise
  6. 6
    Redirigé vers /register/pending

⏳ Dossier en cours d'examen

Page de confirmation après soumission de l'inscription. Timeline visuelle avec 4 étapes : Inscription (✅), Vérification OTP (✅), Profil complété (✅), Examen en cours (🟡). Délai de traitement annoncé : 24 à 48 heures ouvrées. Bouton "Se déconnecter".

Page dossier en cours
🧪 Vérifier le passage de pending à validé
  1. 1
    L'emprunteur a soumis son dossier → il voit cette page avec "Examen en cours"
  2. 2
    Côté Espace IMF, un agent ouvre /borrowers/pending-validation → voit le dossier
  3. 3
    L'agent valide le KYC (APPROVE)
  4. 4
    L'emprunteur reçoit une notification par email/SMS → "Votre compte a été validé"
  5. 5
    Lors de sa prochaine connexion, il a accès au dashboard complet

❌ Inscription rejetée

Page affichée si l'agent IMF rejette l'inscription. L'emprunteur voit la raison du rejet et peut soit refaire une demande, soit contacter le support.

🏠 Dashboard emprunteur

Première page après connexion (route /home, accessible aussi via / qui redirige). En-tête "Mon espace" avec avatar initiales en haut à droite, salutation personnalisée "Bonjour {prénom}", section centrale sur le prêt actif (ou empty state si aucun), liste des demandes en cours, raccourcis "Actions rapides" et bottom nav.

Dashboard emprunteur

Composants visibles sur la capture

  • Header : "Mon espace" centré, avatar emprunteur (initiales) en haut à droite
  • Greeting : "Bonjour Ridha · Bienvenue sur votre espace emprunteur"
  • Empty state prêt actif : icône carte + "Pas de prêt actif" + CTA "Simuler un prêt" (Ridha n'a pas encore de prêt décaissé)
  • Demandes en cours (1) : carte avec le produit "Pret Solidaire Groupe", référence AA-2026-003, montant 8 000,00 DT, badge "En cours d'examen"
  • Actions rapides : 3 cards — "Faire une demande", "Mes paiements", "Mes documents"
  • Bottom nav : Accueil (actif) · Demande · Paiements · Documents · Profil
🧪 Variantes selon le statut du borrower
  • Sans prêt ni demande (nouveau borrower validé) : empty state "Pas de prêt actif" + invitation à simuler/demander
  • Demande UNDER_REVIEW (Ridha) : empty state prêt + section "Demandes en cours" avec la demande
  • Prêt APPROVED en attente décaissement (Amira) : carte "Prêt approuvé, en attente de décaissement"
  • Prêt DISBURSED actif (Mohamed) : carte avec progression du remboursement, prochaine échéance, alerte si retard

💰 Demander un prêt

L'emprunteur choisit un produit dans le catalogue. Chaque produit affiche ses bornes (montant min/max, durée), son taux indicatif, et offre 2 actions : "Simuler" (sans engagement) ou "Choisir" (démarre le wizard de demande). Navigation par bottom tabs : Accueil · Demande · Paiements · Documents · Profil.

Demander un prêt — sélection produit
🧪 Démarrer une demande de prêt
  1. 1
    Connecté en tant que Mohamed Ben Salah (VERIFIED), cliquer "Demande" dans le bottom nav
  2. 2
    3 produits affichés : Micro Credit Express (500-5000 DT, 6-12 mois, 18%), Pret Equipement (5000-50000 DT, 24-48 mois, 12%), Pret Solidaire Groupe (1000-20000 DT, 12-24 mois, 15%)
  3. 3
    Cliquer "Simuler" → modale ou page avec calcul mensualité
  4. 4
    Cliquer "Choisir" → démarre le wizard 4 étapes de demande de prêt

🔎 Suivi des demandes

Page /track qui liste toutes les demandes de l'emprunteur avec leur statut courant. Filtres par statut (Toutes / En attente / En étude / Approuvées / Refusées / Décaissées). Chaque carte est cliquable pour ouvrir la timeline détaillée et uploader des compléments si l'IMF en demande.

Suivi des demandes — capture Ridha
🧪 Vérifier le filtrage et l'affichage
  1. 1
    Connecté Ridha (+216 55 103 003) → onglet "Demande" → /track
  2. 2
    Vérifier la card "Pret Solidaire Groupe · Ref AA-2026-003 · 20 mai 2026 · 8 000,00 DT" avec badge "En cours d'analyse"
  3. 3
    Cliquer chips de filtres : "En étude" → ne devrait laisser que les demandes UNDER_REVIEW · "Approuvées" → liste vide pour Ridha
  4. 4
    Cliquer une demande → ouvre la page détail avec la timeline (étapes franchies + à venir)

💵 Mon prêt actif

Vue détaillée du prêt en cours : nom du produit + référence + badge statut, montant décaissé en gros, KPIs Total payé / Restant en cards colorées (vert/orange), barre de progression du remboursement, dates clés (décaissement + échéance finale), et plan d'amortissement complet avec colonnes Date · Dû · Payé · Statut (icône colorée).

Mon prêt actif — Mohamed Ben Salah, prêt LATE

Composants visibles sur la capture (Mohamed Ben Salah)

  • Header : "Micro Credit Express" + référence "AA-2026-001" + badge rouge "En retard"
  • Montant décaissé : 3 000,00 DT
  • KPIs : Total payé 1 100,00 DT (vert) · Restant 550,00 DT (orange)
  • Progress bar 67% (capital remboursé)
  • Dates : Décaissé le 1 nov. 2025 · Échéance finale 1 mai 2026
  • Plan d'amortissement — 6 échéances :
    • 1 déc. 2025 · 275 DT dû · 275 DT payé · ✅ (PAID)
    • 1 janv. 2026 · 275 / 275 · ✅
    • 1 févr. 2026 · 275 / 275 · ✅
    • 1 mars 2026 · 275 / 275 · ✅
    • 1 avr. 2026 · 275 / 0 · ⚠️ (EN RETARD)
    • 1 mai 2026 · 275 / 0 · ⏰ (à venir)
  • Bottom nav

📜 Historique des prêts

Page /loan/history qui liste tous les prêts clôturés du borrower. Pour un emprunteur sans prêt clôturé, empty state avec icône document + "Aucun prêt passé" + sous-texte.

Historique prêts — empty state Ridha
🧪 Tester l'historique
  1. 1
    Borrower sans prêt clôturé (ex: Ridha) → empty state "Aucun prêt passé · Vous n'avez pas encore de prêt clôturé dans votre historique"
  2. 2
    Borrower avec prêt clôturé (non-seed actuellement) → liste paginée des prêts CLOSED avec montants, dates, durées, possibilité de télécharger les reçus archivés
  3. 3
    Bouton retour ← navigue vers la page précédente

💳 Remboursements + reçus

Page très visuelle : Total payé / Restant en KPIs, calendrier mensuel avec jours colorés selon statut (Payé · À venir · Retard · Aujourd'hui), liste détaillée des échéances avec montant et statut.

Mes paiements
🧪 Vérifier le calendrier et les échéances
  1. 1
    Connecté Mohamed Ben Salah → onglet "Paiements"
  2. 2
    Vérifier les KPIs en haut : Total payé 1 100 DT / Restant 550 DT
  3. 3
    Calendrier Mai 2026 → jour 20 surligné en orange (Aujourd'hui)
  4. 4
    Section "Détail des échéances" → 4 échéances payées (mars, février, janvier, décembre) à 275 DT chacune
  5. 5
    Naviguer mois précédent / suivant via les flèches

📄 Documents + attestations QR

Bibliothèque des documents de l'emprunteur (CIN, contrats, reçus de paiement) et page dédiée pour générer des attestations.

Documents
Générer attestation

3 types d'attestations disponibles : Bonne tenue (paiements à jour), Clôture de prêt (prêt remboursé), Résumé prêt actif (pour démarches bancaires). Chaque attestation a un QR code public scannable via /verify/{qrCode}.

🔔 Notifications

Centre des notifications reçues (prêt approuvé, paiement confirmé, demande de complément, échéance à venir, etc.).

Notifications

👤 Mon profil & sécurité

Page profil complète : en-tête avec avatar + nom + badge statut KYC Vérifié, barre de progression du profil (100% pour Mohamed), sections : Informations personnelles (Nom, Prénom, Téléphone, CIN), Informations de contact (Email, Adresse, Ville), Sélecteur de langue (Français / Arabe / English), bouton "Changer de numéro" (avec OTP), bouton "Préférences notifications".

Profil emprunteur
🧪 Mettre à jour le profil
  1. 1
    Modifier l'email ou l'adresse → sauvegarde immédiate
  2. 2
    Changer la langue Français → العربية → toute l'interface bascule en arabe (RTL)
  3. 3
    Cliquer "Changer de numéro" → OTP envoyé sur l'ancien et le nouveau numéro → double validation requise
  4. 4
    "Préférences notifications" → activer/désactiver SMS, email, push par type d'événement

🔑 Comptes emprunteurs seed (10)

Tenant : al-amal-mf · Pas de mot de passe — login par OTP SMS. Le code OTP est envoyé via MailHog (MailHog (interface dev)). Couvre tous les statuts KYC possibles.

TéléphoneNomCINAgenceStatut KYCÉtat prêt
+216 55 101 001Mohamed Ben Salah07891234Tunis CentreVERIFIEDDISBURSED — prêt actif
+216 55 102 002Amira Zarrouki07892345La MarsaVERIFIEDAPPROVED — en attente décaissement
+216 55 103 003Ridha Oueslati07893456NabeulVERIFIEDUNDER_REVIEW — en cours d'examen
+216 55 104 004Ines Bouzid07894567Tunis CentrePENDING_REVIEW
+216 55 105 005Walid Chahed07895678La MarsaPENDING_REVIEW
+216 55 106 006Sarra Mansouri(non rempli)HammametPENDING_PROFILE
+216 55 107 007Hatem Khelifi(non rempli)NabeulPENDING_PROFILE
+216 55 108 008Fathi Derbali07896789Tunis CentreREJECTED
+216 55 109 009(en cours OTP)PENDING_OTP
+216 55 110 010Leila Haddad07897890La MarsaADDITIONAL_INFO

🧪 Tous les scénarios de test

Catalogue exhaustif basé sur le portail tel qu'il existe au 2026-05-20.

A. Connexion (10 scénarios)
  1. 1
    Login OTP standard — Ouvrir /login → saisir +216 55 101 001 → cliquer "Continuer" → récupérer OTP sur MailHog → saisir code → connecté au dashboard.
  2. 2
    Login OAuth Google — Cliquer "Continuer avec Google" → consentement Google → retour avec session ouverte.
  3. 3
    Login borrower VERIFIED avec prêt actif — Mohamed Ben Salah (+216 55 101 001) → dashboard avec prêt DISBURSED + plan d'amortissement.
  4. 4
    Login borrower VERIFIED en attente décaissement — Amira Zarrouki → dashboard avec prêt APPROVED.
  5. 5
    Login borrower PENDING_REVIEW — Ines Bouzid → écran "Dossier en cours d'examen" (timeline), pas d'accès aux features.
  6. 6
    Login borrower PENDING_PROFILE — Sarra Mansouri → redirigé vers wizard /register/profile pour compléter.
  7. 7
    Login borrower REJECTED — Fathi Derbali → écran "Inscription rejetée" + raison.
  8. 8
    Numéro non enregistré — Saisir un phone inconnu → message proposant de "Créer un compte" (lien "S'inscrire").
  9. 9
    Code OTP incorrect — Saisir 6 chiffres faux → "Code invalide".
  10. 10
    Code OTP expiré (5 min) — Attendre 5+ min → "Code expiré, redemandez".
B. Simulateur public (6 scénarios)
  1. 1
    Accès sans login — Ouvrir /simulator en navigation incognito → aucune connexion requise.
  2. 2
    Simulation Micro Credit Express — Produit MCE-001, montant 5000 TND, durée 12 mois → mensualité affichée + plan d'amortissement (18% intérêts annuels).
  3. 3
    Simulation Pret Solidaire Groupe — PSG-001, 15000 TND, 18 mois (taux 15%).
  4. 4
    Simulation Pret Equipement — PEQ-001, 30000 TND, 36 mois (taux 12%).
  5. 5
    Montant hors bornes — Saisir 100 TND (sous le min MCE de 500) → message d'erreur. Saisir 50000 pour MCE (au-dessus du max 5000) → message d'erreur.
  6. 6
    CTA conversion — Cliquer "Faire une demande" → redirige vers /register (si déconnecté) ou /apply (si connecté).
C. Inscription bout-en-bout (15 scénarios)
  1. 1
    Démarrage inscription — Ouvrir /register → saisir nouveau phone (ex: +21655199999) + email valide → "S'inscrire".
  2. 2
    Réception double OTP — Ouvrir MailHog → trouver les 2 emails (un pour le code SMS, un pour le code email).
  3. 3
    Validation double OTP — Saisir les 2 codes → redirigé vers /register/profile.
  4. 4
    Wizard étape 1 — Informations personnelles — Remplir prénom, nom, date naissance, genre, nationalité (Tunisienne par défaut), situation familiale, adresse complète, ville, code postal, région, nb personnes à charge → "Suivant".
  5. 5
    Wizard étape 2 — Informations professionnelles — Activité, statut emploi, source revenus, montant mensuel, charges → "Suivant".
  6. 6
    Wizard étape 3 — Documents — Upload CIN recto + verso, justificatif revenus → "Suivant".
  7. 7
    Wizard étape 4 — Consentement — Cocher CGU + traitement données → "Soumettre" + signature OTP.
  8. 8
    Redirection vers pending — Après soumission → /register/pending avec timeline 4 étapes (3 ✅ + 1 🟡).
  9. 9
    Tentative champ obligatoire vide — Soumettre étape 1 sans prénom → erreur sur le champ.
  10. 10
    Format phone invalide — Saisir 12345 → erreur "Format MENA invalide".
  11. 11
    Phone déjà utilisé — Tenter avec +216 55 101 001 → erreur "Numéro déjà inscrit".
  12. 12
    Email déjà utilisé — Tenter avec email d'un emprunteur existant → erreur "Email déjà utilisé".
  13. 13
    CGU non cochées — Tenter soumission étape 4 sans cocher → blocage.
  14. 14
    Validation par l'IMF — Côté Espace IMF, agent Fatma (fatma.chaabane@al-amal.tn) valide → l'emprunteur reçoit notif "Compte validé".
  15. 15
    Reconnexion après validation — Le borrower se reconnecte → accès au dashboard complet.
D. Dashboard & prêt actif (8 scénarios — nécessitent backend OTP fixé)
  1. 1
    Dashboard avec prêt actif — Login Mohamed → dashboard montre prêt DISBURSED + montant + prochaine échéance dans X jours.
  2. 2
    Dashboard sans prêt — Login Amira (avant décaissement) → dashboard montre "Prêt approuvé, en attente de décaissement".
  3. 3
    Raccourcis dashboard — Boutons "Demander un nouveau prêt", "Suivre mes demandes", "Mes documents".
  4. 4
    Vue prêt actif détaillée — /loan/active → plan d'amortissement complet, capital restant dû, intérêts payés vs restants.
  5. 5
    Historique des paiements — /loan/active onglet Historique → liste paginée des paiements avec dates/montants/modes.
  6. 6
    Historique prêts clôturés — /loan/history → liste paginée des prêts précédents avec leurs reçus.
  7. 7
    Notif "Échéance dans 3 jours" — Automatique 3 jours avant chaque échéance.
  8. 8
    Alerte retard — Échéance dépassée → bandeau rouge "Paiement en retard".
E. Demande de prêt (10 scénarios — nécessitent backend OTP fixé)
  1. 1
    Démarrer une demande — /apply → sélection produit (Micro Credit Express / Solidaire Groupe / Pret Equipement).
  2. 2
    Wizard 4 étapes — Identité (pré-rempli depuis profil) → Économique → Projet → Documents.
  3. 3
    Sauvegarde brouillon — Quitter au milieu → reprise plus tard où on en était.
  4. 4
    Signature OTP de consentement — Étape finale → OTP requis (conformité légale).
  5. 5
    Référence générée — Après soumission → écran avec référence unique du dossier.
  6. 6
    Tentative demande KYC pending — Borrower PENDING_REVIEW tente /apply → blocage avec message.
  7. 7
    Montant hors bornes produit — MCE max 5000 → saisir 10000 → erreur.
  8. 8
    Upload documents — Étape Documents → photos / scans → preview avant submission.
  9. 9
    Brouillon expiré — Brouillon vieux de >30 jours → marqué EXPIRED.
  10. 10
    Annulation demande — Tant que statut DRAFT ou SUBMITTED → bouton "Annuler" disponible.
F. Suivi des demandes (6 scénarios — nécessitent backend OTP fixé)
  1. 1
    Liste demandes — /track → toutes mes demandes avec statut visuel.
  2. 2
    Timeline détaillée — Cliquer une demande → étapes franchies + à venir avec timestamps.
  3. 3
    Demande de complément — Si l'IMF demande un doc supplémentaire → notif + bouton upload sur la timeline.
  4. 4
    Notif APPROVED — Push "Bonne nouvelle, prêt approuvé".
  5. 5
    Notif REJECTED — Push "Demande non retenue" (message générique).
  6. 6
    Notif DISBURSED — Push "Prêt décaissé" + montant.
G. Remboursements & reçus (7 scénarios — nécessitent backend OTP fixé)
  1. 1
    Calendrier échéances — /repayments → vue calendrier avec échéances futures et passées.
  2. 2
    Notif rappel J-3 — 3 jours avant une échéance → push.
  3. 3
    Notif paiement confirmé — Caissier IMF enregistre → push immédiat à l'emprunteur.
  4. 4
    Téléchargement reçu PDF — Échéance PAID → bouton "Télécharger le reçu" → PDF avec QR.
  5. 5
    Historique paiements — Liste paginée des paiements avec montants, dates, modes.
  6. 6
    Alerte retard — Échéance dépassée → bandeau rouge.
  7. 7
    Vue détaillée d'un paiement — Cliquer une ligne → modale avec mode, référence, agent.
H. Documents & attestations QR (7 scénarios — nécessitent backend OTP fixé)
  1. 1
    Voir mes documents — /documents → liste de tous mes docs (CIN, contrats, reçus).
  2. 2
    Télécharger un document — PDF ou JPG sauvegardé localement.
  3. 3
    Générer attestation de bonne tenue — Borrower avec paiements à jour → "Demander attestation" → choisir GOOD_STANDING → PDF + QR.
  4. 4
    Attestation clôture — Borrower avec prêt remboursé → LOAN_CLOSURE.
  5. 5
    Attestation résumé prêt actif — ACTIVE_LOAN_SUMMARY.
  6. 6
    Vérification publique QR — Une 3e personne scanne le QR → /verify/{qrCode} sans login → métadonnées (sans le fichier).
  7. 7
    QR expiré — Scan après expiration → "Attestation expirée".
I. Profil & sécurité (8 scénarios — nécessitent backend OTP fixé)
  1. 1
    Voir mon profil — /profile → infos perso, agence assignée, statut KYC.
  2. 2
    Modifier email/adresse — Champs éditables → sauvegarde immédiate.
  3. 3
    Changer de téléphone — Double OTP (ancien + nouveau numéro) → confirmé.
  4. 4
    Activer 2FA TOTP — QR code à scanner avec Google Authenticator → 1er code → activé.
  5. 5
    Désactiver 2FA — Confirmation OTP + code TOTP en cours → désactivé.
  6. 6
    Sessions actives — Liste des appareils connectés → bouton "Déconnecter" par session.
  7. 7
    Log d'activité — Historique des logins, uploads, demandes.
  8. 8
    Déconnexion — Bouton "Se déconnecter" depuis le profil → retour à /login.
J. Workflows complets bout-à-bout (4 scénarios)
  1. 1
    Inscription complète emprunteur → validation IMF → premier prêt
    1. Visiteur ouvre /simulator → simule un prêt
    2. Clique "Faire une demande" → /register
    3. Saisit phone + email → s'inscrit
    4. Reçoit double OTP via MailHog → valide
    5. Complète wizard profil (4 étapes)
    6. Soumet → écran /register/pending
    7. Côté IMF, Fatma (fatma.chaabane@al-amal.tn) ouvre /borrowers/pending-validation → valide
    8. L'emprunteur reçoit email "Compte validé"
    9. Il se reconnecte → accès au dashboard
    10. Fait sa première demande de prêt depuis /apply
    11. L'IMF approuve + décaisse → push "Prêt décaissé"
  2. 2
    Cycle remboursement mensuel
    1. 3 jours avant échéance → notif portail "Échéance dans 3 jours"
    2. L'emprunteur paie à l'agence en cash ou mobile money
    3. Caissier IMF (salma.hamdi@al-amal.tn) enregistre le paiement
    4. Push immédiate à l'emprunteur "Paiement confirmé"
    5. L'emprunteur télécharge son reçu PDF
    6. Il partage le reçu via WhatsApp à son comptable
  3. 3
    Complément KYC demandé
    1. Borrower avec docs incomplets → statut ADDITIONAL_INFO_REQUIRED
    2. Notif portail "Document complémentaire requis"
    3. Il ouvre la notif → liste des docs à fournir
    4. Il uploade depuis son téléphone (photo)
    5. Statut repasse à PENDING_REVIEW
    6. L'IMF re-révise et valide → KYC VERIFIED
  4. 4
    Attestation pour banque tierce
    1. Borrower a un prêt actif et veut prouver sa bonne tenue
    2. /documents/attestation → "Bonne tenue" → PDF + QR généré
    3. Il envoie le PDF par WhatsApp à sa banque
    4. L'agent bancaire scanne le QR avec son téléphone
    5. Page /verify/{qrCode} publique → "Attestation valide · émise le X · pour Y"
💡 Astuce dev — récupérer le code OTP

En environnement local/test, les OTP SMS ne partent pas vers de vrais opérateurs : le code est loggé dans la sortie de l'API. Pour le récupérer après avoir cliqué "Continuer" :

ssh ${SERVEUR} 'docker compose -f ~/qredon/docker-compose.local.yml logs api --tail=30 | grep "code de v" | tail -1'

Les OTP email de l'inscription en revanche partent vers MailHog (MailHog (interface dev)) et sont consultables comme un vrai client mail.