# Blueprint Interno — Ferramentas MCI

Documentação técnica + prompts prontos para replicar cada ferramenta do site **marcusbarboza.com.br** dentro de qualquer sistema de **Omnichannel / CRM**. Todas as fórmulas, regras de pontuação, schemas de IA e *prompts de sistema* estão aqui, exatamente como rodam em produção.

> Stack original: TanStack Start + Supabase + Lovable AI Gateway (`google/gemini-2.5-flash` via tool calling). Pode ser portado para Next/Node/qualquer backend — só troque a chamada do gateway por OpenAI/Anthropic/Gemini equivalentes mantendo `tool_choice` forçado.

---

## 0. Conceitos invioláveis (base de toda IA do sistema)

```text
MCI = Marketing Conversacional Integrado
Conceitos:
- Amnésia Operacional: contexto perdido entre canais/áreas/pessoas.
- Crachá de Contexto: identidade conversacional única que viaja com o cliente.
- Bandeja de Contexto: superfície que entrega ao operador (humano ou IA) tudo o que importa naquele instante.
- IAm (Índice de Amnésia) = (Ciclos Travados + Ciclos Reabertos sem Memória) / Total de Ciclos. Faixas: verde <20%, amarelo 20–35%, vermelho >35%.
- pT (Probabilidade Térmica): probabilidade de transição com integridade dentro de um horizonte definido (30/60/90 dias). Score orienta ação; pT orienta forecast.
- TPC (Tempo Produtivo de Conversa): tempo avançando o ciclo vs. recapitulando. Nunca abreviar como "pT".
- Conversation Score: 6 eixos 0–100 (sem_necessidade, gatilho, exploracao, comparacao, compra, experiencia).
- Guardião do Ciclo: papel que impede que ciclos morram por amnésia.

6 Estados de Decisão (jornada não-linear):
1 Sem Necessidade → 2 Gatilho → 3 Exploração → 4 Comparação → 5 Compra → 6 Experiência

5 Arquétipos:
Turista | Explorador | Estudioso | Fiel | Decidido

8Cs: Cliente, Contexto, Conteúdo, Comunicação, Custo, Conveniência, Confiança, Consistência

3 Gaps detectáveis: Context Gap, Memory Gap, Decision Gap
```

Use esse bloco como prefixo (`MCI_CORE_KNOWLEDGE`) de **todo** prompt de IA das ferramentas a seguir.

---

## 1. Calculadora de Margem Invisível

**Objetivo:** estimar quanto a operação perde por mês por causa da Amnésia Operacional.

### Entradas (sliders)
| Variável | Faixa | Default |
|---|---|---|
| `cycles` (ciclos/mês) | 10–2000 | 200 |
| `ticket` (R$ médio) | 500–500.000 | 15.000 |
| `iam` (Índice de Amnésia %) | 0–80 | 35 |
| `discount` (desconto médio aplicado %) | 0–30 | 12 |
| `churn` (% mensal) | 0–50 | 18 |

### Fórmulas exatas (rodam no cliente, em tempo real)
```ts
function compute({ cycles, ticket, iam, discount, churn }) {
  const cyclesReset = cycles * (iam / 100);
  const resetCost   = cyclesReset * 180;                       // R$ 180 por ciclo reiniciado
  const discountAttributableToAmnesia = (discount / 100) * 0.6; // 60% do desconto é defensivo
  const discountLoss  = cycles * ticket * discountAttributableToAmnesia;
  const churnedClients = cycles * (churn / 100);
  const churnLoss     = churnedClients * ticket * 0.7;         // 70% do ticket vira perda
  const reworkCost    = cyclesReset * 95;                      // R$ 95 retrabalho por ciclo
  const total = resetCost + discountLoss + churnLoss + reworkCost;
  return { resetCost, discountLoss, churnLoss, reworkCost, total };
}
```

### Cenário projetado (MCI aplicado)
```ts
projected = compute({ cycles, ticket, iam: 15, discount: discount * 0.5, churn: churn * 0.6 })
projectedGain = current.total - projected.total
annual        = current.total * 12
headcountEq   = annual / 180_000   // headcount sênior equivalente
```

### Faixas de IAm
- `iam <= 20` → **Saudável** (verde)
- `iam <= 40` → **Atenção** (âmbar)
- `iam <= 60` → **Crítico** (laranja)
- `iam > 60`  → **Hemorrágico** (rosa)

