N3 Leads v2.0
Sistema em producao

Inteligencia que
transforma ligacoes

Antes, o PCP alimentava um arquivo manualmente todo dia, rodava um script no terminal, esperava 40 minutos, cruzava dados via PROCV, analisava, classificava e quebrava em 25 arquivos via macro — quase 1h30 de trabalho repetitivo. Hoje o N3 Leads faz tudo sozinho de madrugada, com inteligencia de dados que o processo manual nao tinha.

0%
Mais finalizadas
+0%
Mais contatos
0h0
Economizadas esta semana
0min
Trabalho manual/dia
Deslize para explorar

Como era antes

Todo dia o PCP repetia o mesmo ritual de quase 1h30, 100% manual e dependente de uma unica pessoa.

1
Alimentar o arquivo e rodar o script
O PCP abria o terminal, alimentava o CSV manualmente e executava um codigo Python puro pelo prompt de comando. Esperava de 30 a 50 minutos ate o CSV de saida ficar pronto.
~40 min de espera
2
Cruzar dados manualmente no Excel
Com o CSV gerado, abria no Excel e cruzava via PROCV para trazer melhor horario, quantidade de ligacoes, caixa postal. Criava manualmente a coluna de % de caixa pos.
~15 min de PROCV
3
Analisar, classificar e limpar
Analisava os dados linha a linha, removia telefones ruins, classificava manualmente quem deveria ser discado e quem nao.
~15 min de analise
4
Quebrar em 25 arquivos via macro
Copiava os dados limpos para outro Excel e rodava uma macro VBA que fazia a quebra por classificacao e faixa horaria em ~25 arquivos separados.
~15 min de macro
100% dependente de intervencao humana
Se o PCP faltasse ou atrasasse, o mailing nao saia. Todo o processo era manual, sequencial e sujeito a erro humano.
Inteligencia de dados limitada
O script antigo trazia dados basicos, mas a analise era no olho. Nao havia scoring automatico, nem identificacao de melhor horario por telefone.

O que construimos com IA

Um sistema que analisa o historico de milhoes de ligacoes, identifica quais telefones tem maior chance de atender e em qual horario, e gera automaticamente as listas otimizadas — todo dia, sem ninguem precisar fazer nada.

1
Recebe a lista de contatos
O operador faz upload da lista semanal (CSV ou Excel) uma unica vez. O sistema usa a lista certa a cada dia automaticamente.
2
Analisa o historico de cada telefone
Cruza cada numero com o banco de ligacoes reais (136GB+ de dados): quantas vezes atendeu, quantas caiu em caixa postal, qual o melhor horario.
3
Classifica e separa os telefones
Divide em 5 categorias de qualidade (de MUITO BOM a MUITO RUIM). Separa quem deve ser discado, quem precisa de recuperacao e quem deve ser excluido.
4
Gera os arquivos por horario
Para cada classificacao, gera um arquivo separado por faixa horaria (08-10h, 10-12h, etc.) com o melhor horario para ligar para cada telefone.
5
Entrega pronto para o discador
Os arquivos sao gerados automaticamente todo dia as 04h da manha (horario de Brasilia). O operador so precisa carregar no discador.

O que mudou na pratica

So nesta semana (20-23/abr), o sistema gerou 4 mailings automaticamente de madrugada. O PCP nao precisou abrir terminal, Excel nem rodar macro nenhuma vez.

Economia esta semana
5h40 economizadas
4 dias x 1h25 de trabalho manual eliminado. O processo que exigia terminal + Excel + macro agora roda sozinho as 4h da manha.
Ligacoes finalizadas
+22%
Mais pessoas atendendo e completando a ligacao — porque o sistema prioriza quem historicamente atende.
Contatos na URA
+11%
Mais pessoas atendendo o telefone. O scoring seleciona numeros com maior probabilidade de resposta.
Custo por ligacao finalizada
-5,2%
Cada ligacao completada custa menos — porque desperdicamos menos minutos com telefones que nao atendem.

O que vem pela frente

Integracao direta com o discador
Hoje o operador ainda precisa carregar os arquivos manualmente no discador. O proximo passo e conectar o sistema diretamente via API — os arquivos serao enviados automaticamente, sem nenhuma intervencao humana.

Funcionalidades do sistema

Para quem quer entender os detalhes tecnicos de cada modulo.

