per currency каталогдору
per currency каталогу - бул көрсөтүлгөн баалар, лимиттер, бонустар, минималдуу коюмдар, джекпоттор жана промо тексттер оюнчу/тенант/аймактын валютасына ылайыкташтырылган мазмун жана баа каталогунун варианты. Максаты - туура бааларды жана эрежелерди логиканын копипастысыз жана тобокелчиликсиз берүү.
Негизги таасирлери:- UX: табигый чендер жана "кооз" баалар (₺9. 99, R$5, €0. 20).
- Киреше: так лимиттер жана курстардан улам маржаны "жебестен" күчөтүүлөр.
- Комплаенс: жергиликтүү эрежелерге (лицензиялар, салыктар, age/geo) ылайык келүүсү.
1) Маалыматтар модели: бөлүү "номинал" жана "өкүлчүлүк"
Base Price (номинал): эсептешүүлөр үчүн бирдиктүү ички валюта 'PLN '/' EUR '/' USD'.
Display Price (презентация): номиналдан эсептелинет + FX + тегеректөө + үстөктөр/арзандатуулар (spread/fees).
Саясат: тегеректөө эрежелери, чендердин кадамдары, мин/макс лимиттери, джекпот, бонустук суммалар жана 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) Курстардын булагы (FX) жана "сергектик"
FX кызматы - конвертациялоо үчүн чындыктын бир чекити:- Курстарды жеткирүүчү: негизги жана резервдик; жаңылануу жыштыгы (мисалы, туруксуз үчүн ар бир мүнөт, туруктуу үчүн ар бир 15 мүнөт).
- Bounded staleness: SLA "курстар жогору эмес Δ t" (мисалы, p95 ≤ 5 мин).
- Спред жана комиссиялар: per tenant/region/currency конфигурацияланат.
- Freeze Windows: "тоңдуруп" матч/турнир/жарнамалык терезелер боюнча курстары баа "секирип" эмес.
- Аудит: текшерүү ойнотуу үчүн FX с '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) тегерек жана "сулуу" баа пункттары
FX жана спред кийин тегеректөө:- Баалар/топтомдор: '99', '9. 99`, `4. 90 '(психологиялык чекиттер).
- Коюмдар жана кадамдар: валюталык кадамга "ceil_to_step" (₺1, CLP $50).
- Бонустар: ваучер кадам ылдый тегеректөө (R $1/₺ 5).
- Операциялардын тартиби: 'raw = base fx (1 + spread) (1 + fee)' → 'rounded = round_policy (raw)' → 'min/max clamp'.
Анти-мисал: "Банктык тегеректөө" коюмдар үчүн "чиркин" кадамдарды бере алат - ачык саясатты колдонуңуз.
4) Лимиттер, мин/макс жана джекпот
Min/Max per currency: жергиликтүү мыйзамдарды жана RGS чектөөлөрдү эске алуу.
Джекпот: Эгер провайдер өз валютасында джекпот кармаса (мисалы, EUR), же локалдаштырылган эквивалентти (информерди) көрсөтүңүз, же пер-валюта пулдарын сактаңыз.
Валютанын кадамдары: CLP/JPY тыйыны жок - бардык лимиттер бүтүн.
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
Бонустун номиналы: per currency (чекеге "кайра эсептөө" эмес) конфигурацияланат.
Wager: көбөйткүч катары сактоо (x30) же акча суммасы катары; аралаштыруудан алыс болуңуз.
Кэп/кэш-аут: да per currency.
Маркетинг тексттер: сандарды локалдаштыруу жана хардкодсуз шаблондордогу валюта.
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) Провайдерлердин чектөөлөрү (RGS/PSP)
RGS: кээ бир оюндар акча үчүн жеткиликтүү эмес 'крипто '/жергиликтүү; кээ бир провайдерлер белгиленген минимумдарды талап кылат (мисалы, €0. 20).
PSP: төлөө ыкмалары акча көз каранды (PIX, BRL, PayID, AUD, Papara, TRY); депозиттин/чыгаруунун лимиттери да ар башка.
Эреже: каталог/витрина оюндарды жана акча жана юрисдикция боюнча төлөм ыкмаларын көрсөтүүгө чейин чыпкалайт.
7) Архитектуралык контур
Currency Policy Store (CP): per currency эрежелеринин таблицалары (кадамдар, лимиттер, баалар, тегеректөө).
FX-кызматы: кэш курстары, версия жана SLA сергектик.
Каталог-билдер: Read Models per currency (проекциялар) чыгарат.
окуу катмарынын API: даяр проекцияларды тартат; UI ысык жолдо эч кандай on-the-fly которуулар.
Outbox → проекциялары: FX/саясат өзгөрүүлөр → иш-чаралар 'CurrencyPolicyUpdated/FXUpdated' → инкременталдык update терезелер.
read_catalog_{tenant}_{region}_{currency}
Валюта боюнча партиялаштыруу refresh жана метриктерди чогултууну тездетет.
8) per currency проекциялары (мисал)
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)
);
Жаңыртуулар - каталог окуяларынан + FX окуяларынан/саясатынан idempotent 'UPSERT' тер.
9) Формат жана жергиликтүү
Символ/код: '₺/TRY', 'R $/BRL', '€', 'USDT' (крипто үчүн - UX саясатына ылайык, бир тыйын же 2 белги жок).
Топтоо жана ондук бөлгүч: 'locale' (ru_RU, tr_TR, pt_BR) көз каранды.
RTL/араб локалдары: валюта белгисинин тууралыгын өзүнчө текшерүү.
10) Кэш жана аткаруу
Каталог жооптор per currency кэш 30-120 с; FX-көрсөткүч 'as _ of' жооп берет.
майыптыгы: окуялар 'FXUpdated '/' PolicyUpdated '/' GameUpserted' → максаттуу кэш ачкычтарын тазалоо.
Pagination Cursors карталарды тартиби кичинекей баа тактайчалар менен "секирип" эмес.
11) Байкоо жана SLO
Метрикасы:- `catalog_p95_ms` по валютам, `fx_freshness_ms` (p50/p95/p99), `policy_refresh_latency_ms`.
- "Чиркин" баалардын үлүшү (кадамда жатпайт), лимиттерден улам четке кагылган транзакциялардын үлүшү.
- Чек-аутто "витрина vs эсептешүү" айырмачылыгы (реалдуу дебет болуп жаткан жерде).
- FX SLAдан улуу, тегеректөө каталарынын өсүшү, PSPнин чектери боюнча мүчүлүштүктөрдүн көбөйүшү.
- RGS минимумунун жана терезе минимумунун дал келбегендиги.
12) Комплаенс, салыктар жана residency
Per currency ≠ per country: 'currency + geo + license' комбинациясына көз салыңыз.
Салык эрежелери/fee - валюталык саясатта жана чекте.
Residency: жергиликтүү акча үчүн маалыматтар жана эсептешүүлөр - тиешелүү аймакта.
13) сыноо
Property-based: инвариант "конвертация жана тегеректөө кийин баа кадам болуп саналат"; «min ≤ value ≤ max».
Алтын-cases: регрессия үчүн эталондук акча/баа топтому.
Chaos FX: "секирүү" курстар, freeze windows, FX жөнөтүүчү которуу.
E2E: витринадагы сумманын жана эсептен чыгарылган сумманын бүтүмдүүлүгү; толеранс ≤ 0. 01 валюта бирдиги (же 1 кадам).
14) типтүү каталар
API окуу → туруксуз UX жана жогорку p99 боюнча учуу кайра.
валюталардын кадамдарын этибарга албоо (CLP/JPY) → "полкопейки" жана RGS/PSP мүчүлүштүктөрү.
"Адат боюнча" тегеректөө (bankers rounding) ордуна так эрежелер per policy.
Чекте FX версиясын жаздырбоо → талаш-тартыштарды чечүү мүмкүн эмес.
FX аркылуу бирдиктүү бонустук номиналдар → жергиликтүү рыноктор үчүн "кызык" сандар.
Комиссияларды ачык-айкындуулуксуз FXке жашыруу - дооматтардын жана айыптардын тобокелдиги.
15) Тез Recipes
TRY/BRL коюм: кадам ₺1/R $0. 50, мин-коюм кадам тегеректеп, пакеттерди үчүн "сулуу" баалар.
Крипто (USDT/USDC): $0 кадам. 10, кийинки кадамга тегеректөө, көрсөтүүдө комиссиялардын жоктугу (бирок чекте көрүнүп турат).
High-volatility FX: матч/промо боюнча freeze; негизги баадан> X% четтөөдө алерция.
Multitenant: ар кандай спрэд/бренддердин кадамдар; per tenant проекцияларын эсептөөдө fairness.
16) Конфигурациянын мисалы (бир чындык булагы)
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) Азык-түлүктүн алдындагы чек-тизме
- Бирдиктүү негизги акча жана FX версиясы ар бир чек/окуяда.
- /кадамдарды/чектерди тегеректөө саясаты per currency тарабынан белгиленген жана тесттер менен капталган.
- per currency каталогунун проекциялары даяр; ысык жол конвертацияларды жасабайт.
- Jackpots жана бонустар туура көрсөтүлгөн/per currency.
- PSP ыкмалары акча чыпкаланган; лимиттер витринага дал келет.
- SLA сергектик FX жана Алерт орнотулган; туруксуз окуялар үчүн freeze windows.
- акча сандарын жана белгилерин локалдаштыруу; хардкодсуз промо үлгүлөрү.
- Саясат/FX өзгөрүүлөрдү аудит; чектин кайталанышы.
- Multi-tenant/аймак: маалыматтарды изоляциялоо, ар кандай спрэддер жана лимиттер.
- Playbook окуялар: FX-секирүү, RGS-минимумунун дал келбегендиги, PSP-лимиттеринин бузулушу.
Корутунду
per currency каталогдору - бул инженердик дисциплина эмес, "курсуна көбөйтүү". Номиналды жана көрүнүштү бөлүү, FX жана тегеректөө саясатын борборлоштуруу, per currency проекцияларын материалдаштыруу жана сергектикти өлчөө. Ошондо витрина тез, алдын ала жана чынчыл болот, ал эми бизнес - жергиликтүү рыноктордо жашыруун маржа жоготууларынан жана жөнгө салуучу сюрприздерден корголот.