Reducción de comisiones y retrasos: almacenamiento en caché de cursos y routing de pagos
Texto completo del artículo
1) Objetivo: pagar más rápido y más barato sin perder el control del riesgo
Velocidad: menos expectativas «frías» (3-DS, batches bancarios, confirmaciones de la red).
Costo: minimizar la comisión PSP/banco/red y el spread de conversión.
Fiabilidad: zero-loss invariantes: un débito/crédito, curso predecible.
Cumplimiento: regulaciones regionales, cribado de sank, RG/AML antes del envío.
2) Servicio de cursos (FX) con almacenamiento en caché: cómo organizar correctamente
2. 1 Fuentes y calibración
Fideicomisos de precios: proveedores de liquidez/FX-API/cotizaciones PSP/cajas.
Normalización: formato único 'pair/base/quote/scale', mid-rate + margen ('markup _ bps'), tiempo de recepción 'as _ of'.
Calibración en PSP: una parte de PSP devuelve un «curso efectivo» en la respuesta; almacene el método rate cards per/PSP/geo.
2. 2 Caché y TTL
Caché caliente (Redis) en pares frecuentes (EUR↔USD, EUR↔GBP, USD↔BRL, etc.).
TTL por volatilidad: G10 - 30-120 c, EM - 10-30 c; stables - 60-300 c (por proveedor).
Ventana de Grace: admite el uso de un curso de N segundos «filtrado» para completar las intentes ya iniciadas.
2. 3 Protección antideslizante (slippage)
El cliente recibe una cotización temporal con 'expires _ at' y una drift permitida (por ejemplo, ± 20 bps).
Cuando se ejecuta:- si el mercado se ha ido dentro de drift → aplicamos un curso «reservado»;
- si va más allá → re-quote (reconfirmación) o «best-effort» sobre la política de marca.
- Para las conclusiones - budgeted FX: límite de gastos de conversión, la transacción se rechaza cuando se excede.
2. 4 Idempotencia y atomicidad
Todas las operaciones FX tienen 'X-Idempotency-Key' asociado a la suma/par/tipo de operación.
La entrada en Ledger y la fijación del curso es una saga: 'quote. lock → debit/credit → quote. release`.
Las tasas en los registros monetarios se almacenan como unidades menores + escala, sin punto flotante.
2. 5 API (referencia)
Obtener cotización (en caché)
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"
}Reservar un curso y cargar
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) Pagos de enrutamiento: elegir el camino más rápido y barato
3. 1 Factores de enrutamiento
Geo/moneda/método: mapa/SEPA/SWIFT/ewallet/cripto.
Comisiones: fix +% + FX-markup, cargos ocultos PSP/banco.
SLA: p95 'submit→settled', tasa de éxito, fallo de código.
Cut-off y ventanas de liquidación: bancos (SEPA T + 0/T + 1), redes de cifrado (carga/gas), fin de semana.
Riesgos: sanciones/AML/velocity-limites/chargeback-perfil.
Disponibilidad: estado de los canales/PSP, límites de merchant, saldos de tesorería.
3. 2 Cascadas y estrategias de bandit
Reglas detallistas para requisitos «rígidos» (jurisdicciones, licencias, suma).
En la parte superior, ε -greedy/UCB para seleccionar entre varios PSP adecuados: minimice el 'costo _ per _ success' y la latencia.
Warm-up a nuevos canales con tráfico reducido + parada rápida cuando se degradan.
3. 3 retiros «inteligentes»
Sólo repetimos los códigos retryable (timeouts, transient, bank offline).
Hedged-requests (raro, cauteloso): ejecución paralela en 2 PSP con cancelación del perdedor - para cantidades VIP/críticas, si es legalmente admisible.
Siempre con tokens PSP idempotentes para evitar la doble cancelación.
3. 4 Contabilidad de horarios
Calendario cut-off (SEPA, SWIFT, esquemas locales), «vacaciones» por país.
Scheduler: si queda  3. 5 Enrutamiento criptográfico Selección de la red por 'fee _ per _ byte/throughput/ETA', listas de direcciones blancas y reglas de ruta (Regla de viaje entre VASP). Gas dinámico: cálculo de maxFee/maxPriority, pausa de los pines de baja prioridad en los picos de gas. 3. 6 API (referencia) 4) Netting, batching y optimización on-us On-us (dentro del ecosistema): compensación mutua sin PSP externo → comisión cero, SLA instantánea. Netting: resume los cachouts pequeños en una transferencia externa (bancos/cripto) con un cableado detallado en Ledger. Batching: archivos SEPA, crypto batch (UTXO consolidation/stablecoin batch) - reducir el costo a través del gas/comisiones al por mayor. 5) Telemetría y SLO centrados en el costo y la velocidad 6) Observabilidad y auditoría Registros JSON estructurados: 'trace _ id', 'route _ id', 'payment _ id', 'psp _ ref', 'fx _ quote _ id', códigos de error. OpenTelemetry: span 'route. select → fx. quote → wallet. debit → psp. submit → webhook. settled`. Auditoría WORM: cambios en los márgenes de FX, reglas de routing, prioridades, corte de calendario. 7) Tesorería y saldos Reservas por canal/PSP/red, reequilibrio automático teniendo en cuenta las predicciones de tráfico. Políticas de remanente mínimo y modo stop "no new payouts' cuando está infrafinanciado. Hedge: auto-intercambio de stables/fiat según el plan para fijar el sprad. 8) Reconciliation (conciliaciones) e informes Registro FX: quote_id ↔ execute_id ↔ pago ↔ cableado de Ledger. Informes diarios PSP/bancos/redes ↔ Ledger: categorías 'match/timing/missing/amount _ mismatch'. Informe separado de FX-PnL: spread implementado, valor de las cotizaciones, re-quote-pérdidas. 9) Bloques arquitectónicos (microservicios) fx-service: recopilación de feeds, caché, políticas de slippage, API quote/execute. router-service: reglas, lógica de bandit, calendario cut-off, estado de los canales. treasury-service: remanentes, rebalance, presupuestos. payments-orchestrator: sagas, idempotencia, webhooks, DLQ. Везде — outbox/CDC, partition-keys по `tenant/brand/region`. 10) Hojas de cheques 11) Banderas rojas (anti-patrones) La conversión a un tipo de cambio «de mercado» sin fijar 'quote _ id' y caducidad. La ausencia de restricciones de slippage → una sorpresa negativa para el jugador. El enrutamiento es «rígidamente cosido» en el código sin telemetría y A/B. Retrés en los mismos códigos PSP que no se retractan (por ejemplo, hard decline). Ignore el corte/calendario → retrasos sistemáticos de T + 1 +. Netting/batching están desactivados con altas comisiones. Webhooks sin firma/ventana de validez → réplica. No hay outbox/CDC → eventos «perdidos» y discrepancias en los informes. 12) Conclusión La reducción de comisiones y retrasos no es un solo interruptor «mágico», sino un sistema de soluciones: cursos en caché y gestionados con protección antideslizante, routing inteligente con cascadas y lógica bandit, contabilidad de horarios y residuos, además de netting y batching. Agregue idempotencia, outbox/CDC, telemetría SLO y auditoría WORM - y sus pagos comienzan a ser más rápidos, más baratos y una vez, manteniéndose transparentes para el jugador, las finanzas y el regulador.Selección de rutas
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"
}Ejecución (con idempotencia)
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"}
Plataforma/operador
Integraciones/PSP/proveedores de FX
