Automatización de pagos y control de límites
Texto completo del artículo
1) Por qué automatizar los pagos
Velocidad y previsibilidad: los jugadores esperan cachouts rápidos y transparentes.
Riesgo y cumplimiento: RG/AML/sanciones, velocity y límites de marca/jugador/canal.
Escala: picos después de los torneos y las emisiones «calientes» - decenas de miles de solicitudes.
Costo: optimización de comisiones y saldos de tesorería por PSP/cuentas/redes.
El objetivo clave es un pago único, verificable y administrado en caso de fallos.
2) Modelo de rol de núcleo de pago
PayOut Orchestrator es una máquina de estado y sagas: acepta solicitudes, comprueba límites y reglas, enruta, retrasa, registra el resultado.
Risk & Compliance - RG/AML/KYT, cribado de sank, «cuatro ojos».
Treasury - reservas por canales, gestión de saldos, cobertura.
Wallet/Ledger es la fuente de la verdad del equilibrio; débito/compensación sólo a través de él.
PSP/Banco/Castodi/Procesador Crypto es el ejecutor final.
3) Pago flow de referencia (máquina de estado)
1. request → solicitud del frente/CRM/API.
2. precheck → RG/AML: autoexclusión/límites de pérdida/tiempo, listas de espera/RR, KYT (para crypto/monederos), estado KYC.
3. límites → verificación velocity y límites: per player/brand/region/method (dietas/semanales/mensuales).
4. dedust → idempotent 'wallet. debit` (или `hold`→`commit`) с `X-Idempotency-Key`.
5. route → selección de canal/merchant/red (reglas + coste + conversión + disponibilidad).
6. submit → envío a PSP/banco/castodi (mTLS + firmas).
7. await_settlement → espera de confirmación ('settled '/' failed') por webhook o verificación de pull.
8. notify → eventos en bus/BI, jugador - estado/ETA.
9. reconcile → conciliar los informes PSP/banco/cadena con Ledger.
10. compensate → en 'failed' - retorno a Ledger (idempotente), sobrecorriente del canal, escalada.
Invariantes:- El equilibrio sólo cambia a través de Ledger.
- «Pagos perdidos/duplicados» = 0 - provisto de idempotencia y dedup.
- Todas las transiciones son atomicamente lógicas y trazadas ('trace _ id', 'payout _ id').
4) Límites y velocidad: cómo contar correctamente
4. 1 Tipos de límites
Regulador/RG: límites de salida diurna/semanal, auto-exclusión, refrigeración.
Frod/velocity: cantidad/cantidad de transacciones, frecuencia de solicitudes, cambio de datos, dispositivos/ASN/geo.
Efectivo: límites de canal/merchant/cuenta/red, saldos de tesorería.
Quirófanos: umbrales de «rugido manual» y «cuatro ojos» (VIP/grandes sumas).
4. 2 Almacenamiento e implementación
Contadores distribuidos (Redis + TTL + Lua/atomic) en las ventanas 1h/24h/7d.
Proyecciones en OLAP para reglas avanzadas (ventanas deslizantes, patrones).
Idempotencia de los contadores: aumento solo cuando la aplicación pasa a 'submitted'.
Explainability: para cada fallo, el código de causa y «qué límite funcionó».
5) Orquestación de canales (PSP/bancos/cripto)
5. 1 Enrutamiento
Reglas sobre geo, moneda, cantidad, velocidad, valor, riesgo, disponibilidad, campamentos de SLO.
Cascadas: PSP1→PSP2 en caso de rechazo; para la red cripto de A→B.
Un enfoque A/B y bandit para optimizar la conversión y el precio.
5. 2 Características específicas de canal
Tarjetas/latas: máquinas de estado 'submitted→processing→settled', devoluciones/devoluciones por esquemas (SEPA/SWIFT).
E-wallets: límites instantáneos pero estrictos y cribado de trineos.
Crypto: Finalidad en cadena (N confirmaciones), dirección KYT, Regla de viaje entre VASP, listas de direcciones blancas, MRS/multicig, gestión de gas.
6) Seguridad y cumplimiento
mTLS + OAuth2/firmas en todos los S2S, llaves per brand/region, tokens breves y enlazados al canal.
CUS/CUT/cribado de sank-screening antes del 'submit'; para crypto - dirección de riesgo-skor/tx.
RBAC/ABAC y «cuatro ojos» a las acciones manuales/cantidades de umbral.
Auditoría WORM: registros inmutables de cambios de límites/reglas/umbrales e intervenciones manuales.
PII/residencia: datos y registros por región, encriptación en tránsito/en tránsito, RLS.
7) Idempotencia y sagas (vías monetarias)
Cada operación de grabación lleva 'X-Idempotency-Key'; repetición → el mismo resultado (200 con el viejo cuerpo).
Сага `deduct→submit→settled`:- si 'submit' ha caído - compensación ('wallet. release/credit`).
- si 'settled' no ha llegado - retraie/pereprosis, dedoup por 'payout _ id'.
- No hay correcciones manuales de balances - sólo eventos compensatorios.
8) Contratos API (fragmentos de referencia)
Crear solicitud
POST /v1/payouts
Headers: X-Idempotency-Key: po_001, X-Trace-Id: tr_a1b2
{
"player_id":"p_123",  "amount":{"amount":250. 00,"currency":"EUR"},  "method":"sepa",  "destination":{"iban":"DE89..."},  "metadata":{"brand_id":"A","region":"EU"}
}
→ 202 {"payout_id":"po_001","status":"REQUESTED","eta":"2025-10-23T18:00:00Z"}Webhook de PSP/banco/castodi
POST /webhooks/payouts
X-Signature: sha256=...
{
"event_id":"uuid",  "payout_id":"po_001",  "psp_ref":"psp_77",  "status":"SETTLED",  "occurred_at":"2025-10-23T16:21:05Z"
}Eliminación de hold/compensación
POST /v1/payouts/po_001/compensate
Headers: X-Idempotency-Key: po_001_comp
→ 200 {"status":"COMPENSATED"}9) Observabilidad y SLO
SLO (puntos de referencia):- `payout. request→submit 'p95 ≤ 120-300 ms (ruta interior),' submit→settled 'p95: tarjetas/ewallet ≤ 5-30 min, bancos SEPA ≤ T + 0/T + 1, crypto ≤ 10 min (por red), «pagos perdidos/duplicados» = 0.
- latency p50/p95/p99 por etapas, error-rate (business/4xx/5xx), retry storms, queue/DLQ lag, success-rate por canales, costo por éxito, fallo por códigos PSP/bancos, límite de activación (RG/AML/velocity).
- Senderismo: OpenTelemetry (edge→limits→wallet→router→PSP), 'trace _ id' en webhooks.
- Alertas: breach SLO, crecimiento de 'IDEMPOTENCY _ MISMATCH', salto de 'missing _ platform' en la conciliación, caída de la tasa de éxito en un geo/canal específico.
10) Tesorería y saldos
Reservas por canal/merchant/red, rebalance automático.
Políticas de umbrales: mínimos y máximos en cuentas/carteras, «restos de nuevos pagos» en la infrafinanciación.
Cobertura de divisas/cripto, contabilidad de comisiones y diferencias cambiarias.
Vitrinas financieras: el plan-hecho, el coste de la retirada a través del canal, aging los pagos «suspendidos».
11) Reconciliation (conciliación)
Informes diarios PSP/bancos/castodis/cadenas → normalización → correlación con el registro 'payouts' y las entradas de Ledger.
Категории: `match`, `timing`, `missing_psp`, `missing_platform`, `amount_mismatch`.
Auto-reglas para 'timing', tickets en 'mismatch', alertas en los umbrales.
Para crypto, correlación por 'txid/network/confirmations'.
12) Prácticas de caos y DR
Caída del PSP/banco: cascada a la alternativa, modo 'pause new payouts' para el canal.
Latencia de webhooks: estado de pull periódico, dedoup por 'event _ id'.
Salida regional: activo pasivo/activo activo (RPO ≤ 5 min, RTO ≤ 30 min).
Gas-spikes/reorgs (crypto): fee dinámico, confirmaciones adicionales, pagos de baja prioridad diferidos.
13) Hojas de cheques
Plataforma/operador
- Idempotencia en 'wallet. debit/credit/compensate`, `X-Idempotency-Key` везде.
- Velocity/RG/AML/KYT/sank screening antes del 'submit'.
- Enrutamiento y cascadas de canales, claves/certificados por marca/región.
- Auditoría WORM de límites/reglas/acciones manuales, «cuatro ojos» en los umbrales.
- SLO-dashboards y alertas, OpenTelemetry, DLQ para webhooks.
- Conciliación diaria T + 1, escaparates de mismatch, escaladas.
- Umbrales de tesorería y rebalance automático; stop mods ('no new payouts').
- Ejercicios DR/xaoc: caída de PSP/banco/red, retrasos/tomas de webhooks.
Proveedor/PSP/banco/castodi
- Webhooks firmados (HMAC/EdDSA) + timestamp/nonce, garantía de reenvío hasta 2xx.
- Códigos normalizados de causa de fallo, informes T + 1, integridad de archivos (hash/PGP).
- API de estado disponibles para las comprobaciones de pulso.
14) Anti-patrones (banderas rojas)
Débito/crédito de saldo de webhook sin un equipo explícito en Ledger.
La falta de idempotencia → la doble amortización/compensación.
Claves/certificados compartidos en varias marcas/regiones.
Los límites de velocidad se consideran «por solicitud» y no por envío confirmado.
Correcciones manuales de los estados de pagos/balances en la DB.
No hay DLQ/Dedup para webhooks → estados «incrustados».
Ausencia de T + 1 de conciliación; Compatibilidad con Excel manual.
Crypto-conclusiones sin KUT/listas blancas/confirmaciones multifactoriales.
15) Resultado
La automatización de pagos es una orquestación de dinero y riesgos: límites duros y velocity, equipos de dinero idempotente, enrutamiento razonable de canales, cumplimiento «predeterminado», observabilidad y conciliación diaria. Este transportador de payout paga rápido y una vez, es resistente a fallas y picos, transparente para el jugador, el regulador y la información financiera, y al mismo tiempo controla el costo y los riesgos del Tesoro.
