Une solution multi-tenant pour les institutions de microfinance d'Afrique du Nord & Moyen-Orient. 4 surfaces applicatives — Admin Platform, Espace IMF, Portail Emprunteur, App Mobile native — partageant une API NestJS unifiée.
Chaque plateforme cible une audience spécifique et expose ses propres fonctionnalités tout en partageant l'API NestJS et la base PostgreSQL multi-tenant.
Console de gestion plateforme pour l'équipe Qredon
Gérer les IMF clientes (tenants), facturation, modules, monitoring santé, audit trail global.
Interface métier quotidienne des employés IMF
Emprunteurs, prêts, remboursements, portefeuille, agences, régions, équipes, paramètres tenant — 25 pages métier.
Self-service web pour les clients finaux
Inscription OTP, simulation prêt, demande en ligne, suivi temps-réel, remboursements, documents, attestations QR. Multilingue FR/AR/EN.
Kotlin Multiplatform 2.3 + Compose Multiplatform 1.10
Parité fonctionnelle avec le portail web + biométrie native, capture caméra KYC, notifications push FCM/APNs (en cours d'implémentation).
Le seed (api/prisma/seed.ts) provisionne 1 super admin Qredon, 3 tenants (Al-Amal Microfinance actif + 2 démos), 9 employés IMF couvrant tous les rôles, 10 emprunteurs couvrant tous les statuts KYC, 4 agences dans 2 régions, et 3 produits de prêt.
Admin123!Qredon2026!| Plateforme | Pattern URL |
|---|---|
| Admin Platform | https://admin.{domaine} |
| Espace IMF | https://app.{slug-tenant}.{domaine} |
| Portail Emprunteur | https://my.{slug-tenant}.{domaine} |
| API REST | https://api.{domaine}/api/v1 |
| API Docs (Swagger) | https://api.{domaine}/api/v1/docs |
| Interception emails (dev) | https://mail.{domaine} (MailHog ou équivalent) |
Les URLs réelles dépendent de votre déploiement. En environnement de test local, les ports par défaut sont 3000 (admin) / 3001 (imf) / 3002 (client) / 4000 (api) / 8025 (mailhog).
Le seed ne crée qu'un seul Super Admin. Les autres rôles (ADMIN_TECH, SUPPORT) sont à créer manuellement depuis /users/new.
| Mot de passe | Rôle | Droits | |
|---|---|---|---|
admin@qredon.io |
Admin123! |
SUPER_ADMIN | Accès total — bypass RolesGuard |
| À créer manuellement : ADMIN_TECH (gère tenants/modules, pas de suspension) · SUPPORT (lecture seule) | |||
Tenant : al-amal-mf · Mot de passe commun : Qredon2026! · Les rôles sont hiérarchisés (rang 6 → 1) et chaque utilisateur ne voit que les données de son périmètre.
| Nom complet | Rôle (rang) | Périmètre / Agence | Téléphone | |
|---|---|---|---|---|
karim.bouazizi@al-amal.tn |
Karim Bouazizi | DG (5) | Vue nationale — tout voir | — |
moez.gharbi@al-amal.tn |
Moez Gharbi | ADMIN_IMF (6) | Accès Settings — admin technique tenant | +216 70 200 008 |
sonia.mekki@al-amal.tn |
Sonia Mekki | DIRECTEUR_REGIONAL (4) | Région Grand Tunis (REG-GT) — voit 3 agences | +216 70 200 001 |
nabil.jebali@al-amal.tn |
Nabil Jebali | DIRECTEUR_AGENCE (3) | Tunis Centre (AGC-TC) | +216 70 200 002 |
rania.benamor@al-amal.tn |
Rania Ben Amor | DIRECTEUR_AGENCE (3) | La Marsa (AGC-LM) | +216 70 200 003 |
youssef.trabelsi@al-amal.tn |
Youssef Trabelsi | SUPERVISEUR_CREDIT (2) | Tunis Centre — supervise les agents | +216 70 200 004 |
fatma.chaabane@al-amal.tn |
Fatma Chaabane | AGENT (1) | Tunis Centre — assigné à plusieurs emprunteurs | +216 70 200 005 |
ahmed.dridi@al-amal.tn |
Ahmed Dridi | AGENT (1) | La Marsa — assigné aux emprunteurs Marsa | +216 70 200 006 |
salma.hamdi@al-amal.tn |
Salma Hamdi | CAISSIER (1) | Tunis Centre — enregistre les paiements | +216 70 200 007 |
| Display Name | Slug | Plan | Pays | Statut | Modules activés |
|---|---|---|---|---|---|
| Al-Amal Microfinance | al-amal-mf |
Growth | TN (TND) | ACTIVE | BORROWER_PORTAL · ADVANCED_ANALYTICS · SMS_ALERTS |
| Test IMF | test-imf |
Starter | TN (TND) | ACTIVE | (aucun) |
| Qredon Demo | qredon-demo |
Growth | TN (TND) | ACTIVE | BORROWER_PORTAL · ADVANCED_ANALYTICS · SMS_ALERTS |
Tenant : al-amal-mf · Pas de mot de passe — login par OTP SMS. En dev, le code OTP est envoyé via MailHog (interception emails locale, accessible via l'URL définie pour votre environnement).
| Téléphone | Nom | CIN | Agence | Statut KYC | Source inscription |
|---|---|---|---|---|---|
+216 55 101 001 |
Mohamed Ben Salah | 07891234 | Tunis Centre | VERIFIED | Agent manuel |
+216 55 102 002 |
Amira Zarrouki | 07892345 | La Marsa | VERIFIED | Agent manuel |
+216 55 103 003 |
Ridha Oueslati | 07893456 | Nabeul | VERIFIED | Agent manuel |
+216 55 104 004 |
Ines Bouzid | 07894567 | Tunis Centre | PENDING_REVIEW | OTP phone |
+216 55 105 005 |
Walid Chahed | 07895678 | La Marsa | PENDING_REVIEW | OAuth Google |
+216 55 106 006 |
Sarra Mansouri | (non renseigné) | Hammamet | PENDING_PROFILE | OTP phone |
+216 55 107 007 |
Hatem Khelifi | (non renseigné) | Nabeul | PENDING_PROFILE | OTP phone |
+216 55 108 008 |
Fathi Derbali | 07896789 | Tunis Centre | REJECTED | Agent manuel (revenus insuffisants) |
+216 55 109 009 |
(en cours OTP) | — | — | PENDING_OTP | OTP phone (inscription en cours) |
+216 55 110 010 |
Leila Haddad | 07897890 | La Marsa | ADDITIONAL_INFO | OTP phone (compléments demandés) |
Quand tu fais "Recevoir le code SMS" sur le Portail, l'OTP est intercepté par MailHog au lieu d'être envoyé réellement. Ouvre l'interface MailHog de votre environnement de dev et clique sur le dernier email reçu — le code 6 chiffres y figure.
| Code | Nom | Directeur |
|---|---|---|
REG-GT | Grand Tunis | Sonia Mekki |
REG-CB | Cap Bon | — |
| Code | Nom | Région | Directeur |
|---|---|---|---|
AGC-TC | Tunis Centre | Grand Tunis | Nabil Jebali |
AGC-LM | La Marsa | Grand Tunis | Rania Ben Amor |
AGC-NB | Nabeul | Cap Bon | — |
AGC-HM | Hammamet | Cap Bon | — |
docker compose -f docker-compose.local.yml exec api node dist/prisma/seed.js
Le seed est idempotent : il ne crée pas de doublons si les données existent déjà.