Flow — P2P (transfert entre utilisateurs Nex)
Un consumer envoie de l’argent à un autre consumer Nex (identifié par son numéro de téléphone).
Sequence diagram
Trust boundaries traversées
| Étape | Crossing | Contrôle |
|---|---|---|
| 2 | App sender → Orchestrator | JWT Firebase + RolesGuard(['consumer']) |
| 7 | Orch → Risk | JWT internal-service + scope risk:evaluate |
| 13 | App sender → Orchestrator (confirm) | JWT + PIN sender |
| 15 | Orch → Ledger | JWT internal-service + scope ledger:write |
Pré-conditions
- Sender et recipient tous deux KYC validés (au moins KYC basique selon les seuils BEAC).
- Sender a un solde suffisant (vérifié par preflight).
- Numéro de téléphone du recipient résolu sans ambiguïté.
Post-conditions
| Entity | État |
|---|---|
| Wallet sender | solde - (montant + frais) |
| Wallet recipient | solde + montant |
| Wallet frais Nex | solde + frais |
intents | status completed |
risk_evaluations | trace |
notifications | 2 enregistrements |
Acceptance criteria (Gherkin)
gherkin
Scenario: P2P réussi entre deux consumers KYC validés
Given un sender avec 50 000 XAF de solde
And un recipient KYC validé
When le sender envoie 10 000 XAF au recipient
Then l'intent est en statut "pending"
And le risk preflight renvoie "approved"
When le sender confirme avec son PIN
Then le solde du sender diminue de 10 000 XAF + frais
And le solde du recipient augmente de 10 000 XAF
And les deux reçoivent un push
Scenario: P2P refusé pour solde insuffisant
Given un sender avec 100 XAF de solde
When le sender tente d'envoyer 10 000 XAF
Then l'intent est en "failed" avec motif "solde insuffisant"
And aucune écriture ledger n'est passée
Scenario: P2P refusé pour recipient inconnu
Given un sender connecté
When le sender envoie 10 000 XAF à un numéro inconnu
Then la création d'intent échoue avec motif "destinataire inconnu"Liens
- ADR-0006 : Intent canonique
- Architecture transactions