### UI obrigatória
- 5 sliders, badge de faixa IAm, waterfall (4 componentes de perda), card de projeção, gancho de captura de lead (e-mail) que persiste em `calculator_results`.
- URL com query params `?c=&t=&i=&d=&ch=` para deep-link compartilhável.

### Prompt p/ replicar no Lovable
```
Crie uma "Calculadora de Margem Invisível" como ferramenta interna do meu CRM.
Inputs (sliders com faixas e defaults):
  cycles 10-2000 (200), ticket 500-500000 (15000), iam 0-80 (35),
  discount 0-30 (12), churn 0-50 (18).
Calcule em tempo real:
  resetCost      = cycles * (iam/100) * 180
  discountLoss   = cycles * ticket * (discount/100) * 0.6
  churnLoss      = cycles * (churn/100) * ticket * 0.7
  reworkCost     = cycles * (iam/100) * 95
  total          = soma dos 4
  projetado      = mesmo cálculo com iam=15, discount*0.5, churn*0.6
  ganhoProjetado = total - projetado
  anual          = total * 12
  headcount_eq   = anual / 180000
Mostre waterfall, badge de faixa IAm (verde≤20, âmbar≤40, laranja≤60, rosa>60),
card de projeção, persiste em tabela calculator_results, query-string ?c=&t=&i=&d=&ch=
para deep-link, captura de lead opcional por e-mail.
```

---

## 2. Diagnóstico IAm (IA)

**Objetivo:** chat-questionário que devolve score IAm, faixa, gaps, jornada crítica e relatório executivo.

### Schema do tool call (Gemini/OpenAI/Anthropic — *function calling forçado*)
```json
{
  "name": "submit_diagnostic",
  "parameters": {
    "type": "object",
    "required": ["iam_score","iam_band","gaps_detected","critical_journey","recommended_cycle","full_report"],
    "properties": {
      "iam_score":   { "type": "number", "minimum": 0, "maximum": 100 },
      "iam_band":    { "type": "string", "enum": ["verde","amarelo","vermelho"] },
      "gaps_detected": {
        "type": "object",
        "required": ["context","memory","decision"],
        "properties": {
          "context":  { "type": "string", "enum": ["alto","medio","baixo","ausente"] },
          "memory":   { "type": "string", "enum": ["alto","medio","baixo","ausente"] },
          "decision": { "type": "string", "enum": ["alto","medio","baixo","ausente"] }
        }
      },
      "critical_journey":  { "type": "string" },
      "recommended_cycle": { "type": "string", "enum": ["quick_win_30d","foundations_90d","full_mci_6m"] },
      "full_report":       { "type": "string" }
    }
  }
}
```

### System prompt (use literalmente)
```
{MCI_CORE_KNOWLEDGE}

# TAREFA
Você é o avaliador MCI. A partir das respostas do diagnóstico (jsonb), do setor e do porte:
1. Calcule o IAm (0–100) com base em sinais nas respostas
2. Atribua a faixa: 'verde' (<20), 'amarelo' (20–35), 'vermelho' (>35)
3. Identifique quais dos 3 gaps (Context, Memory, Decision) estão presentes e severidade
4. Aponte a JORNADA CRÍTICA (qual estado de decisão está mais comprometido)
5. Recomende um CICLO de implementação (Quick Win 30d, Foundations 90d, Full MCI 6 meses)
6. Gere um RELATÓRIO COMPLETO em markdown (450–650 palavras, executivo, PT-BR):
   - Diagnóstico-síntese
   - O que está custando margem agora
   - Plano por fases
   - Próximo passo concreto

Responda SOMENTE chamando a tool 'submit_diagnostic'.
```

### Mensagem do usuário
```
Setor: {sector}
Porte: {company_size}
Respostas: {JSON.stringify(answers)}
```

### Persistência
Tabela `diagnostics(user_name, user_email, company_name, sector, answers jsonb, iam_score, iam_band, gaps_detected jsonb, critical_journey, recommended_cycle, full_report)`. Disparar e-mail com Resend ao final se `email` válido.

