Como a classificação funciona

Regras de negócio da carteira do time IS — Filial 1

O painel classifica 100% da carteira do time IS em cinco grupos mutuamente exclusivos, recalculados a cada acesso a partir da data de hoje — sem escrever nada no banco, sem estado acumulado e sem depender de fechamento manual. É sempre uma foto do presente.

Fonte de dados e travas

ItemRegra
BancoSupabase murano-clientes-v2, alimentado pela sincronização do ERP WinThor. Somente leitura: o app nunca grava nada.
Tabelasfaturamento e clientes.
TitularidadeSempre clientes.rca_vendedor (RCA1). rca2_vendedor e rca3_vendedor são apoio e nunca definem o dono ou o time do cliente.
Time ISRCA 10 (Thamires) · 27 (Anne) · 28 (Milene) · 29 (Thiago) · 46 (Luana) · 51 (Kamilly).
FilialFilial 1 em toda leitura.

Por que o apelido do vendedor é escrito à mão no código

O que liga a conta do vendedor ao RCA é uma chave explícita, não o nome vindo do ERP. Casar por nome quebraria — e quebraria em silêncio, mostrando a carteira errada — no dia em que alguém corrigisse a grafia de um nome no WinThor.

Tempo: nenhum mês fixo no código

  • Mês atual — em andamento. Nunca conta como quebra de sequência e não entra no faturamento nem em meses ativos.
  • Mês anterior (M-1) — mês fechado mais recente. É ele que decide ativo ou em reativação.
  • Janela de análise — os 12 meses fechados, de M-12 a M-1.
  • Fuso da operação — Belém: é ele que define quando “hoje” vira o dia seguinte.
  • Até os rótulos de mês da tela são derivados da data de hoje, nunca tabelados.

Faturamento líquido

Bruto     = SUM(vlr_atendido)  tipo='VENDA'  posicao='F - Faturado'  tv=1  codfilial=1
Devolução = SUM(vlr_atendido)  tipo='DEV'    posicao='DEV - Devolucao'      codfilial=1
                               -- sem filtrar tv: DEV sempre tem tv nulo
Líquido   = Bruto − Devolução
  • Sempre pela data de faturamento (datafat), que reflete o movimento real, inclusive nas devoluções.
  • Bonificação nunca entra.
  • Só movimento dentro dos 12 meses fechados soma no valor exibido.
  • Devolução não é evento de compra: não conta como mês ativo, não entra no streak e não vira última compra.

O que é calculado para cada cliente

MétricaDefinição
Faturamento líquidoVenda menos devolução nos 12 meses fechados.
Meses ativosMeses distintos com venda na janela, de 0 a 12.
StreakMeses fechados consecutivos comprando, terminando em M-1.
Comprou no mês atualTem venda no mês corrente.
Última compraÚltima venda, inclusive no mês atual.
Dias sem comprarDias corridos desde a última venda anterior ao mês atual, contados até hoje. Vazio se nunca comprou.

Streak: sequência sem buraco

Anda do mês fechado mais recente para trás e para no primeiro mês sem compra. O mês atual não participa, porque ainda não fechou.

M-4    M-3    M-2    M-1        streak
 ·    venda    ·    venda   →     1     ← M-2 quebrou a continuidade
venda venda  venda  venda   →     4
venda venda  venda    ·     →     0     ← não comprou no mês fechado mais recente

Erro já cometido e corrigido

Nunca é “quantos dos últimos 3 meses ele comprou”. Contagem solta classifica errado quem tem buraco no meio: comprou em M-3 e M-1 sem M-2 é streak 1, não 2.

Segmentação: a árvore completa

Duas perguntas resolvem a classificação inteira, e nenhuma delas depende de histórico salvo.

Cliente do time IStitularidade por RCA1streak ≥ 3 ?SIMNÃOPool Recorrenteranking por RCA1🏆 Top 3030 maiores scores do RCA🔁 Recorrenteso restante do pooletapa ao vivostreak + compra do mês atual✅ Consolidaçãoetapa 1 · 2 · 3etapa = 0dias sem comprar ?⚠️ Reativaçãoaté 120 dias🔴 +120 diascarteira fria

Contorno tracejado é decisão; contorno colorido é grupo final. Etapa ao vivo de 1 ou mais vai para Consolidação; etapa 0 desce para a última pergunta.

🏆 Top 30 por RCA

streak ≥ 3 · entre os 30 maiores scores do próprio RCA1

Os melhores clientes de cada vendedor, por combinação de frequência e faturamento. Saem do grupo Recorrentes — nunca aparecem duplicados.

🔁 Recorrentes

streak ≥ 3 · fora do Top 30 do seu RCA

A base fiel e previsível fora do topo do ranking.

✅ Consolidação

streak de 0 a 2 · com sequência ativa (etapa ≥ 1)

Quem está voltando a comprar e ainda não completou 3 meses seguidos. Kanban de 3 etapas.

⚠️ Reativação

streak = 0 · sem compra no mês atual · até 120 dias parado

Janela de atenção: ainda dá tempo de reverter.

🔴 +120 dias

streak = 0 · sem compra no mês atual · mais de 120 dias parado

Carteira fria — precisa de ação de reativação mais forte. Quem nunca comprou entra aqui.

