Commit inicial: GTI Maquina Comercial

App local (Node + SQLite) para captura, tratamento e exportacao de leads
comerciais, com dashboard de gestao, login/usuarios e integracao Z-PRO.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
DESKTOP-F2O4A80\User
2026-07-12 14:22:21 -03:00
co-authored by Claude
commit b8d10b210c
78 changed files with 19781 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
# Visão Geral
O Grupo GTI opera uma **máquina comercial local**: um aplicativo (GTI-Comercial.exe)
que captura leads B2B das fontes públicas — principalmente a base oficial de CNPJs
da Receita Federal — e ajuda a tratá-los e exportá-los para as campanhas de
WhatsApp no Z-PRO.
## Soluções vendidas
- **ERP e sistemas de gestão** para comércio, serviços, restaurantes, mercados e distribuidoras.
- **Gestão de TI** para empresas com suporte, infraestrutura, servidores, redes, backup e segurança.
- **Autoatendimento para WhatsApp** com triagem, atendimento automático, vendas e agendamento.
Cada nicho do catálogo (57 nichos) já vem associado ao interesse provável e às dores
típicas, que alimentam a personalização das mensagens.
## Arquitetura (simples de propósito)
```
GTI-Comercial.exe → servidor Node local (porta 3900) → navegador
│
├── Captura: base CNPJ por UF + OpenStreetMap + Wikidata (+ Google opcional)
├── Banco SQLite local (data/gti.db): leads, score, dedup, histórico
└── Tratamento: dashboard, filtros, relatórios e exportações Z-PRO
```
Sem n8n, sem Docker, sem serviços externos obrigatórios: tudo roda no computador
da GTI. O envio das mensagens é feito por fora (Z-PRO), a partir dos arquivos
gerados pelo módulo de tratamento.
## Premissas
- Foco inicial na Bahia (Santo Antônio de Jesus e região + capitais), mas o app
funciona para **qualquer UF/cidade do Brasil** sem mudança de interface.
- A equipe não tem braço para operação manual intensa: o app faz a triagem
(score de qualidade dos dados + score comercial por nicho, combinados numa
prioridade P1-P4) e evita retrabalho (leads exportados ficam marcados).
- O WhatsApp é o canal central de conversão — leads com telefone válido têm prioridade.
## Resultado esperado
- Base grande e organizada de leads com WhatsApp (97%+ de cobertura via base CNPJ).
- Relatórios por nicho/cidade prontos para campanhas segmentadas.
- Histórico de tudo que já foi exportado/enviado, sem duplicar contato.
- Dashboard de gestão comercial na tela de Tratamento: percentual da base
pronta para abordagem imediata (Potencial Comercial), cobertura da base
já trabalhada, distribuição visual por prioridade, produtos recomendados
por cidade e meta diária de exportações da equipe.
- Interface explica o "porquê" de cada score (composição detalhada no modal
do lead), destaca a cidade+produto de maior oportunidade, mostra a
evolução diária de exportações e oferece atalhos de um clique para gerar
listas de prospecção (só P1, só um produto, só não exportados etc.).
- Acesso protegido por login (usuário/senha): o primeiro acesso vem com
`admin`/`admin`, que pode cadastrar novos usuários (comercial ou admin)
pela tela de Usuários.
+83
View File
@@ -0,0 +1,83 @@
# Playbook Comercial
## Oferta De Entrada
Nome: Diagnostico GTI de Gestao, TI e Atendimento.
Promessa: em 15 minutos, identificar gargalos em sistema, atendimento, infraestrutura ou processos manuais da empresa.
Essa oferta reduz resistencia porque nao comeca vendendo ERP, contrato de TI ou automacao diretamente.
## ICP Principal
Priorizar empresas de Santo Antonio de Jesus e regiao com qualquer uma destas caracteristicas:
- Controle por planilha ou papel.
- Sistema atual ruim ou insatisfatorio.
- Alto volume de WhatsApp.
- Muitos computadores ou usuarios.
- Problemas frequentes com suporte, rede, backup ou servidor.
- Dificuldade com estoque, financeiro, fiscal ou vendas.
## Segmentos Prioritarios
- Mercados e supermercados.
- Farmacias e drogarias.
- Restaurantes e delivery.
- Distribuidoras.
- Autopecas.
- Material de construcao.
- Clinicas.
- Oficinas.
- Escolas.
- Lojas de varejo.
- Empresas de servicos.
## Metodo De Atendimento
Usar SPIN de forma simples:
- Situacao: entender como a empresa funciona hoje.
- Problema: descobrir gargalos.
- Implicacao: mostrar o impacto de continuar assim.
- Necessidade: conectar a dor a uma solucao GTI.
## Perguntas Do Diagnostico
- Como voces controlam vendas, estoque e financeiro hoje?
- Qual processo mais toma tempo ou gera retrabalho?
- Hoje voces usam sistema, planilha ou controle manual?
- Quando da problema de TI, quem resolve?
- Existe rotina de backup?
- Quantas mensagens chegam por dia no WhatsApp?
- Qual o impacto se esse problema continuar por mais 6 meses?
- Se a GTI resolver isso, qual resultado seria mais importante?
## Roteiro Para Lead Quente
```text
Ola, [nome]. Vi aqui seu contato sobre [servico].
Pelo que voce informou, parece que existe uma oportunidade clara de melhorar [dor].
Quero fazer um diagnostico rapido de 15 minutos para entender sua operacao e te dizer o melhor caminho.
Pode ser hoje pela tarde ou amanha pela manha?
```
## Follow-up Manual Em Proposta
Dia 1:
```text
Oi, [nome]. Conseguiu avaliar a proposta da GTI? Posso te ajudar com alguma duvida tecnica ou comercial?
```
Dia 3:
```text
[nome], queria confirmar se esse projeto ainda faz sentido para agora ou se prefere que eu reprograme o contato para outro momento.
```
Dia 7:
```text
Vou deixar seu atendimento em aberto para retomarmos quando fizer sentido. Se quiser avancar, me responda por aqui.
```
+48
View File
@@ -0,0 +1,48 @@
# LGPD E Regras De WhatsApp
Este projeto deve ser operado com cuidado para evitar bloqueio de WhatsApp e problemas de privacidade.
## Regras Basicas
- Guardar origem do lead.
- Registrar consentimento quando existir.
- Evitar disparo massivo sem opt-in.
- Permitir descadastro ou parada de contato.
- Nao comprar listas frias para disparo automatico.
- Usar abordagem consultiva, nao agressiva.
- Manter historico de data, origem e mensagem enviada.
## Mensagem De Descadastro
Toda sequencia pode aceitar palavras como:
```text
PARAR
CANCELAR
SAIR
NAO QUERO
```
Quando uma dessas respostas chegar, o lead deve ser marcado como `Opt-out` no CRM e sair das automacoes.
## Prospecao Ativa Segura
Para listas frias locais, a abordagem deve ser manual ou semi-automatizada, com baixo volume e personalizacao.
Exemplo:
```text
Ola, tudo bem? Aqui e do Grupo GTI, de Santo Antonio de Jesus.
Vi que sua empresa atua em [segmento] e queria entender se hoje voces ja usam algum sistema para vendas, estoque ou atendimento.
Se nao fizer sentido, pode me avisar que nao envio novas mensagens.
```
## Dados Minimos No CRM
- Nome.
- Empresa.
- WhatsApp.
- Origem.
- Data do primeiro contato.
- Consentimento.
- Status de opt-out.
+75
View File
@@ -0,0 +1,75 @@
# Captura de Leads
A captura procura empresas por **UF + cidades + nichos** nas fontes selecionadas,
pontua cada lead (score/classificação) e grava tudo no banco local com
deduplicação automática — um lead capturado uma vez nunca é duplicado, em nenhuma
execução futura.
O jeito normal de usar é pela **aba "Capturar Leads" do aplicativo**
(GTI-Comercial.exe). Este documento cobre os detalhes e o uso por linha de comando.
## Fontes
| Fonte | Custo | Observações |
|---|---|---|
| `cnpj-base` | grátis | **Principal.** Base oficial da Receita Federal extraída por UF (~97% com telefone). |
| `brasilapi` | grátis | Mesma base CNPJ, enriquecida online via BrasilAPI (mais lenta). |
| `overpass` | grátis | OpenStreetMap por área da cidade (bounding box automática via geocode). |
| `nominatim` | grátis | Busca textual no OpenStreetMap. |
| `wikidata` | grátis | Empresas registradas no Wikidata (volume baixo). |
| `google-places` | paga | Exige `GOOGLE_MAPS_API_KEY` no `.env`. |
| `mock` | — | 3 leads fictícios para testar o fluxo. |
## Base CNPJ por estado
Cada UF precisa de uma extração única (~40–60 min) que gera
`prospeccao/cnpj/estabelecimentos-<UF>.csv` a partir dos zips brutos da Receita
(`prospeccao/cnpj/rfb-raw/`, Brasil inteiro, já baixados). A interface oferece o
botão **"Extrair base agora"** quando a UF escolhida ainda não tem base; na linha
de comando:
```bash
node scripts/extrair-base-cnpj.mjs --uf=SP
```
A extração cobre **todos os municípios da UF** — depois dela, qualquer cidade do
estado pode ser capturada na hora, sem re-extração. Um checkpoint em disco permite
retomar de onde parou se o processo for interrompido.
## Deduplicação e pontuação
- Chave de duplicidade: **CNPJ válido → WhatsApp válido → empresa+cidade**.
- **Score de Qualidade** (0-100, "os dados são confiáveis?"): +30 WhatsApp válido,
+20 CNPJ válido, +20 empresa válida, +5 cidade, +10 nicho, +10 CNAE, +5 website.
- **Score Comercial** (0-100, "qual a chance de comprar?"): aderência do nicho
(alta 40 / média 30 / baixa 20, configurada por nicho em `prospeccao/config.json`)
+ website 15 + e-mail 10 + WhatsApp válido 15 + CNPJ válido 20.
- **Score Geral** = 60% comercial + 40% qualidade — é o valor usado para ordenar
a tela de Tratamento.
- **Classificação**: 90-100 Excelente, 75-89 Bom, 55-74 Médio, 35-54 Baixo,
0-34 Muito Baixo. A **Prioridade comercial** (P1-P4, mostrada na tela) deriva
direto dela: Excelente/Bom ⇒ P1 (atacar já), Médio ⇒ P2 (na semana), Baixo ⇒ P3,
Muito Baixo ⇒ P4 (só em campanhas específicas).
- Cada nicho tem produtos GTI recomendados automaticamente (ERP, G-Delivery,
G-Chat, Sistema de Ponto) que aparecem no card do lead. Se o catálogo de
aderência/produtos do `config.json` mudar, rode `npm run recalc-scores` para
recalcular todos os leads já capturados.
## Linha de comando (uso avançado)
```bash
node scripts/capturar-leads.mjs --sources=mock
node scripts/capturar-leads.mjs --sources=cnpj-base --uf=BA --cities="Ilheus,Itabuna"
node scripts/capturar-leads.mjs --sources=cnpj-base,overpass --uf=BA --cities=all --segments=all
node scripts/capturar-leads.mjs --help
```
Parâmetros úteis: `--segments=a,b,c` (nichos pelo nome), `--segment-limit=N`,
`--city-limit=N`, `--max=N` (resultados por consulta nas fontes de API),
`--query-limit=N` (teto total de consultas).
## Ritmo e boas práticas (fontes OpenStreetMap)
Os servidores públicos do Overpass/Nominatim têm limites de uso. O app já aplica
espera entre consultas (`OVERPASS_REQUEST_DELAY_MS`), failover entre endpoints e
cooldown após falhas — falha de uma cidade não derruba a captura, só pula.
File diff suppressed because it is too large Load Diff