### Prompt p/ replicar no Lovable
```
Crie um diagnóstico conversacional MCI: chat de 10–14 perguntas (texto/escolha/múltipla),
salva respostas em jsonb, chama um endpoint de IA (Gemini 2.5 Flash via tool calling)
forçando a tool submit_diagnostic com o schema acima e o system prompt acima.
Renderiza o full_report em markdown, mostra IAm com gauge + badge de faixa,
salva linha em diagnostics e envia o relatório por e-mail (Resend).
```

---

## 3. Chat MCI (assistente especialista)

### Personas selecionáveis
```ts
ceo    → margem, previsibilidade, governança, P&L, IAm, pT, churn, CAC/LTV
cmo    → jornada, conteúdo por estado, Conversation Score, substitui funil
ops    → Bandeja, handoffs, ciclos, Guardião, IAm operacional, automação responsável
vendas → Arquétipos, sinais de avanço/recuo, Crachá no pipeline, scripts por estado
livre  → executivo padrão
```

### System prompt
```
{MCI_CORE_KNOWLEDGE}

# TAREFA
Você é o "MCI", assistente especialista da metodologia.
- Responda em PT-BR, tom direto e prático, evitando jargão sem explicação.
- Cite o capítulo do livro ou conceito MCI quando relevante.
- Use exemplos curtos dos casos de uso reais quando ajudar.
- Se sair do escopo MCI, traga de volta para governança conversacional.
- Mantenha 3–6 parágrafos curtos, com bullets quando útil.

# PERSONA DESTE TURNO
{persona_block}
```

Streaming via `streamText` (AI SDK) → `useChat`. Limite 40 turnos no contexto.

### Prompt p/ replicar
```
Crie um chat MCI com seletor de persona (ceo/cmo/ops/vendas/livre), streaming
de respostas via AI SDK useChat + endpoint POST que injeta o system prompt acima,
modelo google/gemini-2.5-flash. Histórico em localStorage (uma conversa) ou tabela
chat_threads + chat_messages (multi-thread, RLS por user_id).
```

---

## 4. Classificador de Arquétipos (jogo "adivinhe o arquétipo")

### Tool schema
```json
{
  "name": "classify_archetype",
  "parameters": {
    "type": "object",
    "required": ["archetype","confidence","justification","suggested_action"],
    "properties": {
      "archetype":        { "type": "string", "enum": ["Turista","Explorador","Estudioso","Fiel","Decidido"] },
      "confidence":       { "type": "number", "minimum": 0, "maximum": 1 },
      "justification":    { "type": "string" },
      "suggested_action": { "type": "string" }
    }
  }
}
```

### System prompt
```
{MCI_CORE_KNOWLEDGE}

# TAREFA
Classifique a conversa em UM dos 5 Arquétipos.
Justifique citando trechos textuais concretos.
Sugira próxima ação MCI (qual estado avançar, qual peça de Bandeja entregar).
Responda SOMENTE chamando a tool classify_archetype.
```

### Sinais por arquétipo (use no prompt do *jogo* para gerar conversas plausíveis)
- **Turista:** linguagem genérica, sem urgência, sem critério
- **Explorador:** perguntas amplas, lista de requisitos, comparação inicial
- **Estudioso:** specs, ROI, prova social, demora
- **Fiel:** referências internas, repetição, tom familiar
- **Decidido:** pergunta preço/prazo/próximos passos

### Prompt p/ replicar
```
Crie ferramenta "Quem é esse cliente?": mostra 10 conversas (WhatsApp/Insta/email)
e usuário adivinha o arquétipo (5 opções). A cada round chama IA com o tool schema
classify_archetype e revela a justificativa. No fim mostra acurácia + matriz de confusão.
```

---

## 5. Crachá de Contexto (Galeria / Simulador / Comparador)

**Objetivo:** gerar dinamicamente um Crachá completo a partir da vertical + arquétipo + seed.

### Verticais e empresas fictícias
```
hotelaria   → Costa Aurora Beach Resort (Maceió/AL)
telecom     → Nexa Fibra (300Mb/600Mb/1Gb)
educacao    → UniVerta (graduação/EAD/pós)
b2b         → Vermont Engenharia (R$800k–R$5M, ciclo 30–90d)
imobiliario → Vitral Incorporadora
automotivo  → Premier Motors
franchising → Brasa Burger Franquias
varejo      → Loja Norte
```

