Réduction des frais et des retards : mise en cache des cours et itinérance des paiements
Texte intégral de l'article
1) Objectif : payer plus vite et moins cher sans perdre le contrôle du risque
Vitesse : moins d'attentes « froides » (3-DS, batchi de banque, confirmation de réseau).
Coût : réduire au minimum les frais PSP/banque/réseau et les frais de conversion.
Fiabilité : invariants zero-loss : un débit/crédit, un taux prévisible.
Conformité : réglementation régionale, contrôle de luge, RG/AML avant expédition.
2) Service de cours (FX) avec le keshing : comment organiser correctement
2. 1 Sources et étalonnage
Price Fids : fournisseurs de liquidités/FX-API/devis PSP/caisses.
Normalisation : format unique 'pair/base/quote/scale', mid-rate + marge ('markup _ bps'), temps de réception 'as _ of'.
Étalonnage sur le PSP : une partie du PSP renvoie le « cap effectif » dans la réponse ; stocker rate cards per methode/PSP/geo.
2. 2 Cash et TTL
Cache chaud (Redis) sur les couples fréquents (EUR↔USD, EUR↔GBP, USD↔BRL, etc.).
TTL en volatilité : G10 - 30-120 c, EM - 10-30 c ; stables - 60-300 c (par fournisseur).
Fenêtre Grace : permet d'utiliser le cours « percé » N secondes pour terminer les intents déjà commencés.
2. 3 Protection contre le glissement (slippage)
Le client reçoit un devis temporaire avec 'expires _ at' et un drift autorisé (par exemple, ± 20 bps).
Lors de l'exécution :- si le marché a quitté le drift → applique un cours « réservé » ;
- s'il est allé plus loin que → re-quote (re-confirmation) ou « best-effort » sur la politique de la marque.
- Pour les inférences - budget FX : limite des coûts de conversion, la transaction est rejetée en cas de dépassement.
2. 4 Idempotence et atomicité
Toutes les opérations FX ont un 'X-Idempotency-Key' associé à la somme/paire/type d'opération.
L'enregistrement dans Ledger et la fixation du cours sont une saga : 'quote. lock → debit/credit → quote. release`.
Les cours dans les registres monétaires sont stockés comme minor units + scale, sans point flottant.
2. 5 API (référence)
Obtenir un devis (cache)
GET /v1/fx/quote? base=EUR"e=USD&side=buy&amount_minor=100000
→ 200 {
"pair":"EUR/USD","rate":"1. 08123","markup_bps":15,  "expires_at":"2025-10-23T12:00:15Z","quote_id":"q_abc"
}Réserver un cours et débiter
POST /v1/fx/execute
Headers: X-Idempotency-Key: fx_exec_001
{
"quote_id":"q_abc","amount_minor":100000,"pair":"EUR/USD"
}
→ 200 {"status":"filled","avg_rate":"1. 08125","fx_entry_id":"fx_77"}3) Routage de paiement : choisir le chemin le plus rapide et le moins cher
3. 1 Facteurs de routage
Géo/monnaie/méthode : carte/SEPA/SWIFT/ewallet/crypto.
Commissions : fix + % + FX-markup, frais cachés PSP/banque.
SLA : p95 'submit→settled', taux de réussite, échec par code.
Cut-off et fenêtres de calcul : banques (SEPA T + 0/T + 1), réseaux crypto (charge/gaz), sortie.
Risques : sanctions/AML/velocity-limit/chargeback-profile.
Disponibilité : état des canaux/PSP, limites du merchant, soldes du Trésor.
3. 2 Cascades et stratégies bandit
Règles deterministes pour les exigences « dures » (juridictions, licences, montant).
En haut, ε -greedy/UCB pour choisir entre plusieurs PSPs appropriés : minimiser 'cost _ per _ success' et latence.
Warm-up vers de nouveaux canaux avec trafic réduit + arrêt rapide en cas de dégradation.
3. 3 Retraits « intelligents »
Nous ne répétons que les codes retryable (timeouts, transient, banque offline).
Hedged-requests (rarement, attention) : lancement parallèle sur 2 PSP avec annulation du perdant - pour les montants VIP/critiques, si légalement acceptable.
Toujours avec des jetons PSP idempotent pour éviter le double débit.
3. 4 Compte des horaires
Calendrier cut-off (SEPA, SWIFT, circuits locaux), « vacances » par pays.
Scheduler : s'il reste  3. 5 Routage crypto Sélection du réseau par 'fee _ per _ byte/throughput/ETA', listes d'adresses blanches et règles routières (Travel Rule entre VASP). Gaz dynamique : calcul maxFee/maxPriority, pause des conclusions de faible priorité dans les picots de gaz. 3. 6 API (référence) 4) Netting, Batching et Optimisation on-us On-us (à l'intérieur de l'écosystème) : calcul mutuel sans PSP externe → commission zéro, SLA instantanée. Netting : résumer les petits cachouts en une seule traduction externe (banques/crypto) avec câblage détaillé dans Ledger. Batching : Les fichiers SEPA, les crypto-batches (UTXO consolidation/steiblcoin batch) réduisent le coût du gaz en gros/commissions. 5) Télémétrie et SLO orientés vers le coût et la vitesse 6) Observation et audit Logs JSON structurés : 'trace _ id', 'route _ id', 'payment _ id', 'psp _ ref', 'fx _ quote _ id', codes d'erreur. OpenTelemetry : span'route. select → fx. quote → wallet. debit → psp. submit → webhook. settled`. Audit WORM : modifications des marges FX, des règles d'itinérance, des priorités, du calendrier coupe-off. 7) Trésorerie et soldes Réserves par canal/PSP/réseau, rééquilibrage automatique en tenant compte des prévisions de trafic. Les politiques de résidus minimaux et le mode stop « no new payouts » en cas de sous-financement. Hedge : Auto-swap stabls/fiata comme prévu pour fixer le sprade. 8) Reconnaissance (rapprochement) et rapports Registre FX : quote_id ↔ execute_id ↔ le paiement ↔ l'affichage Ledger. Rapports quotidiens PSP/banques/réseau ↔ Ledger : catégories 'match/timing/missing/amount _ mismatch'. Rapport séparé FX-PnL : sprade réalisé, valeur des cotations, re-quote-perte. 9) Unités architecturales (microservices) fx-service : collecte de fids, cache, stratégies de slippage, API quote/execute. router-service : règles, bandit-logique, calendrier cut-off, état des canaux. treasury-service : soldes, rebalance, budgets. payments-orchestrator : sagas, idempotence, webhooks, DLQ. Везде — outbox/CDC, partition-keys по `tenant/brand/region`. 10) Chèques-feuilles 11) Drapeaux rouges (anti-modèles) Conversion au taux de change "marché" sans fixation "quote _ id'et durée de validité. L'absence de restrictions slippage → une surprise négative pour le joueur. Le routage est « dur » dans le code sans télémétrie et A/B. Retraits sur les mêmes codes PSP qui ne sont pas rétractés (par exemple, dur decline). Ignorer cut-off/calendriers → retards systématiques T + 1 +. Netting/Batching est désactivé avec des commissions élevées. Webhooks sans signature/fenêtre de validation → relais. Il n'y a pas d'outbox/CDC → d'événements « perdus » et de divergences dans les rapports. 12) Conclusion La réduction des commissions et des retards n'est pas un commutateur « magique », mais un système de solutions : des cours cachés et gérés avec protection contre le glissement, un routage intelligent avec cascades et logique bandit, un compte des horaires et des résidus, plus le netting et le batch. Ajoutez l'idempotence, l'outbox/CDC, la télémétrie SLO et l'audit WORM - et vos paiements commencent à aller plus vite, moins cher et une fois, tout en restant transparent pour le joueur, les finances et le régulateur.Sélection de l'itinéraire
POST /v1/payments/route
{
"amount":{"minor_units":5000,"currency":"EUR"},  "method":"card","geo":"DE","direction":"payout"
}
→ 200 {
"route_id":"rt_001",  "candidates":[
{"psp":"A","eta_sec":420,"cost_minor":85,"success_rate":0. 91},   {"psp":"B","eta_sec":360,"cost_minor":120,"success_rate":0. 96}
],  "recommend":"B"
}Exécution (avec idempotence)
POST /v1/payments/submit
Headers: X-Idempotency-Key: pay_001
{ "route_id":"rt_001","psp":"B", "fx_quote_id":"q_abc" }
→ 202 {"payment_id":"pm_777","status":"SUBMITTED"}
Plate-forme/opérateur
Intégrations/PSP/fournisseurs FX
