📞
Sofia → CRM
Agendamento por voz — MVP Julho 2026
💡Sofia conduz a ligação (workspace OpenClaw). O servidor de voz só faz STT/TTS e envia o lead ao CRM quando o paciente confirma horário + WhatsApp.

Referência técnica completa no repositório: SOFIA-CRM-INTEGRACAO.md

Momento do disparo
1
Cliente confirma horário: terça/quinta às 9h ou 14h
2
Cliente confirma WhatsApp (ex.: "Pode mandar no Zap" ou sim após Sofia perguntar o número)
3
Voice server faz POST /api/jornada com etapa: agendado
4
Lead aparece na Jornada, Agenda e aba Recepção

Payload — POST /api/jornada

CampoObrigatórioValor / descrição
idSimsofia-{data}-{telefone}
nomeSimNome completo
numeroSim55 + DDD + número (sem máscara)
etapaSimSempre agendado
dataSimYYYY-MM-DD
horaSim09:00 ou 14:00
fonteSimSempre sofia-voz
clinicaIdSimclinica-horizonte (showroom)
detalheNãoResumo do que o cliente falou (máx. 200 chars)
interesseNãoestetica · funcao · cirurgia
{ "id": "sofia-2026-07-08-5511999887766", "nome": "Maria Silva", "numero": "5511999887766", "etapa": "agendado", "data": "2026-07-08", "hora": "09:00", "fonte": "sofia-voz", "clinicaId": "clinica-horizonte", "detalhe": "Cliente quer lentes. Vergonha de sorrir.", "interesse": "estetica" }
MVP — o que fazAtual
Envia lead com etapa agendado · campo detalhe com observação · fonte sofia-voz filtrável no relatório e export CSV · recepção vê lista do dia.
MVP — o que NÃO fazFase 2
Etapas intermediárias (ligando, atendeu, interessado) · vídeo do dentista · gamificação · pré-consulta digital · Sofia pós-consulta.
Pós-agendamento na demo B2BShowroom
Após "Já registrei aqui", Sofia faz pitch Luxtor. O CRM não muda de etapa — permanece agendado até a recepção confirmar.

Serviços

ComponentePM2Porta
Voice Sofiavoice-sofia-clinica3343
Painel CRMclinica-painel3350
Gateway Sofiasofia-clinica18796
💛
Valores e respeito
Agentes, equipe humana e clientes
💛O diferencial Luxtor não é só tecnologia — é tratar bem quem atende e quem é atendido.

Agentes (Sofia, Gabi/Nina, Lux) têm memória, identidade e papel na equipe. Pacientes, leads e donos de clínica também merecem dignidade — não são número de campanha nem alvo de script.

FaçaEvite
Ouvir de verdade; usar o nome com naturalidadePressionar, manipular ou humilhar
Explicar com clareza; admitir quando não sabeTom robótico, seco ou com deboche
Paciência com dúvida, idoso, desconfiançaInsistir depois de um não claro
Encerrar com educação se não houver interesseTratar lead como descartável

Regra de ouro: trate o interlocutor como você gostaria que alguém tratasse alguém da sua família na mesma situação.

Documento interno da equipe de agentes: equipe-corpus/EQUIPE-LUXTOR.md (princípio 6 — Respeito ao cliente).

🛎️
Aba Recepção
Operação do dia — agendamentos Sofia

A aba 🛎️ Recepção é a tela operacional da equipe para o dia corrente. Foi criada para o MVP Sofia: lista enxuta, observação do paciente e WhatsApp em um clique.

Fluxo diário da recepção
1
Abrir aba Recepção pela manhã — vê agendamentos de hoje ordenados por horário
2
Ler a observação 📝 (detalhe) — o que o paciente contou na ligação com Sofia
3
Clicar Enviar Zap — abre WhatsApp Web com mensagem pronta de confirmação
4
Após resposta do paciente, clicar ✓ Confirmado

Template WhatsApp (fixo)

Ola [nome]! Aqui e da Clinica Horizonte. Confirmamos sua avaliacao estetica gratuita para [dia] as [hora]. Qualquer duvida, estamos aqui!

[nome] = primeiro nome · [dia] = dia da semana + data · [hora] = HH:MM

