# Funil "Do Post ao Lucro" — n8n (5 workflows)

Pacote importável: 5 workflows n8n + schema Supabase. Do comentário no Instagram à venda atribuída, com os trilhos de compliance embutidos.

## Ordem de instalação

1. **Supabase** — rode `00-schema-supabase.sql` no SQL Editor (cria `leads_funil` + views).
2. **n8n** — importe os 5 JSON (Menu ⋮ → *Import from File*), um a um.
3. **Credenciais** — em cada workflow, selecione sua credencial **Postgres** (aponta pro Supabase).
4. **Variáveis de ambiente** (Settings → Variables, ou no host):
   - `EVOLUTION_URL`, `EVOLUTION_INSTANCE`, `EVOLUTION_APIKEY`
   - `CHATWOOT_URL`, `CHATWOOT_ACCOUNT`, `CHATWOOT_TOKEN`
5. **ManyChat** — cole as URLs dos webhooks:
   - `.../webhook/captura-triagem` → no passo *External Request* após detectar o comentário
   - `.../webhook/consentimento` → no passo de resposta da DM
6. **Ative** os workflows (começam inativos) e teste com o payload de exemplo.

## Os 5 workflows

| # | Workflow | Trigger | Faz |
|---|----------|---------|-----|
| 1 | Captura & Triagem | Webhook (ManyChat) | Classifica intenção, resposta pública neutra, cria lead |
| 2 | Consentimento & Handoff | Webhook (reply DM) | Registra SIM (LGPD) → dispara WhatsApp; SAIR → opt-out |
| 3 | Qualificação | Webhook (inbound WhatsApp) | Verifica prescrição → nota privada p/ farmacêutico |
| 4 | Follow-up Scheduler | Cron (horário) | Sequência D+0/D+1/toque 3; pausa se respondeu |
| 5 | Atribuição & Venda | Webhook (registro de venda) | Marca conversão + ranking de receita por origem |

## Trilhos de compliance (embutidos)

- **RDC 67/96** — a resposta pública (WF1) nunca cita substância + indicação + preço; a conversa vai para o privado.
- **LGPD Art. 11** — o WhatsApp (WF2) só dispara após o SIM; consentimento gravado com timestamp; `SAIR` = opt-out.
- **CFF / RT** — a qualificação (WF3) encaminha ao farmacêutico responsável antes de qualquer orçamento.

## Reasoning Framework (por que cada decisão)

- **ManyChat na frente, não Graph API direta.** Evita o App Review da Meta (2–4 semanas). O n8n entra da captura para trás.
- **Supabase como fonte de verdade.** Cada lead carrega a origem do começo ao fim → atribuição por post/parceiro (WF5).
- **`contato` como chave única.** Deduplica o mesmo cliente entre Instagram e WhatsApp (ON CONFLICT no WF1).
- **Consentimento antes do canal privado.** WF2 é o portão LGPD: sem SIM, não há WhatsApp.
- **Follow-up idempotente por etapa + janela.** WF4 usa `followup_etapa` + `ultimo_toque` para não repetir toque e respeitar timing; `respondeu` pausa a sequência (e a janela de 24h da Meta).
- **Evolution API = protótipo.** Funciona para validar; para produção, migrar o envio para a WhatsApp Cloud API (oficial) trocando só os nós HTTP de envio. Risco de banimento é real na não-oficial.

## Duplicar por cliente (~15 min)

Cada cliente = um conjunto dos 5 workflows com: (a) sua credencial Postgres/schema próprio, (b) suas variáveis Evolution/Chatwoot, (c) paths de webhook prefixados (ex.: `clienteA-captura-triagem`). O schema e a lógica não mudam.

## Notas de produção

- As queries usam expressões inline por robustez de import. **Para produção, parametrize** (query params `$1,$2`) para evitar injeção — especialmente em campos de texto livre.
- Ajuste `typeVersion` dos nós se seu n8n for mais novo (ele avisa no import; use *autofix* se empurrar via MCP).
- Payloads de webhook: adapte os nomes de campo (`comment_text`, `ig_id`, `text`, `number`…) ao que o ManyChat/Evolution realmente enviam na sua conta.
