pe directoare valutare
Catalogul valutar este o variantă a catalogului de conținut și a prețurilor în care prețurile afișate, limitele, bonusurile, pariurile minime, jackpoturile și textele promoționale sunt adaptate valutei jucătorului/chiriașului/regiunii. Scopul este de a oferi punctele de preț și regulile corecte fără a copia logica și fără riscuri din cauza conversiilor on-the-fly.
Efecte cheie:- UX: pași naturali de rată și prețuri „frumoase” (₺9. 99, R $5, €0. 20).
- Venit: limite exacte și stimulează fără a „mânca prin” marje din cauza cursurilor.
- Conformitate: respectarea normelor locale (licențe, taxe, vârstă/geo).
1) Modelul de date: separat „nominal” și „reprezentare”
Prețul de bază (nominal): moneda locală unică „PLN ”/„ EUR ”/„ USD” pentru decontări.
Preț de afișare - calculat din valoarea nominală + FX + rotunjire + spread/taxe.
Politică: reguli de rotunjire, pași de pariere, limite min/max, jackpot-uri, sume bonus și pariu - setat pe valută.
yaml price_model:
base_currency: "EUR"
items:
game_spin_min:
base: 0. 10 policy: "stake_min"
game_spin_step:
base: 0. 10 policy: "stake_step"
jackpot_seed:
base: 10000 policy: "jackpot_amount"
policies:
stake_min:
per_currency:
EUR: {round: "ceil_to_step", step: 0. 10}
TRY: {round: "ceil_to_step", step: 1. 00}
BRL: {round: "ceil_to_step", step: 0. 50}
stake_step:
per_currency:
EUR: {step: 0. 10}
USD: {step: 0. 10}
CLP: {step: 50}
jackpot_amount:
per_currency:
EUR: {round: "nearest_100"}
MXN: {round: "nearest_1000"}
2) Sursa de cursuri (FX) și „prospețime”
Serviciul FX este un singur punct de adevăr pentru conversii:- Furnizor curs: principal și rezervă; rata de reîmprospătare (de exemplu, fiecare minut pentru volatil, la fiecare 15 minute pentru stabil).
- Tulpină mărginită: SLA „cursuri nu mai vechi de Δ t” (de exemplu, p95 ≤ 5 min).
- Spread și comisioane: configurate pe chiriaș/regiune/monedă.
- Freeze ferestre: „congela” cursuri pentru meci/turneu/promo ferestre, astfel încât prețul nu „sari”.
- Audit: Versiuni Log FX with 'valid _ from/valid _ to' to play checks.
json
{
"as_of":"2025-10-31T12:00:00Z",
"base":"EUR",
"rates": { "TRY":34. 10, "BRL":5. 42, "MXN":19. 1, "UAH":43. 6, "USDT":1. 00 },
"spread_bps": { "TRY":120, "BRL":60 },
"fees_pct": { "default":0. 15 }
}
3) Rotunjire și „frumos” puncte de preț
Rotund după FX și se răspândește:- Preturi/pachete: '99', '9. 99`, `4. 90 '(puncte psihologice).
- Ratele și pașii: „ceil_to_step” la pasul valutar (₺1, CLP $50).
- Bonusuri: rotunjire până la pasul voucher (R $1/ ₺5).
- Ordinea operațiunilor: 'raw = base fx (1 + spread) (1 + fee)' → 'rounded = round_policy (raw)' → 'min/max clemă'.
Anti-exemplu: „rotunjirea bancară” pentru rate poate da pași „urâți” - utilizați politici explicite.
4) Limite, min/max și jackpot-uri
Min/Max per monedă-Luați în considerare legile locale și constrângerile RGS.
Jackpot-uri: În cazul în care furnizorul deține un jackpot în moneda lor (ex. EUR), afişează fie un echivalent localizat (informator), fie păstrează piscine per monedă.
Pași valutari: CLP/JPY fără copeici - toate limitele sunt întregi.
sql
CREATE TABLE currency_limits (
tenant_id text,
currency text,
feature text, -- spin_min, spin_max, deposit_min, payout_max, jackpot_min value numeric,
step numeric,
PRIMARY KEY (tenant_id, currency, feature)
);
5) Bonusuri și vouchere pe valută
Valoarea bonusului: configurat pe monedă (nu „recalculare” în frunte).
Pariu: stocați ca multiplicator (x30) sau ca sumă valutară; evitați amestecarea.
Câștigați cap/cash out: de asemenea, pe valută.
Texte de marketing: localizarea numerelor și moneda în șabloane fără hardcode.
yaml bonus:
welcome_pack:
EUR: {amount: 100, wager_x: 35, cap: 500}
BRL: {amount: 500, wager_x: 40, cap: 2500}
TRY: {amount: 2500, wager_x: 40, cap: 12500}
6) Restricțiile furnizorului (RGS/PSP)
RGS: unele jocuri nu sunt disponibile pentru „cripto ”/valute locale; unii furnizori necesită minime fixe (de exemplu, 0 €. 20).
PSP: metodele de plată depind de valută (PIX ↔ BRL, PayID ↔ AUD, Papara ↔ TRY); limitele de depunere/retragere sunt, de asemenea, diferite.
Regulă: Catalog/storefront filtrează jocurile și metodele de plată în funcție de monedă și jurisdicție înainte de afișare.
7) Contur arhitectural
Magazin de politici valutare (CP) - tabele de reguli pe valută (pași, limite, puncte de preț, rotunjire).
Serviciu FX: memorie cache de cursuri, versiuni și prospețime SLA.
Constructor catalog: produce modele de citire pe valută (proiecții).
Reading Layer API: extrudează proiecțiile finite; nu există conversii on-the-fly în pista fierbinte UI.
Outbox → Projections: FX/policy changes → 'CurrencyPolicyUpdated/FXUpdated' events → incremental window updates.
read_catalog_{tenant}_{region}_{currency}
Partiționarea valutară accelerează reîmprospătarea și colectarea metrică.
8) Proiecții pe monedă (exemplu)
sql
CREATE TABLE read_catalog_currency (
tenant_id text,
region text,
currency text,
game_id text,
price_min numeric, -- displayed min-rate price_step numeric,
jackpot numeric,
bonus_badge text,
as_of timestamptz,
PRIMARY KEY (tenant_id, region, currency, game_id)
);
Actualizări - idempotent 'UPSERTS' de la evenimente de director + evenimente FX/politici.
9) Formatare și localizări
Simbol/cod: '₺/TRY', 'R $/BRL', '€', 'USDT' (pentru cripto - fără copeici sau cu 2 caractere, conform politicii UX).
Separator de grupare și zecimale: depinde de „locale” (ru_RU, tr_TR, pt_BR).
RTL/localizări arabe: o verificare separată a corectitudinii semnului valutar.
10) Caching și performanță
Răspunsurile catalogului cache pe monedă pentru 30-120 s; Dați indicatorul FX „as _ of” în răspuns.
Dezactivat: 'FXUpdated '/' PolicyUpdated '/' GameUpserted' evenimente → vizate cheia cache culoare.
Paginare cu cursoare, astfel încât ordinea cărților nu „sari” cu actualizări de preț mici.
11) Observabilitate și SLO
Măsurători:- 'catalog _ p95 _ ms' по валютам,' fx _ freshness _ ms' (p50/p95/p99), 'policy _ refresh _ latency _ ms'.
- Ponderea prețurilor „urâte” (nu se află pe treaptă), cota tranzacțiilor respinse din cauza limitelor.
- Discrepanță „casetă de prezentare vs calcul” la check-out (în cazul în care are loc debitul real).
- FX mai vechi decât SLA, creșterea erorilor de rotunjire, creșterea defecțiunilor limitelor PSP.
- RGS minim și afișarea nepotrivirii minime.
12) Conformitate, taxe și rezidență
Per monedă ≠ pe țară: urmați combinația de 'valută + geo + licență'.
Reguli/taxe fiscale - în politica valutară și în cec.
Rezidență: date și calcule pentru monedele locale - în regiunea corespunzătoare.
13) Testarea
Pe bază de proprietate: invariant „după conversie și rotunjire, prețul se află pe treaptă”; „min ≤ valoare ≤ max”.
Cazuri de aur: set de valute de referință/prețuri pentru regresie.
Haos FX: cursuri de „sărituri”, ferestre înghețate, comutare furnizor FX.
E2E: matchability a sumei de pe caseta de prezentare și suma totală scrisă; toleranță ≤ 0. 01 unități valutare (sau 1 pas).
14) Erori tipice
Recalculați în zbor la API-ul citit → UX instabil și p99 ridicat.
Ignorați mișcările valutare (CLP/JPY) → jumătate de penny și RGS/PSP eșecuri.
Obisnuinta (rotunjirea bancherilor) in loc de reguli clare per politica.
Este → imposibil să nu se stabilească versiunea FX în check pentru a rezolva disputele.
Cupiurile bonus unice prin FX → numere „ciudate” pentru piețele locale.
Ascunderea taxelor în FX fără transparență este un risc de creanțe și amenzi.
15) Rețete rapide
Pariuri în TRY/BRL: pas ₺1/R $0. 50, runda min-rate până la pas, „frumos” puncte de preț pentru pachete.
Crypto (USDT/USDC) pas $0. 10, rotunjire la cel mai apropiat pas, fără comisioane în spectacol (dar vizibile în cec).
Volatilitate mare FX: congela pentru meci/promo; alerte la> X% din prețul de bază.
Multi-chiriaș: diferite spread-uri/pași în mărci; corectitudine în calculele de proiecție per chiriaș.
16) Exemplu de configurare (o singură sursă de adevăr)
yaml catalog_currency:
base_currency: EUR fx_sla_ms: 300000 # 5 minutes rules:
- currency: "TRY"
stake_step: 1. 00 stake_min: 5. 00 display_round: "ceil_to_step"
psychological_points: [9, 19, 29, 49, 99]
psp_methods: ["Mefete","Papara","Crypto"]
- currency: "BRL"
stake_step: 0. 50 stake_min: 1. 00 display_round: "ceil_to_step"
psychological_points: [4. 90, 9. 90, 19. 90, 49. 90]
psp_methods: ["PIX","Boleto","Cards"]
- currency: "CLP"
stake_step: 50 stake_min: 200 display_round: "ceil_to_step"
psp_methods: ["WebPay","Cards"]
jackpot:
display_policy:
EUR: "nearest_100"
MXN: "nearest_1000"
bonuses:
welcome:
EUR: {amount: 100, wager_x: 35}
BRL: {amount: 500, wager_x: 40}
TRY: {amount: 2500, wager_x: 40}
17) Lista de verificare pre-vânzare
- Moneda de bază unică și versiunea FX în fiecare verificare/eveniment.
- Politicile de rotunjire/pas/limită sunt stabilite pe monedă și acoperite de teste.
- Proiecțiile directorului pe monedă sunt gata; modul fierbinte nu se convertește.
- Jackpot-urile și bonusurile sunt afișate corect/picurate pe monedă.
- Metodele PSP sunt filtrate în funcție de monedă; limitele coincid cu vitrina.
- Sunt configurate SLA-uri și alerte de prospețime FX; congela ferestrele pentru evenimente volatile.
- Localizarea numerelor și simbolurilor valutare; șabloane promo non-hardcode.
- Modificări ale politicii de audit/FX; verificați reproductibilitatea.
- Multi-chiriaș/regiune: izolarea datelor, diferite răspândiri și limite.
- Playbook-uri incidente: salt FX, nepotrivire minimă RGS, eșec limită PSP.
Concluzie
pe cataloage valutare sunt o disciplină inginerească, nu "se multiplică prin curs. "Denominarea și reprezentarea separată, centralizarea politicilor FX și rotunjirea, materializarea proiecțiilor pe monedă și măsurarea prospețimii. Apoi, caseta de prezentare va fi rapidă, previzibilă și onestă, iar afacerea va fi protejată de pierderi de marjă ascunse și surprize de reglementare pe piețele locale.