GH GambleHub

Diretórios per currency

O catálogo per currency é uma opção de catálogo de conteúdo e pricking, onde os preços exibidos, limites, bônus, taxas mínimas, jackpots e textos promocionais são adaptados à moeda do jogador/tenante/região. O objetivo é dar os pontos de price certos e as regras sem a lógica de copipaço e sem riscos devido às conversões de voo.

Efeitos-chave:
  • UX: Passos naturais de apostas e preços «bonitos» (₺9. 99, R$5, €0. 20).
  • Rendimentos: limites exatos e bustos sem «correria» de margem devido aos cursos.
  • Complaens: conformidade com as regras locais (licenças, impostos, age/geo).

1) Modelo de dados: partilhamos «nominal» e «representação»

Base Prece (nominal): moeda interna única 'PLN '/' EUR '/' USD' para cálculos.
Display Price (apresentação): é calculado a partir de + FX + arredondamento + descontos (spread/fees).
Policy: regras de arredondamento, etapas de apostas, limites min/max, jackpots, bónus e wager - personalizado per currency.

Mini-esquema (simplificado):
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) Fonte de cursos (FX) e «frescor»

Serviço FX - um único ponto de verdade para as conversões:
  • Provedor de cursos: principal e reserva; taxa de atualização (por exemplo, cada minuto para voláteis, a cada 15 minutos para estáveis).
  • Bounded staleness: SLA «cursos com menos de 1 min» (por exemplo, p95 ≤ 5 min).
  • Spread e comissões: configure per tenant/region/currency.
  • Freeze windows: «congelar» cursos para jogo/torneio/janelas de promoção para que a price não «salte».
  • Auditoria: logs de versão de FX com 'valid _ from/valid _ to' para reproduzir cheques.
Exemplo de emissão de 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) Arredondar e «belos» pontos de price

Arredondar depois de FX e spreads:
  • Preços/pacotes: '99', '9. 99`, `4. 90 '(pontos psicológicos).
  • Apostas e passos: «ceil _ to _ step» para a etapa de câmbio (₺1, CLP $50).
  • Bónus: arredondar para baixo na etapa de voucher (R $1/ ₺5).
  • Ordem de operações: 'raw = base fx (1 + spread) (1 + fee)' n' rounded = round _ policy (raw) ' ' min/max clamp '.

Anti-exemplo: «arredondamento bancário» para apostas pode dar passos «feios» - use políticas explícitas.

4) Limites, min/max e jackpots

Min/Max per currency: leva em conta as leis locais e as restrições RGS.
Jackpots: Se o provedor mantiver o jackpot na sua moeda (EUR, por exemplo), mostre o equivalente localizado (informador) ou guarde as pulas para-moeda.
Passos da moeda: CLP/JPY sem centavos - todos os limites são inteiros.

Exemplo de tabela de limites:
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) Bônus e vales per currency

Valor do bónus: configura per currency (não «recontagem» na testa).
Wager: guarde como um multiplicador (x30) ou como um montante na moeda; Evite misturar.
Campo de ganho/dinheiro, também per currency.
Texto de marketing: localização de números e moeda em modelos sem hardcod.

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) Restrições de provedores (RGS/PSP)

RGS: alguns jogos não estão disponíveis para moedas 'crypto '/locais; alguns provedores exigem mínimos fixos (por exemplo, €0. 20).
PSP: Os métodos de pagamento dependem da moeda (PIX ↔ BRL, PayID ↔ AUD, Papara ↔ TRY); os limites de depósito/saída também são diferentes.
Regra: diretório/vitrine filtram jogos e formas de pagamento em moeda e jurisdição antes da exibição.

7) Circuito arquitetônico

Currency Policy Store (COP): tabelas de regras per currency (passos, limites, pontos de price, arredondados).
Serviço FX: dinheiro de cursos, versões e SLA frescura.
Catálogo-bilder: produz Read Models per currency (projeções).
API da camada de leitura: puxa projeções finas; nada de conversões on-the-fly no caminho quente UI.
Outbox → Projeções: alterações de FX/políticas → eventos 'CurrencyPolicyUpdated/FXUpdated' → updates de vitrines incorporados.

Esquema de seções de projeção:

read_catalog_{tenant}_{region}_{currency}

A partilha por moeda acelera o refresh e a coleta de métricas.

8) Projeções per currency (exemplo)

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)
);