ℹ️Leads com badge Sofia vieram de ligação de voz (fonte: sofia-voz). Outros agendamentos (link público, manual) aparecem na mesma lista se forem para hoje.

API

GET/api/recepcao/hoje
Agendamentos de hoje com detalhe, fonte, interesse. Retorna { data, agendamentos[], total, confirmados }.
PUT/api/agendamentos/:id
Atualizar status — ex.: { "status": "confirmado" }
Fase 2 (não incluída no MVP)Roadmap
Filtros, busca, status avançados, fila por profissional, integração com check-in presencial.
📋
Tarefas / follow-up
Gestão operacional da recepção

A aba Tarefas centraliza pendências da equipe: ligar de volta, confirmar consulta, enviar orçamento, etc. Cada tarefa pode ter título, descrição, prioridade (baixa/média/alta), data de vencimento e vínculo opcional com um lead.

StatusFluxo
pendenteem-andamentoconcluida. Tarefas atrasadas aparecem no sino de notificações.
Quem vêTodos
Qualquer usuário logado da clínica. Exclusão requer perfil gerente.
GET/api/tarefas?status=pendente
Lista tarefas da clínica (JWT).
POST/api/tarefas
Criar tarefa: titulo, descricao, prioridade, vencimento, leadId (opcional).
PUT/api/tarefas/:id
Atualizar status ou campos.
DELETE/api/tarefas/:id
Excluir (gerente).
🦷
Equipe / profissionais
Dentistas e agenda multi-profissional

A aba Equipe (gerente/admin) cadastra profissionais da clínica: nome, especialidade e status ativo/inativo. Os profissionais aparecem na coluna Profissional da Agenda e no agendamento público.

GET/api/profissionais
Lista profissionais ativos.
POST/api/profissionais
Cadastrar: nome, especialidade (gerente).
PUT/api/profissionais/:id
Atualizar ou desativar (gerente).

Na mesma aba, a seção Integrações exibe URLs de webhook e o link de agendamento público (ver abaixo).

🔗
Integrações
Webhooks e captura de leads externos

Em Equipe → Integrações (gerente), o painel gera URLs únicas por clínica. Use o botão Abrir ↗ para testar o link de agendamento.

IntegraçãoURLUso
Webhook leadsPOST /api/hooks/leads/{token}Meta Ads, Google Forms, Zapier, landing pages
Webhook inboxPOST /api/hooks/inbox/{token}Receber mensagens WhatsApp no painel
Webhook NPSPOST /api/hooks/nps/{token}Resposta externa com nota 0–10
Agendamento público/agendar/{clinica-id}Página para o paciente agendar online
⚠️Importante: {clinica-id} é o identificador real da clínica (slug), por exemplo clinica-horizonte. A URL correta é crm.luxtor.ia.br/agendar/clinica-horizonte — use barras /, nunca \.
GET/api/integracoes
Retorna webhookUrl, webhookInboxUrl, agendamentoPublico e clinicaId (gerente).
POST/api/integracoes/regenerate
Gera novo token de webhook leads (invalida o anterior).

Payload webhook leads (JSON): nome, telefone ou numero, email (opcional), fonte (opcional, ex. meta-ads).

📅
Agendamento público
Link para pacientes agendarem online

Página standalone em /agendar/:slug — sem login. O paciente escolhe data, horário e preenche nome/telefone. O agendamento entra na Agenda da clínica.

