Riduzione dei costi e dei ritardi: cache dei corsi e routing dei pagamenti
Testo completo dell'articolo
1) Obiettivo: pagare più veloce e più economico senza perdere il controllo del rischio
Velocità: meno aspettative «fredde» (3-DS, batch della banca, conferma della rete).
Costo: ridurre al minimo la commissione PSP/banca/rete e lo spread di conversione.
Affidabilità: zero-loss invarianti: un debito/prestito, rotta prevedibile.
Conformità: regole regionali, slot screening, RG/AML prima dell'invio.
2) Servizio di corso (FX) con cache: come eseguire correttamente
2. 1 Sorgenti e calibrazione
Fornitori di liquidità/FX-API/quote PSP/casse.
Normalizzazione: unico formato «pair/base/quote/scale», mid-rate + margine ('markup _ bps'), ora di ricezione «as _ of».
Calibrazione su PSP: la parte PSP restituisce il «corso efficiente» nella risposta; memorizzare rate cards per metodo/PSP/geo.
2. 2 Kesh e TTL
Cassetto caldo (Redis) per coppie frequenti (EUR↔USD, EUR↔GBP, USD↔BRL, ecc.).
TTL per volatilità: G10 - 30-120 c, EM - 10-30 c; pile - 60-300 c (per provider).
Grace window - Tolleranza di utilizzo del corso N secondi per completare le intenti già iniziate.
2. 3 Protezione dallo slittamento (slippage)
Al cliente viene fornita una quotazione temporanea con «expyres _ at» e il draft consentito (ad esempio, © 20 bps).
In esecuzione:- se il mercato è fuori draft, applichiamo il corso «prenotato»;
- Se è andato oltre la «re-quote» o «best-effort» per la politica del marchio.
- Per le conclusioni - budgeted FX: limite dei costi di conversione, la transazione viene rifiutata al superamento.
2. 4 Idempotenza e atomatologia
Tutte le operazioni FX hanno un'X-Idempotency-Key "associato alla somma/coppia/tipo di operazione.
Scrivere in Ledger e fissare il corso è una saga'quote '. lock → debit/credit → quote. release`.
I corsi in contanti vengono memorizzati come minor units + scale, senza punto mobile.
2. 5 API (riferimento)
Ottieni quotazione (memorizzata nella 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"
}Prenotare e cancellare il corso
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) Routing pagamenti: scegli il percorso più veloce e economico
3. 1 Fattori di instradamento
Geo/valuta/metodo: mappa/SEPA/SWIFT/ewallet/cripto.
Commissione: fix +% + FX-markup, incassi nascosti PSP/banca.
SLA: p95 «submit→settled», success-rate, guasto ai codici.
Cut-off e finestre di calcolo: banche (SEPA T + 0/T + 1), crypto-reti (carico/gas), fine settimana.
Rischi: sanzioni/AML/velocity-limits/designeback-profile.
Disponibilità: stato dei canali/PSP, limiti del merchant, saldi del Tesoro.
3. 2 Cascate e bandit strategy
Deterministic rule per i requisiti «rigidi» (giurisdizione, licenze, importo).
In alto ci sono gli eccipienti per scegliere tra più PSP appropriati: minimizziamo «cost _ per _ success» e il ritardo.
Warm-up a nuovi canali a traffico ridotto + arresto rapido in caso di degrado.
3. 3 Retrai intelligenti
Ripetiamo solo i codici retryable (timeouts, transent, bank offline).
Hedged-sollests (raramente, con cautela): avvio parallelo su 2 PSP con cancellazione del perdente - per importi VIP/critici, se legalmente accettabile.
Sempre con i token idempotati PSP per evitare la doppia cancellazione.
3. 4 Conteggio degli orari
Calendario cut-off (SEPA, SWIFT, schemi locali), festività per paese.
Scheduler: se mancano  3. 5 Crypto routing Seleziona la rete in «fee _ per _ byte/throughput/ETA», elenchi indirizzi bianchi e regole stradali (Travel Rule tra VASP). Dinamic gas: calcolo del maxFee/maxPriority, pausa delle conclusioni a bassa priorità per i gas-spine. 3. 6 API (riferimento) 4) Netting, batch e on-us ottimizzazione On-us (all'interno dell'ecosistema): riconteggio senza PSP esterno, commissione zero, SLA istantanea. Netting: riassume le piccole cache in una sola traduzione esterna (banche/cripto) con un cablaggio dettagliato in Ledger. Batching: file SEPA, cripto-batchi (UTXO consolidation/Stebloina batch) - riducono i costi con gas/commissioni all'ingrosso. 5) Telemetria e SLO basati su costo e velocità 6) Osservazione e verifica Logi JSON strutturati: «trace _ id», «route _ id», «payment _ id», «psp _ ref», «fx _ quote _ id», codici di errore. OpenTelemetry, span'route. select → fx. quote → wallet. debit → psp. submit → webhook. settled`. Controllo WORM: modifiche ai margini FX, alle regole di routing, alle priorità, al calendario cut-off. 7) Tesoro e saldi Riserve per canale/PSP/rete, rivalance automatica in base alle previsioni di traffico. Criteri per i saldi minimi e modalità di stop «no new payouts» in caso di sottofinanziamento. Hedge, l'auto swap di pile/fiat per fissare lo spread. 8) Ricomposizione e report Registro FX: quete _ id  execute _ id  il pagamento della   Ledger. Rapporti giornalieri PSP/banche/reti ↔ Ledger: categorie dì match/timing/missing/amount _ mismatch ". Rapporto FX-PnL: spread implementato, valore della quotazione, perdita re-quote. 9) Blocchi architettonici (microservizi) fx-service - Raccolta di fidi, cache, criteri di slippage, API quote/execute. router-service: regole, bandit-logic, calendario cut-off, stato dei canali. treasury-service: residui, ricalance, budget. payments-orchestrator: saghe, idimpotenza, webhoop, DLQ. Везде — outbox/CDC, partition-keys по `tenant/brand/region`. 10) Assegno fogli 11) Bandiere rosse (anti-pattern) Conversione al tasso «di mercato» senza fissare «quete _ id» o scadenza. L'assenza di restrizioni slippage è una sorpresa negativa per il giocatore. Il routing incide in codice senza telemetria e A/B. I retrai sono gli stessi codici PSP che non vengono ritracciati (ad esempio, hard decline). Ignora cut-off/calendari per ritardi sistematici T + 1 +. Il netting/batching è disattivato quando le commissioni sono alte. Webhook senza firma/finestra di validità della replica. Nessun outbox/CDC → gli eventi «persi» e le discrepanze nei rapporti. 12) Output La riduzione di commissioni e ritardi non è un singolo interruttore «magico», ma un sistema di soluzioni: corsi in cache e gestiti con protezione contro lo slittamento, routing intelligente con cascate e logiche bandit, conteggio di orari e residui, più netting e batch. Aggiungi Idampotenza, outbox/CDC, telemetria SLO e controllo WORM - e i vostri pagamenti iniziano ad andare più veloce, più economico e una volta, rimanendo trasparente per il giocatore, la finanza e il regolatore.Selezione percorso
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"
}Esecuzione (con idempotenza)
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"}
Piattaforma/operatore
Integrazioni/PSP/provider FX
