SmartHub AppsMáquina de aquisição

P1.2 · Motor do Raio-X e lead score

Depende de P1.1. App `raiox`. É a peça central da máquina.

O prompt

Implemente o motor que transforma os dados canônicos no relatório Raio-X e no lead score que aciona o vendedor. A qualidade destes números é o que o vendedor usa ao telefone — não pode ter aproximação.

1. Métricas

Por Loja, janela de 12 meses, só pedidos pagos e não cancelados.

Faturamento — receita por mês (12 pontos), receita 90 e 30 dias, ticket médio e mediana, pedidos por mês, crescimento mês a mês.

Recompraclientes_totais, clientes_com_1_compra, pct_compra_unica, taxa_recompra_90d (clientes cujo primeiro pedido foi há 90+ dias e compraram de novo), intervalo_medio_entre_pedidos (mediana em dias), receita_por_cliente.

Receita adormecida — clientes sem compra há 90+ dias e a soma do que já gastaram. Mais a estimativa conservadora de recuperação: receita_adormecida × taxa_recompra_historica, rotulada como estimativa, com a fórmula visível.

Curva RFV — quintis de Recência, Frequência e Valor por loja. Cinco segmentos: Campeões, Fiéis, Em risco, Hibernando, Novos. Para cada: número de clientes, percentual da base, receita total, ticket médio, recência média. Use RFV, nunca RFM em texto voltado ao cliente.

Produtos — top 20 por receita e por unidade; produtos com estoque e zero venda em 90 dias (capital parado); produtos com queda de receita acima de 30% no trimestre.

Sinais externos, em tarefas separadas que não bloqueiam o relatório — WhatsApp no site (crawl do domínio procurando wa.me e api.whatsapp.com) e anúncio ativo na Ad Library (interface e stub aqui; implementado em P5.3).

2. Performance

Estas contas em SQL, não em Python. annotate, aggregate, window functions, ou SQL bruto bem comentado.

Meta: loja com 100 mil pedidos calcula em menos de 20 segundos. Materialize em RaioX com JSONField dados e campos indexados para os principais números. Não recalcule a cada abertura de página.

Tarefa gerar_raiox(loja_id), disparada ao fim do sync_inicial e semanalmente para plano pago.

3. Lead score

Em raiox/scoring.py, com constantes nomeadas e testáveis:

ELIMINATORIO: faturamento medio dos ultimos 3 meses >= R$ 30.000
   se nao atingir -> fila C, vendedor nao e acionado

+30  faturamento medio 3 meses >= R$ 100.000
+15  pedidos/mes >= 150
+25  pct_compra_unica >= 60%
+20  receita_adormecida >= R$ 20.000
+15  tem anuncio ativo na Ad Library
+10  tem WhatsApp no site
+25  tem cartao ativo na Stripe
+5   abriu o PDF do Raio-X

Fila A: score >= 70 E faturamento >= R$ 30.000   -> vendedor em 2h
Fila B: faturamento >= R$ 30.000                  -> vendedor em 24h
Fila C: demais                                    -> nutricao automatica

Recalcule a cada evento relevante. Grave histórico em ScoreEvento para auditar depois por que um lead entrou na fila.

4. Argumento gerado

Grave em RaioX.argumento_vendedor um texto no tom EcomSmart — analítico, direto, primeira do plural, um número por frase. Leia /identidade-ecomsmart.

"{Nome}, sua loja faturou {receita_90d} nos últimos 90 dias em {pedidos_90d} pedidos. {pct_compra_unica}% dos seus clientes compraram uma vez só. Isso é {receita_adormecida} que já passou pelo seu caixa e parou. O Hub recupera carrinho com WhatsApp API Oficial e mantém a régua de recompra rodando o ano inteiro."

Dinheiro como R$ 84.300 — milhar com ponto, espaço depois de R$. Percentual com vírgula: 71,4%.

Critérios de aceite

  1. Dataset sintético de 3 lojas (pequena, média, grande) validando cada métrica contra valores calculados à mão. Sem isso o relatório não vai ao ar
  2. Bordas: loja sem pedido, com 1 pedido, com todos cancelados. Nenhuma divisão por zero
  3. Benchmark de 100 mil pedidos abaixo de 20 s, com o tempo medido
  4. Teste do score cobrindo cada faixa de fila
  5. O argumento_vendedor das 3 lojas impresso, para eu revisar o texto
© 2026 EcomSmart · Uso interno · pt-BR