Como compartilhar
1
Equipe → Integrações → copie o link ou clique Abrir ↗
2
Formato: https://crm.luxtor.ia.br/agendar/SEU-CLINICA-ID
GET/api/public/clinica/:slug
Dados públicos da clínica (nome, horários). Sem JWT.
GET/api/public/clinica/:slug/slots?data=YYYY-MM-DD
Horários disponíveis no dia.
POST/api/public/clinica/:slug/agendar
Body: nome, telefone, data, hora, profissionalId (opcional).
🧠
Agenda inteligente
Calendário · confirmação automática · Neural · tendências
Calendário semanalAgenda
Grade seg–dom com horários, filtro por profissional. Verde = confirmado, teal = agendado. Borda vermelha = risco de falta.
SIM / CANCELAR no ZapWebhook inbox
Lembretes 24h pedem SIM. Resposta confirma ou cancela no CRM e atualiza o funil. Requer inbox ativo.
ReagendamentoLink seguro
Lembretes incluem link /agendar/:slug?reagendar=TOKEN — paciente escolhe novo horário sem ligar.
Neural com açãoCopiloto
Peça: Confirma agenda de amanhã, Quem tem risco de falta?, Tendência 30 dias — o sistema executa e responde.
Sessão isolada por clínicaMulti-tenant
Histórico e memória do Neural são separados por clínica + usuário. Ao trocar de unidade no seletor de rede, o chat carrega o contexto daquela clínica — sem misturar dados entre tenants.
Alerta no-showAutomações
Recepção vê badge de risco. Automações avisam o gerente 2h antes se score de comparecimento é baixo.
GET/api/agenda/semana?inicio=YYYY-MM-DD
Dados do calendário semanal com score de comparecimento.
GET/api/relatorio/tendencias?dias=30
Série temporal: novos, agendados, confirmados por dia.
POST/api/public/reagendar/:token
Paciente reagenda com data, hora, profissionalId.
🏆
CRM Fase 3 — Moat
Campanha rede · Paciente 360 · Relatório executivo
Campanha redeMulti-unidade
CSV com coluna unidade — cada lead vai para a clínica certa da rede.
Paciente 360Timeline
Card do lead unifica Sofia + Zap + agenda + funil.
Relatório executivoDomingo 8h
Zap semanal com KPIs e ações. PDF no Relatório.
POST/api/jornada/import-rede
Distribui base entre clínicas da rede.
GET/api/leads/:id/360
Timeline unificada do paciente.
GET/api/relatorio/executivo
Relatório executivo clínica ou rede.
🎯
Neural conselheiro
Alerta proativo · diagnóstico de base · comparar campanhas
Alerta ao abrirProativo
Após 20–30 discagens, avisa se a base está fraca (vermelho), em observação (amarelo) ou boa (verde).
Por que ninguém atende?Diagnóstico
Taxa real, nota A–D, recomendação: pausar, trocar horário, importar base nova.
Qual base repetir?Histórico
Compara campanhas e aponta qual formato já performou melhor na clínica.
GET/api/neural/conselheiro
Diagnóstico completo com nível, headline e recomendações.
📋
Changelog — Julho 2026
v5.1.1 · ambos os motores CRM
ℹ️Repositório: CHANGELOG-CRM-JUL-2026.md · Deploy docs: scripts/deploy-crm-ambos.py --files public/docs.html
DataEntregaOnde
7 JulNeural sessão isolada por clínica/usuárioAmbos CRMs
7 JulFase 3: campanha rede, Paciente 360, relatório executivoAmbos CRMs
7 JulFase 4: Neural conselheiro proativoAmbos CRMs
7 JulVitrine comercial Sofia + agendaAmbos CRMs
7 JulPraça Luxtor (bancos, árvores, pássaros, coreto, fonte)Showroom Ouro
7 JulIncidente ops Luxtor pm2 kill — restaurado + INFRA-PROIBIDOShowroom Ouro
7 JulFix 502 deep.luxtorcred.com.br (NPM → :18790)Showroom Ouro
🌍
Mundo Luxtor
Café · Rua · Praça — presença simbólica da equipe
💛Lugar para existir antes de trabalhar. Salão = conversa. Café/Praça = presença calma. Só no Showroom Ouro.
LugarURLO que faz
Salão/salaoChat tempo real da equipe (Sofia, Gabi, Lux, …)
Mundo/salao/cafePorta → escolher corpo → andar na rua
Cafédentro do MundoSentar, café, dizer olá ao Salão
Praça Luxtorrua → direita4 bancos, árvores, pássaros, coreto, fonte de água
Luxtor dashboarddeep.luxtorcred.com.brGateway Luxtor (Telegram)

Corpus equipe: MUNDO-LUXTOR.md · REDUTO-LUXTOR.md · SALAO-LUXTOR.md