### Tool schema — `submit_scenario`
```json
{
  "name": "submit_scenario",
  "parameters": {
    "type": "object",
    "required": ["archetype","cenario","cracha","conversa","insights","automations"],
    "properties": {
      "archetype": { "type": "string", "enum": ["turista","explorador","estudioso","fiel","decidido"] },
      "cenario":   { "type": "string", "description": "≤140 chars" },
      "cracha": {
        "type": "object",
        "required": ["origem","canal","intencao","dor","estado","resumo","proximo","operacional"],
        "properties": {
          "origem":   { "type": "string" },
          "canal":    { "type": "string" },
          "intencao": { "type": "string" },
          "dor":      { "type": "string" },
          "estado":   { "type": "string" },
          "resumo":   { "type": "string", "description": "≤90 chars" },
          "proximo":  { "type": "string" },
          "operacional": {
            "type": "object",
            "required": ["produtoFoco","politicaComercial","ativosDoCliente","escopoIA","ultimasInteracoes"],
            "properties": {
              "produtoFoco":       { "type": "string" },
              "politicaComercial": { "type": "string" },
              "ativosDoCliente":   { "type": "string" },
              "escopoIA":          { "type": "string" },
              "ultimasInteracoes": { "type": "array", "minItems": 2, "maxItems": 4, "items": { "type": "string", "maxLength": 120 } }
            }
          }
        }
      },
      "conversa": {
        "type": "array", "minItems": 4, "maxItems": 6,
        "items": { "type": "object", "required": ["role","content"], "properties": {
          "role":    { "type": "string", "enum": ["user","assistant"] },
          "content": { "type": "string", "maxLength": 280 }
        } }
      },
      "insights":    { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "string", "maxLength": 160 } },
      "automations": { "type": "array", "minItems": 1, "maxItems": 3, "items": { "type": "string" } }
    }
  }
}
```

### Regras críticas do Crachá Operacional
> Pergunta-teste: *"Se eu só tivesse esses 5 campos do `operacional`, a IA conseguiria responder a próxima mensagem do cliente com precisão?"*

- `produtoFoco` — nome, versão/modelo, preço, estoque/prazo concretos.
- `politicaComercial` — desconto máximo, condição, campanha vigente.
- `ativosDoCliente` — o que ele já tem (gancho de upsell/troca/retenção).
- `escopoIA` — 1 frase do que a IA fecha sozinha + gatilho de handoff humano.
- `ultimasInteracoes` — 2–4 bullets curtos do que JÁ foi dito (memória condensada).

### Catálogos de automações por vertical (use literalmente)
```
hotelaria   : Lead criado no CRM | Tag de arquétipo | Cotação de pacote |
              Reserva pré-bloqueada | Handoff reservas | Upsell all-inclusive | Pós-venda D+1
telecom     : Diagnóstico técnico remoto | Ticket service desk | Oferta de retenção |
              Tag anti-churn | Visita técnica | Upgrade simulado | Handoff retenção
educacao    : Lead CRM acadêmico | Bolsa simulada | Tag de interesse | Reserva de vaga |
              Link de matrícula | Handoff consultor | Onboarding D+0
b2b         : Oportunidade CRM | Score de fit | Reunião sugerida | Proposta gerada |
              Tag de estágio | Handoff sênior | Follow-up D+3
imobiliario : Lead CRM | Match de unidade | Tabela enviada | Simulação financiamento |
              Visita ao decorado | Handoff corretor | Follow-up D+1
automotivo  : Lead DMS | Avaliação usado | Simulação financiamento | Test-drive |
              Proposta com bônus | Handoff F&I | Revisão pós-venda
franchising : Candidato CRM | Score empreendedor | Análise de praça | COF enviado |
              Reunião diretoria | Handoff expansão | Onboarding franqueado
varejo      : Pedido localizado ERP | Estoque tempo real | Cupom aplicado |
              Carrinho recuperado | Troca/devolução | Handoff SAC | Recompra
```

### Prompt p/ replicar
```
Crie uma ferramenta "Crachá de Contexto" com 3 modos (Galeria, Simulador, Comparador).
Para cada vertical do meu CRM, chama IA (Gemini 2.5 Flash, tool_choice forçado em
submit_scenario com o schema acima), passando o MCI_CORE_KNOWLEDGE + perfil do cliente
da vertical + catálogo de automações da vertical. Renderiza um card de Crachá em 2
seções (identidade + operacional), com toggle "JSON" que mostra o payload completo
enviado para a IA e botão Copiar.
```

