按货币分类
按货币目录是内容和价格目录的一种变体,其中显示的价格,限额,奖金,最低赌注,头奖和促销文本均适合玩家/tenant/地区货币。目的是提供正确的价格和规则,而无需逻辑共计,并且由于"即时"转换而没有风险。
关键影响:- UX:自然投注步骤和"美丽"价格(₺9。99, R$5, €0.20).
- 收入:由于课程,没有利润率"渗透"的确切限制和助推器。
- 合规性:符合当地规则(许可证、税收、年龄/地理)。
1)数据模型: 共享"面额"和"表示"
基本价格(面值):用于结算的单一国内货币"PLN"/"EUR"/"USD"。
显示价格(视图):根据+FX+四舍五入+加价/折扣(spread/fees)计算。
政策:四舍五入规则,投注步骤,地雷/最大限额,头奖,奖金金额和wager-按货币调整。
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:"冻结"比赛/锦标赛/促销窗口的课程,以便价格不会"跳跃"。
- 审计:带有"valid_from/valid_to"的FX版本日志以播放支票。
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,中电50美元)。
- 奖金:四舍五入到凭证步骤(R $1/ ₺5)。
- 操作顺序:'raw=base fx(1+spread)(1+fee)'→ 'rounded=round_policy (raw)' → 'min/max clamp'。
反例子:利率的"银行四舍五入"可以产生"丑陋"的步骤--使用明确的政策。
4)限值,min/max和头奖
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)按货币计算的奖金和凭证
奖金面额:按货币配置(额头不是"重新计票")。
Wager:以乘数(x 30)或货币形式存储;避免溷淆。
获胜帽/缓存:也按货币计算。
市场营销文本:数字本地化和没有硬码的模式货币。
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: 某些游戏不适用于"crypto"/本地货币;部分提供商需要固定最低限度(例如,0欧元。20).
PSP:支付方法取决于货币(PIX ↔ BRL,PayID ↔ AUD,Papara ↔ TRY);存款/提款限额也不同。
规则:目录/陈列柜在展示前按货币和管辖范围过滤游戏和付款方式。
7)建筑轮廓
货币政策商店(CP):每个货币的规则表(步骤、限制、价格、四舍五入)。
FX服务:课程缓存,版本和SLA新鲜度。
制表符目录:生成Read Models per currency(投影)。
阅读层API:拉出现成的投影;在UI热路上不进行飞行转换。
Outbox →投影:FX/策略更改 → "CurrencyPolicyUpdated/FXUpdated"事件→增量店面升级。
read_catalog_{tenant}_{region}_{currency}
货币分期交易加快了refresh和指标收集。
8)按货币投影(示例)
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/Policy事件的等效的"UPSERT"。
9)格式和位置
符号/代码:"₺/TRY","R $/BRL","USDT"(根据UX政策,对于加密免税或2个标志)。
分组和十进制分隔符:取决于"本地"(ru_RU,tr_TR,pt_BR)。
RTL/阿拉伯语地区:对货币符号正确性的单独检查。
10)缓存和性能
每个货币的目录响应缓存30-120 c;在响应中给出"as_of" FX指示符。
残疾:"FXUpdated"/"PolicyUpdated"/"GameUpserted"事件→目标缓存密钥清除。
分割光标,这样卡片顺序就不会在价格的小升级中"跳跃"。
11)可观察性和SLO
度量标准:- `catalog_p95_ms` по валютам, `fx_freshness_ms` (p50/p95/p99), `policy_refresh_latency_ms`.
- "丑陋"价格的份额(不在步骤中),由于限制而被拒绝交易的份额。
- 支票外部(实际借记发生的地方)的"展示柜与计算"差异。
- FX比SLA大,四舍五入错误增加,PSP故障激增。
- RGS最低限度和店面最低限度的不匹配。
12)合规性,税收和住所
Per currency ≠ per country:关注"currency+geo+license"的组合。
税收规则/票据是货币政策和支票。
Residency:当地货币的数据和结算-在相关区域。
13)测试
基于property: "转换和四舍五入后的不变";«min ≤ value ≤ max».
金价:回归的参考货币/价格集。
Chaos FX:"跳跃"课程,freeze windows,切换FX提供商。
E2E:店面数额和注销总额之间的对比;tolerance ≤ 0。01个货币单位(或1个步骤)。
14)典型错误
在阅读API中即时重新计算→不稳定的UX和高的p99。
忽略货币的步骤(CLP/JPY)→"半空白"和RGS/PSP故障。
"按习惯"四舍五入(银行家回旋)而不是明确的政策规则。
不将FX版本记录在支票中→无法解决争议。
通过FX的单一奖励面额→本地市场的"奇怪"数字。
在不透明的情况下将佣金隐藏在FX中是索赔和罚款的风险。
15)快速食谱
TRY/BRL: Step ₺1/R $0。50、min赌注向上四舍五入,包裹的"美丽"价格。
Crypto (USDT/USDC): step $0。10、四舍五入到最近的步骤,显示中没有佣金(但在支票中可见)。
High-Volatility FX:比赛/促销的冻结功能;偏差>基本价格的X%时的差异。
多重特南特:品牌的不同争吵/步骤;fairness在per tenant投影计算中。
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版本。
- 四舍五入/步骤/限制策略是按货币设置的,并覆盖在测试中。
- 已准备好每个货币目录的投影;热路不进行转换。
- 大奖和奖金按货币正确显示/滴落。
- PSP方法按货币过滤;限值与店面相同。
- FX的新鲜度和Alerts的SLA定制;freeze windows用于波动事件。
- 货币数字和符号的本地化;没有硬码的促销模式。
- 策略更改/FX审核;支票的可重复性。
- multi-tenant/Region:数据隔离,不同的传播和限制。
- 事件花花公子:FX跳跃,RGS最低不匹配,PSP极限故障。
结论
按货币目录是工程学科,而不是"乘以课程"。将面额和表示分开,集中FX和舍入策略,实现按货币投影,测量新鲜度。然后,店面将是快速,可预测和诚实的,业务可以防止利润率的隐性损失和本地市场的监管惊喜。