Atualizações - Idempotentes 'UPSERT' de eventos de diretório + eventos FX/políticas.

9) Formatação e localização

O símbolo/código é «₺/TRY», «R $/BRL», «€», «USDT» (para cripto - sem cêntimos ou com 2 caracteres, de acordo com a política UX).
Agrupamento e separador decimal: dependem de 'local' (BR _ BR, tr _ TR, pt _ BR).
Os Locais Árabes, para verificar se o sinal da moeda é correto.

10) Em dinheiro e desempenho

Respostas catalinas per currency cante 30-120 c; Dê o indicador FX 'as _ of' na resposta.
Deficiência: eventos 'FXUpdated '/' PolicyUpdated '/' GameUpserted' → limpar a chave de armazenamento.
Paginação com cursores para que a ordem dos cartões não seja «saltada» em pequenos updates price.

11) Observabilidade e SLO

Métricas:
  • `catalog_p95_ms` по валютам, `fx_freshness_ms` (p50/p95/p99), `policy_refresh_latency_ms`.
  • A proporção de preços «indevidos» (não estão no passo), a proporção de transações rejeitadas devido aos limites.
  • A variação de «vitrine vs cálculo» em cheque-out (onde ocorre o débito real).
Alerts:
  • FX maior que SLA, aumento de erros de arredondamento, aumento de falhas PSP em limites.
  • Inadequação entre o mínimo RGS e o mínimo vitral.

12) Complaens, impostos e residency

Per currency ≠ per country: Acompanhe a combinação 'currency + geo + license'.
Regras fiscais/fee - na política da moeda e no cheque.
Residency: dados e cálculos para moedas locais - na região apropriada.

13) Testes

Property-based: invariante «após converter e arredondar o preço está no passo»; «min ≤ value ≤ max».
Golden-cases: conjunto de moedas de referência/price para regressão.
Chaos FX: cursos «salteadores», freeze windows, mudar de provedor FX.
E2E: O valor da fatura na vitrine e o valor final descontado; tolerance ≤ 0. 01 unidades de moeda (ou 1 etapa).

14) Erros típicos

Contar para voar na API leitura → X instável e p99 alto.
Ignorar etapas de moedas (CLP/JPY) → «meia cópia» e rejeições RGS/PSP.
Arredondar «por hábito» (bankers rounding) em vez de regras claras per policy.
Não fixar a versão FX no cheque → não é possível analisar as disputas.
Um único bónus por FX → números «estranhos» para os mercados locais.
Esconder comissões em FX sem transparência - risco de reclamações e multas.

15) Receitas rápidas

Apostas em TRY/BRL: passo ₺1/R $0. 50, min. aposta em arredondar para cima para o passo, «belos» pontos de price para pacotes.
Crypto (USDT/USDC): passo $0. 10, arredondar para o passo mais próximo, falta de comissão na exibição (mas visível no cheque).
High-volativity FX: freeze para jogo/promoção; alertas de desvio> X% do price básico.
Multi Tenant: Diferentes passos em marcas; fairness em cálculos de projeções per tenant.

16) Exemplo de configuração (origem única da verdade)

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) Folha de cheque antes de vender

  • Moeda de base única e versão FX em cada cheque/evento.
  • As políticas de arredondamento/passos/limites são definidas per currency e são cobertas por testes.
  • As projeções do catálogo per currency estão prontas; o caminho quente não faz conversões.
  • Jackpots e bónus são corretamente exibidos/gota per currency.
  • Os métodos PSP são filtrados por moeda; os limites correspondem à vitrine.
  • SLA frescura FX e alertas estão configurados; freeze windows para eventos voláteis.
  • Localização de números e caracteres de moedas; modelos de promo sem hardcod.
  • Auditoria de alterações de políticas/FX; Reprodução do cheque.
  • Multi-tenante/região: isolamento de dados, variação de spraads e limites.
  • Playbooks de incidentes: salto FX, inadequação do mínimo RGS, falha nos limites PSP.

Conclusão

Os catálogos per currency são uma disciplina de engenharia, não «multiplicar por curso». Divida o valor e a representação, centralize o FX e as políticas de arredondamento, materialize as projeções per currency e mede o frescor. Então a vitrine será rápida, previsível e honesta, e os negócios estão protegidos contra perdas ocultas de margens e surpresas regulatórias nos mercados locais.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.