GH GambleHub

Mehrwährungsbücher und Kurse

1) Was sind „Multiwährungsbücher“

Ein Ledger (Ledger) ist ein transaktionaler Ledger mit einem doppelten Datensatz (doppelseitige Transaktionen), der in mehreren Währungen gleichzeitig ausgeführt wird:
  • Wallet-Buch: Spielerkonto (Spielwährung/Währungen).
  • Settlement-Buch: Abrechnung mit PSP/acquirer (Settlement-Währung).
  • Treasury-Book: Bankkonten, Konvertierungen, Hedge-Deals.
  • Reporting-Buch: Gewölbe in Berichtswährung (z.B. EUR) ohne retrospektive Neubewertung der Produktkennzahlen.

Jedes Buch erfasst die Transaktionswährung, die Präsentationswährung und den Kurs zum Zeitpunkt der Erfassung.

2) Währungshierarchie und Politik

1. Base/Reporting Currency ist eine einheitliche Berichtswährung (z.B. EUR).
2. Wallet-Währungen sind Wallet-Währungen (USD/EUR/TRY/UAH usw.).
3. Settlement Currencies - Was die PSP sendet (z.B. USD).
4. Bank Currencies ist die Währung des Merchant/Treasury-Kontos.

Regeln:
  • Produktkennzahlen (ND/NGR/ARPPU) - nach historischem Verlauf des Ereignisses (meist 'settled _ at').
  • Finanzen/Treasury - zusätzlich fixieren sie den Kurs auf 'funded _ at' und 'payout _ at'.
  • Eine „versteckte“ Aufarbeitung in den Produktvitrinen ist verboten.

3) Kurse und ihre Quellen

Intraday reference (tick/minute): Refinitiv/EZB/banks - zur Normalisierung von Ereignissen.
EOD (Ende des Tages): zur Neubewertung von Rückständen (unrealized FX).
Effective FX: aus einer PSP/Bank-Datei (Conversion Fact).
Triangulation: durch Anker (EUR oder USD), wenn keine direkte Notierung erfolgt.
Quote policy: `mid` либо `bid/ask` → `mid ± spread_bps`. Der Spread wird separat gespeichert.

Speichern Sie: 'fx _ source', 'fx _ pair', 'fx _ rate', 'fx _ timestamp', 'quote _ type', 'spread _ bps' und die Triangulationsroute.

4) Anerkennungspunkte und Kursschichten

'authorize _ at' - Kurs wird nicht festgelegt (keine Anerkennung ohne Erfassung).
'captured/settled _ at' ist ein historischer Kurs für die Produktschicht und ND.
'funded _ at' ist der Kurs des Bankeingangs (realized FX für FI/treasury).
'payout _ at' ist der Kurs bei Auszahlung an den Spieler.
'eod' ist der Tagesendkurs für die Neubewertung von Rückständen (unrealized FX).

5) Genauigkeit, Rundungen, Mindesteinheiten

Geld - ganze minor units (int) + 'scale' im Währungsverzeichnis.
Kurse - mindestens 8-10 Dezimalstellen.
Rundungen: Bank (half-even) für die Berichterstattung; in UI - lokale Regeln.
Getrennte Felder führen: 'amount _ original', 'amount _ wallet', 'amount _ reporting', 'amount _ effective'.

6) Doppelter Eintrag und GL-Karte (vereinfacht)

Beispiele für Buchungen:

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

Dt: AR: PSP (GBP)

Kt: Spielerbilanz (GBP/EUR per Wallet)

Parallel dazu fixieren wir 'fx _ rate _ settle (GBP→EUR)' und 'amount _ reporting'.

6. 2. FUNDING_RECEIVED (USD pro Bank)

Dt: Bank USD

Ct: AR: PSP GBP (schließen durch Äquivalent; Unterschied → Realized FX)

6. 3. WITHDRAWAL_PAID (TRY)

Дт: Liability: Player (TRY)

Kt: Bank TRY (oder Bank EUR + Umwandlung; Unterschied - realized FX).

7) Datenarchitektur (Minimalmodell)


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) Normalisierungsfluss (ETL/ELT)

1. Ingest Rohstoffe → Normalisierung der PSP-Status.
2. Zuordnung eines historischen Kurses zu 'settled _ at' aus' fx _ rates _ intraday'.
3. Schreibt die Doppelbuchung in die gewünschte Arbeitsmappe (wallet/settlement).
4. Separater Funding und effective FX Import.
5. Tägliche Reval-Salden nach 'fx _ rates _ eod' (Schatzbuch).
6. Schaufensterbau (ND/NGR/LTV) ohne Retro-Aufarbeitung.