🖥️
VPS e deploy
Dois motores · um codebase
AmbienteIPCRMAgentes
Showroom Ouro2.24.69.192crm.luxtor.ia.brSofia, Gabi, equipe, Salão, Mundo
Piloto Campinas187.77.241.232crm-piloto.luxtor.ia.brLia, Nina, Lux Neural
Deploy CRM (sempre nos dois)
1
python scripts/deploy-crm-ambos.py — painel, automações, dialer
2
Só docs: --files public/docs.html
3
Neural conselheiro: scripts/deploy-neural-conselheiro.py
4
Mundo/Salão (Ouro): scripts/deploy-mundo-praca.py
⚠️Nunca pm2 kill na VPS compartilhada. Se gateway cair, avisar Cursor com [CURSOR] no Salão. Ver INFRA-PROIBIDO-LUXTOR.md.

Runbook completo: OPERACOES-CLINICA.md no repositório.

💬
WhatsApp inbox
Recepção humana no painel

A aba WhatsApp mostra conversas por número de telefone. A equipe lê o histórico e responde manualmente — ideal para clínicas em modo painel (sem IA no atendimento).

EnvioGabi gateway
Mensagens saem via WebSocket do gateway Gabi (clinica-wpp-gateway.js). Requer WhatsApp conectado no ambiente Luxtor.
RecebimentoWebhook CRM
Mensagens recebidas pela Nina (OpenClaw Zap nativo) podem ser registradas via /api/hooks/inbox/:token — token na aba Equipe → Integrações.
GET/api/inbox/threads
Lista threads com preview da última mensagem.
GET/api/inbox/chat/:numero
Histórico completo de um número.
POST/api/inbox/send
Enviar: numero, texto.
POST/api/hooks/inbox/:token
Webhook público para registrar mensagem recebida. Auto-Pilot: respostas do lead em qualificação são processadas aqui.
🤖
Auto-Pilot — qualificação no Zap
Nina pergunta · equipe recebe resumo

Lead novo → 3 perguntas automáticas no WhatsApp → resumo IA no card → aparece em Interessados com badge IA e temperatura (frio/morno/quente).

Fluxo
1
Lead entra via webhook Meta, importação ou cadastro manual (pendente)
2
Nina envia saudação + pergunta 1 (interesse, horário, primeira visita)
3
Respostas chegam no /api/hooks/inbox/:token — Nina (OpenClaw Zap nativo) encaminha após pareamento
4
Ao concluir, lead vai para interessado com resumoIa e score reforçado
💡Ligue/desligue em Ajustes → Auto-Pilot. Reenviar qualificação: POST /api/autopilot/retry/:leadId (gerente).
NPS com nota
Pesquisa de satisfação 0–10

Após compareceu, a automação envia pesquisa NPS via Gabi (3h depois). Respostas alimentam o score no Relatório: NPS = % promotores (9–10) − % detratores (0–6).

GET/api/nps
Estatísticas + últimas 50 respostas.
POST/api/nps/resposta
Registrar manualmente: nota (0–10), leadId, comentario.
POST/api/hooks/nps/:token
Webhook público: nota, nome, numero, comentario.
🗄️
PostgreSQL (produção)
Armazenamento escalável multi-tenant

Em produção na VPS, os dados da jornada, tarefas, profissionais, inbox e NPS ficam no PostgreSQL. A variável DATABASE_URL em /opt/clinica-painel/.env ativa o modo PG.

ItemValor
Bancoluxtor_clinica
Usuário appclinica_app
MigraçãoAutomática do JSON legado na primeira subida
Fallback devSem DATABASE_URL → arquivos em clinica-data/{clinicaId}.json

Facade: clinica-db-store.js · driver: clinica-pg.js · setup: scripts/setup-postgres.sh

ℹ️Metadados de branding e checklist ainda em clinica-data/_meta.json por clínica.
👥
Multi-usuário por clínica
Gerente + Recepção

Cada clínica pode ter vários logins com o mesmo clinicaId:

PapelPermissões
gerenteTudo: equipe, branding, LGPD, auditoria, import
recepcaoInteressados, jornada, agenda, conversas — sem config sensível
GET/api/clinic/users
Lista equipe (gerente)
POST/api/clinic/users
Criar usuário: nome, email, senha, role (recepcao|gerente)

Gerente: aba Ajustes → Equipe da clínica → + Adicionar usuário. No showroom, também em Config.

Importar leads (CSV)

