통화 디렉토리 당
통화 당 카탈로그는 표시된 가격, 한도, 보너스, 최소 베팅, 잭팟 및 프로모션 텍스트가 플레이어/테넌트/지역 통화에 맞게 조정 된 컨텐츠 카탈로그 및 가격의 변형입니다. 목표는 논리를 복사하지 않고 즉시 변환으로 인한 위험없이 올바른 가격대와 규칙을 제공하는 것입니다.
주요 효과:- UX: 자연 요금 단계 및 "아름다운" 가격 (9. 99, R $5, €0. 20).
- 소득: 코스로 인한 마진을 "먹지 않고" 정확한 한계와 향상.
- 준수: 현지 규칙 준수 (라이센스, 세금, 연령/지오).
1) 데이터 모델: 별도의 "공칭" 및 "표현"
기본 가격 (명목): 합의에 대한 단일 현지 통화 'PLN '/' EUR '/' USD'.
디스플레이 가격-액면가 + FX + 반올림 + 스프레드/수수료로 계산.
정책: 반올림 규칙, 베팅 단계, 최소/최대 한도, 대박, 보너스 금액 및 베팅-통화 당 설정.
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 서비스는 전환의 단일 진실 지점입니다
코스 제공 업체: 주 및 예비; 새로 고침 속도 (예: 휘발성의 경우 1 분마다, 안정적인 경우 15 분마다).
경계 부실: SLA "고정 t보다 오래되지 않은 과정" (예: p95 소 5 분).
확산 및 수수료: 임차인/지역/통화별로 구성됩니다.
동결 창: 가격이 "점프" 되지 않도록 경기/토너먼트/프로모션 창에 대한 "동결" 코스.
감사: '유효한 _ from/유효한 _ 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, CLP $50).
- 보너스: 바우처 단계로 반올림 (R $1/volund 5).
- 작업 순서: '원시 = 기본 fx (1 + 스프레드) (1 + 수수료)' → 'round = round _ policy (원시)' → 'min/max clamp'.
예제 방지: 요금에 대한 "은행 반올림" 은 "추악한" 단계를 제공 할 수 있습니다. 명시 적 정책을 사용하십시오.
4) 한계, 최소/최대 및 대박
통화 당 최소/최대 고려 현지 법률 및 RGS 제약.
대박: 공급자가 통화로 대박을 들고있는 경우 (예: EUR), 현지화 된 등가 (정보원) 또는 통화 당 풀을 유지하십시오.
통화 단계: kopecks가없는 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) 통화 당 보너스 및 바우처
보너스 값: 통화 당 구성 (이마에서 "재계산" 이 아님).
베팅: 승수 (x30) 또는 통화 금액으로 저장; 혼합을 피하십시오.
상한/현금: 통화 당.
마케팅 텍스트: 하드 코드가없는 템플릿의 번호 현지화 및 통화.
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 CN BRL, PayID SL AUD, Papara ² TRY). 예금/인출 한도도 다릅니다.
규칙: 카탈로그/상점 정면은 표시하기 전에 통화 및 관할권별로 게임 및 지불 방법을 필터링합니다.
7) 건축 개요
통화 정책 저장소 (CP) -통화 당 규칙 표 (단계, 한계, 가격 포인트, 반올림).
FX 서비스: 코스, 버전 및 SLA 신선도 캐시.
카탈로그 빌더: 통화 당 읽기 모델 (예측) 을 생성합니다.
레이어 API 읽기: 완료된 프로젝션을 압출합니다. UI 핫 트랙에서 즉석 변환이 없습니다.
전송 전송 → 예측: FX/정책 변경 → 'CurrencyPolicyUpdated/FXUpdate' 이벤트 → 증분 창 업데이트.
read_catalog_{tenant}_{region}_{currency}
통화 분할 속도는 새로 고침 및 미터법 수집 속도를 높입니다.
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 이벤트/정책의 dempotent 'UPSERTS'.
9) 포맷 및 로케일
기호/코드: 'vi/TRY', 'R $/BRL', '€', 'USDT' (암호화-kopecks없이 또는 2 자로 표시).
그룹화 및 10 진수 분리기: '로케일' (ru _ RU, tr _ TR, pt _ BR) 에 따라 다릅니다.
RTL/아랍어 로케일: 통화 부호의 정확성에 대한 별도의 점검.
10) 캐싱 및 성능
30-120 초에 대한 통화 당 캐시 카탈로그 응답; 응답에서 FX 표시기를 'as _ of' 로 제공하십시오.
비활성화: 'FX업데이트 '/' 폴리 업데이트 '/' GameUpserted' 이벤트 → 대상 캐시 키 플러시.
카드 순서가 적은 가격 업데이트로 "점프" 하지 않도록 커서로 페이지 매김.
11) 관찰 및 SLO
메트릭:- '카탈로그 _ p95 _ ms', 'fx _ freshness _ ms' (p50/p95/p99), 'policy _ refresh _ latency _ ms'.
- "못생긴" 가격의 공유 (단계에 있지 않음), 한계로 인해 거부 된 거래의 공유.
- 체크 아웃시 불일치 "쇼케이스 vs 계산" (실제 직불 결제가 발생하는 곳).
- SLA보다 오래된 FX, 반올림 오류 증가, PSP 제한 실패 급증.
- RGS 최소 및 최소 불일치를 표시합니다.
12) 준수, 세금 및 거주
국가 당 통화 면허: '통화 + 지리 + 라이센스' 의 조합을 따르십시오.
세금 규칙/수수료-통화 정책 및 수표.
거주지: 해당 지역의 현지 통화에 대한 데이터 및 계산.
13) 테스트
부동산 기반: "변환 및 반올림 후 가격은 단계에 있습니다"; "최소 자릿수 최대 값입니다".
황금 케이스: 회귀를위한 참조 통화/가격 세트.
카오스 FX: "점프" 코스, 동결 창, FX 제공 업체 전환.
E2E: 쇼케이스에서 금액의 일치성 및 기록 된 총액; 허용 오차가 0. 01 통화 단위 (또는 1 단계).
14) 전형적인 오류
읽기 API → 불안정한 UX 및 높은 p99로 즉시 재구성하십시오.
통화 이동 (CLP/JPY) → 반 페니 및 RGS/PSP 실패를 무시하십시오.
정책에 따라 명확한 규칙 대신 습관 (은행가 반올림) 이 완료됩니다.
수표에서 FX 버전을 수정하여 분쟁을 해결하는 것은 불가능합니다.
현지 시장에 대한 FX → "이상한" 번호를 통한 단일 보너스 명칭.
투명성없이 FX에 수수료를 숨기는 것은 청구 및 벌금의 위험이 있습니다.
15) 빠른 레시피
TRY/BRL에서 베팅: 단계 1/R $0. 50, 최소 요금은 패키지의 "아름다운" 가격대로 올라갑니다.
Crypto (USDT/USDC) 단계 $0. 10, 가장 가까운 단계로 반올림, 쇼에서 수수료 없음 (그러나 수표에서 볼 수 있음).
고 변동성 FX: 일치/프로모션 동결; 기본 가격의> X% 로 경고합니다.
멀티 테넌트: 브랜드의 다른 스프레드/스텝; 임차인 당 투영 계산의 공정성.
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 신선도 SLA 및 경고가 구성됩니다. 휘발성 이벤트에 대한 동결 창.
- 통화 번호 및 기호의 현지화; 비 하드 코드 프로모션 템플릿.
- 감사 정책 변경/FX; 재현성을 확인하십시오.
- 멀티 테넌트/지역: 데이터 격리, 다른 스프레드 및 한계.
- 인시던트 플레이 북: FX 점프, RGS 최소 불일치, PSP 제한 실패.
결론
통화 당 카탈로그는 "물론 곱하지 않고 엔지니어링 분야입니다. "별도의 명칭과 표현, FX 중앙 집중화 및 반올림 정책, 통화 당 예측을 구체화하고 신선도를 측정합니다. 그런 다음 쇼케이스는 빠르고 예측 가능하며 정직하며 비즈니스는 현지 시장에서 숨겨진 마진 손실과 규제 놀라움으로부터 보호됩니다.