GH GambleHub

Libros y cursos de monedas múltiples

1) ¿Qué son los «libros de monedas múltiples»?

Un libro (ledger) es un ledger transaccional de doble registro (cableado bidireccional) que se mantiene en varias monedas al mismo tiempo:
  • Wallet-book: cuenta del jugador (moneda de juego/moneda).
  • Settlement-book: cálculos con PSP/Equairer (moneda de settlement).
  • Treasury-book: cuentas bancarias, conversiones, transacciones de cobertura.
  • Libro de informes: resumen en moneda de referencia (EUR, por ejemplo) sin revaluación retrospectiva de las métricas de productos.

Cada libro registra la moneda de transacción, la moneda de representación y el tipo de cambio en el momento del reconocimiento.

2) Jerarquía de monedas y políticas

1. Base/Curso de Reporting - Moneda única de reporte (EUR, por ejemplo).
2. Wallet Currencies - Monedas de billeteras (USD/EUR/TRY/UAH, etc.).
3. Settlement Currencies - que envía PSP (por ejemplo, USD).
4. Bank Currencies es la moneda de la cuenta merchant/tesorería.

Reglas:
  • Métricas de producto (ND/NGR/ARPPU) - según el curso histórico del evento (normalmente 'settled _ at').
  • Finanzas/Trejeries: fijan además el curso en 'funded _ at' y 'payout _ at'.
  • Está prohibida la revalorización «oculta» en las vitrinas de los productos.

3) Cursos y sus fuentes

Referencia Intraday (tick/minute): Refinitiv/ECB/bancos - para normalizar los eventos.
EOD (final del día): para la revalorización de residuos (FX unrealizado).
Effective FX: del archivo PSP/banco (hecho de conversión).
Triangulación: a través del ancla (EUR o USD) en ausencia de cotización directa.
Quote policy: `mid` либо `bid/ask` → `mid ± spread_bps`. El spread se almacena por separado.

Almacenar: 'fx _ source', 'fx _ pair', 'fx _ rate', 'fx _ timestamp', 'quote _ type', 'spread _ bps', y ruta de triangulación.

4) Puntos de reconocimiento y capas de cursos

'authorize _ at' - el curso no es fijo (sin captura no hay reconocimiento).
'captured/settled _ at' es un curso histórico para la capa de producto y ND.
'funded _ at' es el curso de admisión al banco (FX realizado para FI/treasury).
'payout _ at' - curso cuando se paga al jugador.
'eod' es un curso de fin de día para revalorizar los residuos (FX unrealizado).

5) Precisión, redondeo, unidades mínimas

Dinero - unidades minoras enteras (int) + 'escala' en el directorio de monedas.
Cursos - al menos 8-10 signos después de coma.
Redondeos: bancario (medio-even) para la presentación de informes; UI - Reglas locales.
Mantener campos separados: 'amount _ original', 'amount _ wallet', 'amount _ reporting', 'amount _ effective'.

6) Grabación doble y tarjeta GL (simplificada)

Ejemplos de cableado:

6. 1. DEPOSIT_CAPTURED (GBP, informe - EUR)

Dt: AR: PSP (GBP)

Kt: Balance del jugador (GBP/EUR por billetera)

En paralelo, fijamos 'fx _ rate _ settle (GBP→EUR)' y 'amount _ reporting'.

6. 2. FUNDING_RECEIVED (USD por banco)

Dt: Bank USD

Kt: AR: PSP GBP (cerramos por el equivalente; diferencia → FX realizado).

6. 3. WITHDRAWAL_PAID (TRY)

Дт: Liability: Player (TRY)

Kt: Banco TRY (o Banco EUR + conversión; la diferencia es FX realizado).

7) Arquitectura de datos (modelo mínimo)


ref. currencies (
code PK, scale, symbol, is_crypto, is_active
)

ref. fx_rates_intraday (
pair PK, ts PK, rate, quote_type, source, spread_bps, triangulation_meta
)

ref. fx_rates_eod (
pair PK, date PK, rate, source
)

ledger. entries (
entry_id PK, book, -- WALLET      SETTLEMENT      TREASURY      REPORTING debit_account, credit_account,
amount_original, currency_original,
amount_reporting, reporting_currency,
fx_rate_at_settle, fx_source, fx_pair, fx_timestamp,
event_type, event_id, user_id, provider, method,
occurred_at, created_at, meta
)

treasury. funding_receipts (
funding_id PK, provider, bank_account,
currency, amount, fx_to_reporting, amount_reporting,
received_at, value_date, meta
)

treasury. balances (
date PK, account PK, currency PK, amount
)

dw. transactions_flat (
tx_id PK, user_id, provider, method, type, status,
amount_original, currency_original,
amount_reporting, reporting_currency, fx_rate_at_settle,
settled_at, funded_at, conversion_owner, meta
)

8) Flujo de normalización (ETL/ELT)

1. El ingesto de materias primas → la normalización de los estados PSP.
2. Asignando un curso histórico a 'settled _ at' desde 'fx _ rates _ intraday'.
3. Escribir doble cableado en el libro deseado (wallet/settlement).
4. Importación independiente de funding y effective FX.
5. Diario reval de residuos por 'fx _ rates _ eod' (treasury-book).
6. Construcción de escaparates (ND/NGR/LTV) sin revalorización retro.

9) Conciliación y consistencia

Tx→File: todos los captured/settled han sido incluidos en el archivo PSP (por montos/monedas/fechas).
File→Tx: todo en el archivo se refleja en los libros/cableado.
FX Reference vs Effective: contar 'slippage _ bps'; una alerta de salida más allá del umbral.
Triangulation Check: 'A→B B→C' ≈ 'A→C' dentro de bps-tolerance.
Idempotencia: 'event _ id' y 'idempotency _ key' - protección contra tomas.