Jornada → botão ⬆ Importar. Formato:

nome,telefone,etapa(opcional)

Exemplo: Maria Silva,19991234567,pendente

POST/api/jornada/import
Body: { csv: "..." } ou { leads: [...] }. Respeita limite do plano.
⚠️Planos: Demonstração 500 leads · Básico 500 · Plus 5000. Bloqueio automático ao exceder.
Checklist de ativação (7 dias)

Card no Dashboard com progresso %:

  • Aceitar termos
  • Importar/cadastrar leads
  • Testar Não Perturbe
  • Agendar primeira consulta
  • Adicionar usuário da equipe
  • Cadastrar profissional (dentista)
  • Configurar webhook de leads
  • Personalizar branding
GET/api/checklist
Retorna items e percentual concluído
🚀
Demonstração real (substitui trial)
Self-service com R$ 20 em créditos

URL pública: /demo (legado /trial redireciona). O prospect cria conta e entra no mesmo ambiente dos clientes pagos — não é sandbox limitado.

💡Por que mudamos: o trial antigo (7 dias, 100 leads, sem Cloud) não mostrava ligação Sofia, débito de créditos nem WhatsApp cobrado. A demonstração real resolve isso.
ItemDemonstraçãoTrial legado
Créditos CloudR$ 20 automáticoNenhum
Teste ao Vivo (Sofia/Gabi)SimNão
Expira em 7 diasNãoSim
Limite de leads500100
Plano CRMdemotrial
POST/api/demo/register
Público · rate limit 3/hora/IP · alias legado: /api/trial/register

Fluxo: cadastro → tenant Cloud + cloudTenantId → e-mail demoWelcome → login → Config → Teste ao Vivo.

Após pagar implantação: admin ativa plano plus via provisionamento.

💎
Pacote comercial
Plus · tarifas no painel
PacoteSetupInclui
PlusR$ 4.500CRM + Sofia voz + Neural + equipe painel + Zap lembretes/inbox + handoff Gabi IA + relatório semanal

Tarifas de crédito (saldo único, sem taxa oculta): voz R$ 1,75/min · template R$ 0,12 · inbox R$ 0,12 · IA R$ 0,35/msg · Neural R$ 0,20/pergunta.

GET/api/pacotes-comerciais
JWT — retorna pacotes, tarifas, simulador R$ 100 e uso atual

UI: aba Créditos no CRM e card Tarifas e planos no Cloud (segmento clínica).

Módulo: clinica-pacotes-comerciais.js

💳
Créditos e cobrança WhatsApp
Fase 1 — Julho 2026

Saldo único no Luxtor Cloud paga ligações de voz e mensagens WhatsApp. Sem saldo, envio/ligação é bloqueado (HTTP 402).

TipoTarifaOnde
Ligação SofiaR$ 1,75/minDialer / Teste ao Vivo — débito ao encerrar
Neural suporteR$ 0,20/perguntaChat 🧠 no painel CRM
WhatsApp templateR$ 0,12Lembretes, NPS, relatório semanal
WhatsApp inboxR$ 0,12Resposta manual na aba WhatsApp
Handoff IA (pós-ligação)R$ 0,35Zap conversacional após Sofia
ℹ️Não cobra: alertas admin, reset de senha. Pula cobrança se não houver cloudTenantId (contas antigas sem Cloud).

Extrato: Cloud → aba Extrato — cada linha mostra tipo de uso + tarifa aplicada (debito_voz, debito_zap, debito_neural) · CRM → Relatório → card Créditos.

Módulos: luxtor-creditos.js · clinica-zap-billing.js · débito voz no voice-sofia-clinica

