per currency kataloqları
per currency kataloqu, göstərilən qiymətlərin, limitlərin, bonusların, minimum dərəcələrin, cekpotların və promo mətnlərinin oyunçu/tenant/region valyutasına uyğunlaşdırıldığı məzmun və qiymət kataloqu variantıdır. Məqsəd düzgün qiymət nöqtələri və qaydaları mantığın kopipastı olmadan və «uçuşda» konvertasiyalara görə risksiz verməkdir.
Əsas effektlər:- UX: təbii bahis addımları və «gözəl» qiymətlər (₺9. 99, R$5, €0. 20).
- Gəlir: kurslara görə marjanı «yemədən» dəqiq limitlər və gücləndiricilər.
- Komplayens: yerli qaydalara uyğunluq (lisenziyalar, vergilər, age/geo).
1) Data modeli: «nominal» və «təqdimat» bölünür
Base Price (nominal): hesablaşmalar üçün vahid daxili valyuta 'PLN '/' EUR '/' USD'.
Display Price (təqdimat): + FX + yuvarlaqlaşdırma + marjalar/endirimlər (spread/fees) nominalından hesablanır.
Policy: yuvarlaqlaşdırma qaydaları, bahis addımları, min/max limitləri, cekpotlar, bonus məbləğləri və wager - 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) Kursların mənbəyi (FX) və «təravət»
FX xidməti - konvertasiya üçün vahid həqiqət nöqtəsi:- Kursların təchizatçısı: əsas və ehtiyat; yeniləmə tezliyi (məsələn, dəyişkən üçün hər dəqiqə, sabit üçün hər 15 dəqiqə).
- Bounded staleness: SLA «kursları Δ t» (məsələn, p95 ≤ 5 dəq).
- Spread və komissiyalar: per tenant/region/currency konfiqurasiyası.
- Freeze windows: qiymət «atlama» deyil matç/turnir/promo pəncərələri üçün «dondurma» kursları.
- Audit: çek oynamaq üçün FX versiyası c 'valid _ from/valid _ to.
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) Yuvarlaqlaşdırma və «gözəl» qiymət nöqtələri
FX və spreadlərdən sonra yuvarlaqlaşdırın:- Qiymətlər/paketlər: '99', '9. 99`, `4. 90 '(psixoloji nöqtələr).
- Dərəcələr və addımlar: valyuta addımına «ceil_to_step» (₺1, CLP $50).
- Bonuslar: çek addım aşağı yuvarlaq (R $1/₺ 5).
- Əməliyyat qaydası: 'raw = base fx (1 + spread) (1 + fee)' → 'rounded = round_policy (raw)' → 'min/max clamp'.
Anti-nümunə: bahislər üçün «bank yuvarlaqlaşdırılması» «çirkin» addımlar verə bilər - açıq siyasətlərdən istifadə edin.
4) Limitlər, min/max və jekpotlar
Min/Max per currency: yerli qanunlar və RGS məhdudiyyətləri nəzərə alınır.
Jackpotlar: Əgər provayder öz valyutasında jackpot saxlayırsa (məsələn, EUR), ya lokallaşdırılmış ekvivalenti (informer) göstərin, ya da per-valyuta pullarını saxlayın.
Valyuta addımları: qəpiksiz CLP/JPY - bütün limitlər tam ədəddir.
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) per currency bonuslar və vauçerlər
Bonus nominalı: per currency («yenidən hesablama» deyil) konfiqurasiyası.
Wager: çoxluq (x30) və ya valyuta məbləği kimi saxlayın; qarışmaqdan çəkinin.
Cap win/cash-out: həm də per currency.
Marketinq mətnləri: nömrələrin lokallaşdırılması və hardcode olmadan şablonlarda valyuta.
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) Provayder məhdudiyyətləri (RGS/PSP)
RGS: Bəzi oyunlar 'crypto '/yerli valyutalar üçün əlçatmazdır; bəzi provayderlər sabit minimum tələb (məsələn, €0. 20).
PSP: ödəniş metodları valyutadan asılıdır (PIX, BRL, PayID, AUD, Papara, TRY); depozit/çıxarış limitləri də fərqlidir.
Qayda: Kataloq/vitrin göstərilməzdən əvvəl valyuta və yurisdiksiya üzrə oyunlar və ödəniş üsullarını süzür.
7) Memarlıq konturu
Currency Policy Store (CP): per currency qaydaları cədvəlləri (addımlar, limitlər, qiymət nöqtələri, yuvarlaqlaşdırmalar).
FX-xidmət: cache kursları, versiyası və SLA təravət.
Kataloq-bilder: Read Models per currency (proyeksiyalar) istehsal edir.
API oxu təbəqəsi: hazır proyeksiyaları çəkir; UI isti yolda heç bir on-the-fly konvertasiya.
Outbox → Proyeksiyalar: dəyişən FX/siyasət → hadisələr 'CurrencyPolicyUpdated/FXUpdated' → vitrin artıklığı.
read_catalog_{tenant}_{region}_{currency}
Valyuta ilə partizanlaşdırma refresh və metrlərin toplanmasını sürətləndirir.
8) per currency proyeksiyaları (nümunə)
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)
);
Yeniləmələr - kataloq hadisələrindən + FX/siyasət hadisələrindən idempotent 'UPSERT'.
9) Formatlaşdırma və lokallar
Simvol/kod: '₺/TRY', 'R $/BRL', '€', 'USDT' (kriptovalyutası üçün - heç bir qəpik və ya UX siyasətinə görə 2 işarə ilə).
Qruplaşdırma və onluq ayırıcı: 'locale' (ru_RU, tr_TR, pt_BR) asılıdır.
RTL/Ərəb lokalları: valyuta nişanının düzgünlüyünün ayrıca yoxlanılması.
10) Caching və Performance
Kataloq cavabları per currency cache 30-120 s; FX göstərici 'as _ of "cavabında verin.
Əlillik: hadisələr 'FXUpdated '/' PolicyUpdated '/' GameUpserted' → cache açarlarının məqsədli təmizlənməsi.
Kiçik qiymət yeniləmələri ilə kartların qaydasının «atlamaması» üçün kursorlarla paginasiya.
11) Müşahidə və SLO
Metriklər:- `catalog_p95_ms` по валютам, `fx_freshness_ms` (p50/p95/p99), `policy_refresh_latency_ms`.
- «Çirkin» qiymətlərin payı (addım deyil), limitlər səbəbindən rədd edilmiş əməliyyatların payı.
- Çek-autda «vitrin vs hesablama» uyğunsuzluğu (real debet baş verir).
- FX SLA-dan böyükdür, yuvarlaqlaşdırma səhvlərinin artması, limitlər üzrə PSP uğursuzluqlarının artması.
- RGS minimumu ilə vitrin minimumunun uyğunsuzluğu.
12) Komplayens, vergilər və residency
Per currency ≠ per country: 'currency + geo + license' birləşməsini izləyin.
Vergi qaydaları/fee - valyuta siyasətində və çekdə.
Residency: müvafiq bölgədə yerli valyutalar üçün məlumatlar və hesablaşmalar.
13) Test
Property-based: «konvertasiya və dəyirmi sonra qiymət addım yatır»; «min ≤ value ≤ max».
Golden-cases: regressiya üçün etalon valyutalar/qiymətlər dəsti.
Chaos FX: «atlama» kursları, freeze windows, FX provayderi keçid.
E2E: vitrindəki məbləğin və cəmi silinmiş məbləğin uyğunluğu; tolerans ≤ 0. 01 valyuta vahidləri (və ya 1 addım).
14) Tipik səhvlər
API oxu → qeyri-sabit UX və yüksək p99.
Valyuta addımlarına məhəl qoymayın (CLP/JPY) → «yarım pul» və RGS/PSP uğursuzluqları.
Dəqiq per policy qaydaları əvəzinə «vərdişlə» (bankers rounding) yuvarlaqlaşdırın.
FX versiyasını yoxlamayın → mübahisələri həll etmək mümkün deyil.
FX vasitəsilə vahid bonus nominalları → yerli bazarlar üçün «qəribə» ədədlər.
Komissiyaları şəffaflıq olmadan FX-də gizlətmək iddialar və cərimələr riskidir.
15) Sürətli reseptlər
TRY/BRL dərəcələri: Addım ₺1/R $0. 50, min-bahis addım yuxarı yuvarlaq, paket üçün «gözəl» qiymət nöqtələri.
Crypto (USDT/USDC): $0 addım. 10, ən yaxın addıma yuvarlaqlaşdırma, şouda heç bir komissiya yoxdur (lakin çekdə görünür).
High-volatility FX: matç/promo üçün freeze; əsas qiymət> X% sapma zamanı alertlər.
Multi-tenant: markalarda müxtəlif spred/addımlar; per tenant proyeksiyalarının hesablanmasında fairness.
16) Konfiqurasiya nümunəsi (vahid həqiqət mənbəyi)
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) Satış öncəsi yoxlama siyahısı
- Hər çekdə/hadisədə vahid əsas valyuta və FX versiyası.
- Yuvarlaqlaşdırma/addımlar/limitlər siyasətləri per currency tərəfindən müəyyən edilmiş və testlərlə əhatə olunmuşdur.
- per currency kataloqunun proyeksiyaları hazırdır; isti yol konvertasiya etmir.
- Jackpotlar və bonuslar düzgün per currency göstərilir/damla.
- PSP metodları valyutalara görə süzülür; limitlər vitrin ilə üst-üstə düşür.
- SLA təzəlik FX və həyəcan; dəyişkən hadisələr üçün freeze windows.
- Rəqəmlərin və valyuta simvollarının lokallaşdırılması; hardcode olmadan promo şablonları.
- Siyasət/FX dəyişikliklərinin auditi; çek reproduktivliyi.
- Multi-tenant/region: məlumatların izolyasiyası, müxtəlif spredlər və limitlər.
- Hadisə Playbook: FX-sıçrayış, RGS-minimum uyğunsuzluq, PSP-limit uğursuzluğu.
Nəticə
per currency kataloqları mühəndislik fənnidir, «kursla vurmaq» deyil. Nominal və performansı bölün, FX və yuvarlaqlaşdırma siyasətlərini mərkəzləşdirin, per currency proyeksiyalarını materiallaşdırın və təravəti ölçün. Sonra vitrin sürətli, proqnozlaşdırıla bilən və ədalətli olacaq və biznes yerli bazarlarda gizli marja itkilərindən və tənzimləyici sürprizlərdən qorunur.