Central completa da revisão. Página gerada por scripts/gerar-sol-sdr.py
lendo a API do n8n PROD e os artefatos aprovados da revisão — nenhum número é digitado à mão.
vida = pertencimento arquitetural (tag vida:*, só muda com evidência de aposentadoria).
n8n = estado de runtime (campo active).
revisão = varredura Workplace (tag workplace:*).
Nenhum é derivado do outro.
derivado do backend em 21/08
Acompanhamento por estado, não por conversa. O progresso é acumulado:
uma regressão vira REABERTO e incrementa o contador, sem apagar o que já foi feito.
| cadeia | total | não iniciados | em revisão | prontos | revisados | |
|---|---|---|---|---|---|---|
| CAPTAÇÃO | 3 | — | — | 2 | 0/3 | |
| QUALIFICAÇÃO | 5 | 4 | 1 | — | 0/5 | |
| HANDOVER | 4 | 4 | — | — | 0/4 | |
| OPS | 9 | 9 | — | — | 0/9 | |
| OBSERVABILIDADE | 3 | 3 | — | — | 0/3 |
| workflow | cadeia | estado | correções | teste | supabase | visual | revisado | reab. |
|---|---|---|---|---|---|---|---|---|
sol.captacao.entrada-leadhistórico
| CAPTACAO | PRONTO | 4/4 | passou | saneado | atualizado | NÃO | 1 |
sol.captacao.meta-pollhistórico
| CAPTACAO | PRONTO | 4/4 | passou | n/a | atualizado | NÃO | 0 |
sol.captacao.meta-leadgen-receptorhistórico
| CAPTACAO | ARQUIVADO | 0/0 | n/a | n/a | atualizado | NÃO | 0 |
sol.inbound.whatsapphistórico
| QUALIFICACAO | CORRIGINDO | 1/? | pendente | parcial | atualizado | NÃO | 0 |
2gZdr2EvcuB6UoRXhistórico
| CAPTAÇÃO | PRONTO | n/a | passou | n/a | atualizado | NÃO | 0 |
TysfJ4xg1kvfKlx2histórico
| CAPTAÇÃO | CORRIGINDO | 0/1 | passou com 1 ressalva | ok | atualizado | NÃO | 0 |
Só o que de fato impede fechar. Descoberta lateral vai para backlog e não trava o selo.
retrato de 18/08 — 6 dias
A cadeia não fecha porque "o workflow roda". Fecha quando se responde, sem inferência: quantos entraram, por qual caminho, quantos viraram registro válido, quantos chegaram ao SolarMarket, quantos receberam a primeira abordagem, quantos ficaram pendentes, e se existe backlog.
| caminho | estado | última entrega | evidência |
|---|---|---|---|
Meta Lead Ads · pollsol.captacao.meta-poll (syCkKOzOyX7Uydbj) | OK | 2026-08-18 22:00 | RESTABELECIDO 18/08 14:55 UTC. Ficou parado 2 dias e 14 horas (16/08 00:20 -> 18/08 14:55, ~750 ciclos) por credencial OAuth invalidada. Ao voltar: Graph devolveu 131 leads, 131/131 com form_id 1355008362677886. Dos 9 leads represados, o checkpoint entregou 7 e barrou 2 corretamente (ja existiam por outro canal). Zero replay: 7 execucoes webhook para 7 leads. |
Meta Lead Ads · webhooksol.captacao.meta-webhook (pZ6aenKD92QjT755) | SEM EVENTO | nunca | 0 execucoes retidas. Ativo e tecnicamente completo, mas a Meta nunca entregou nada nele. |
Landing/Site · planilhasol.captacao.entrada-lead — lane cron (Q8HFEmithXX9Do2b) | OK | 2026-08-18 23:20 | Cron de 5 min rodando: 250 execucoes retidas, 250 success. |
WhatsApp direto · novo leadsol.inbound.whatsapp (28WqoWNKIEanBI7G) | OK | 2026-08-18 21:43 | 98 execucoes retidas, todas success. Conta como entrada SO quando o telefone nao existia antes: nesse caso a propria 1a mensagem cria o lead. Provado em 65/65 leads. E o unico caminho entregando volume hoje. |
Entrada = telefone que não existia antes. META_LEAD_ADS +
LANDING_PAGE + WHATSAPP_DIRETO.
A última coluna, respostas, é mensagem de lead que já existia — isso é início da
QUALIFICAÇÃO e está fora da conta de aquisição, de propósito.
Linha marcada = nenhum lead do formulário Meta naquele dia.
| dia | entraram | META_LEAD_ADS | LANDING_PAGE | WHATSAPP_DIRETO | com SM | 1º contato | qualificados | sem SM | respostas (não é entrada) |
|---|---|---|---|---|---|---|---|---|---|
| 2026-08-12 | 5 | 2 | — | 3 | 5 | 2 | 4 | — | — |
| 2026-08-13 | 8 | 3 | 2 | 3 | 8 | 4 | 4 | — | 2 |
| 2026-08-14 | 8 | 6 | — | 2 | 8 | 6 | 6 | — | 2 |
| 2026-08-15 | 3 | 2 | — | 1 | 3 | 2 | 0 | — | 1 |
| 2026-08-16 | 3 | — | 1 | 2 | 3 | 1 | 0 | — | — |
| 2026-08-17 | 11 | — | 2 | 9 | 11 | 1 | 6 | — | — |
| 2026-08-18 | 16 | 11 | 2 | 3 | 16 | 12 | 3 | — | — |
No instante da quebra a conta fechava exata: 162 meta_ads no Supabase = 120 reais do form (122 menos 2 leads de teste da propria Meta) + 42 do backlog do form anterior. Zero represado. Depois de 16/08 00:20 UTC nao ha como contar: a Graph nao responde para a credencial do poll, entao todo lead que entrou no formulario desde entao esta invisivel para nos.
Regra: Entrada da CAPTACAO = META_LEAD_ADS + LANDING_PAGE + WHATSAPP_DIRETO. Resposta de lead que ja existia NAO entra na contagem de entrada: e inicio da QUALIFICACAO. A coluna "respostas" abaixo esta fora da conta de aquisicao, de proposito.
A regra que essa cadeia inteira defende: valor informado no formulário não é conta validada. O valor declarado é sinal comercial; a conta de energia é prova. Só o OCR abre o gate.
SOL SDR → CONTA → OCR → MÉDIA 3M → PRAZO → SCORE → DECISÃO → RESUMO → HANDOVER
| garantia | estado | como |
|---|---|---|
| conta sempre solicitada | ok | o valor do formulário não abre mais o gate |
| PDF/imagem + OCR | ok | gpt-4o, READ_OK/PARTIAL/FAIL, guard anti-modelo |
| valor declarado preservado | ok | valor_conta intacto |
| valor OCR separado | ok | valor_conta_ocr, coluna própria |
| histórico de consumo | ok | consumo_historico jsonb |
| média 3 meses | ok | só meses reais; menos de 3 = NULL |
| prazo como gate | ok | perguntado só após a conta validada |
| score definitivo | ok | recalculado após OCR + prazo |
| qualificação precoce bloqueada | ok | fastQualify virou prioridade, não rota |
| resumo canônico | ok | um objeto → whisper + SolarMarket + gestão |
| handover ordenado | ok | ts_qualificado < ts_handoff |
| telemetria operacional | ok | 1ª resposta, tempo de resposta, mensagens IA |
| ledger de IA | ok | 1 chamada = 1 evento, preço congelado |
| idempotência econômica | ok | request_key UNIQUE; retry não cobra 2× |
| captação | LANDING_PAGE / GOOGLE / OLIMPIA |
| declarado no formulário | R$ 850,00/mês |
| validado pelo OCR | R$ 144,35 · READ_OK · confiança 95% |
| prazo | Mais para o futuro |
| score / temperatura | 35 · FRIO |
| status | QUALIFICADO |
| closer | Danieli Nicasso |
| SLA do handover | ts_qualificado < ts_handoff por 12s |
| conversa persistida | 13 mensagens |
| custo de IA do lead | US$ 0,098853 |
| Dez/2025 | 408 kWh |
| Jan/2026 | 441 kWh |
| Fev/2026 | 371 kWh |
| média 3 meses | 406,67 kWh |
| indicador | valor |
|---|---|
| leads na base | 280 |
| com conta validada por OCR | 4 |
| com média de 3 meses | 4 |
| com 1ª resposta medida | 4 |
| handover em ordem correta | 36 |
| eventos no ledger de IA | 18 |
| custo de IA acumulado | US$ 0.246548 |
Nenhum evento de IA sem precificacao: todo uso registrado tem custo calculado.
1 leads historicos ainda tem ts_handoff anterior a ts_qualificado. Sao anteriores a correcao e nao foram saneados — o saneamento so entra depois que o escritor esta certo, e agora esta.
O writer antigo gravava ts_handoff no início do handover, em ramo paralelo,
enquanto o filho regravava ts_qualificado no fim. Resultado: 34 leads com SLA
fisicamente impossível — handover antes da qualificação.
| situação | leads | como |
|---|---|---|
| invertidos antes do saneamento | 34 | — |
| reconstruídos por evidência real | 33 | 20 pela execução n8n do handover · 13 pelo evento de transferência no Krolik |
| não reconstruíveis | 1 | mantidos como estavam, fora do SLA |
| timestamps fabricados | 0 | nenhuma estimativa, nenhum swap de campo, nenhum "+1 segundo" |
Distribuição do ts_handoff − ts_qualificado reconstruído:
mín 0.656s · mediana 2.853s · p95 5.717s · máx 10.86s.
Nenhum outlier absurdo.
Regressão no writer novo: 612453 +11.108s · 612457 +12.27s · 612449 +11.585s — todos positivos.
| remanescente | motivo |
|---|---|
| lead 569563 | nenhum evento de transferencia no Krolik em ±5 min da qualificacao; execucao n8n fora da janela de retencao |
Ressalva de leitura: Os historicos foram reconstruidos pelo instante da TRANSFERENCIA DO CHAT ao closer. O writer novo carimba ts_handoff quando o handover INTEIRO termina (SolarMarket + Krolik + gestao), alguns segundos depois. As duas metades da serie medem pontos ligeiramente diferentes do mesmo evento.
derivado do backend em 21/08
Qualificou → closer → SolarMarket → Krolik → whisper/resumo → gestão → transferência do chat → ts_handoff
| o que a SOL entrega | estado |
|---|---|
| roleta escolhe o closer | provado |
| SolarMarket etapa 114906 + responsável + nota | provado |
| whisper no chat do cliente (isWhisper) | provado |
| 3 destinos de gestão (Gabriel, Guilherme, Rafael) | provado |
| chat transferido ao setor do closer | provado |
| ts_qualificado < ts_handoff (+12s no E2E real) | provado |
| 33 handoffs históricos saneados por evidência | provado |
sol.comercial.resposta-closer mede o que acontece DEPOIS que o comercial recebeu. É observabilidade comercial, frente futura — não faz parte da DoD do handover da SOL.
| não validado hoje | campo |
|---|---|
| primeira resposta do closer | ts_resposta_closer |
| quem respondeu | closer_respondeu_krolik_id |
| tempo até responder | tempo_resposta_closer_seg |
Os três campos existem e são escritos, mas a auditoria de schema mostrou que ninguém os lê. Hoje não sabemos medir se o closer respondeu.
A regra nasceu de um princípio: Fast Forward nunca dispara só porque o score ou o valor são altos. Exige que a SOL tenha perguntado o prazo, que o cliente não tenha respondido e que o primeiro áudio tenha sido entregue — áudio gerado não conta.
| JANELA ABERTA | áudio quebra-gelo · texto 1 · texto 2 · áudio de fechamento |
| FAST FORWARD | prazo perguntado + prazo sem resposta + 1º áudio ENTREGUE + silêncio → T0+2h (ou antes, se a janela fechar) |
| ELEGIBILIDADE | conta validada por OCR → CONTA_VALIDADA · declarado ≥ R$ 500 → POTENCIAL_DECLARADO |
| PÓS-JANELA | 24h template 1 → 48h template 2 → 72h DESQUALIFICA |
| RESPOSTA | em qualquer ponto interrompe a régua e volta à SOL |
| antes | agora |
|---|---|
| Régua terminava em ~96h QUALIFICANDO o FRIO silencioso | 72h de silêncio chama [SOL] Desqualificar de verdade |
| template_2d em 72h | template_2d em 48h — sem isso não havia como desqualificar também em 72h |
| Fast Forward não existia | existe, e nunca dispara só por score ou valor alto |
| total_audios sem escritor | incrementa após Krolik send-media confirmar |
| ledger subcontava lote | 1 evento por chamada de IA |
| prova | estado |
|---|---|
| Goldens da régua (9 cenários, código real) | provado |
| Hotfix surrogate (emoji no limite) | provado |
| Áudio FUP em produção | provado |
| Fast Forward E2E com lead real | pendente |
| total_audios incremento ao vivo | pendente |
As duas pendências dependem de operação real: um lead precisa percorrer prazo → silêncio → áudio → silêncio → Fast Forward. Não vamos fabricar esse lead.
| indicador | valor |
|---|---|
| leads na base | 285 |
| áudios de FUP entregues | 40 |
soma de total_audios | 0 |
| eventos ElevenLabs no ledger | 9 |
| Fast Forwards executados | 0 |
| desqualificados | 35 |
total_audios em 0 com 40 áudios entregues é esperado: o campo
não tinha escritor até 21/08. O contador começa do próximo áudio em diante — o histórico não
foi retroagido, porque não havia como saber quais entregas foram de qual lead sem inferir.
derivado do backend em 21/08
A SOL termina em exatamente dois caminhos. QUALIFICADO sozinho não é um deles: se não entregou ao closer, existe uma anomalia intermediária, não um desfecho.
| caminho | condição | evidência mínima |
|---|---|---|
| SUCESSO | QUALIFICADO + HANDOVER CONCLUÍDO | status=QUALIFICADO · transferido_comercial=true · closer_id preenchido · ts_qualificado preenchido |
| ENCERRAMENTO | DESQUALIFICADO | por recusa explícita, ação humana legítima, ou FUP Frio 72h quando a regra nova entrar em produção |
| FIM SOL — SUCESSO (entregue ao comercial) | 91 | |
| FIM SOL — DESQUALIFICADO | 35 | |
| QUALIFICADO SEM HANDOVER — não é Fim SOL | 19 | |
| AINDA EM JOGO | 140 |
91 + 35 + 19 + 140 = 285. Conjuntos mutuamente exclusivos, zero sobreposição — conferido em query.
Janela: 16/07 a 05/08/2026. Assinatura idêntica nos 19: closer_id nulo em 19/19 · ts_handoff nulo em 19/19 · ts_transferido nulo em 19/19 · mas ts_qualificado e projeto SM presentes em 19/19
É o GAP-05, já documentado no próprio código: até 08/08 o fluxo PAI marcava status=QUALIFICADO ANTES do handoff assíncrono. Se o filho falhava, o lead ficava meio-qualificado. O comentário no [SOL] SDR Engine registra exatamente "GAP-05, 19 casos".
FIX-04, aplicado em 08/08: quem marca QUALIFICADO passou a ser o FILHO, junto de closer_id e transferido_comercial. Último caso em 05/08 11:52 — três dias ANTES do fix. Zero casos novos desde então.
NÃO saneado nesta rodada. A auditoria detalhada fica para o bloco ANOMALIAS.
antes de 13/08: 28 · 13/08 em diante: 5 · sem ts_desqualificado: 2 · com ts_desqualificado: 33 ·
via esteira [SOL] Desqualificar: 11
11 passaram pela esteira [SOL] Desqualificar com handoff_tipo registrado; 24 não têm origem persistida e são anteriores à revisão. Nenhum foi desqualificado por silêncio — a régua nunca chamou desqualificação até a regra de 72h, que ainda não entrou em produção. Motivo não foi inferido onde o dado não existe.
Fast Forward NÃO cria um terceiro Fim SOL. É outro caminho para o mesmo desfecho: FF → QUALIFICAR → HANDOVER → Fim SOL por sucesso. Zero ocorrências reais até agora.
Primeira mensagem do closer, proposta, venda e fechamento são DOWNSTREAM. Não fazem parte do critério de término da SOL. A responsabilidade da SOL acaba na entrega.
derivado do backend em 24/08
Visão canônica da SOL. OPS e OBSERVABILIDADE são camadas de suporte, não etapas da jornada. Continua pilar único SDR — as divisões abaixo são cadeia:*, não pilares. Elo marcado NÃO ANALISADO não foi provado.
| etapa | workflow(s) | objeto supabase | estado | revisão |
|---|---|---|---|---|
| CAPTAÇÃO Meta / Landing / WhatsApp direto → entrada → Supabase → SolarMarket → 1º contato | SOL - Captação - Coleta de Leads Meta [SOL] Meta Leadgen SOL - Captação - Ingestão de Leads Meta | lead + conversa(capture) | QUALIFICACAO | provado |
| QUALIFICAÇÃO Inbound → SDR → conta → OCR → média 3m → prazo → score → decisão | sol.inbound.whatsapp [SOL] SDR Engine sol.followup.janela-24h sol.followup.reprocessa-parados sol.crm.garante-cliente-projeto | conversa + campos de qualificação | QUALIFICACAO | provado |
| HANDOVER Roleta → closer → SolarMarket → Krolik → whisper → gestão → ts_handoff | [SOL] Qualificar Lead [SOL] Desqualificar [SOL] Router Tag sol.roteamento.fallback-tags | transferido_comercial + closer_id | QUALIFICADO / DESQUALIFICADO | provado |
| FIM SOL QUALIFICADO + handover concluído, ou DESQUALIFICADO | — | ts_handoff / ts_desqualificado | terminal | provado |
| OPS · camada de suporte Ferramentas internas de leitura e correção | sol.crm.token [SOL] Ops Query (read-only) sol.ops.le-lead sol.ops.meta-form-readonly [SOL] Ops SM Lookup (read-only) [SOL] Ops SM GraphQL (read-only) [SOL] Ops Krolik Lookup (read-only) [SOL] Ops Sheet Read (read-only) sol.ops.altera-status-lead | — | transversal | provado |
| OBSERVABILIDADE · camada de suporte Vigias, métricas e briefing | sol.observabilidade.silencio-inbound sol.comercial.resposta-closer [SOL] Briefing Diário (18h15 BRT) | alertas | transversal | provado |
Linha enxuta; a ficha completa abre abaixo, na seção de fichas.
| id | workflow | etapa | vida | n8n | workplace | nós | decisão |
|---|---|---|---|---|---|---|---|
2gZdr2EvcuB6UoRX | SOL - Captação - Coleta de Leads Landing Page | CAPTAÇÃO | vivo | ativo | revisado | 7 | revisado |
syCkKOzOyX7Uydbj | SOL - Captação - Coleta de Leads Meta | CAPTAÇÃO | vivo | ativo | revisado | 7 | pendente |
TysfJ4xg1kvfKlx2 | SOL - Captação - Ingestão de Leads Landing Page | CAPTAÇÃO | vivo | ativo | revisado | 30 | revisado |
Q8HFEmithXX9Do2b | SOL - Captação - Ingestão de Leads Meta | CAPTAÇÃO | vivo | ativo | revisado | 37 | pendente |
MIJwx1qcLAJW6Lrt | [SOL] Briefing Diário (18h15 BRT) | OBSERVABILIDADE | vivo | ativo | pendente | 7 | pendente |
1NW8E0etgiPUc8kn | [SOL] Desqualificar | HANDOVER | vivo | ativo | pendente | 23 | pendente |
vtkHm3dMPdQu4bsB | [SOL] Ops Krolik Lookup (read-only) | OPS | vivo | ativo | pendente | 3 | pendente |
eEkCmi1xfiXlAqYz | [SOL] Ops Query (read-only) | OPS | vivo | ativo | pendente | 3 | pendente |
wwnlcgDy8f3gvkTA | [SOL] Ops SM GraphQL (read-only) | OPS | vivo | ativo | pendente | 4 | pendente |
ElyzB7oOlfIyC39k | [SOL] Ops SM Lookup (read-only) | OPS | vivo | ativo | pendente | 4 | pendente |
4a7NUQbfsbMQTBQN | [SOL] Ops Sheet Read (read-only) | OPS | vivo | ativo | pendente | 3 | pendente |
S2lRZ4ihpAiMMCHj | [SOL] Qualificar Lead | HANDOVER | vivo | ativo | revisado | 40 | pendente |
Vdc0MQeGJl5yvnp2 | [SOL] Router Tag | HANDOVER | vivo | ativo | pendente | 21 | pendente |
EsLDYIxZvp7jmr9D | [SOL] SDR Engine | QUALIFICAÇÃO | vivo | ativo | revisado | 15 | pendente |
RkaGtxj71VYewn8A | sol.comercial.resposta-closer | OBSERVABILIDADE | vivo | ativo | pendente | 9 | pendente |
XNjrr2RSn2TEzfoo | sol.crm.garante-cliente-projeto | QUALIFICAÇÃO | vivo | ativo | pendente | 17 | pendente |
zkgVYMEviJ3NvoZw | sol.crm.token | OPS | vivo | ativo | pendente | 4 | pendente |
voSpd9sEtmMoREAz | sol.followup.janela-24h | QUALIFICAÇÃO | vivo | ativo | pendente | 24 | pendente |
gP5UBqGVqdSmSrAb | sol.followup.reprocessa-parados | QUALIFICAÇÃO | vivo | ativo | pendente | 10 | pendente |
28WqoWNKIEanBI7G | sol.inbound.whatsapp | QUALIFICAÇÃO | vivo | ativo | revisado | 62 | pendente |
DJAnXCzk4ptkxZ1r | sol.obs.registra-uso-ia | NÃO ANALISADO | vivo | ativo | pendente | 5 | — |
KBLy8U1eSBjjCzWk | sol.observabilidade.silencio-inbound | OBSERVABILIDADE | vivo | ativo | pendente | 8 | pendente |
ls6fMFxOKVNVJJF9 | sol.ops.altera-status-lead | OPS | vivo | ativo | pendente | 3 | pendente |
PKcR12bXg2DHuZZp | sol.ops.le-lead | OPS | vivo | ativo | pendente | 4 | pendente |
RYCHPYTrFE0NSKd9 | sol.ops.meta-form-readonly | OPS | vivo | ativo | pendente | 4 | pendente |
PxsIxCyRuxDBU00k | sol.roteamento.fallback-tags | HANDOVER | vivo | ativo | pendente | 5 | pendente |
Arquivados no n8n em 14/08/2026 — fora da contagem, dentro da memória.
Continuam exportados em Sol-estrategia/n8n/workflows/ e o arquivamento é reversível.
| id | workflow | nós | por que saiu |
|---|---|---|---|
pZ6aenKD92QjT755 | [SOL] Meta Leadgen | 9 | — |
Clique para abrir. Workflow ainda não revisado mostra só o que o n8n PROD sabe.
2gZdr2EvcuB6UoRXrevisado em 21/08/2026decisão: revisado——
este fluxo não produz comunicação a cliente
nenhum gap registrado
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 21/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/docs/CAPTACAO-DESENHO.md
syCkKOzOyX7Uydbjrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
TysfJ4xg1kvfKlx2revisado em 21/08/2026decisão: revisadoQUALIFICACAOorigem_entrada · canal_aquisicao · pagina_origem · identificador_sm · sm_status · template_entregue · etapa_funil
este fluxo não produz comunicação a cliente
nenhum gap registrado
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 21/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/docs/CAPTACAO-DESENHO.md
Q8HFEmithXX9Do2brevisado em 13/08/2026decisão: pendenteQUALIFICACAOcanal_origem · chat_id · contact_id · email · etapa_funil · gclid · identificador_sm · origem · sm_status · status · telefone_normalizado · ts_ultima_interacao · ultimo_canal
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
MIJwx1qcLAJW6Lrtrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
1NW8E0etgiPUc8knrevisado em 13/08/2026decisão: pendenteDESQUALIFICADOdesqualificado · sm_status · status
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
vtkHm3dMPdQu4bsBrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
eEkCmi1xfiXlAqYzrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
wwnlcgDy8f3gvkTArevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
ElyzB7oOlfIyC39krevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
4a7NUQbfsbMQTBQNrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
S2lRZ4ihpAiMMCHjrevisado em 13/08/2026decisão: pendenteQUALIFICADO—
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
Vdc0MQeGJl5yvnp2revisado em 13/08/2026decisão: pendenteQUALIFICADO/DESQUALIFICADOorigem
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
EsLDYIxZvp7jmr9Drevisado em 13/08/2026decisão: pendenteQUALIFICACAOtelefone_normalizado
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
RkaGtxj71VYewn8Arevisado em 13/08/2026decisão: pendenteQUALIFICADOnome
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
XNjrr2RSn2TEzfoorevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
zkgVYMEviJ3NvoZwrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
voSpd9sEtmMoREAzrevisado em 13/08/2026decisão: pendenteQUALIFICACAOorigem · telefone_normalizado · ts_transferido
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
gP5UBqGVqdSmSrAbrevisado em 13/08/2026decisão: pendenteQUALIFICACAOdesqualificado · nome · origem · status · telefone_normalizado · ts_ultima_interacao
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
28WqoWNKIEanBI7Grevisado em 13/08/2026decisão: pendentevárioscidade · etapa_funil · identificador_sm · nome · origem · sm_status · status · telefone_normalizado · ts_ultima_interacao · valor_conta
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
DJAnXCzk4ptkxZ1rNÃO ANALISADONÃO ANALISADO — este workflow ainda não passou pela revisão nó a nó. O que se sabe vem só do n8n PROD: 5 nós, ativo.
KBLy8U1eSBjjCzWkrevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
ls6fMFxOKVNVJJF9revisado em 13/08/2026decisão: pendente—closer_id · status
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
PKcR12bXg2DHuZZprevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
RYCHPYTrFE0NSKd9revisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
PxsIxCyRuxDBU00krevisado em 13/08/2026decisão: pendente——
este fluxo não produz comunicação a cliente
Nenhuma foi executada. Auditoria ≠ correção.
revisado em 13/08/2026 · fonte: n8n PROD ·
prosa completa em Sol-estrategia/docs/AUDITORIA-SOL-13-08.md
derivado do backend em 21/08
CAPTAÇÃO → SOL SDR → QUALIFICAÇÃO → HANDOVER. Cada linha é uma contagem direta, sem inferência. Onde o número engana, a ressalva vem junto.
| etapa | leads | leitura |
|---|---|---|
| CAPTADOS | 285 | Meta 173 · WhatsApp direto 75 · Landing 34 · 3 sem origem (anteriores à migration 0005) |
| COM PROJETO NO SOLARMARKET | 273 | 12 sem projeto: falhas de SM que hoje gravam FALHA_SM em vez de sucesso falso |
| RESPONDERAM | 148 | 52% dos captados — é aqui que a SOL começa de fato a trabalhar |
| EM SOL SDR | 68 | etapa_funil atual; os demais já saíram para qualificado ou desqualificado |
| CONTA VALIDADA POR OCR | 7 | só a partir de 19/08 o gate passou a exigir a conta — o histórico não retroage |
| COM PRAZO RESPONDIDO | 62 | prazo_decisao preenchido |
| QUALIFICADOS | 110 | MORNO 61 · FRIO 49 · QUENTE 0 |
| ENTREGUES AO CLOSER | 91 | transferido_comercial=true |
| DESQUALIFICADOS | 35 | por recusa explícita ou ação humana — nunca por silêncio |
| EM JOGO AGORA | 18 | nem qualificado, nem desqualificado, nem transferido |
| template_entregue marca apenas 4 de 285 | O campo tem writer desde 18/08 e quase não dispara. Não significa que 281 leads ficaram sem primeiro contato — 273 têm projeto no SM e 148 responderam. É a MEDIÇÃO que falha, não a operação. Classificado como SUSPEITO na auditoria de schema. |
| 110 qualificados x 91 entregues ao closer | 19 leads têm status QUALIFICADO sem transferido_comercial. São anteriores à correção da ordem do handoff; o writer novo grava os dois juntos. |
| zero QUENTE em 110 qualificados | A régua de score só chega a 70 com conta alta + prazo curto + pagamento à vista + cidade-alvo. Com conta validada em apenas 7 leads, o score vinha do valor declarado. Esperado que mude conforme o gate da conta rodar. |
| 7 contas validadas | O gate de OCR entrou em 19/08. Todo lead anterior foi qualificado sem conta — é justamente o que a regra nova impede daqui em diante. |
Taxa de conversão comercial (proposta, fechamento, receita) não está neste banco. A SOL entrega ao closer e o funil dela termina aí.
derivado do backend em 21/08
Duas séries de handover, medindo eventos diferentes. A página mostra as duas separadas de propósito — juntá-las numa média só produziria um número sem evento correspondente.
| série | estado | n | mín | mediana | máx |
|---|---|---|---|---|---|
| SLA SOL — qualificação → handover (writer atual) ts_qualificado → ts_handoff, leads posteriores à correção da ordem (19/08 04:00 UTC) | MEDIDO | 8 | 5,7s | 11,6s | 18,6s |
| Quanto tempo a SOL leva entre decidir qualificar e concluir a entrega ao comercial: SolarMarket, Krolik, closer, whisper e gestão. | |||||
| SLA handover LEGADO reconstruído reconstruído por evidência (20 execuções n8n + 13 eventos Krolik) | RECONSTRUÍDO | 33 | 0,7s | 2,9s | 10,9s |
| MEDE COISA DIFERENTE: o instante em que o chat foi transferido ao closer no Krolik — não o término do handover completo. Por isso a mediana é menor. | |||||
As duas séries NÃO formam uma média única. Uma marca a transferência do chat; a outra, o fim de todo o handover. Somá-las produziria um número que não corresponde a nenhum evento real.
| fora da série | motivo |
|---|---|
| 1 lead (569563) | sem timestamp confiável; excluído de qualquer agregado em vez de receber tempo inventado |
ts_primeira_resposta em 13 leads ·
tempo_resposta_seg em 5. Os escritores nasceram em 19/08. Amostra pequena por ser recente, não por falha. tempo_resposta_seg fica NULL de propósito no WhatsApp direto: quem abriu a conversa foi o cliente, não existe abordagem anterior para medir.
73 de 91 leads entregues têm
ts_resposta_closer · tempo_resposta_closer_seg · closer_respondeu_krolik_id preenchidos.
Os campos NÃO estão vazios — 73 dos 91 leads entregues têm os três preenchidos por sol.comercial.resposta-closer. Mas esse workflow nunca passou pelo ciclo de revisão, e o detector depende de distinguir origem de mensagem e de tratar fuso do Krolik (dhMessage vem em BRT sem offset — armadilha que já nos pegou). Enquanto não for auditado, o número existe mas não vira KPI.
Não publicado por falta de escritor ou evidência:
13550083626778861835018456356694509544755984242120248170693270511CONFLITO RESOLVIDO 17/08: houve divergencia sobre qual seria o form atual (1355008362677886 x 4509544755984242). A propria Meta decide, e ela carimba form_id e campaign_id em cada lead. Na ultima leitura boa (exec 872671, 16/08 00:15 UTC): 122/122 leads com form_id=1355008362677886 e 120/122 com campaign_id=120248170693270511 (os 2 sem campanha sao leads de teste da propria Meta). Ou seja, a campanha 120248170693270511 entrega NESTE form. O 4509544755984242 e o form ANTERIOR, de onde vieram os 42 leads do backlog de julho. Ressalva honesta: essa prova vale ate 16/08 00:15; depois disso a credencial OAuth caiu e nao ha como ver a Graph — se o formulario do anuncio tiver sido trocado depois, so saberemos ao reconectar. PROVADO por leitura da Graph API em 13/08/2026. O nome "Formulário com Lógica Condicional" é da CAMPANHA, não do formulário — foi essa a armadilha que levou à leitura errada anterior. Os 42 leads meta_ads que não estão neste form são o backlog do form anterior, injetado em 17/07 pelo poll hoje morto.
derivado do backend em 21/08
Nem tudo que é estranho é bug. Cada achado cai em uma categoria — sem isso a página volta a contar como problema atual o que já morreu.
| categoria | quantos | o que significa | |
|---|---|---|---|
| ANOMALIA ATIVA | 1 | acontece hoje, reproduzível | |
| RESÍDUO HISTÓRICO | 3 | causa corrigida, dados antigos permaneceram | |
| GAP DE MEDIÇÃO | 2 | a operação acontece; o campo não captura direito | |
| PENDÊNCIA DE VALIDAÇÃO | 3 | implementado, falta E2E ou auditoria | |
| ESTADO ESPERADO | 2 | parece estranho, está correto |
| achado | categoria | qtd | última |
|---|---|---|---|
| FUP inteiro em timeout no GET leads elegíveis | ANOMALIA ATIVA | 40 execuções | 21/08 18:00 |
| causa: Encadear GET conversas p/ FF antes do GET leads elegíveis fez a query de leads rodar UMA VEZ POR LINHA de conversa (até 3000). Regressão introduzida por mim hoje às ~13:00 UTC. estado: CORRIGIDA às 18:05 — executeOnce=true no nó, janela de 15 dias na busca de conversas. Ciclo seguinte: 1 execução, 16 leads, 437 conversas. ação: Monitorar os próximos ciclos. | |||
| 19 leads QUALIFICADO sem handover (GAP-05) | RESÍDUO HISTÓRICO | 19 | 05/08 11:52 |
| causa: Até 08/08 o fluxo PAI marcava status=QUALIFICADO ANTES do handoff assíncrono; filho falhando deixava o lead meio-qualificado. estado: FIX-04 aplicado em 08/08. Zero casos novos desde então — o último é três dias anterior ao fix. ação: 19 registros aguardando decisão de saneamento. NÃO saneados nesta rodada. | |||
| 24 desqualificados sem origem persistida | RESÍDUO HISTÓRICO | 24 | anteriores a 13/08 |
| causa: handoff_origem só passou a ser gravado com a esteira [SOL] Desqualificar. estado: 11 dos 35 já têm origem. Dos 2 desqualificados após 19/08, 1 ainda saiu sem origem. ação: Investigar esse 1 caso pós-revisão antes de considerar o writer fechado. | |||
| 1 lead com SLA de handover não reconstruível | RESÍDUO HISTÓRICO | 1 (lead 569563) | 12/08 |
| causa: Nenhum evento de transferência no Krolik em ±5 min da qualificação; execução n8n fora da janela de retenção. estado: Mantido como está, excluído de todo agregado de SLA. ação: Decisão pendente: manter fora do SLA ou zerar ts_handoff. | |||
| template_entregue marca 4 de 207 elegíveis | GAP DE MEDIÇÃO | 4/207 | — |
| causa: O writer é o PATCH âncora FUP (capture) nos dois fluxos de Ingestão, e só nasceu em 18/08. WhatsApp direto (75 leads) nunca recebe template — está fora do universo por desenho. estado: Dos 14 leads capturados desde 18/08, 4 marcados. Ainda mede mal. ação: NÃO é falha de entrega: 273 leads têm projeto no SM e 148 responderam. É o campo que não representa o universo. | |||
| forma_pagamento nunca preenchido em 285 leads | GAP DE MEDIÇÃO | 0/285 | — |
| causa: A régua de score dá +10 para pagamento à vista, mas a SOL não pergunta forma de pagamento — não é gate. estado: Um dos quatro componentes do score é estruturalmente inalcançável. ação: Nenhuma nesta rodada — mexer no score está fora do escopo congelado. | |||
| SLA comercial preenchido mas não auditado | PENDÊNCIA DE VALIDAÇÃO | 73/91 | — |
| causa: sol.comercial.resposta-closer escreve ts_resposta_closer, tempo_resposta_closer_seg e closer_respondeu_krolik_id, mas nunca passou pelo ciclo de revisão. estado: Os campos NÃO estão vazios. O detector depende de distinguir origem de mensagem e de tratar o fuso do Krolik (dhMessage vem em BRT sem offset). ação: Frente futura de observabilidade comercial. | |||
| Fast Forward sem ocorrência real | PENDÊNCIA DE VALIDAÇÃO | 0 | — |
| causa: Implementado em 21/08 com 9 goldens no código real; nenhum lead percorreu ainda prazo → silêncio → áudio → silêncio. estado: IMPLEMENTADO + GOLDENS ✅ · E2E REAL ⏳ ação: Aguardar operação real. Não fabricar lead. | |||
| total_audios sem incremento ao vivo | PENDÊNCIA DE VALIDAÇÃO | 0 | — |
| causa: O campo não tinha escritor até 21/08, apesar de 40 áudios entregues. estado: Writer criado e provado em dry-run com os 5 toques. Falta o primeiro áudio real pós-writer. ação: Histórico NÃO foi retroagido: não havia como saber qual entrega foi de qual lead sem inferir. | |||
| Zero leads QUENTE em 285 | ESTADO ESPERADO | 0 | — |
| causa: Score máximo observado é 65. Chegar a 70 exige conta ≥ R$ 800 VALIDADA (+40) — e só 7 leads têm OCR, nenhum acima de 800. O outro caminho, pagamento à vista (+10), é inalcançável porque o campo nunca é preenchido. estado: Coerente com a régua atual e com o fato de o gate da conta ter entrado em 19/08. ação: Reavaliar quando houver amostra de contas validadas. Não mexer no score agora. | |||
| Apenas 7 contas validadas por OCR | ESTADO ESPERADO | 7/285 | — |
| causa: O gate que exige a conta entrou em 19/08. Todo lead anterior foi qualificado sem conta. estado: É exatamente o que a regra nova impede daqui em diante. ação: Nenhuma. O histórico não retroage. | |||
O número antigo (13 anomalias, "nenhuma foi corrigida") era de 13/08 e a maioria já morreu. Este bloco recalcula o presente.
derivado do backend em 24/08
O que a operação ainda não consegue responder, e o campo que falta para conseguir.
retrato de 19/08 — 5 dias
A operação funcionar não basta: ela precisa deixar rastro suficiente para
administrar o produto. Auditoria do lead 612449 (execuções
890615 e 890617), campo a campo.
Ausência de dado aparece como NÃO MENSURÁVEL, nunca como número bonito.
lead| SLA | duração | início → fim | fonte | confiança |
|---|---|---|---|---|
| CAPTAÇÃO | 5s | lead.created_at → conversa[capture/out].ts | backend | ALTA |
| ENGAJAMENTO | 3.19h | 1ª abordagem → conversa[in].ts | backend | ALTA |
| SDR | 7s | resposta do cliente → conversa[sdr/out].ts | backend | ALTA |
| QUALIFICAÇÃO | 13s | resposta (proxy) → lead.ts_qualificado | backend, com proxy | MÉDIA — não existe timestamp de entrada em SOL SDR |
| HANDOVER | INVERTIDO | lead.ts_qualificado → lead.ts_handoff | backend | BAIXA — ts_handoff 02:31:25.323 é ANTES de ts_qualificado 02:31:30.689 |
Observado na execução (evidência efêmera, não persistida):
Anthropic · claude-sonnet-4-6 · input 315 ·
cache-creation 3894 · cache-read 0 ·
output 349.
Gap: Para responder "quanto custou este lead" seria preciso persistir usage por conversa + tabela de preço por modelo. NÃO criado neste turno.
| outro custo | estado | observação |
|---|---|---|
| Krolik / template WhatsApp | NÃO MENSURÁVEL | nenhum campo de custo; o fornecedor cobra por janela/template fora do n8n |
| SolarMarket | NÃO APLICÁVEL | licença, não custo por lead |
| ElevenLabs (áudio do FUP) | NÃO MENSURÁVEL | sem persistência de caracteres/custo |
| OpenAI OCR | NÃO MENSURÁVEL | não houve OCR neste lead; e não há writer de usage |
retrato de 19/08 — 5 dias
| tabela | função | linhas | colunas | PK | única | escrevem | leem |
|---|---|---|---|---|---|---|---|
lead | Registro operacional do lead — a verdade da jornada | 277 | 87 | id | telefone_normalizado (UNIQUE no banco) | entrada-lead, inbound.whatsapp, Qualificar, Desqualificar, FUP, Router, resposta-closer, ops.altera-status | SDR Engine, FUP, Qualificar, Desqualificar, silencio-inbound, Briefing, ops |
conversa | Historico de mensagens, entrada e saida | 1525 | 14 | id | — | entrada-lead, inbound.whatsapp, SDR Engine, FUP, reprocessa | SDR Engine, silencio-inbound |
closer | Cadastro dos closers para a roleta | 2 | 7 | id | sm_id, krolik_id | ops.altera-status (campo ativo) | Qualificar (roleta), resposta-closer |
config | Configuracao operacional da franquia: modelos de IA, faixas de score, horarios de FUP, tags do Krolik, stages do SolarMarket, vozes | 1 | 35 | franquia_id | — | NENHUM | NENHUM — a configuracao efetiva vive hardcoded nos nos 00_CONFIG de cada workflow |
lead por responsabilidade| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
id | bigint | 277/277 100% | [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead, sol.comercial.resposta-closer, sol.followup.janela-24h, sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar, [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), [SOL] Router Tag, [SOL] SDR Engine, sol.captacao.entrada-lead, sol.comercial.resposta-closer, sol.followup.janela-24h, sol.followup.reprocessa-parados, sol.inbound.whatsapp, sol.observabilidade.silencio-inbound, sol.ops.altera-status-lead | CANÔNICO |
telefone_normalizado | text | 277/277 100% | [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead, sol.followup.janela-24h, sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar, [SOL] Reparo Rajada 17/07 (one-shot), [SOL] Router Tag, sol.captacao.entrada-lead, sol.captacao.meta-poll, sol.followup.janela-24h, sol.inbound.whatsapp | CANÔNICO |
franquia_id | text | 277/277 100% | — | — | CANÔNICO |
nome | text | 277/277 100% | [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar, [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), [SOL] Router Tag, sol.captacao.entrada-lead, sol.comercial.resposta-closer, sol.crm.garante-cliente-projeto, sol.followup.janela-24h | CANÔNICO |
created_at | timestamp with time zone | 277/277 100% | — | [SOL] Briefing Diário Rafael (08h BRT), sol.ops.le-lead | CANÔNICO |
updated_at | timestamp with time zone | 277/277 100% | — | — | CANÔNICO |
cidade | text | 235/277 85% | sol.captacao.entrada-lead | [SOL] Desqualificar, [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead | PARCIAL |
email | text | 206/277 74% | sol.captacao.entrada-lead | [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead | PARCIAL |
estado | text | 31/277 11% | — | — | SEM USO |
cep | text | 31/277 11% | — | — | SEM USO |
bairro | text | 25/277 9% | — | — | SEM USO |
cpf_cnpj | text | 12/277 4% | — | — | SEM USO |
tipo_pessoa | text | 4/277 1% | — | — | SEM USO |
| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
canal_origem | text | 277/277 100% | sol.captacao.entrada-lead | [SOL] Briefing Diário Rafael (08h BRT) | CANÔNICO |
ultimo_canal | text | 277/277 100% | sol.captacao.entrada-lead | — | SUSPEITO |
origem_entrada | text | 274/277 99% | sol.captacao.entrada-lead, sol.inbound.whatsapp | sol.inbound.whatsapp | PARCIAL |
etapa_funil | text | 254/277 92% | [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead, sol.inbound.whatsapp | sol.inbound.whatsapp | PARCIAL |
canal_aquisicao | text | 204/277 74% | sol.captacao.entrada-lead | sol.inbound.whatsapp | PARCIAL |
pagina_origem | text | 33/277 12% | sol.captacao.entrada-lead | — | SUSPEITO |
meta_page_id | text | 12/277 4% | sol.captacao.entrada-lead | — | SUSPEITO |
meta_form_id | text | 12/277 4% | sol.captacao.entrada-lead | — | SUSPEITO |
meta_leadgen_id | text | 12/277 4% | sol.captacao.entrada-lead | — | SUSPEITO |
meta_campaign_name | text | 12/277 4% | sol.captacao.entrada-lead | — | SUSPEITO |
meta_campaign_id | text | 12/277 4% | sol.captacao.entrada-lead | — | SUSPEITO |
utm_source | text | 0/277 0% | — | — | SEM USO |
utm_campaign | text | 0/277 0% | — | — | SEM USO |
fbclid | text | 1/277 0% | sol.captacao.entrada-lead | — | SUSPEITO |
gclid | text | 0/277 0% | sol.captacao.entrada-lead | — | SUSPEITO |
| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
score | integer | 277/277 100% | — | [SOL] Desqualificar | CANÔNICO |
temperatura | text | 277/277 100% | — | [SOL] Desqualificar | CANÔNICO |
status | text | 277/277 100% | [SOL] Desqualificar, [SOL] Qualificar Lead, sol.captacao.entrada-lead, sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar, [SOL] Reparo Rajada 17/07 (one-shot), [SOL] Router Tag, sol.followup.janela-24h | CANÔNICO |
total_mensagens_ia | integer | 277/277 100% | — | — | SEM USO |
tem_geracao | boolean | 277/277 100% | — | — | SEM USO |
aguardando_conta | boolean | 277/277 100% | — | sol.followup.janela-24h | CANÔNICO |
total_audios | integer | 277/277 100% | — | — | SEM USO |
valor_conta | numeric | 235/277 85% | sol.captacao.entrada-lead | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar | PARCIAL |
resumo_qualificacao | text | 122/277 44% | [SOL] Desqualificar | — | SUSPEITO |
ts_qualificado | timestamp with time zone | 103/277 37% | [SOL] Qualificar Lead | [SOL] Briefing Diário Rafael (08h BRT), sol.comercial.resposta-closer, sol.followup.janela-24h, sol.observabilidade.silencio-inbound | PARCIAL |
preferencia_contato | text | 85/277 31% | — | — | SEM USO |
prazo_decisao | text | 55/277 20% | sol.inbound.whatsapp | sol.inbound.whatsapp | PARCIAL |
tipo_imovel | text | 34/277 12% | — | — | SEM USO |
ocr_status | text | 34/277 12% | — | — | SEM USO |
ocr_confianca | numeric | 34/277 12% | — | — | SEM USO |
instalacao_uc | text | 32/277 12% | — | — | SEM USO |
distribuidora | text | 32/277 12% | — | — | SEM USO |
ts_desqualificado | timestamp with time zone | 32/277 12% | [SOL] Desqualificar, sol.followup.reprocessa-parados | sol.followup.janela-24h, sol.observabilidade.silencio-inbound | PARCIAL |
consumo_kwh_mes | numeric | 29/277 10% | — | — | SEM USO |
consumo_historico | jsonb | 24/277 9% | — | — | SEM USO |
tendencia_consumo | text | 24/277 9% | — | — | SEM USO |
classificacao_conta | text | 23/277 8% | — | — | SEM USO |
tipo_fornecimento | text | 23/277 8% | — | — | SEM USO |
consumo_kwh_min | numeric | 0/277 0% | — | — | SEM USO |
consumo_kwh_max | numeric | 0/277 0% | — | — | SEM USO |
forma_pagamento | text | 0/277 0% | — | — | SEM USO |
tipo_telhado | text | 0/277 0% | — | — | SEM USO |
acrescimo_carga | text | 0/277 0% | — | — | SEM USO |
consumo_medio_3m | numeric | 0/277 0% | — | — | SEM USO |
consumo_medio_12m | numeric | 1/277 0% | — | — | SEM USO |
| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
transferido_comercial | boolean | 277/277 100% | [SOL] Qualificar Lead | — | SUSPEITO |
ts_transferido | timestamp with time zone | 206/277 74% | [SOL] Qualificar Lead, sol.followup.janela-24h | [SOL] Briefing Diário Rafael (08h BRT), sol.comercial.resposta-closer, sol.followup.janela-24h | PARCIAL |
handoff_tipo | text | 90/277 32% | [SOL] Router Tag, sol.followup.janela-24h, sol.inbound.whatsapp | sol.observabilidade.silencio-inbound | PARCIAL |
handoff_origem | text | 90/277 32% | [SOL] Router Tag, sol.followup.janela-24h, sol.inbound.whatsapp | sol.observabilidade.silencio-inbound | PARCIAL |
ts_handoff | timestamp with time zone | 87/277 31% | [SOL] Router Tag, sol.followup.janela-24h, sol.inbound.whatsapp | sol.observabilidade.silencio-inbound | PARCIAL |
closer_id | bigint | 84/277 30% | [SOL] Qualificar Lead | — | SUSPEITO |
ts_resposta_closer | timestamp with time zone | 65/277 23% | sol.comercial.resposta-closer | sol.comercial.resposta-closer | PARCIAL |
closer_respondeu_krolik_id | text | 65/277 23% | sol.comercial.resposta-closer | — | SUSPEITO |
tempo_resposta_closer_seg | integer | 65/277 23% | sol.comercial.resposta-closer | — | SUSPEITO |
| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
identificador_sm | text | 265/277 96% | [SOL] Qualificar Lead, [SOL] Reparo Rajada 17/07 (one-shot), sol.captacao.entrada-lead, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), [SOL] Desqualificar, [SOL] Reparo Rajada 17/07 (one-shot), sol.inbound.whatsapp | PARCIAL |
sm_status | text | 264/277 95% | [SOL] Desqualificar, [SOL] Qualificar Lead, sol.captacao.entrada-lead, sol.inbound.whatsapp | — | SUSPEITO |
contact_id | text | 218/277 79% | sol.captacao.entrada-lead | — | SUSPEITO |
chat_id | text | 202/277 73% | sol.captacao.entrada-lead | sol.comercial.resposta-closer, sol.followup.janela-24h | PARCIAL |
project_id_sm | text | 103/277 37% | [SOL] Qualificar Lead | [SOL] Desqualificar | PARCIAL |
template_entregue | boolean | 3/277 1% | sol.captacao.entrada-lead | — | SUSPEITO |
client_id_sm | text | 0/277 0% | — | — | SEM USO |
whatsapp_valido | boolean | 0/277 0% | — | — | SEM USO |
template_msg_id | text | 0/277 0% | — | — | SEM USO |
| campo | tipo | preenchido | quem escreve | quem lê | estado |
|---|---|---|---|---|---|
fup_count | integer | 277/277 100% | sol.followup.janela-24h, sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), sol.followup.janela-24h | CANÔNICO |
reativado_fup | boolean | 277/277 100% | sol.followup.janela-24h, sol.followup.reprocessa-parados | sol.followup.janela-24h | CANÔNICO |
respondeu | boolean | 277/277 100% | sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), sol.followup.janela-24h | CANÔNICO |
ts_ultima_interacao | timestamp with time zone | 263/277 95% | sol.captacao.entrada-lead, sol.followup.reprocessa-parados, sol.inbound.whatsapp | [SOL] Briefing Diário Rafael (08h BRT), sol.followup.janela-24h | PARCIAL |
ts_ultimo_fup | timestamp with time zone | 170/277 61% | sol.followup.janela-24h, sol.followup.reprocessa-parados | [SOL] Briefing Diário Rafael (08h BRT), sol.followup.janela-24h | PARCIAL |
ts_reativacao | timestamp with time zone | 158/277 57% | sol.followup.janela-24h, sol.followup.reprocessa-parados, sol.inbound.whatsapp | sol.followup.janela-24h | PARCIAL |
acao_manual | text | 8/277 3% | [SOL] Router Tag | — | SUSPEITO |
ts_acao_manual | timestamp with time zone | 8/277 3% | [SOL] Router Tag | — | SUSPEITO |
ts_primeira_resposta | timestamp with time zone | 0/277 0% | — | — | SEM USO |
tempo_resposta_seg | integer | 0/277 0% | — | — | SEM USO |
ts_template_reprocesso | timestamp with time zone | 0/277 0% | — | — | SEM USO |
Mapeamento do que já existe. Onde leitura e ingestão vivem no mesmo workflow, está mostrado como está — nada foi separado por estética.
| canal | papel | workflow | nó / branch | entrada | saída |
|---|---|---|---|---|---|
| META | LEITURA | sol.captacao.meta-poll | Cron 5min · 24h → GET page do form → GET leads form novo → GET telefones existentes (checkpoint) → Monta payloads | Graph API, form 1355008362677886 | POST /sol-ads-inbound |
| META | INGESTAO | sol.captacao.entrada-lead | Webhook Meta Lead → IF token válido → Parse Meta lead → tronco comum | POST /sol-ads-inbound | lead + conversa + SM + 1a abordagem |
| LANDING PAGE | LEITURA | sol.captacao.entrada-lead | Cron Google 5min → GET planilha Google → Novos leads (planilha) → É processar? | planilha Google (gate coluna F) | mesmo workflow |
| LANDING PAGE | INGESTAO | sol.captacao.entrada-lead | Normaliza + monta → tronco comum | saida do no anterior | lead + conversa + SM + 1a abordagem |
| WHATSAPP DIRETO | LEITURA | sol.inbound.whatsapp | Webhook · sol-wa-inbound → Normaliza telefone → IF tel_status → IF token válido | evento 7 do Krolik | mesmo workflow |
| WHATSAPP DIRETO | INGESTAO | sol.inbound.whatsapp | Supabase capture_lead → IF lead novo (entry) [TRUE] → PATCH status QUALIFICACAO | saida do no anterior | lead (so quando o telefone nao existia) |
| campo | META | LANDING | WHATSAPP DIRETO |
|---|---|---|---|
telefone_normalizado | 173/173 | 33/33 | 71/71 |
origem_entrada | 173/173 | 33/33 | 68/71 |
canal_aquisicao | 173/173 | 31/33 | 0/71 |
pagina_origem | 0/173 | 33/33 | 0/71 |
meta_form_id | 12/173 | 0/33 | 0/71 |
meta_leadgen_id | 12/173 | 0/33 | 0/71 |
identificador_sm | 173/173 | 33/33 | 59/71 |
chat_id | 111/173 | 28/33 | 63/71 |
contact_id | 127/173 | 28/33 | 63/71 |
template_entregue | 2/173 | 1/33 | 0/71 |
status | 173/173 | 33/33 | 71/71 |
ts_ultima_interacao | 163/173 | 31/33 | 69/71 |
atendidos 0 · sem atendimento 0 · QUALIFICADO 0 · DESQUALIFICADO 0 · ABERTO 0 · handover concluído 0 · handover pendente 0 · sem SolarMarket 0
atendidos 49 · sem atendimento 0 · QUALIFICADO 19 · DESQUALIFICADO 3 · ABERTO 27 · handover concluído 19 · handover pendente 0 · sem SolarMarket 0
derivado do backend em 21/08
Project hsnglsjmiefgxghljgsz · PostgreSQL 17.6 ·
6 tabelas · 185 colunas, todas classificadas com evidência.
SUPABASE GLOBAL — 100% MAPEADO SUPABASE CAPTAÇÃO + QUALIFICAÇÃO — 100% VALIDADO
| tabela | linhas | colunas | observação |
|---|---|---|---|
lead | 285 | 90 | entidade central; 0 telefones duplicados |
config | 1 | 35 | canônico DESACOPLADO — valores corretos, nenhum leitor |
uso_ia | 61 | 25 | ledger de custo de IA; 1 chamada = 1 evento |
conversa | 1659 | 14 | histórico; direcao ainda tem 3 vocabulários (in/out/outbound) |
preco_ia | 3 | 14 | preço versionado por vigência; alimentado por migration |
closer | 2 | 7 | roleta comercial |
| classe | colunas | o que significa | |
|---|---|---|---|
| CANÔNICO ATIVO | 55 | escrito e lido, com writer identificado | |
| NULL LEGÍTIMO | 51 | só preenche em ramo específico, por desenho | |
| LEGADO | 35 | as 35 colunas de config: valor certo, leitor nenhum | |
| SUSPEITO | 16 | escrito e nunca lido — 4 deles são lidos por SQL/BI, não pelo n8n | |
| ATIVO PARCIAL | 12 | em uso, preenchimento parcial esperado | |
| SEM USO COMPROVADO | 11 | 0 linhas e nenhum writer/reader | |
| NULL ESTRUTURAL | 4 | lido, writer ainda não disparou |
config | canônico desacoplado — stages, setor Krolik, modelos e limiares corretos, hardcoded nos nós 00_CONFIG |
telemetria de IA | canônico ativo — uso_ia + preco_ia, idempotência provada |
client_id_sm | reservado para multitenant futuro |
whatsapp_valido · template_msg_id · ts_template_reprocesso | HOLD |
conversa.projeto_id_sm | HOLD — analisar quando necessário |
tipo_telhado · acrescimo_carga | legado retido: o prompt manda NÃO perguntar |
utm_source · utm_campaign · gclid · fbclid | rastreabilidade de aquisição futura |
total_audios | reservado ao FUP — writer criado em 21/08, contador começa daqui |
RLS | ligado nas 6 tabelas, 0 policies: acesso só pela chave de serviço |
Nenhuma coluna foi removida e nenhuma precisa ser agora. Campo sem uso hoje não é lixo — é estado conhecido e nomeado.
Evidência coluna a coluna em Sol-estrategia/docs/evidencias/auditoria-schema-sol.json.
⚠️ Este bloco não vem do n8n — vem do censo de 08/08/2026 e é mantido à mão.
| agente | papel | modelo | via |
|---|---|---|---|
| sol-briefing | estagiario | sem-modelo | Code node |
| sol-desqualificador | worker | sem-modelo | sub-workflow |
| sol-detector-resposta-closer | estagiario | sem-modelo | Code node |
| sol-ocr-conta | estagiario | gpt-4o | httpRequest api.openai.com |
| sol-parse-meta | estagiario | sem-modelo | Code node |
| sol-qualificador | worker | sem-modelo | sub-workflow |
| sol-regua-fup | worker | sem-modelo | Code node |
| sol-roleta-closer | estagiario | sem-modelo | Code node |
| sol-router-tag | estagiario | sem-modelo | webhook Krolik evento 22/31 |
| sol-score-e-travas | worker | sem-modelo | Code node |
| sol-sdr-conversa | worker | claude-sonnet-4-6 | httpRequest api.anthropic.com |
| sol-sm-ensure | estagiario | sem-modelo | sub-workflow |
| sol-voz-fup | estagiario | eleven_turbo_v2_5 | httpRequest api.elevenlabs.io |
| sol-watchdog | estagiario | sem-modelo | Code node |
API n8n PROD, leitura de 24/08/2026 13:03 BRTdados-revisao.json (extrato da revisão fluxo a fluxo)leitura direta do Supabase hsnglsjmiefgxghljgsz em 13/08/2026Graph API v21.0, leitura de 13/08/2026censo SOL de 08/08/2026 — mantido à mão./refresh-sol.sh e commita. É deliberado: ligar visual vivo exige o
contrato n8n → Workplace → frontend, que é transversal a toda a plataforma — e não se
cria arquitetura especial só para a SOL.