10) Escenarios frecuentes y cómo llevarlos a cabo

Multi-wallet: la billetera del jugador puede estar en una moneda diferente al depósito - haga una conversión interna a su tasa (política 'conversion _ owner =' MERCHANT ").
Conversión PSP: almacene 'fx _ effective', 'fx _ reference' y 'spread _ bps' para analizar los márgenes PSP.
Crypto: evaluación por ventana VWAP; fundiendo en estables es la segunda capa de FX.
Transferencia Cross-wallet: movimiento dentro de la plataforma - sin ingresos FX, sólo transferencia entre los libros.

11) Plantillas SQL

11. 1. Normalización del importe en la moneda de referencia según el tipo de cambio histórico

sql
SELECT t. tx_id,
t. amount_original,
t. currency_original,
r. rate AS fx_rate_at_settle,
ROUND(t. amount_original r. rate, rep. scale) AS amount_reporting
FROM raw. transactions t
JOIN ref. fx_rates_intraday r
ON r. pair = CONCAT(t. currency_original, '/',:reporting_ccy)
AND r. ts = (
SELECT MAX(ts) FROM ref. fx_rates_intraday
WHERE pair = r. pair AND ts <= t. settled_at
)
JOIN ref. currencies rep ON rep. code =:reporting_ccy
WHERE t. settled_at BETWEEN:from AND:to;

11. 2. Medición de spread PSP (effective vs reference)

sql
SELECT provider, method, DATE(settled_at) AS d,
SUM(original_amount fx_reference_rate) AS ref_in_reporting,
SUM(settlement_amount_in_reporting)   AS eff_in_reporting,
10000 (SUM(settlement_amount_in_reporting) /
NULLIF(SUM(original_amount fx_reference_rate),0) - 1) AS spread_bps
FROM dw. fx_settlement_view
WHERE settled_at BETWEEN:from AND:to
GROUP BY 1,2,3;

11. 3. Reevaluación EOD de residuos (FX unrealizado)

sql
INSERT INTO treasury. fx_reval_ledger (date, currency, position_amount, rate_eod, amount_reporting_eod, reval_diff, type)
SELECT
:eod AS date, b. currency, b. amount,
e. rate AS rate_eod,
b. amount e. rate AS amount_reporting_eod,
b. amount (e. rate - COALESCE(l. rate_eod, e. rate)) AS reval_diff,
'UNREALIZED'
FROM treasury. balances b
JOIN ref. fx_rates_eod e
ON e. pair = CONCAT(b. currency, '/',:reporting_ccy) AND e. date =:eod
LEFT JOIN LATERAL (
SELECT rate_eod FROM treasury. fx_reval_ledger
WHERE currency=b. currency AND date=:eod - INTERVAL '1 day'
ORDER BY date DESC LIMIT 1
) l ON TRUE;

12) KPI y dashboards

FX Slippage (bps) por PSP/método/MID.
Realized FX P&L (funding/payout) и Unrealized FX (EOD/EOM).
Open FX Position por monedas vs límites de política.
Hit-rate «a tiempo de los cursos recibidos» (incidentes stale-rates).
Participación de PSP-conversion vs Merchant-conversion y su TCO.
Precisión de redondeo (desviaciones de sumas ≥ 1 unidad menor - indicador).

13) Alertas y umbrales

Stale rate: no hay curso en el momento del evento → fallback-source/retray.
Triangulation mismatch: divergencia> X bps.
Spread spike: 'spread _ bps' está por encima del umbral de mayores/mayores.
Open position breach: superando el límite de cualquier moneda.
Reval shock: revalorización diurna <−Xσ o> + X σ - rugido.

14) Mejores prácticas (corto)

1. Separe estrictamente la capa del producto (FX histórico) y FI/treasury (funding/payout/reval).
2. Use unidades menores y guarde los cursos con alta precisión.
3. Lógica el conversion_owner y mida el margen PSP (effective vs reference).
4. Realice la idempotencia de eventos y la conciliación bidireccional (Tx→File y File→Tx).
5. Mantenga la moneda anchor para triangulation y valide las discrepancias en bps.
6. Reevaluación de los residuos hacer un procedimiento EOD con una GL separada.
7. Tenga en cuenta DST/temporizadores cuando asigne cursos a settle/funding.
8. Pruebe con regularidad los redondeos (pruebas basadas en propiedades en los límites de escala).

15) Lista de verificación de implementación

  • Se ha definido la currency reporting y la política de la FX histórica.
  • Fuentes de los cursos: intraday + EOD, fallback y actualizaciones SLA.
  • Modelos 'ledger. entries`, `fx_rates_`, `funding_receipts`, `balances`, витрина `transactions_flat`.
  • Mecanismo de triangulación y registro de ruta.
  • Алерты: stale-rates, spread spike, triangulation mismatch, open position breach.
  • Los dashboards de KPI y los actos de conciliación con el PSP/banco.
  • Procedimientos reval y GL por separado para FX realized/unrealized.
  • Conjuntos de pruebas de redondeo y precisión de almacenamiento.

Los libros multi-moneda son una disciplina de separación de capas: FX histórico para el producto, real para la trejerie, EOD-revalorización para los balances. Con fuentes de tipos transparentes, un modelo de datos preciso, un registro dual y una conciliación automatizada, eliminará el «ruido de divisas» de los análisis, asegurará una auditoría y obtendrá un riesgo de FX administrado cuando se monetice globalmente.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Telegram
@Gamble_GC
Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.