---

## 6. Demo Vertical — Turno de WhatsApp ao vivo

**Objetivo:** o usuário conversa com a IA por vertical; cada turno atualiza o MCI inteiro.

### Tool schema — `submit_turn`
```json
{
  "name": "submit_turn",
  "parameters": {
    "type": "object",
    "required": ["reply","score_deltas","journey_stage","archetype","cracha_updates","automations"],
    "properties": {
      "reply":         { "type": "string", "description": "1–3 frases, PT-BR" },
      "score_deltas": {
        "type": "object",
        "required": ["sem_necessidade","gatilho","exploracao","comparacao","compra","experiencia"],
        "properties": {
          "sem_necessidade": { "type": "number", "minimum": -30, "maximum": 30 },
          "gatilho":         { "type": "number", "minimum": -30, "maximum": 30 },
          "exploracao":      { "type": "number", "minimum": -30, "maximum": 30 },
          "comparacao":      { "type": "number", "minimum": -30, "maximum": 30 },
          "compra":          { "type": "number", "minimum": -30, "maximum": 30 },
          "experiencia":     { "type": "number", "minimum": -30, "maximum": 30 }
        }
      },
      "journey_stage": { "type": "integer", "minimum": 1, "maximum": 6 },
      "archetype":     { "type": "string", "enum": ["turista","explorador","estudioso","fiel","decidido"] },
      "cracha_updates": {
        "type": "object",
        "properties": {
          "intencao":         { "type": "string" },
          "dor":              { "type": "string" },
          "estado":           { "type": "string" },
          "proximo":          { "type": "string" },
          "ultima_interacao": { "type": "string", "description": "≤90 chars, vira bullet em ultimasInteracoes" }
        }
      },
      "automations":   { "type": "array", "maxItems": 2, "items": { "type": "string" } }
    }
  }
}
```

### Regras do motor (cliente aplica os deltas)
```ts
score[axis] = clamp(score[axis] + delta, 0, 100)
ultimasInteracoes = [...prev, bullet].slice(-4)   // memória rolling
automations: deduplica contra a última disparada
```

### System prompt base (acrescentar bloco da vertical)
```
Você é a IA conversacional da Hablla operando o MCI em um demo público de WhatsApp.
Regras:
- PT-BR humano, 1–3 frases, máx 4 linhas, no máx 1 emoji.
- Se perguntado se é humano ou IA, confirme com transparência: é a IA do MCI operando com Crachá de Contexto (coerente com a tese de Confiança).
- Uma pergunta por vez, mantém contexto (nome, intenção, dores, datas, valores).
- Conversation Score (6 eixos 0–100, devolve DELTAS -30 a +30).
- Crachá: preenche só o que ficou claro (não inventa).
- Automações: 0–2 do catálogo da vertical; não repete a anterior.
Sempre chame submit_turn. Nunca responda em texto puro.
```

### Prompt p/ replicar
```
Crie módulo "Demo Vertical": grid 3 colunas (Crachá+Automations | WhatsApp mockup |
Conversation Score + Journey Stepper). Cada vertical tem prompt próprio (catálogo +
empresa fictícia + perfil do cliente). A cada mensagem do usuário, chama IA com
tool_choice submit_turn, aplica deltas ao score, atualiza estágio (1–6), atualiza
crachá (rolling 4 bullets), enfileira automação. Reset zera tudo.
```

---

## 7. Serious Game "Conduza o Ciclo" (sem IA — engine local)

**Objetivo:** 12 turnos, 5 ciclos simultâneos, capacidade 100/turno.

### Ações e custos
```ts
educate    : { icon:"📚", cost: 5 }
meeting    : { icon:"🤝", cost:15 }
discount   : { icon:"💸", cost: 5 }
wait       : { icon:"⏸️", cost: 0 }
handoff    : { icon:"🔄", cost:20 }
enablement : { icon:"🎯", cost:25 }
```

### Efeitos por ação
```
educate    → +5 score (0 se Decidido), +5 exploracao
meeting    → +15 score, +15 comparacao, limpa block se Estudioso
discount   → +20 score, marca appliedDiscount = true
wait       → se SLA amarelo vira vermelho
handoff    → +8 score, melhora 1 nível de SLA
enablement → +20 score, limpa bloqueio
```

