Skip to main content

O que é o Scoring Engine

O Scoring Engine do Atlas avalia automaticamente cada evento de depósito em tempo real, calculando um score de risco composto em três dimensões independentes:

Risco Financeiro

Analisa o valor do depósito, volume mensal acumulado e padrão de saques. Detecta operações acima dos limiares regulatórios da SPA/MF e BACEN.

PLD / AML

Aplica as regras da Circular COAF e Lei 9.613/98. Avalia contas vinculadas (smurfing), KYC pendente e depósitos de reporte obrigatório.

Comportamento

Detecta padrões de ludopatia: apostas esportivas e de cassino em volume alto, ganhos atípicos e combinações de risco.

Fórmula do Score Final

O score final é a média ponderada dos três módulos, arredondada ao inteiro mais próximo e limitada entre 0 e 100:
Cada módulo DMN usa hitPolicy="COLLECT" aggregation="SUM" — todas as regras que casarem são somadas. Um único depósito pode ativar múltiplas regras simultaneamente.

Arquitetura do Pipeline

O Scoring Engine é um módulo Go autônomo que atua como External Task Worker do Camunda Platform 7. Não possui banco de dados próprio — o estado de processo vive no Camunda e os resultados fluem para o ClickHouse via Kafka. Recebe triggers exclusivamente via HTTP, sempre vindo do backend/.

Pipeline Passo a Passo

1

Ingestão do evento de depósito

O backend/ consome os tópicos atlas.events.raw.{transaction,casino,sportsbook} e identifica eventos relevantes para scoring (deposit, withdraw, bet, cashout, etc).Eventos com is_test_account: true são descartados silenciosamente — não passam do consumer.
2

Debounce + dedup no backend

Antes de chamar o scoring, o backend agrupa eventos do mesmo (organization_id, brand_id, user_ext_id) em janelas de debounce (5s financial / 30s behavior). Quando a janela fecha, consulta Redis com SETNX score_dedup:{org}:{brand}:{user}:{categoria} EX <ttl> (10min financial, 30min behavior).Se a key já existe, o trigger é skip silencioso. Se Redis está fora, falha fechado — não dispara nenhum trigger até Redis voltar (alarme via métrica auto_score_redis_unavailable_total).
3

Trigger HTTP para o scoring/

Quando o dedup permite, o backend faz POST /api/v1/scoring/transaction/deposit com o snapshot agregado do jogador (totais financeiros, KYC, scores anteriores). Em caso de 5xx ou timeout, libera a key no Redis para o próximo evento poder retentar.O ScoringSystemClient no backend tem um circuit breaker em processo: 5 falhas consecutivas em 30s abrem o circuito por 60s.
4

Deduplicação por EID no Camunda

O scoring verifica se já existe uma instância de processo ativa com businessKey = eid no Camunda:
Se uma instância já estiver ativa, o evento é ignorado — garantia de idempotência mesmo em redelivery Kafka.
5

Preparação das variáveis (LGPD-safe)

O serviço calcula o withdrawalRatio a partir dos totais do payload e constrói o mapa de variáveis do processo sem nenhum dado de PII:
Campos como document (CPF), first_name, email, phone, birthdate e ip nunca chegam ao Camunda.
6

Correlação de mensagem no Camunda

O serviço correlaciona a mensagem DepositScoringRequested ao processo BPMN:
O Camunda inicia uma nova instância de deposit-scoring e executa os três módulos DMN em sequência.
7

Avaliação sequencial dos módulos DMN

O processo BPMN executa três businessRuleTask em sequência:
  1. Financial Risk Score → variável scoresFinancial
  2. AML Rules → variável scoresAml
  3. Behavior Score → variável scoresBehavior
Cada módulo usa COLLECT + SUM — todas as regras que casarem têm seus pontos acumulados.
8

Cálculo e publicação do score final

O External Task Worker scoring.publish-score (Go) faz o fetch-and-lock da tarefa, calcula:
E publica o UserScore em atlas.l3.user.score. Em caso de falha, o worker chama HandleFailure — o Camunda reentrega com retries decrescentes (3→2→1→0). Com 0 retries, um Incident é criado no Cockpit para investigação.

Payload de Saída

O resultado publicado em atlas.l3.user.score:
scores_ludopathy e score_ml são reservados para módulos futuros e retornam sempre 0 na versão atual.

Conformidade LGPD

O Scoring Engine foi projetado com privacy-by-design. Nenhum dado pessoal identificável (PII) transita pelo Camunda ou aparece no output de risco.

Próximos passos

Regras de Decisão DMN

Todas as 16 regras dos três módulos com exemplos positivos e negativos

Integração e Triggers

Como disparar o scoring via Kafka ou HTTP, schema completo do payload