Flow — Cash-out (intent)
Le consumer retire du cash physique chez un agent contre son solde Nex. Cette page documente le flow en détail, incluant le simulator CMMS et les variantes master-agent.
Pour la vue synthétique avec sequence diagram bout-en-bout, voir aussi /flows/cash-in-agent qui suit la même structure architecturale en miroir (cash-in ↔ cash-out).
Vue d'ensemble — points d'entrée
Inputs par point d'entrée
| Point d'entrée | Inputs |
|---|---|
| Mobile Pro (Agent) | Bearer token agent + QR code client |
| CMMS Simulateur (Admin) | agentPhone + clientPhone — pas de QR, pas de token agent |
Résolution dans l'IntentsController
resolveAgent()— siagentPhonefourni →customerService.findByPhone→authService; sinon →@CurrentUser()du token.resolveAgentFromIntent()— si rôleadminouoperator→intent.initiatorUserId; sinon →user.userId(le caller).
Flow step-by-step
Détail de chaque use-case
| Use-case | Actions | Status sortant |
|---|---|---|
CreateIntentUseCase | 1. Résoudre le client (phone ou QR token) 2. Risk engine evaluate()3. Créer intent en DB (ledger) | CREATED |
SendOtpUseCase | 1. Auth : générer OTP aléatoire (bcrypt hash) 2. Auth → Notif : envoyer OTP | OTP_SENT |
Notifications — OtpRouting | Canal : préférence client → config système → WhatsApp par défaut. En non-production : whitelist seulement, copie email (Brevo) et copie WhatsApp (Tambila). | — |
VerifyOtpUseCase | Auth : verify OTP (bcrypt compare) | OTP_VERIFIED |
VerifyPinUseCase | Token fourni → verifyPin(token, pin)Pas de token → verifyPinByUserId(userId, pin)3 tentatives max | PIN_VERIFIED |
ConfirmIntentUseCase | 1. Résoudre comptes (agent wallet, client wallet) 2. Vérifier solde client 3. Risk engine confirm 4. Créer transaction P2P (client → agent) 5. Notification client + commission agent | PROCESSING → SUCCEEDED |
Payload de retour
transactionId, referenceId, amount + fees, status: SUCCEEDED.
State machine de l'intent
Services impliqués
| Service | Rôle |
|---|---|
| CMMS / App (Frontend) | Initiation du cash-out (mobile-pro ou CMMS simulator). |
| Orchestrator (Stateless) | Pilote le workflow, appelle les services downstream. |
| Ledger Wallets | Intent + transaction (double-entrée). |
| Auth | PIN, OTP. |
| Customer Profiles | Résolution du client par phone. |
| Risk Engine | Limites, anti-fraude (preflight + confirm). |
| Notifications | WhatsApp, SMS, email (OTP, confirmations). |