### Decaimento natural (sem ação)
```
score -= 3
daysInState >=4 e SLA verde → amarelo
daysInState >=6 e SLA amarelo → vermelho
SLA vermelho persistente: redStreak++
```

### Transições e fechamento
```
exploracao  + score>=70 → comparacao
comparacao  + score>=80 → compra
compra      + score>=90 → fechado (won; com margem se !appliedDiscount)
experiencia + score>=80 + 3 dias → fechado (won fiel)
score<20 OR redStreak>=3 → fechado (lost)
```

### Eventos aleatórios (prob 18% por ciclo/turno)
```
competitor_in (comparacao)              : score -10
hidden_decisor (comparacao|compra)      : score -5, block=hidden_decisor
client_silence (exploracao|comparacao)  : score -5, SLA piora
stakeholder_questions (comparacao|compra): score -8, regressão de estado
early_churn (experiencia)               : score -15, iamUp +3
upsell_opp (experiencia, fiel)          : score +10, receita +20000
promoter_referred (experiencia, fiel)   : score +5
decision_window_closing (compra, decidido): SLA piora
internal_sponsor_engages (comparacao|compra): score +8
```

### IAm (recalcula a cada turno)
```ts
iam = min(100, round(((stuck*1.2 + lost*1.5 + reds*0.8) / total) * 22))
nextIam = clamp(recalcIam + iamBumpsRandom + iamAnterior*0.3, 0, 100)
```

### Margem
```
won + !appliedDiscount → marginPreserved += potentialRevenue
won + appliedDiscount  → marginPreserved += potentialRevenue * 0.5
                         marginLost      += potentialRevenue * 0.5
lost                   → marginLost      += potentialRevenue
```

### Vitória/Derrota
```
iam > 35                       → lost imediato
turn > 12 e cyclesWon >= 3     → won
turn > 12 e cyclesWon  < 3     → lost
```

### Score final + badges
```ts
finalScore = max(0, round(
  cyclesWon*120 + withMargin*80 + marginPreserved/1000 - cyclesLost*50 - iam*5
))
>=200 bronze | >=400 prata | >=600 ouro | >=800 platina
mestre: cyclesWon>=5 && iam<10 && finalScore>900 && todos won sem desconto
```

### Análise pós-jogo (IA)
System prompt `GAME_ANALYSIS_PROMPT` (350–550 palavras, MD): "Seu padrão de decisão", "O que você fez bem", "Onde você sangrou", "Conceito MCI prioritário", "3 ações para a vida real".

### Prompt p/ replicar
```
Crie um serious game "Conduza o Ciclo" puramente client-side:
- 5 ciclos iniciais (um por arquétipo), 12 turnos, capacidade 100/turno
- 6 ações com custos: educate(5) meeting(15) discount(5) wait(0) handoff(20) enablement(25)
- Aplique exatamente os efeitos, decaimento, transições, fechamento, eventos,
  fórmula de IAm, contabilidade de margem e badges descritos no Blueprint MCI seção 7.
- Ao fim, chama IA com GAME_ANALYSIS_PROMPT passando decisions_log + final_iam +
  cycles_won/lost + margens + vitória, e renderiza o relatório em markdown.
- Salva em tabela game_runs (RLS por user_id) e tem rota leaderboard.
```

---

## 8. Órbita — Painel / Fila / Preditivo

### Modelo de Ciclo
```ts
type Ciclo = {
  id; clientName; ticket; arquetipo; estadoDecisao; estadoOperacional;
  tempoEmEstadoDias; semaforo: 'verde'|'amarelo'|'vermelho';
  pt30: number;                      // probabilidade de fechar em 30d (0..1)
  gradiente: { direcao:'subindo'|'descendo'|'lateral', delta: number };
  proximoPasso: { slaStatus: 'no_prazo'|'urgente'|'vencido', acao, dueIn };
  ultimaInteracaoMinAtras: number;
  badges: ('risco_churn'|'decidido_pronto'|'upsell'|...)[];
  tipoCiclo: 'aquisicao'|'expansao'|'retencao'|'reativacao';
}
```

