Clinicas que enviam mensagens de WhatsApp para pacientes sem consentimento documentado estao expostas a sancoes da ANPD. O DentFlow trata os dois problemas como nao-negociaveis.
Na primeira mensagem de qualquer paciente novo, o DentFlow envia automaticamente uma solicitacao de consentimento conforme a Lei 13.709/2018. O paciente precisa responder com uma palavra-chave de aceitacao antes que qualquer dado seja armazenado ou processado.
O consentimento é registrado com timestamp por paciente, por clínica.
Se o paciente enviar PARAR, STOP, SAIR, CANCELAR, UNSUBSCRIBE ou DESCADASTRAR a qualquer momento, o DentFlow revoga o consentimento imediatamente, envia uma confirmacao de descadastramento e para todo processamento automatico. Sem delay. Sem intervencao humana.
O DentFlow é uma plataforma multi-tenant: cada clínica é um tenant isolado com um ID próprio que está em todas as tabelas do banco de dados. Políticas de Row-Level Security (RLS) no Supabase garantem em nível de banco que uma consulta de qualquer clínica nunca retorna dados de outra.
O isolamento é enforced no banco, nao apenas no código da aplicacao. Permissoes de execucao de funcoes sensíveis foram auditadas e corrigidas em múltiplos ciclos durante o desenvolvimento.
Configuracao de papeis e permissoes por usuario
O DentFlow tem seis perfis de acesso, com permissoes enforced no servidor - nao é possível acessar dados fora do próprio escopo mesmo com manipulacao do browser. O clinic_id de cada sessao e resolvido do cookie de autenticacao no servidor, nunca do corpo da requisicao.
A tabela de auditoria de ajustes de créditos nao tem UPDATE nem DELETE permitido por política. Todo ajuste manual gera um registro permanente com: quem fez, quando, qual clínica, qual pool (IA ou campanha), qual o delta e qual a justificativa.
Nao é possível apagar esse historico.
A integracao de WhatsApp do DentFlow é feita diretamente com a Meta WhatsApp Business Cloud API - nao ha um BSP intermediario adicionando camadas de custo e risco.
Cada mensagem enviada passa por verificacao de assinatura HMAC-SHA256 para garantir que o webhook é genuíno.
Painel de configuracao de WhatsApp - status da conexao Meta Business API
Decisoes de engenharia que protegem clínicas e pacientes, nao apenas conformidade formal.
O debito de créditos é feito por uma funcao RPC no banco (SECURITY DEFINER, search_path fixo). Nao é possível debitar duas vezes o mesmo saldo em requisicoes concorrentes. Sem essa garantia, dois Webhooks Meta chegando ao mesmo tempo poderiam debitar saldo duas vezes.
Mensagens do Meta tem um message_id unico. Se o Meta reenviar a mesma mensagem (retry automatico), o segundo webhook retorna 200 silenciosamente sem reprocessar. O mesmo padrao e aplicado aos eventos Stripe via stripe_events.status. Previne cobrancas duplas e mensagens duplicadas.
Todos os endpoints de cron verificam o CRON_SECRET antes de executar. Se a variavel de ambiente estiver ausente no servidor, o endpoint retorna HTTP 500 com log [CRON_AUTH_MISCONFIG] em vez de falhar aberto. Um env var faltando nao deixa o endpoint publico.
Antes de cada chamada de IA, o webhook verifica o saldo do Pool IA. Se o saldo for menor que 5 créditos, a conversa e encaminhada para atendimento humano e um escalamento e registrado. A OpenAI nunca e chamada com saldo insuficiente.
No maximo 10 mensagens de onboarding por clínica por hora (previne abuso de numeros desconhecidos). Audios maiores de 8 MB sao rejeitados antes do download com resposta PT-BR ao paciente. Previne esgotamento de memoria no servidor e custo de transcricao nao autorizado.
Dados armazenados no Supabase (AWS ap-southeast-1) com AES-256 KMS gerenciado pela AWS. Todos os prompts e respostas de IA sao rastreados em instancia propria do Langfuse (langfuse.wolfactionstudio.com) - sem SaaS de terceiros recebendo dados de conversas de pacientes alem da OpenAI para inferencia.
O DentFlow mantém logs estruturados de todas as operacoes sensíveis. Clínicas podem solicitar exportacao de seus dados (Art. 18 LGPD) a qualquer momento.
| Tabela | O que registra | Retencao | Permite DELETE? |
|---|---|---|---|
| credit_adjustments | Cada ajuste manual de créditos: quem fez, quando, pool, delta, razao | Permanente | Nao (append-only por política RLS) |
| ai_interaction_logs | Cada chamada de IA: tipo, tokens, custo USD, modelo, duracao de audio (se transcricao) | 90 dias | Nao (sem politica de delete para usuarios) |
| whatsapp_lgpd_consents | Consentimento por paciente: concedido_em, revogado_em, canal | Permanente | Nao |
| whatsapp_escalations | Escalamentos para humano: intent, quem resolveu, quando | 90 dias | Nao |
| stripe_events | Cada evento Stripe com status de processamento (deduplicacao de cobrancas) | 90 dias (auto-cleanup) | Apenas por cron autorizado |
| n8n_error_log | Erros de automacoes externas com contexto sanitizado (sem dados de pacientes) | 30 dias | Nao |
Agende uma demo com a equipe DentFlow.
Agendar demo