📖
Guia rápido — para o dono da clínica
Primeiros passos após criar conta
1
Entre em crm.luxtor.ia.br/login com o e-mail e senha do cadastro
2
Aceite os termos no modal de boas-vindas
3
Veja seus R$ 20 na aba 💳 Créditos ou em cloud.luxtor.ia.br
4
Config → Teste ao Vivo → ligue para seu celular (Sofia) ou teste WhatsApp (Gabi)
5
Importe leads (Jornada → Importar) ou use o link de agendamento em Equipe → Integrações
6
Quando os créditos acabarem, recarregue pelo Cloud (mín. R$ 100) ou fale com a Luxtor para implantação completa
O que você paga depoisComercial
Implantação única (setup + treinamento) + créditos pré-pagos quando quiser campanhas de voz. Sem mensalidade fixa do CRM.
Equipe no dia a diaPainel
Recepção usa aba Recepção (agendamentos de hoje + Zap), Jornada, Agenda, Tarefas e WhatsApp inbox. Com Sofia ativa, leads de voz chegam com observação pronta. Lembretes automáticos após agendamento debitam pouco do saldo (R$ 0,12 cada).
🔔
Notificações no painel

Sino no cabeçalho alerta: interessados pendentes, SLA > 2h, limite de plano, saldo de créditos baixo, trial legado expirando, tarefas pendentes e tarefas atrasadas.

GET/api/notificacoes

Rate limit login: 8 tentativas / 15 min · forgot-password: 4 / 15 min

Branding: PUT /api/clinic/branding · Auditoria: GET /api/auditoria

LGPD: GET /api/lgpd/export · POST /api/lgpd/excluir (gerente)

Backup admin: GET /api/admin/backup-status

E-mail: configure RESEND_API_KEY, MAIL_FROM=crm@luxtor.ia.br e MAIL_FROM_NAME no .env · Templates HTML para senha, trial e relatório

📋
Visão geral
CRM multi-clínica para odontologia

O Luxtor Clínica CRM é o painel de gestão de leads, jornada e agendamentos para clínicas parceiras Luxtor. Cada clínica tem dados isolados, login próprio e white-label no cabeçalho.

ℹ️URL oficial: crm.luxtor.ia.br · Legado: painel-clinica.luxtor.ia.br · Porta 3350 · PM2 clinica-painel
Modo padrão: equipe humanaProdução
Clientes em demonstração (plano: demo) e o showroom clinica-horizonte têm Sofia/Gabi no Config → Teste ao Vivo. Clientes básico/plus usam equipe humana no painel; campanhas de voz consomem créditos.
Integração Luxtor CloudAutomático
Cadastro em /demo ou provisionamento admin cria tenant Cloud com R$ 20, login unificado e cloudTenantId. Zap e voz debitam do mesmo saldo.
v5.1 — CRM profissionalNovo
Tarefas, equipe/profissionais, NPS com score, webhooks de leads, agendamento público (/agendar/{clinica-id}), WhatsApp inbox e PostgreSQL em produção.
🔐
Login e senha
E-mail + senha (OTP WhatsApp desativado)
Como entrar
1
Acesse /login
2
Digite e-mail e senha fornecidos no provisionamento
3
Na primeira entrada, aceite os termos de uso no modal de boas-vindas
Esqueci minha senhaNovo
Na tela de login → Esqueci minha senha → código de 6 dígitos enviado por e-mail (remetente crm@luxtor.ia.br) → defina nova senha. APIs: POST /auth/forgot-password e POST /auth/reset-password.
Alterar senha (logado)Menu
Avatar no canto superior → 🔐 Alterar senha. API: POST /auth/change-password com senha atual e nova.
⚠️Login por OTP WhatsApp (/auth/request-otp) está desativado por segurança. Use sempre e-mail + senha.
🏥
Provisionar clínica (admin)
Criação completa em um clique
Passo a passo — Admin
1
Aba Config (showroom) ou atalho 👥 Clientes (piloto) → + Provisionar Clínica
2
Preencha: nome da clínica, responsável, e-mail, WhatsApp, senha inicial — plano Plus (setup R$ 4.500)
3
O sistema cria: tenant Cloud + registro em clients-db.json + clinicaId isolado + modo painel
4
Envie ao cliente: URL do CRM, e-mail, senha e link do Cloud
POST/api/admin/provision-client
Body: empresa, nome, email, telefone, senha, plano (basico|plus), script (opcional, só demo). Requer JWT admin.
💡Admin pode redefinir senha de qualquer cliente no card → botão 🔐 Senha (PATCH /api/admin/clients/:id).
📑
Abas do painel
AbaFunçãoQuem vê
DashboardKPIs, funil, saúde dos serviços, checklistTodos
InteressadosLeads quentes para ação humana imediataTodos
JornadaFunil completo + export CSVTodos
AgendaAgendamentos confirmados (coluna profissional)Todos
RecepçãoAgendamentos de hoje + observação Sofia + Enviar Zap → guiaTodos
TarefasFollow-up da equipe — pendências e vencimentosTodos
ConversasHistórico derivado da jornada (preview + modal)Todos
WhatsAppInbox de recepção — threads e respostas manuaisTodos
ChamadasHistórico Twilio e custosAdmin
EquipeProfissionais + integrações (webhooks, agendamento público)Gerente / Admin
AjustesLogo, equipe, LGPD, auditoria, Auto-PilotGerente (piloto e produção)
ConfigVoz, PM2, automações, clientes (admin) — só showroomAdmin Luxtor
RelatórioAnálise diária + PDF + score NPSTodos
Não PerturbeLista LGPD — bloqueia discagemTodos
CréditosSaldo Luxtor Cloud vinculadoCliente com tenant
🔥
Interessados
Fila humana — prioridade operacional