Scoring por Atendimento
Classifica telefones pela taxa combinada de atendimento (14d + 60d) em 5 segmentos: MUITO BOM, BOM, MEDIO, RUIM e MUITO RUIM.
Melhor Horario
Identifica o melhor horario para cada telefone usando 5 camadas de dados: historico individual, calculo em tempo real, hora menos tentada, perfil por regiao e media geral.
Quebra por Faixa Horaria
Separa telefones em 5 faixas de 2h (08-10, 10-12, 12-14, 14-16, 16-18) e por classificacao. Um arquivo por combinacao.
Mailing Semanal
Upload de listas CSV/XLSX por dia da semana. O sistema usa automaticamente a lista do dia na geracao diaria.
Calibracao Automatica
Apos cada envio, o sistema compara os resultados reais (quem atendeu, quem nao) com a previsao, para se ajustar continuamente.
Filtro de Parceiros
Valida CNPJs contra bases de parceiros (ex: C6 Bank) e remove automaticamente registros invalidos antes da discagem.
Enriquecimento de Dados
Busca automaticamente dados cadastrais (razao social, endereco, email) de cada empresa via APIs publicas e banco local.
Inventario por UF/Ramo
Controle visual de quantos contatos existem por estado e ramo de atividade, com deduplicacao automatica.
Acompanhamento em Tempo Real
Cada mailing exibe metricas reais de ligacoes conforme sao importadas. Acompanhamento dia-a-dia por classificacao.
Scoring Avancado V2
Segunda versao do motor que avalia 4 dimensoes: taxa de atendimento, custo, caixa postal e desligamentos. Usado no upload avulso de listas.
100% Automatico
5 etapas rodam sozinhas todo dia de madrugada: importacao de dados, atualizacao de estatisticas, calibracao e geracao do mailing.

Como funciona o scoring

Cada telefone e classificado pela taxa de atendimento combinada, calculada com dados de 14 e 60 dias. Stats vem de materialized views pre-calculadas com janelas de 7d, 14d, 60d e 180d.

taxa_combinada = (atendidas_60d + atendidas_14d) / (total_60d + total_14d)

Classificacao por faixas fixas

Telefones sao classificados em 5 segmentos por taxa de atendimento combinada:

MUITO_BOM
Taxa combinada
≥ 35%
BOM
Taxa combinada
≥ 25%
MEDIO
Taxa combinada
≥ 15%
RUIM
Taxa combinada
≥ 8%
MUITO_RUIM
Taxa combinada
< 8%

Filtros de qualidade (4 passos sequenciais)

Apos classificacao, telefones passam por filtros que separam RECUPERAR e EXCLUIDOS do pool principal de DISCAR:

Passo 1 — MUITO_RUIM sem horario
Telefones MUITO_RUIM sem melhor hora identificado vao para RECUPERAR_muito_ruim.csv. Sem dados para direcionar discagem.
Passo 2 — Caixa postal alta + ruim
RUIM ou MUITO_RUIM com mais de 10% de caixa postal pos-atendimento em 60d vao para EXCLUIDOS.csv.
Passo 3 — Caixa postal cronica
Qualquer telefone restante com mais de 35% de caixa postal pos-atendimento vai para RECUPERAR_cx_pos.csv.
Passo 4 — DISCAR
Restantes sao agrupados por classificacao e faixa horaria, gerando arquivos como MUITO_BOM_08-10.csv, BOM_10-12.csv etc.

Cascata de horario (4 camadas)

O sistema identifica o melhor horario para cada telefone usando uma cascata de 4 fontes. Se a primeira nao tem dado, passa para a proxima. Telefones sem melhor hora confirmada recebem um horario sugerido.

1
Materialized View (MV)
Consulta mv_melhor_horario_simples, que pre-calcula a hora com mais atendimentos para cada telefone nos ultimos 180 dias.
Fonte principal — pre-calculada
2
Horario sugerido: TENTATIVA
Para telefones sem atendimento confirmado: consulta mv_melhor_horario_tentativa para encontrar a hora com menos tentativas anteriores.
Origem: TENTATIVA — hora menos tentada
3
Horario sugerido: PERFIL
Se nao ha tentativa: usa mv_melhor_horario_perfil para pegar a melhor hora de telefones com mesmo DDD e ramo de atividade.
Origem: PERFIL — DDD + Ramo
4
Horario sugerido: GLOBAL
Ultimo recurso: usa mv_melhor_horario_global com a hora de maior taxa de atendimento geral do sistema.
Origem: GLOBAL — fallback universal

Faixas horarias de saida

08-10 10-12 12-14 14-16 16-18

Fluxo de geracao diaria

A geracao do mailing pode ser acionada via interface web ou por cron externo. O sistema le o CSV do dia da semana, aplica scoring e gera os arquivos segmentados.