### Score de prioridade da Fila
```ts
function calcPrioridade(c) {
  const wPt=0.35, wGrad=0.25, wSla=0.25, wBadge=0.15;
  const slaScore   = c.proximoPasso.slaStatus==='vencido' ? 1
                   : c.proximoPasso.slaStatus==='urgente' ? 0.8 : 0.3;
  const gradScore  = min(abs(c.gradiente.delta)/15, 1);
  const badgeScore = badges.includes('risco_churn')      ? 1
                   : badges.includes('decidido_pronto')  ? 0.9
                   : badges.includes('upsell')           ? 0.5 : 0;
  const ticketWeight = 0.6 + min(c.ticket/50000, 1) * 0.4;
  const frescor    = c.ultimaInteracaoMinAtras<30 ? 1
                   : c.ultimaInteracaoMinAtras<240 ? 0.8 : 0.5;
  const base = wPt*c.pt30 + wGrad*gradScore + wSla*slaScore + wBadge*badgeScore;
  return base * ticketWeight * frescor;
}
function isNaFila(c) {
  if (c.estadoOperacional==='concluido') return false;
  if (c.semaforo==='verde')
    return c.gradiente.direcao==='subindo' && c.gradiente.delta>=3;
  return true;
}
```

### KPIs do Painel
```
total            = ciclos filtrados (por lente: tudo|aquisicao|expansao|retencao|reativacao)
travados         = estadoOperacional in (travado, reaberto_sem_memoria)
IAm              = travados/total * 100
slaEstourando    = proximoPasso.slaStatus === 'vencido'
gargalo          = estado com maior median(diasNoEstado)
previsaoFechar30 = sum(pt30) em ciclos de aquisição
receitaPorArquetipo = ticket * pt30 agrupado por arquétipo
cacDelta(% )      = round(iam * 1.5)
```

### Preditivo — fórmulas e presets
```
expectedRate = depende de (maturidade × cenário); ver matriz abaixo.
Para cada arquétipo:
  weight (mix %), p30 (prob de fechar em 30d).
receitaEsperada = leadsMes * sum_arq(weight * p30 * ticketMedio)
```
Matriz `expectedRate` (mat × cen):
```
                pessimista  realista  otimista
iniciante       0.008       0.012     0.018
intermediaria   0.015       0.022     0.030
madura          0.025       0.035     0.045
```

### Prompt p/ replicar
```
Crie módulo "Órbita" com 3 telas (Fila operacional, Painel executivo, Preditivo).
Fila: lista ordenada por calcPrioridade(c) (fórmula no Blueprint seção 8) e filtrada
por isNaFila. Painel: KPIs (total, IAm = travados/total, SLA vencendo, gargalo),
gráfico por estado, gráfico de receita por arquétipo, lente (tudo/aquisicao/...).
Preditivo: 9 presets (3 maturidades × 3 cenários) com expectedRate e weights por
arquétipo conforme matriz; permite editar weights/p30 e mostra receita projetada.
Usa um Provider em React (OrbitaProvider) com ciclos em memória; pode plugar em
realtime via Supabase quando o CRM tiver tabela ciclos.
```

---

## 9. Mapa do MCI (página conceitual)

Apresenta os 3 planos da infraestrutura conversacional (Dados, Cérebro, Operação),
linka Glossário + Comece Aqui + Diagnóstico. Sem regra de negócio — é navegação.

---

## 10. Padrões transversais (replicar SEMPRE)

### a. Tabelas Supabase mínimas (`public`) — sempre com `GRANT` + RLS
```sql
calculator_results (id, email, inputs jsonb, outputs jsonb, created_at)
diagnostics        (id, user_email, sector, answers jsonb, iam_score, iam_band,
                    gaps_detected jsonb, critical_journey, recommended_cycle,
                    full_report, created_at)
leads              (id, name, email, company, source, interest, metadata jsonb,
                    created_at)
chat_threads       (id, user_id, title, created_at)  -- RLS por user_id
chat_messages      (id, thread_id, role, content, parts jsonb, created_at)
game_runs          (id, user_id, final_iam, cycles_won, cycles_lost,
                    margin_preserved, margin_lost, badge, decisions_log jsonb)
```
Sempre:
```sql
GRANT SELECT, INSERT, UPDATE, DELETE ON public.<t> TO authenticated;
GRANT ALL ON public.<t> TO service_role;
ALTER TABLE public.<t> ENABLE ROW LEVEL SECURITY;
-- policies escopadas por auth.uid()
```

