Directory per currency
Catalogo per currency è una versione di catalogo di contenuti e price, dove prezzi, limiti, bonus, tassi minimi, jackpot e testi promo sono adattati alla valuta giocatore/tenante/regione. L'obiettivo è dare le giuste price-point e regole senza copipast logiche e senza rischi a causa delle conversioni «al volo».
Effetti chiave:- Le fasi di scommessa naturali e i prezzi «belli» (₺9). 99, R$5, €0. 20).
- Reddito: limiti precisi e busti senza «mangiare» i margini a causa dei corsi.
- Conformità alle regole locali (licenze, tasse, age/geo).
1) Modello dati: condividiamo «nominale» e «rappresentazione»
Base Price (nominale): valuta unica interna PLN/EUR/USD per i calcoli.
Display Price - Viene calcolato da + FX + arrotondamento + sconto (spread/fees).
Policy: regole di arrotondamento, passaggi di puntata, limiti di min/max, jackpot, bonus e wager - configurabili per currency.
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) Origine corsi (FX) e «freschezza»
Servizio FX - un unico punto di verità per le conversioni:- Fornitore di corsi: base e riserva frequenza di aggiornamento (ad esempio ogni minuto per volatili, ogni 15 minuti per stabili).
- Bounded staleness: SLA «corsi non più vecchi di ≤ t» (ad esempio p95-5 min).
- Spread e commissioni: configurabili per tenant/region/currency.
- Freeze windows: «congelare» il corso di partita/torneo/finestra promozionale in modo che il price non «salta».
- Controllo: riepilogo delle versioni FX con'valid _ from/valid _ to 'per riprodurre gli assegni.
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) Arrotondamento e «belli» ponti price
Arrotondare dopo FX e spread:- Prezzi/pacchetti: '99', '9. 99`, `4. 90 '(punti psicologici).
- Puntate e passaggi: «ceil _ to _ step» al passo valutario (₺1, CLP $50).
- Bonus: arrotondamento al passo del voucher (R $1/1).
- Ordine delle operazioni: 'raw = base fx (1 + spread)' → 'rounded = round _ policy (raw)' → 'min/max clamp'.
Anti-esempio, «arrotondamento bancario» per i tassi può dare dei passi «impropri» - usare politiche esplicite.
4) Limiti, min/max e jackpot
Min/Max per currency - Tiene conto delle leggi locali e dei vincoli RGS.
Jackpot: se il provider tiene il jackpot nella propria valuta (ad esempio, EUR), mostra l'equivalente localizzato (informatore) o conserva i pool per valuta.
Passo valuta: CLP/JPY senza centesimi - tutti i limiti sono interi.
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) Bonus e voucher per currency
Il valore del bonus è configurato per currency (non «riconteggio» in fronte).
Wager: memorizza come moltiplicatore (x30) o come importo in valuta; Evitate la miscela.
Anche la casella vincitrice/cache è per currency.
Testi di marketing: localizzazione dei numeri e valuta nei modelli senza 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) Restrizioni provider (RGS/PSP)
RGS: alcuni giochi non sono disponibili per valute crypto/locali; alcuni provider richiedono minimi fissi (per esempio, €0. 20).
PSP: i metodi di pagamento dipendono dalla valuta (PIX BRL, AUD, Papara TRY); Anche i limiti di deposito/uscita sono diversi.
Regola: catalogo/vetrina filtra giochi e modalità di pagamento valuta e giurisdizione prima della visualizzazione.
7) Tracciato architettonico
Currency Policy Store (COP) - Tabelle di regole per currency (passi, limiti, price point, arrotondamenti).
Servizio FX: cache di corsi, versione e SLA di freschezza.
Directory builder - Produce Read Models per currency (proiezioni).
API del livello di lettura - Estrae le proiezioni finite nessuna conversione on-the-fly nel percorso caldo UI.
Outbox Proiezioni: le modifiche FX/Policy all'evento « » gli update incrementali delle vetrine.
read_catalog_{tenant}_{region}_{currency}
La ripartizione sulla valuta accelera il refresh e la raccolta delle metriche.
8) Proiezioni per currency (esempio)
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)
);
Gli aggiornamenti sono Idempotent UPSERT da eventi catalogo + eventi FX/regole.
9) Formattazione e localizzazione
Il simbolo/codice è «₺/TRY», «R $/BRL», «€», «USDT» («crypto» - senza centesimi o con 2 caratteri, secondo la regola UX).
Raggruppamento e separatore decimale: dipende da «locale» (ru _ RU, tr _ TR, pt _ BR).
RTL/locale arabo: verifica separata della correttezza del segno di valuta.
10) Cache e prestazioni
Risposte per currency catalane nella cache 30-120 s; Indicatore FX «as _ of» nella risposta.
Disabilità: gli eventi FXUDpdated/« »/« »sono finalizzati alla pulizia delle chiavi della cache.
La paginazione con i puntatori per evitare che l'ordine delle schede salti con i piccoli update price.
11) Osservabilità e SLO
Metriche:- `catalog_p95_ms` по валютам, `fx_freshness_ms` (p50/p95/p99), `policy_refresh_latency_ms`.
- Percentuale di prezzi «impropri» (non al passo), percentuale di transazioni rifiutate a causa dei limiti.
- Variazione della vetrina vs per l'assegno-out (dove si verifica il debito reale).
- FX più vecchio di SLA, aumento degli errori di arrotondamento, aumento dei guasti PSP sui limiti.
- Non corrispondenza tra il minimo RGS e il minimo vetrino.
12) Complaens, tasse e residency
Per currency per country: controlla la combinazione'currency + geo + license '.
Regole fiscali/fee - nella politica di valuta e nell'assegno.
Residency - Dati e calcoli per le valute locali - nella regione corrispondente.
13) Test
Property-based: invariante «dopo la conversione e l'arrotondamento, il prezzo è al passo»; «min ≤ value ≤ max».
Golden-case - un insieme di valute/price di riferimento per la regressione.
Chaos FX: corso «saltatore», freeze windows, FX provider.
E2E: la parzialità dell'importo in vetrina e il prelievo finale; tolerance 0. 01 unità di valuta (o 1 passo).
14) Errori tipici
Conteggia al volo l'API di lettura con un UX instabile e un p99 alto.
Ignora passaggi di valuta (CLP/JPY): «metà» e guasti RGS/PSP.
Arrotonda «per abitudine» invece di regole chiare per policy.
Non fissare la versione FX nell'assegno non è possibile smontare le controversie.
Un unico bonus tramite FX → numeri «strani» per i mercati locali.
Nascondere le commissioni in FX senza trasparenza è un rischio di reclami e multe.
15) Ricette veloci
Le scommesse in TRY/BRL sono un passo ₺1/R $0. 50, min. di arrotondare verso l'alto al passo, «bei» ponti price per i sacchetti.
Crypto (USDT/USDC) - Passo $0. 10, arrotondamento al passo successivo, nessuna commissione nella proiezione (ma visibile nell'assegno).
High-volatility FX: freeze per partita/promo; alert in caso di deviazione> X% dal price base.
Multi-tenant: differenze di spread/passo nei marchi; fairness nei calcoli delle proiezioni per tenant.
16) Esempio di configurazione (sorgente unica della verità)
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) Foglio di assegno prima della vendita
- Moneta di base unica e versione FX in ogni assegno/evento.
- I criteri di arrotondamento/passo/limite sono impostati per currency e coperti da test.
- Le proiezioni del catalogo per currency sono pronte; Il percorso caldo non fa conversioni.
- Jackpot e bonus sono correttamente visualizzati/gocciolati per currency.
- i metodi PSP vengono filtrati per valuta; i limiti corrispondono alla vetrina.
- SLA freschezza FX e gli alert sono configurati; freeze windows per eventi volatili.
- Localizzazione di numeri e simboli di valuta modelli di promo senza hardcode.
- Controllo delle modifiche alle regole/FX; riproducibilità dell'assegno.
- Multi-tenant/regione - isolamento dei dati, differenze di spread e limiti.
- Playbook incidenti: salto FX, non corrispondenza RGS minimo, guasto dei limiti PSP.
Conclusione
I cataloghi per currency sono una disciplina dell'ingegneria, non «moltiplicare per corso». Separare il valore e la rappresentazione, centralizzare FX e i criteri di arrotondamento, materializzare le proiezioni per currency e misurare la freschezza. Allora la vetrina sarà veloce, prevedibile e onesta, e le imprese saranno protette da perdite di margine nascoste e sorprese regolatorie sui mercati locali.