Ler CSV
Le mailing_semanal/{dia}.csv com contatos do dia
Stats
Busca stats de cada telefone na MV (7d, 14d, 60d, 180d)
Horario
Consulta melhor hora na MV e usa sugestoes TENTATIVA/PERFIL/GLOBAL quando faltar horario confirmado
Classificar
Calcula taxa combinada e atribui segmento
Quebrar
4 filtros sequenciais + agrupamento por faixa/classif

Arquivos gerados

{CLASSIF}_{FAIXA}.csv
Telefones prontos para discagem, agrupados por classificacao e faixa horaria. Ex: MUITO_BOM_08-10.csv, BOM_10-12.csv. Colunas: CNPJ, Razao, Cidade, UF, Telefone 1/2, E-mail, Ramo, Nome, Atendimento, Horario.
RECUPERAR_muito_ruim.csv
Telefones MUITO_RUIM sem horario confirmado. Inclui horario_sugerido (TENTATIVA/PERFIL/GLOBAL), origem_sugestao, stats detalhados (total_60d, cx_pos, % cx_pos).
RECUPERAR_cx_pos.csv
Telefones com mais de 35% de caixa postal pos-atendimento em 60d. Inclui horario_sugerido e origem_sugestao para direcionar tentativa.
EXCLUIDOS.csv
Telefones RUIM/MUITO_RUIM com mais de 10% de caixa postal. Motivo registrado por linha. Nao discar.
SCORAGEM_GERAL.csv
Todos os telefones com scoring completo. 33 colunas: segmento, score, melhor hora, horario_sugerido, origem_sugestao, stats por janela (7d/14d/60d/180d), taxa combinada, % cx_pos.
SEM_TELEFONE.csv
Registros do CSV de entrada que nao tinham telefone valido (10-11 digitos). Mantidos para conferencia e limpeza da base.

Cadeia de enriquecimento CNPJ

O enriquecimento busca dados cadastrais de CNPJs em 4 fontes, por ordem de prioridade. Evita chamadas externas sempre que possivel.

1
Banco local (cnpj_enriquecido)
Dados previamente enriquecidos via API, com campo api_consultada_em preenchido. Fonte mais rapida e sem custo.
Prioridade maxima
2
Cache (cache_cnpj)
Cache local com TTL. Se a entrada ainda esta dentro do prazo de validade, retorna sem consulta externa.
Cache com TTL
3
API externa (OpenCNPJ / BrasilAPI)
Consulta OpenCNPJ como primeira opcao. Se falhar, tenta BrasilAPI como fallback. Resultado salvo no cache.
Chamada externa
4
Fallback parcial
Se todas as APIs falharem, usa dados historicos parciais de cnpj_enriquecido ou da propria tabela ligacoes.
Dados parciais

Campos retornados:

razao_social telefones_rf endereco cnae cnaes_secundarios capital_social email total_ligacoes primeira_ligacao ultima_ligacao

Retrospectiva D+7 / D+30

Apos cada geracao, o sistema cruza os telefones enviados com as ligacoes reais realizadas em D+7 e D+30 dias para validar a eficacia da classificacao.

D+7
Metricas 7 dias apos o mailing: taxa de atendimento (status 7), taxa de voicemail (status 9) e custo medio por tentativa.
D+30
Metricas 30 dias apos: mesmos indicadores com janela maior. Permite comparar evolucao do lead ao longo do tempo.
5x
Metricas calculadas por classificacao (MUITO_BOM a MUITO_RUIM) para validar se a segmentacao separa bem os leads.

Materialized Views

O scoring depende de 8 MVs pre-calculadas que agregam dados de 136GB+ de ligacoes historicas, atualizadas diariamente as 04:00.

mv_stats_telefone_simples
Stats por telefone em 4 janelas (7d, 14d, 60d, 180d): total, atendidas, nao atendidas, caixa postal pos/pre. Base do scoring V1. 4,3M linhas / 1,4 GB
mv_melhor_horario_simples
Melhor hora de atendimento por telefone (180d). Hora com mais atendimentos. Camada 1 da cascata. 311K linhas / 38 MB
mv_melhor_horario_tentativa
Hora com menos tentativas anteriores por telefone. Usado como horario sugerido para nunca-atendidos (inversao de horario). 1,1M linhas / 118 MB
mv_melhor_horario_perfil
Melhor hora agrupada por DDD + ramo de atividade. Fallback para telefones sem dados individuais nem tentativa. 20K linhas / 8 MB
mv_melhor_horario_individual
Melhor hora individual com tipo de evidencia. Usado pelo scoring V2 (upload de jobs). 145K linhas / 17 MB
mv_melhor_horario_global
Taxa de atendimento por hora do dia (todas as ligacoes). Ultimo recurso da cascata de horario sugerido. 10 linhas
mv_stats_telefone
Versao completa com campos V2 (custo, hard_fails, soft_fails, tempo_agente, AMD). Base do scoring multiobjetivo. 5,5M linhas / 3,9 GB
mv_afinidade_uf_faixa_dia
Analise de afinidade entre classificacoes e ramos por UF e dia da semana. Usado para otimizacao de distribuicao. 540 linhas