Top 30: como o score é apurado

  • Elegibilidade: só quem está no pool de Recorrentes (streak de 3 meses ou mais).
  • Score = metade faturamento líquido, metade meses ativos, ambos normalizados dentro do pool de cada RCA1 — nenhuma das duas métricas domina o ranking só por ter escala maior.
  • O corte do #30 é relativo àquele vendedor, nunca um valor fixo em reais: varia conforme o tamanho do pool de cada RCA.
  • Pool com 30 clientes ou menos entra inteiro, sem disputa.
  • Média mensal de faturamento aparece como referência e não entra no score.

Consolidação: as 3 etapas

A etapa é o streak “ao vivo”: o fechado mais a compra do mês corrente, quando ela existe.

SituaçãoEtapa
streak 0 + comprou no mês atual1 — voltou de Reativação
streak 1 + comprou no mês atual2
streak 1, ainda sem comprarPermanece na 1, aguardando o mês fechar
streak 2 + comprou no mês atual3
streak 2, ainda sem comprarPermanece na 2, aguardando o mês fechar
Etapa 3 mantida na viradaGradua para Recorrente (3 meses seguidos)

Quebra de sequência

Pular um mês fechado devolve o cliente para Reativação ou +120 dias automaticamente. Não existe lógica de histórico: a classificação é recalculada do zero, e o que veio antes da quebra não conta — a sequência reinicia.

Reativação e +120 dias

Os dois grupos exigem streak 0 e nenhuma compra no mês atual. O corte de 120 dias sem comprar separa um do outro. Cliente que nunca comprou cai em +120: é carteira fria, não janela de atenção.

Quem vê o quê

O papel chega carimbado pelo hub no ato do login. Este app nunca consulta o cadastro de acesso por conta própria.

PapelVisão
SupervisãoCarteira inteira do time.
Vendedor do time ISSó os próprios clientes, recortados pelo RCA1.
Vendedor de outro timePassa como vendedor, mas a carteira aparece vazia: o app cobre Filial 1 e os RCAs do IS.
Qualquer outro papelAcesso não autorizado, com a explicação de onde revisar o cadastro.
  • O recorte acontece depois da segmentação. O Top 30 é apurado sobre a carteira do time, então a posição do cliente na visão do vendedor é a mesma que a supervisão vê — a visão individual é um subconjunto exato da geral.
  • Na dúvida, nega. Papel ausente, desconhecido ou sem carteira definida não entra: erro nunca pode resultar em ver dado a mais.
  • Mudança de papel no hub vale na próxima carga da página, sem precisar sair e entrar de novo.

Leitura, cache e falhas

  • Toda leitura é paginada e o total lido é conferido contra a contagem do servidor: linha faltando derruba a tela com erro, em vez de mostrar número menor em silêncio.
  • O histórico é buscado bem além da janela só para a última compra de cliente frio continuar aparecendo.
  • O resultado é reaproveitado dentro do mesmo dia; erro não fica preso no cache até a virada.
  • Nada é pré-renderizado — a classificação depende de “hoje”.

Como a tela se comporta

  • Os seis indicadores do topo são clicáveis: os cinco grupos levam à aba de cada um, e o total ao lado abre a carteira completa — a mesma lista sem recorte, com a coluna “Grupo” dizendo onde cada cliente caiu. O número dele continua sendo a validação visual de que a soma bate com a carteira inteira.
  • Cada aba guarda seu próprio estado de busca, filtro de RCA e ordenação — trocar de aba não perde o que você montou na anterior.
  • Clicar no cabeçalho de uma coluna ordena do maior para o menor; clicar de novo inverte. “Nunca comprou” ordena como o caso mais extremo.
  • Dias sem comprar mudam de cor: vermelho acima de 120, laranja acima de 60.
  • No Top 30, ordenar por RCA agrupa a lista por vendedor e a posição reinicia dentro de cada carteira.

O que é verificado automaticamente

  • Os cinco grupos somam o total da carteira, e nenhum cliente aparece em dois.
  • A virada de mês não muda a classificação relativa — nada está fixo no código.
  • Os recortes por vendedor somados reconstroem a carteira inteira, preservando posição no Top 30 e etapa.
  • Streak exige sequência; devolução não gera mês ativo; o corte do Top é por RCA, não global.

Correções que não devem ser revertidas

AntesJanela rolante de 365 dias, que chegava a mostrar 13 meses ativos.

AgoraJanela de 12 meses fechados, de M-12 a M-1.

AntesDias sem comprar contados do dia 1 do mês, deslocando cerca de 77 clientes entre os grupos.

AgoraContados de hoje — a leitura literal de "dias sem comprar".

AntesRecorrente considerava o mês atual mais dois anteriores.

AgoraSó os 3 meses fechados, porque o corrente ainda não terminou.

AntesReativação por corte fixo de dias a partir do dia 1, com erro de borda.

AgoraBaseada em "não comprou no mês anterior".

AntesUm grupo "Carteira Ativa" solto, para cobrir quem não era Recorrente nem Top.

AgoraConsolidação com etapas cobre o mesmo público, de forma mais precisa.

AntesConsolidação contava quantos dos 3 meses o cliente comprou.

AgoraExige sequência sem quebra.

AntesTop saía de "comprou no mês anterior", sem frequência mínima.

AgoraSó concorre quem está no pool de Recorrentes.

AntesRecorte do vendedor aplicado na entrada dos dados.

AgoraAplicado na saída, depois da segmentação.