Flow — Onboarding KYC (consumer)
Un nouvel utilisateur de l’app Nex passe par l’enrôlement : phone + OTP, PIN, profil minimal, KYC complet via Apentis.
Sequence diagram
Trust boundaries traversées
| Étape | Crossing | Contrôle |
|---|---|---|
| 2-7 | App → Auth (phone + OTP) | Rate limit OTP (10 tentatives / 24h), WAF |
| 11-12 | Set PIN | bcrypt serveur, PBKDF2 mobile |
| 18 | Upload fichiers KYC | Signed URLs, expiration courte |
| 22 | Orch → Apentis | API key vendor (cf. /security/secrets-management) |
| 26 | Token Firebase | Custom token (cf. ADR-0002) |
Pré-conditions
- Numéro de téléphone CEMAC supporté.
- Apentis sandbox / prod accessible (cf. vendor risk).
Post-conditions
| Entity | État |
|---|---|
users (auth) | créé avec PIN hashé |
people (KYC) | créé |
kyc_documents | enregistrés, fichiers dans file-service |
phones, contacts | créés |
| Wallet ledger | créé à 0 XAF |
| Apentis | dossier soumis, statut tracé |
Acceptance criteria (Gherkin)
gherkin
Scenario: Onboarding KYC réussi
Given un nouveau consumer avec un numéro CEMAC valide
When il complète le flow (phone, OTP, PIN, profil, documents)
And Apentis renvoie un verdict "validé"
Then son compte est créé avec KYC verified
And son wallet est initialisé à 0 XAF
And il reçoit un push de bienvenue
And il peut se connecter avec phone + PIN
Scenario: KYC en attente
When Apentis renvoie "pending_review"
Then le compte est créé mais bloqué pour transactions
And le consumer voit "Dossier en cours de vérification"
Scenario: OTP expiré
Given un OTP envoyé il y a plus de TTL
When le consumer le saisit
Then la vérification échoue
And le consumer doit relancer l'OTP
Scenario: OTP rate limit atteint
Given un consumer ayant épuisé son quota OTP / 24h
When il demande un nouvel OTP
Then la demande est rejetée
And un message d'erreur clair est affiché