9) Abstimmung und Konsistenz

Tx→File: Alle captured/settled wurden in die PSP-Datei aufgenommen (nach Betrag/Währung/Datum).
File→Tx: Alles in der Datei spiegelt sich in den Büchern/Buchungen wider.
FX Reference vs Effective: „slippage _ bps“ zählen; alert auf den Ausgang über die Schwelle.
Triangulation Test: 'A→B B→C' ≈ 'A→C' innerhalb von bps-Tolerance.
Idempotenz: 'event _ id' und 'idempotency _ key' - Schutz gegen Takes.

10) Häufige Szenarien und wie man sie führt

Multi-Wallet: Die Geldbörse des Spielers kann in einer anderen Währung als die Einzahlung sein - führen Sie eine interne Konvertierung zu Ihrem Kurs durch (Richtlinie' conversion _ owner = 'MERCHANT').
PSP-Konvertierung: Speichern Sie' fx _ effective', 'fx _ reference' und 'spread _ bps', um die PSP-Marge zu analysieren.
Krypto: Bewertung durch VWAP-Fenster; funding in Steables ist die zweite Schicht von FX.
Cross-Wallet Transfer: Bewegung innerhalb der Plattform - keine FX-Einnahmen, nur Transfer zwischen Büchern.

11) SQL-Vorlagen

11. 1. Normalisierung des Betrags in Berichtswährung zum historischen Kurs

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. PSP-Spreizmessung (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. EOD-Neubewertung von Rückständen (unrealized FX)

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) KPIs und Dashboards

FX Slippage (bps) nach PSP/Methode/MID.
Realized FX P&L (funding/payout) и Unrealized FX (EOD/EOM).
Open FX Position auf Währungen vs Politik Grenzen.
Hit-Rate von „rechtzeitig erhaltenen“ Kursen (Stale-Rate-Vorfälle).
Anteil PSP-conversion vs Merchant-conversion und deren TCO.
Rundungsgenauigkeit (Abweichungen der Beträge ≥ 1 minor unit - flag).

13) Alerts und Schwellenwerte

Stale-Rate: Kein Kurs zum Zeitpunkt des Ereignisses → Fallback-Quelle/Retray.
Triangulation mismatch: Diskrepanz> X bps.
Spread spike: 'spread _ bps' über dem Schwellenwert für Majors/Mainers.
Offene Position breach: Überschreiten Sie das Limit für jede Währung.
Reval Shock: Tagesbewertung <− X σ oder> + X σ - Revue.

14) Best Practices (kurz)

1. Trennen Sie strikt die Produktschicht (historische FX) und FI/treasury (funding/payout/reval).
2. Verwenden Sie Minoreinheiten und speichern Sie Kurse mit hoher Genauigkeit.
3. Loggen Sie conversion_owner und messen Sie die PSP-Marge (effective vs reference).
4. Implementieren Sie die Idempotenz von Ereignissen und den bilateralen Abgleich (Tx→File und File→Tx).
5. Halten Sie die Ankerwährung für die Triangulation und validieren Sie die Diskrepanz in bps.
6. Neubewertung der Rückstände durch EOD-Verfahren mit separatem GL.
7. Berücksichtigen Sie DST/Zeitzonen, wenn Sie Kurse auf settle/funding zuweisen.
8. Rundungen regelmäßig testen (property-based tests on scale bounds).

15) Checkliste Umsetzung

  • Die Berichtswährung und die Politik des historischen FX sind definiert.
  • Kursquellen: Intraday + EOD, Fallback und SLA-Updates.
  • Modelle' ledger. entries`, `fx_rates_`, `funding_receipts`, `balances`, витрина `transactions_flat`.
  • Triangulationsmechanismus und Routenprotokoll.
  • Алерты: stale-rates, spread spike, triangulation mismatch, open position breach.
  • KPI Dashboards und Abstimmungshandlungen mit der PSP/Bank.
  • Reval- und separate GL-Verfahren für realized/unrealized FX.
  • Prüfsätze für Rundungen und Lagergenauigkeit.

Zusammenfassung

Multiwährungsbücher sind die Disziplin der Schichtentrennung: historischer FX für das Produkt, sachlich für Treasury, EOD-Neubewertung für Bilanzen. Mit transparenten Kursquellen, einem präzisen Datenmodell, einer doppelten Aufzeichnung und einem automatisierten Abgleich eliminieren Sie „Währungsrauschen“ aus der Analyse, stellen Audits sicher und erhalten ein überschaubares FX-Risiko, wenn Sie global monetarisieren.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.