Status das funcionalidades

O que esta em producao, em desenvolvimento e no planejamento.

Em producao
Scoring por taxa de atendimento
Classificacao V1 com taxa combinada (14d+60d), 5 segmentos fixos, stats de MVs com 4 janelas temporais.
Em producao
Melhor horario via MV
Identificacao de hora com mais atendimentos via MV pre-calculada, com sugestoes TENTATIVA, PERFIL e GLOBAL quando nao ha horario confirmado.
Em producao
Quebra por faixa e classificacao
Geracao de DISCAR, RECUPERAR, EXCLUIDOS e SCORAGEM_GERAL com 4 filtros sequenciais de qualidade.
Em producao
Mailing semanal
Upload de CSV/XLSX por dia da semana. O sistema le automaticamente a lista correta na geracao diaria.
Em producao
Enriquecimento CNPJ
Cadeia de 4 fontes (DB local, cache, OpenCNPJ, BrasilAPI) com fallback parcial. Usado no upload de jobs.
Em producao
Calibracao retrospectiva
D+7 e D+30 metricas cruzadas com ligacoes reais. Taxa de atendimento, voicemail e custo por classificacao.
Em producao
Performance em tempo real
Cada mailing exibe metricas reais de ligacoes conforme sao importadas. Acompanhamento dia-a-dia.
Em producao
Filtro C6 Bank
Validacao de CNPJs contra base C6 com remocao in-place dos arquivos DISCAR/RECUPERAR e geracao de REMOVIDOS_C6.
Em producao
Inventario UF/Ramo
Upload de listas EmpresAqui, dedup CNPJ+telefone, mapeamento CNAE para faixa via ranking ramos top-100.
Em producao
Cascata de horario (4 camadas)
MV, Tentativa, Perfil e Global. Horario sugerido nos arquivos RECUPERAR quando nao ha horario confirmado.
Em producao
Scoring multiobjetivo V2 (S1-S4)
Motor com 4 sub-scores (atendimento, custo, voicemail, hangups), guardrails automaticos. Em uso no scoring de upload via dashboard.
Em producao
Pipeline cron automatizado
5 etapas diarias: pre-enrich (02h), sync 3C (03h), refresh MVs (04h), retrospectiva (04h30), scoring (07h seg-sex).
Planejado
Integracao com discador
API direta com o discador para envio automatico de listas e recebimento de resultados sem intervencao manual.

Pipeline cron diario

5 etapas sequenciais que rodam automaticamente toda madrugada. Cada etapa depende da anterior.

02:00
Pre-enrich
Enriquece CNPJs historicos via OpenCNPJ/BrasilAPI
03:00
Daily Sync
Importa ultimas 48h da API 3C Plus
04:00
Refresh MVs
Atualiza 8 materialized views concorrentemente
04:30
Retrospectiva
Calcula metricas D+7 e D+30 dos mailings anteriores
07:00
Daily Scoring
Gera mailing diario com scoring e quebra (seg-sex)

Construido com

Backend robusto, banco de dados otimizado para 136GB+ de dados historicos.

Python 3.11FastAPIPostgreSQL 15 Materialized Viewspsycopg2Streaming CSV Cron AutomationJWT AuthNginx Reverse Proxy Liquid Glass UIVanilla JSsystemd Service

Antes vs Depois do N3 Leads

Comparacao dos indicadores da URA entre a semana anterior (06-09/abr) e a semana posterior (15-22/abr, com scoring ativo). Apenas ligacoes mode=ura em dias uteis.

Antes (06-09 abr, 4 dias)
Depois (15-22 abr, 5 dias)
Finalizadas / dia
431 526
+22,0%
Contatos na URA / dia
53.326 59.345
+11,3%
Taxa de contato
14,4% 14,9%
+3,1%
Custo / Finalizada
R$5,74 R$5,44
-5,2%
Finalizadas na URA
Status 7 (mode=ura) — por dia util
Contatos na URA (Finalizadas + Abandonadas)
Pessoas que atenderam o telefone — por dia util
Taxa de Contato (%)
(finalizadas + abandonadas) / total_ura
Finalizadas por R$1.000 de Custo
Eficiencia: quantas finalizadas cada R$1k gera

* Dados filtrados por mode=ura. 10/abr (Sexta-feira Santa) excluido por feriado. 21/abr excluido por anomalia operacional (120K ligacoes, 1 finalizada).