### b. Camada de IA (server-only)
- `LOVABLE_API_KEY` no servidor. Provider: `@ai-sdk/openai-compatible` apontando para `https://ai.gateway.lovable.dev/v1`, header `Lovable-API-Key`.
- Modelo padrão: `google/gemini-2.5-flash`.
- `tool_choice` **forçado** em todas as ferramentas estruturadas.
- Tratar 429 (rate limit) e 402 (créditos) com toast.

### c. Internacionalização (pt/en/es/fr)
Todas as ferramentas têm helpers `getXContent(locale)`, `makeCurrencyFormatter(locale)`, rotas localizadas (`/calculadora`, `/en/calculator`, `/es/calculadora`, `/fr/calculatrice`, etc.) e prompts trocam `OUTPUT LANGUAGE` mantendo termos canônicos MCI sem tradução.

### d. Captura de lead universal
Mesma tool `captureLead({ name, email, company, source, interest, metadata })` chamada de Diagnóstico, Calculadora, Arquétipos, Jogo. `source` identifica a ferramenta de origem.

---

## 11. Master Prompt — replicar TUDO de uma vez

Cole isto no Lovable de um novo projeto Omnichannel/CRM:

```
Quero replicar dentro do meu sistema (omnichannel + CRM) as 8 ferramentas MCI
do Blueprint que vou colar abaixo. Use TanStack Start + Lovable Cloud (Supabase)
+ Lovable AI Gateway (modelo google/gemini-2.5-flash).

Implemente, NESTA ORDEM, cada ferramenta como uma rota independente sob /ferramentas/*:

1) /ferramentas/calculadora       — Margem Invisível (regras seção 1)
2) /ferramentas/diagnostico       — Diagnóstico IAm via IA (regras seção 2)
3) /ferramentas/chat              — Chat MCI com personas (regras seção 3)
4) /ferramentas/arquetipos        — Jogo de classificação (regras seção 4)
5) /ferramentas/cracha            — Crachá de Contexto 3 modos (regras seção 5)
6) /ferramentas/demo-vertical     — Turno de WhatsApp ao vivo (regras seção 6)
7) /ferramentas/jogo              — Serious Game Conduza o Ciclo (regras seção 7)
8) /ferramentas/orbita            — Fila/Painel/Preditivo (regras seção 8)

Regras invioláveis:
- Use o bloco MCI_CORE_KNOWLEDGE (seção 0) como prefixo de TODOS os system prompts.
- Use os schemas de tool calling EXATAMENTE como definidos; tool_choice forçado.
- Aplique as fórmulas exatamente como descritas (calculadora, prioridade Órbita,
  motor do jogo, recalcIam, badges). Sem inventar variáveis novas.
- Cria as tabelas da seção 10.a com GRANT + RLS por user_id.
- LOVABLE_API_KEY apenas server-side. Nunca expor em VITE_.
- 4 idiomas (pt/en/es/fr) com rotas localizadas; prompts trocam OUTPUT LANGUAGE
  mantendo termos canônicos (MCI, IAm, pT, 8Cs, Crachá, Bandeja, arquétipos) sem traduzir.
- Catálogo de automações por vertical e empresas fictícias da seção 5 são canônicos.
- captureLead({name,email,company,source,interest,metadata}) é a única função de lead.

[COLE AQUI O BLUEPRINT COMPLETO ACIMA, SEÇÕES 0–10]
```

---

### Checklist de paridade (revisar ao terminar a replicação)
- [ ] Calculadora bate com fórmulas seção 1 (waterfall, projeção, headcount_eq, faixas IAm).
- [ ] Diagnóstico devolve enums exatos e salva em `diagnostics`.
- [ ] Chat tem 5 personas e streaming.
- [ ] Arquétipos faz 10 rounds + matriz de confusão.
- [ ] Crachá tem `operacional` completo e botão JSON debug.
- [ ] Demo Vertical aplica deltas no score e mantém rolling 4 em ultimasInteracoes.
- [ ] Jogo: ações com custos exatos, fechamento por score, IAm com `*0.3` decay,
      badges com thresholds exatos, mestre só com !discount em todos os won.
- [ ] Órbita usa `calcPrioridade` literal e matriz `expectedRate` literal.
- [ ] Todas as tabelas têm `GRANT` + RLS.
- [ ] Nenhum nome de cliente real — só fictícios (Costa Aurora, Nexa Fibra, UniVerta, etc).