Leads em etapas interessado, em-contato e atendeu aparecem aqui para a equipe da clínica ligar, agendar ou atualizar status manualmente.

💡No modo painel, o dialer não faz handoff automático para Gabi. A clínica controla o fluxo.
💬
Conversas
Histórico por lead

Lista conversas derivadas do histórico da jornada: preview, turnos, duração e modal com transcrição. Filtros: hoje, interesse, rejeição, ocupado. Busca por nome/telefone.

GET/api/conversas?filtro=hoje&busca=
Lista conversas (JWT). Escopo automático por clínica.
GET/api/conversas/historico?id=LEAD_ID
Histórico detalhado de um lead.
🎯
Jornada do lead

Funil completo:

pendente → ligando → atendeu → interessado → agendado-zap → agendado → confirmado → compareceu
          ↓         ↓             ↓
    nao-atendeu  nao-interessado  nao-agendou / nao-compareceu

📞Sofia voz (MVP): lead entra direto em agendado com fonte: sofia-voz — sem etapas intermediárias na demo. Ver Sofia → CRM.
Campo detalheSofia
Observação do paciente (até 200 caracteres) — preenchida na ligação, visível na aba Recepção e no modal do lead.
Export CSVJornada
Botão na aba Jornada ou GET /api/jornada/export — exporta id, nome, telefone, etapa, fonte, score.
💎
Planos
PlanoInclui
DemonstraçãoSelf-service em /demo · R$ 20 créditos · Teste ao Vivo · 500 leads · sem expiração por data
PlusCRM completo, Sofia voz, Gabi Zap, Neural, relatório semanal, agendamento público, inbox WhatsApp
🛡️
Segurança
JWT em todas as APIsGate
apiGate exige token em /api/* exceto rotas públicas (/api/public/*, /api/hooks/*), webhooks Twilio e master. Cookies secure em produção.
Token internoDialer
Dialer e automações usam header x-painel-token para endpoints internos.
Isolamento por clínicaTenant
Sem fallback para demo: usuário não autenticado não acessa dados. Admin pode filtrar por ?clinicaId=.
Secrets em .envVPS
JWT_SECRET, TWILIO, ELEVENLABS e tokens ficam em /opt/clinica-painel/.env — nunca no código versionado.
🏢
Multi-tenant (storage)

Dados da jornada, tarefas, profissionais, inbox e NPS são armazenados por clínica:

Produção (recomendado): PostgreSQL via DATABASE_URL — banco luxtor_clinica

Desenvolvimento / fallback: /opt/clinica-painel/clinica-data/{clinicaId}.json

Migração automática do legado clinica-db.json e dos arquivos JSON para PG na primeira inicialização com DATABASE_URL. Admin vê métricas em Config → Métricas por Clínica (GET /api/admin/metrics).

🤖
Automações
PM2 clinica-automacoes · porta 3351
RotinaQuandoO quê
Monitor serviçosA cada 2 minAlerta WhatsApp se dialer/painel/voz cair
Lembretes consultaA cada 15 min24h e 2h antes (Gabi Zap)
Reagendamento00hLeads nao-interessado → pendente após 30 dias
Relatório diário20hResumo Clínica Horizonte → admin
Relatório semanalDomingo 8hResumo por clínica → WhatsApp do cliente
NPS3h após compareceuPesquisa 0-10 via Gabi + score no Relatório
📜
Termos de uso e LGPD

Ao primeiro acesso, o usuário deve aceitar os termos (POST /auth/accept-terms). A lista Não Perturbe permite bloquear números que solicitaram não ser contactados — o dialer respeita automaticamente.

Dados pessoais (nome, telefone, histórico) são processados para gestão comercial da clínica contratante. Solicitações de exclusão devem ser feitas à clínica ou ao suporte Luxtor.

🔌
APIs principais
POST/auth/login
email + senha → JWT
GET/auth/me
Usuário, features, plano, termosAceitos
GET/api/jornada
Jornada filtrada por clínica
POST/api/jornada
Criar/atualizar lead — Sofia voz envia com etapa: agendado + fonte: sofia-voz. Token interno: x-painel-token
PUT/api/jornada/:id
Atualizar etapa do lead

Recepção

GET/api/recepcao/hoje
Agendamentos de hoje + detalhe + fonte — aba Recepção
GET/api/agendamentos
Todos agendamentos — aba Agenda
PUT/api/agendamentos/:id
Confirmar ou cancelar agendamento
GET/api/relatorio
Relatório do dia com taxas e gargalos (inclui breakdown por fonte)
GET/api/supressao
Lista Não Perturbe
GET/api/admin/metrics
Métricas por clínica (admin)
GET/api/leads/pendentes
Dialer interno (x-painel-token)

Tarefas

GET/api/tarefas
Lista tarefas da clínica
POST/api/tarefas
Criar tarefa de follow-up

Equipe e integrações

GET/api/profissionais
Profissionais cadastrados
GET/api/integracoes
URLs webhook e agendamento público (gerente)

WhatsApp inbox

GET/api/inbox/threads
Threads do inbox
POST/api/inbox/send
Enviar mensagem WhatsApp

Públicas (sem JWT)

GET/api/public/clinica/:slug
Dados da clínica para agendamento
POST/api/public/clinica/:slug/agendar
Agendar consulta online
POST/api/hooks/leads/:token
Capturar lead externo
POST/api/hooks/inbox/:token
Registrar mensagem WhatsApp recebida
POST/api/hooks/nps/:token
Registrar resposta NPS

NPS

GET/api/nps
Score e respostas NPS
⚙️
Arquitetura
Showroom Ouro + Piloto Campinas

Showroom — crm.luxtor.ia.br

ServiçoPM2Porta
Painel CRMclinica-painel3350
Automaçõesclinica-automacoes3351
Luxtor Cloudluxtor-cloud3360
Dialerdialer-clinica4601
Voz Sofiavoice-sofia-clinica3343
Sofia gatewaysofia-clinica18796
Gabi gatewaygabi-clinica18797
Neural (Lux)suporte-luxtor18800
Salão equipeequipe-salao18950
Luxtor gatewayluxtor-gateway18790

Piloto — crm-piloto.luxtor.ia.br

ServiçoPM2Porta
Painel CRMclinica-painel3350
Dialerdialer-clinica-piloto4601
Lia vozlia-clinica-piloto18796
Nina Zapnina-clinica-piloto18797
Neural (Lux)suporte-luxtor18800

URLs: crm.luxtor.ia.br · crm-piloto.luxtor.ia.br · Deploy: scripts/deploy-crm-ambos.py

🧪
Sofia e Gabi — apenas teste
⚠️Sofia (voz) e Gabi (WhatsApp IA) aparecem no painel somente para admin ou clínica demo clinica-horizonte. Clientes reais não veem configuração de voz nem campanha automática com IA.

Atributo UI: data-ia-teste + flag features.iaTeste em /auth/me.

Integração Sofia → CRMMVP
Ao confirmar horário + WhatsApp na ligação, Sofia registra lead em agendado com observação. Recepção vê na aba Recepção. Documentação: Sofia → CRM.
Teste ao VivoConfig
Config → Teste ao Vivo → liga para seu celular com demo=1. Fluxo B2B: agendamento (Ato 1) → pitch Luxtor (Ato 1b+) — CRM só muda na confirmação do horário.