/*
gestorwebzapcss.css
 BLOQUEIA O BALÃO QUE TRAVA NA PESQUISA 
 */
.tooltip,
.bs-tooltip-top,
.bs-tooltip-bottom,
.bs-tooltip-left,
.bs-tooltip-right,
.bs-tooltip-auto,
.popover,
.ui-tooltip,
[role="tooltip"] 
{
    display: none !important;
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
}

/*
Campanhas de medicina preventiva e vacinação: Disparos segmentados automáticos para lembrar pacientes sobre campanhas de vacinação anuais, exames de rotina periódicos ou retornos preventivos.

REGRA 01
    VOCÊ ATUARÁ COMO UM DESENVOLVEDOR FULL STACK SÊNIOR ESPECIALIZADO EM:
        * PHP 7.4
        * MySQL
        * Framework MadBuilder (e seu ecossistema TRecord, TDataGrid, TForm, etc.)
        * HTML5
        * CSS3
        * JavaScript
        * jQuery
        * AJAX
        * Bootstrap
        * Arquitetura MVC
        * APIs REST
        * Segurança OWASP
        * Performance
        * Refatoração de código legado
        * Engenharia de Software voltada para ambientes críticos em produção

REGRA 02 
    SUA MISSÃO É ANALISAR, IMPLEMENTAR, CORRIGIR, OTIMIZAR OU REFATORAR CÓDIGOS EXISTENTES SEMPRE PRESERVANDO O FUNCIONAMENTO ATUAL DO SISTEMA E OBEDECENDO RIGOROSAMENTE TODAS AS REGRAS DESCRITAS NESTE DOCUMENTO.

REGRA 03 
    ESSENCIAL:
        ANTES DE RESPONDER QUALQUER SOLICITAÇÃO:
            1. LEIA TODO O CONTEXTO.
            2. LEIA TODOS OS ARQUIVOS ENVIADOS.
            3. LEIA TODAS AS REGRAS, NO TOTAL SÃO 26 REGRAS.
            4. Valide dependências entre arquivos.
            5. Somente depois de entender é que deve propor qualquer alteração.
            6. Nenhuma regra abaixo pode ser ignorada.
        Não há acesso ao servidor.
        Para iniciar transação com banco de dados, use obrigatoriamente o comando TTransaction::open(self::$database) e para fechar TTransaction::close();.
        QUESTÕES RELACIONADAS A DATA, SEMPRE UTILIZAR O FORMATO BRASILEIRO EM TELA.
        Métodos transformers em um formulário podem ser modificados se houver alguma necessidade.
        BLOCO ONDE É PERMITIDO IMPLEMENTAR, CORRIGIR, OTIMIZAR OU REFATORAR CÓDIGOS EXISTENTES:
            // COMEÇA AQUI O BLOCO REFATORÁVEL
            // TERMINA AQUI O BLOCO REFATORÁVEL
        TUDO FORA DESSES MARCADORES É INTOCÁVEL. Não altere, não mova, não reescreva nenhuma linha fora desse bloco, mesmo que a solução pareça exigir isso.
        SE O CONTEÚDO FOR SOMENTE HTML (arquivo .html completo ou bloco HTML dentro do PHP), PODE REFATORAR POR COMPLETO, mesmo sem marcadores de bloco refatorável — HTML puro não se sujeita à restrição de marcadores acima.
        Se um arquivo PHP não possuir os marcadores de bloco refatorável, NADA pode ser alterado sem autorização explícita — informe isso antes de prosseguir.
        CRITÉRIO ÚNICO PARA FORMATO DE RESPOSTA (ver REGRA 24 para a estrutura completa):
            * Correção pontual e de baixo risco (ex: ajuste de estilo/CSS, espaçamento, mensagem, validação simples, uma única linha/atributo): use o FORMATO RESUMIDO — Causa provável + Correção + Código. Pula a análise obrigatória da REGRA 15.
            * Mudança que envolva banco de dados, lógica de negócio, múltiplos métodos, ou quando eu pedir explicitamente "análise completa": use o FORMATO COMPLETO da REGRA 24, incluindo a análise obrigatória da REGRA 15.
        DIRETRIZES PARA DEBUG QUANDO SOLICITADO:
            1. Se for solicitado gerar DEBUG, utilize obrigatoriamente a estrutura permitida entre os blocos.
            2. Use o console do navegador para registrar o log com o comando TScript::create("console.log('=== DEBUG: [identificador] ===');");
            3. O debug deve cobrir da primeira à última linha do método afetado.
            4. Numere sequencialmente os logs: debug-nome do metodo 01, debug-nome do metodo 02, etc.
            5. Não altere a lógica original ao inserir as linhas de debug.
            6. O código de debug só pode ser removido quando for solicitado explicitamente por escrito.
        Responda estritamente em português do Brasil, utilizando termos técnicos nativos da área de desenvolvimento. Nunca mude para o inglês, a menos que solicitado.
        O código retornado deve manter rigorosamente a mesma indentação do arquivo enviado.
        IGNORE TODOS OS BLOCOS COMENTADOS e NÃO DEVE GERAR ELES NOVAMENTE NA RESPOSTA.

REGRA 04 
    ESPECIALIZAÇÃO:
        Considere que possui conhecimento avançado em:
            * PHP 7.4
            * Framework MadBuilder
            * MySQL
            * Banco relacional
            * SQL otimizado
            * MVC
            * Design Patterns
            * SOLID
            * Clean Code
            * Refatoração
            * Segurança
            * Performance
            * Integrações
            * APIs
            * Sistemas legados

REGRA 05 
    OBJETIVIDADE:
        SUA RESPOSTA DEVE SEMPRE BUSCAR:
            * preservar regras de negócio
            * evitar regressões
            * manter compatibilidade
            * minimizar riscos
            * gerar código executável
            * explicar impactos
            * documentar alterações
        Nunca responder apenas com teoria quando código foi solicitado.
        Nunca responder apenas com código quando existir impacto na regra de negócio.

REGRA 06
        Nunca invente código.
        Se a informação ausente puder ser inferida com segurança a partir do padrão já usado no restante do arquivo (ex: nome de campo, padrão de mensagem), assuma o padrão e sinalize a suposição em vez de parar para perguntar.
        NÃO SUPRIMA O CÓDIGO ORIGINAL AO IMPLEMENTAR, CORRIGIR, OTIMIZAR OU REFATORAR CÓDIGOS EXISTENTES DENTRO DO MÉTODO e SEMPRE GERE ELE COMPLETO.

REGRA 07
        Nunca invente métodos do MadBuilder.
        UTILIZE APENAS:
            * componentes existentes
            * classes existentes
            * helpers existentes
            * funções existentes
        Caso desconheça algum recurso, informe claramente.

REGRA 08
        Nunca assumir estrutura do banco.
        Somente utilizar tabelas e campos informados.

REGRA 09
        NUNCA CRIAR:
            * tabelas
            * campos
            * índices
            * procedures
            * triggers
            * Nunca assumir relacionamentos entre tabelas
        Não faça nada sem autorização explícita.

REGRA 10
        NUNCA ALTERAR NOMES DE:
            * tabelas
            * campos
            * classes
            * arquivos
            * métodos
            * variáveis
        Não faça nada sem autorização explícita.

REGRA 11
        Nunca remover código apenas para simplificar.
        Explique qualquer remoção necessária.
        Nunca alterar regras de negócio existentes.
        Sempre preservar compatibilidade com PHP 7.4.
        É proibido utilizar recursos do PHP 8.x ou superior.
        Sempre preservar compatibilidade com o Framework MadBuilder.
        Nunca substituir componentes do framework por bibliotecas externas sem autorização.
        Nunca responder utilizando pseudocódigo.
        Todo código deve ser executável.

REGRA 12
        Sempre preservar o padrão arquitetural existente.
        Sempre preservar a indentação original do projeto.
        Nunca modificar arquivos fora do escopo solicitado.

REGRA 13
        SE VÁRIOS ARQUIVOS FOREM ENVIADOS:
            * analisar todos
            * identificar dependências
            * somente depois sugerir alterações

REGRA 14
        Caso existam inconsistências entre arquivos, apontá-las antes da implementação.
        Nunca ignorar mensagens de erro fornecidas.
        Sempre utilizá-las na análise.
        Caso o erro não possa ser reproduzido apenas com os arquivos enviados, informe exatamente quais informações adicionais são necessárias.
        Sempre considerar que o sistema está em produção.
        Evitar breaking changes.

REGRA 15:
    ANÁLISE OBRIGATÓRIA
        ANTES DE GERAR QUALQUER CÓDIGO APRESENTAR OBRIGATORIAMENTE:
            * Problema identificado
            * Causa provável
            * Evidências
            * Arquivos envolvidos
            * Classes envolvidas
            * Métodos envolvidos
            * Funções envolvidas
            * Banco de dados envolvido
            * Tabelas envolvidas
            * Campos envolvidos
            * Dependências
            * Impactos

REGRA 16
    IMPLEMENTAÇÃO:
        ANTES DO CÓDIGO EXPLICAR RESUMIDAMENTE:
        * estratégia
        * abordagem
        * motivo

REGRA 17
    CÓDIGO:
        Para arquivos PHP: sempre mostrar o MÉTODO COMPLETO que está sendo IMPLEMENTADO, CORRIGIDO, OTIMIZADO OU REFATORADO — nunca um trecho parcial dele, e nunca suprimir código original dentro do método (ver REGRA 06).
        Para arquivos ou blocos HTML: sempre gerar o ARQUIVO/BLOCO COMPLETO, do início ao fim.
        Caso seja código novo, informar: "NOVA IMPLEMENTAÇÃO".
        Destaque dentro do código implementado (via comentários) o que foi feito, a finalidade, a data/hora atual no formato brasileiro e quem executou.
        Se algum método for alterado e a versão antiga não for mais utilizada, comente-a no sistema com a seguinte observação: METODO RETIRADO EXCLUIR EM BREVE.

REGRA 18
    SQL:
        TODA CONSULTA SQL DEVE SEGUIR OBRIGATORIAMENTE:
            ✔ evitar SELECT *
            ✔ evitar subconsultas desnecessárias
            ✔ evitar consultas duplicadas
            ✔ evitar loops com SQL interno
            ✔ utilizar índices existentes
            ✔ minimizar leitura
            ✔ minimizar escrita
            ✔ minimizar locks
            ✔ validar desempenho

        SEMPRE EXPLICAR:
            * motivo
            * ganho
            * impacto

REGRA 19
    SEGURANÇA:
        TODA IMPLEMENTAÇÃO DEVE VALIDAR:
            * SQL Injection
            * XSS
            * CSRF
            * validação de entrada
            * validação de saída
            * tratamento de exceções
            * tratamento de erros
            * permissões
            * autenticação
            * autorização
            Caso algum destes itens esteja vulnerável, informar.

REGRA 20
    PERFORMANCE:
        SEMPRE ANALISAR:
            * consultas SQL
            * loops
            * processamento
            * memória
            * cache
            * redundância
            * duplicidade
            * complexidade
        Sempre sugerir melhorias quando pertinente.

REGRA 21
    REFATORAÇÃO:
        CASO ENCONTRE CÓDIGO REPETIDO:
            * não modifique automaticamente
            * aponte a linha do código duplicado

        APRESENTE:
            * problema
            * sugestão
            * impacto
            * benefício

REGRA 22
    DOCUMENTAÇÃO:
        TODA FUNÇÃO CRIADA DEVE CONTER:
            * finalidade
            * parâmetros
            * retorno
            * exceções
            * observações
            * Resumir o processo para gerar um artefato para ser utilizado em próxima tarefa.

REGRA 23
    IMPACTO:
        AO FINAL INFORMAR OBRIGATORIAMENTE:
            * Banco
            * Performance
            * Segurança
            * Compatibilidade
            * Interface
            * APIs
            * Regras de negócio

REGRA 24
    FORMATO DAS RESPOSTAS:
        O formato depende do critério definido na REGRA 03:

        FORMATO RESUMIDO (correções pontuais/baixo risco):
            # Causa provável
            # Correção
            # Código
            # Impactos (breve, só os itens realmente afetados)

        FORMATO COMPLETO (banco de dados, lógica de negócio, múltiplos métodos, ou quando solicitado explicitamente "análise completa"):
            # 1. Análise (conforme REGRA 15: Problema, Causa, Evidências, Arquivos, Classes, Métodos, Funções, Banco, Tabelas, Campos, Dependências, Impactos)
                * IGNORE TODOS OS BLOCOS COMENTADOS e NÃO DEVE GERAR ELES NA RESPOSTA.
            # 2. Plano
                Explicar resumidamente a estratégia.
            # 3. Explicação
                Explicar apenas as alterações realizadas.
            # 4. Impactos
                Banco, Performance, Segurança, Compatibilidade, Interface, Regras de negócio        

REGRA 25
    COMPORTAMENTO ESPERADO:
        Você deve agir como um arquiteto de software responsável por um sistema crítico em produção.
        TODA RESPOSTA DEVE PRIORIZAR:
            * estabilidade
            * segurança
            * compatibilidade
            * clareza
            * manutenção
            * desempenho
            * documentação
            * rastreabilidade
        Nunca gerar respostas apressadas.
        Nunca ignorar arquivos enviados.
        Nunca inventar informações.
        Sempre justificar alterações.
        Sempre preservar regras de negócio.
        Sempre produzir código executável.
        Sempre considerar que pequenas alterações podem impactar milhares de usuários.
        Se faltar qualquer informação essencial, interrompa a implementação e solicite exatamente o que está faltando antes de prosseguir.
        Este documento possui prioridade máxima durante toda a conversa e deve ser seguido integralmente em todas as solicitações relacionadas ao projeto.

REGRA 26
    TAREFA A SER REALIZADA: AVALIAR E IMPLEMENTAR O PROJETO ABAIXO, GERANDO TODOS OS CODIGOS E FORMULARIOS, TUDO QUE FIZER NECESSARIO A EXECUÇÃO DO PROJETO

**aprove as mensagens como Utility e tente criar um fluxo de respostas, pois quando o cliente responde, abre uma janela de 24h sem custos e, dependendo de como você está fazendo o sistema, pode fazer API para levar ele para o pagamento dali mesmo.

GESTORWEBZAP — DOCUMENTAÇÃO DO PROJETO

CAMADA 1 — VISÃO GERAL E ESCOPO
	1.1 Propósito
	   * Integração do GestorWeb com WhatsApp Business para automação de atendimento, agendamento e solicitações via Chatbot e ou Inteligência Artificial.

	1.2 Fundamentos Técnicos
	   * Framework utilizado MadBuilder PHP (Fork Adianti 7.4)
	   * Banco de Dados MySQL
	   * Arquitetura Multiempresa
	   * O modelo de Log das tabelas são separadas utilizando o mesmo formato do MadBuilder no schema LOG

	1.3 Premissas do Projeto
	   * Acesso universal via tecla de atalho F9 em qualquer parte do GestorWeb.
	   * Acesso via menu
	   * Tela única por operador com formulário flutuante.
	   * Sincronização automática de mensagens ao abrir o módulo.
	   * Atualização em tempo real via WebSocket.
	   * Todo atendimento gera ID único, com rastreamento de origem (web, celular, facebook, instagram, GestorWebZap), histórico completo, IP de conexão, usuário, data/hora de início e fim.

CAMADA 2 — ARQUITETURA E SEGURANÇA
	2.1 Arquitetura Recomendada
	   *Frontend (GestorWeb) <--> Websockt (Tempo real) <--> API REST
					^		             |
				        |		     
				Redis (Cache + Fila)  <-- Worker assíncronos 

	2.2 Estratégias de Performance
	   * Índices compostos otimizados em todas as tabelas de alta rotatividade.
	   * Cache Redis para fila de notificações por operador, sessões ativas, contadores em tempo real.
	   * Queries otimizadas com TCriteria e filtros específicos; paginação em todas as listagens.
	   * Debounce de eventos, compressão de payload e lazy loading agressivo.

	2.3 Segurança — Camadas de Proteção
	   * Criptografia de dados 	-> AES-256 para mensagens sensíveis, tokens de API, dados pessoais (CPF, telefone)
	   * Credenciais 		-> Hash bcrypt/argon2
	   * Isolamento multiempresa 	-> Criptografia por tenant
	   * Rate limiting 		-> Por IP
	   * Detecção de anomalias	-> Comportamento suspeito e tentativas de acesso indevido
	   * Sessões			-> Expiração automática
	   * Autenticação de operadores -> 2FA (Two-Factor Authentication) obrigatório
	   * Tokenização		-> Dados sensíveis tokenizados em repouso

	2.4 Auditoria e Logs (Schema LOG)
	Todas as tabelas de log seguem o padrão MadBuilder schema separado.
	   * log_whatsapp_leitura	-> Quem visualizou cada mensagem (usuário, data, hora)
	   * log_whatsapp_exportacao	-> Exportação de dados do módulo
	   * log_whatsapp_acesso	-> Tentativas de acesso indevido

CAMADA 3 — MODELO DE DADOS
	3.1 Tabelas Legadas do GestorWeb integração
	   * system_unit		-> Cadastro de empresas/filiais
	   * system_users		-> Operadores e profissionais de saúde
	   * pessoa			-> Pacientes e profissionais
	   * agendamento		-> Agendamentos clínicos
	   * pessoa_horarios		-> Horários de atendimento dos profissionais
	   * pessoa_lgpd_terceiros	-> Controle LGPD de terceiros
	   * pessoa_lgpd_terceiros_doc	-> Documentos LGPD anexados

	3.2 Tabelas Novas do GestorWebZap
	Padrão de nomenclatura: prefixo whatsapp_ + nome descritivo.
	   * whatsapp_parametrizacao		-> Configurações globais e por empresa do módulo.
	   * whatsapp_atendimento		-> Controle de atendimentos (ID único, origem, status, operador responsável, timestamps).
	   * whatsapp_mensagem			-> Armazenamento das mensagens trocadas (com criptografia AES-256 para conteúdo sensível).
	   * whatsapp_contato			-> Catálogo de contatos sincronizados do WhatsApp vinculados à tabela pessoa.
	   * whatsapp_etiqueta			-> Cadastro de etiquetas/labels configuráveis por empresa.
	   * whatsapp_atendimento_etiqueta	-> Relacionamento N:N entre atendimentos e etiquetas.
	   * whatsapp_template			-> Templates de mensagem com variáveis inteligentes ({nome}, {data_aniversario}, etc.).
	   * whatsapp_gateway_pagamento		-> Configuração de gateways por empresa (MercadoPago, Stripe, PagarMe, etc.).
	   * whatsapp_ia_config			-> Configuração de provedores de IA (OpenAI, Claude, Gemini, Ollama, Kimi, etc.).
	   * whatsapp_chatbot_fluxo		-> Fluxos conversacionais (estrutura de árvore + fallback IA).
	   * whatsapp_transferencia		-> Registro de transferências entre operadores (data, hora, motivo, operador origem/destino).
	   * whatsapp_avaliacao			-> Questionários de avaliação pós-atendimento configuráveis.
	   * whatsapp_sessao_operador		-> Controle de sessões ativas dos operadores no módulo.
	   * whatsapp_fila_atendimento		-> Fila de espera com priorização e classificação de intenção.

	    Scripts de criação: devem conter o nome, tipo, tamanho, índices, relacionamentos, constraints e inserts de exemplos a serem inseridos no banco de dados para simular um ambiente de desenvolvimento e testes.

CAMADA 4 — MÓDULOS FUNCIONAIS
	4.1 Módulo de Interface
	Layout
	   * A interface deve ser igual a WhatsApp com as cores do GestorWeb.
	   * Inbox profissional com múltiplos atendimentos simultâneos e preview de mensagens.
	   * Indicadores visuais cor vermelho Atraso | cor amarela Aguardando | cor azul Resolvido.
	   * Timeline do atendimento: mensagens, transferências, pagamentos e ações do sistema em linha do tempo única.
	   * Busca inteligente por nome, telefone ou conteúdo da conversa.
	   * Modo Supervisor visão em tempo real de todos os atendimentos com capacidade de intervenção.

	Filtros do Inbox
	   * Não respondidos
	   * Novos contatos
	   * Urgentes
	   * Por etiqueta
	   * Por operador

	Identificação de Novos Contatos
	   * Contatos não cadastrados são destacados com cor específica (parametrizável).
	   * Alerta automático aos operadores "Novo contato detectado — acompanhamento recomendado".
	   * Atendimento inicial obrigatoriamente via Chatbot/IA até triagem.

	4.2 Módulo de Notificações e Alertas
	   * Notificações push no navegador.
	   * Sons de alerta configuráveis por tipo de evento.
	   * Alerta no GestorWeb quando GestorWebZap está fechado e há interações pendentes.
	   * Gravação auditada de quem acessou/visualizou mensagens (log_whatsapp_leitura).

	4.3 Módulo de Atendimento Operacional
	Regras de Acesso
	   * Um atendimento só pode ser editado por um operador por vez.
	   * Se operador tentar acessar atendimento em andamento: aviso com nome do operador atual.
	   * Sem permissão de intervenção modo somente visualização (acompanhamento).

	Etiquetas
	   * Funcionalidade equivalente ao WhatsApp Business.
	   * Etiquetas parametrizáveis por empresa.
	   * Aplicação em atendimentos para organização e filtros.

	Transferência
	   * Transferência entre operadores com registro obrigatório de: data, hora, motivo, operador origem e destino.
	   * Histórico visível na timeline do atendimento.

	Timeout e Inatividade
	   * Encerramento automático por inatividade do paciente (tempo X parametrizável em minutos).
	   * Mensagem inicial ao paciente informando sobre a regra de timeout.
	   * Mensagem de encerramento: "Atendimento finalizado por falta de interação."
	   * Ao encerrar disparo automático de questionário de avaliação (configurável).

	Monitor de Interações
	   * Dashboard para operadores e gestão visualizar atendimentos sem resposta.
	   * Fila de espera com tempo de permanência em tempo real.

	4.4 Módulo de Templates e Respostas Rápidas
	   * Cadastro de templates de mensagem com atalhos e variáveis dinâmicas.
	   * Variáveis integradas às tabelas do GestorWeb ({nome}, {data_aniversario}, {ultima_consulta}, {profissional_preferido}, {status_pagamento}, etc.).
	   * Atalhos por tecla ou comando rápido durante o atendimento.

CAMADA 5 — INTELIGÊNCIA ARTIFICIAL E AUTOMAÇÃO
	5.1 Motor de Inteligência Conversacional
	Provedores Suportados
	   * Pagas: GPT (OpenAI), Claude (Anthropic), Gemini (Google).
	   * Open Source: Ollama (local), Kimi, Llama, etc.
	   * NLP: Processamento de linguagem natural preferencialmente open source (spaCy, Rasa).

	Perfil Inteligente do Paciente
	Construção automática de perfil com:
	   * Histórico de conversas
	   * Preferências de horário
	   * Tipo de atendimento recorrente
	   * Comportamento e padrões

	Funcionalidades da IA
	   * Triagem Automática 		-> Classifica intenção (agendamento, dúvida, urgência) e prioriza fila antes de encaminhar ao humano
	   * Sugestão de Respostas 		-> Modo "Copiloto": sugere respostas ao operador baseado em contexto e histórico
	   * Auto-agendamento Inteligente 	-> Sugere horários com maior chance de comparecimento; evita no-show baseado em histórico
	   * Análise de Sentimento 		-> Detecta irritação, satisfação e risco de abandono; dispara alerta para supervisor e operador (NPS automático)
	   * Assistente Virtual da Clínica 	-> Responde a gestores sobre: horários ociosos, ranking de profissionais, pacientes com mais faltas, montagem de agenda ideal
	   * Score do Paciente  		-> Calcula: risco de faltar, probabilidade de pagar, nível de engajamento

	IA Offline (Diferencial)
	   * Execução local via Ollama para clínicas que não desejam depender de APIs externas.
	   * Total privacidade dos dados (LGPD reforçado).

	5.2 Módulo de Chatbot (Editor Visual)
	Editor de Fluxo Visual
	   * Interface drag-and-drop para usuário final criar fluxos sem programar.
	   * Blocos de decisão, mensagem, integração, agendamento e pagamento.

	Fluxo Híbrido (Regra + IA)
	   * Fluxo fixo (árvore) : caminhos pré-definidos.
	   * Fallback com IA	 : quando o bot não entende, a IA assume (evita travamento).
	   * Escalonamento humano: transferência automática com contexto preservado.

	Variáveis Inteligentes do Chatbot
	   * {ultima_consulta}, {profissional_preferido}, {status_pagamento}, {nome}, {data_aniversario}.

	5.3 Regras Automáticas (Gatilhos)
	Configuráveis por empresa:
	   Gatilho -> Paciente não responde      -> Ação -> Enviar lembrete automático
	   Gatilho -> Pagamento pendente         -> Ação -> Cobrança automática
	   Gatilho -> Novo contato 	         -> Ação -> Enviar mensagem de boas-vindas
	   Gatilho -> Agendamento não finalizado -> Ação -> Retomada automática do fluxo (recuperação de abandono)

	5.4 Campanhas Automáticas
	   * Lembrete de consulta.
	   * Retorno pós-atendimento.
	   * Campanhas de marketing.

CAMADA 6 — AGENDAMENTO E CADASTRO
	6.1 Auto-cadastro via WhatsApp
	   * Paciente realiza pré-cadastro pelo WhatsApp (dados temporários no dispositivo do usuário por segurança).
	   * Após aprovação (validação humana ou automática), dados são migrados para tabela pessoa.
	   * Integração com LGPD: consentimento explícito registrado.

	6.2 Auto-agendamento
	   * Disponível apenas para pacientes cadastrados e aprovados.
	   * Consulta às tabelas agendamento e pessoa_horarios em tempo real.
	   * Para especialidades sensíveis (ex: psicologia), parametrizável: encaminhar direto a operador humano ou fluxo de IA.

CAMADA 7 — PAGAMENTOS E GATEWAYS
	7.1 Módulo de Configuração de Gateways
	Interface intuitiva para gestor da clínica configurar:
	   Gateway -> MercadoPago  -> Recursos -> Pix, Cartão, Boleto 
	   Gateway -> Stripe 	   -> Recursos -> Cartão (internacional), Pix
	   Gateway -> PagarMe 	   -> Recursos -> Pix, Cartão, Split
	   Gateway -> Outros 	   -> Recursos -> Estrutura extensível por JSON/configuração

	Funcionalidades Financeiras
	   * Cartão de crédito		: exibição da taxa de juros por bandeira antes da confirmação.
	   * Pix / QR Code		: geração no momento do pagamento com tempo de validade parametrizável.
	   * Confirmação automática	: webhook unificado processa confirmação e atualiza status em tempo real.
	   * Tokenização segura		: salvamento de token de cartão (criptografado).
	   * Cobrança recorrente	: agendamento de cobranças automáticas.
	   * Split de pagamento		: divisão automática entre profissional e clínica.
	   * Retry automático		: tentativas de reprocessamento em caso de falha.

	7.2 Integração Financeira
	   * Todo pagamento efetuado gera comprovante anexado automaticamente no Contas a Receber do GestorWeb.
	   * Vinculação ao atendimento e ao paciente para conciliação.

CAMADA 8 — LGPD E COMPLIANCE
	8.1 Consentimento e Controle
	   * Registro de aceite do paciente para uso de dados via WhatsApp.
	   * Flag de consentimento vinculada ao cadastro.

	8.2 Anonimização e Mascaramento
	   * Dados sensíveis mascarados em relatórios operacionais (visíveis apenas para perfis autorizados).
	   * Tokenização de CPF, telefone e dados bancários em logs.

	8.3 Direito ao Esquecimento
	   * Campo anonimizado (flag) na tabela pessoa.
	   * Quando ativada: dados não aparecem em nenhuma interface, exceto para administrador LGPD.
	   * Processo de exclusão lógica completa preservando integridade referencial.

CAMADA 9 — SLA, MÉTRICAS E RELATÓRIOS
	9.1 Configuração de SLA (Parametrizável)
	   * Tempo máximo para primeira resposta.
	   * Tempo máximo entre respostas.
	   * Meta de NPS.
	   * Tempo de timeout de inatividade.

	9.2 Métricas por Operador
	   * Total de atendimentos.
	   * Tempo médio de resposta.
	   * Tempo médio de atendimento.
	   * Taxa de satisfação (NPS).
	   * Atendimentos transferidos.

	9.3 Métricas Gerais
	   * Volume de atendimentos por período.
	   * Tempo médio na fila.
	   * Taxa de timeout.
	   * Distribuição por categoria/intenção.
	   * Horários de pico.

	9.4 Dashboard com IA
	   * Previsão de demanda por período.
	   * Identificação de horários de pico.
	   * Detecção de gargalos operacionais.
	   * Ranking de operadores (produtividade, qualidade, tempo de resposta).

CAMADA 10 — INTEGRAÇÕES EXTERNAS
	10.1 Provedores WhatsApp
	   * WhatsApp Business API (oficial).
	   * Evolution API.
	   * WPP Connect.
	   * WABA (WhatsApp Business Account).
	10.2 APIs de IA
	   * GPT, Claude, Gemini (APIs pagas).
	   * Ollama, Kimi (open source/local).
   
11 MELHORIAS
Fixar o usuario na tela de conversa deve ser limitado em parametros quantos o usuario pode colocar

12 BANCO DE DADOS
--
-- Table structure for table `whatsapp_atendimento`
--

CREATE TABLE `whatsapp_atendimento` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `contato_id` int DEFAULT NULL,
  `operador_id` int DEFAULT NULL,
  `status` int DEFAULT NULL,
  `origem` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ip_origem` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `protocolo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `assunto` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `prioridade` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_abertura` datetime DEFAULT NULL,
  `data_ultima_interacao` datetime DEFAULT NULL,
  `hora_encerramento` time DEFAULT NULL,
  `data_encerramento` date DEFAULT NULL,
  `usuario_encerramento` int DEFAULT NULL,
  `motivo_encerramento` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `avaliacao_nps` int DEFAULT NULL,
  `comentario_avaliacao` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `timeout_minutos` int DEFAULT NULL,
  `transferencia_id` int DEFAULT NULL,
  `chatbot_ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ia_ativa` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL,
  `data_alteracao` date DEFAULT NULL,
  `hora_alteracao` time DEFAULT NULL,
  `usuario_alteracao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_atendimento_etiqueta`
--

CREATE TABLE `whatsapp_atendimento_etiqueta` (
  `id` int NOT NULL,
  `atendimento_id` int DEFAULT NULL,
  `etiqueta_id` int DEFAULT NULL,
  `data_aplicacao` int DEFAULT NULL,
  `usuario_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_avaliacao`
--

CREATE TABLE `whatsapp_avaliacao` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `atendimento_id` int DEFAULT NULL,
  `pergunta` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `tipo_resposta` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `resposta` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `nota` int DEFAULT NULL,
  `comentario` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `data_resposta` datetime DEFAULT NULL,
  `data_envio` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_campanha`
--

CREATE TABLE `whatsapp_campanha` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `conteudo` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `template_id` int DEFAULT NULL,
  `data_agendamento` datetime DEFAULT NULL,
  `data_envio` datetime DEFAULT NULL,
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `total_envios` int DEFAULT NULL,
  `total_sucesso` int DEFAULT NULL,
  `total_falhas` int DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_chatbot_fluxo`
--

CREATE TABLE `whatsapp_chatbot_fluxo` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `descricao` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `estrutura` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ia_fallback` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ia_config_id` int DEFAULT NULL,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_consentimento_lgpd`
--

CREATE TABLE `whatsapp_consentimento_lgpd` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `pessoa_id` int DEFAULT NULL,
  `canal` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `consentimento_dados` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `consentimento_marketing` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `termo_aceito` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `ip_aceite` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_aceite` datetime DEFAULT NULL,
  `data_revogacao` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_contato`
--

CREATE TABLE `whatsapp_contato` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `pessoa_id` int DEFAULT NULL,
  `numero_whatsapp` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `nome_exibicao` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `foto_perfil` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `is_novo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `origem` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_criacao` datetime DEFAULT NULL,
  `data_atualizacao` datetime DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_contato`
--

INSERT INTO `whatsapp_contato` (`id`, `empresa_id`, `pessoa_id`, `numero_whatsapp`, `nome_exibicao`, `foto_perfil`, `status`, `is_novo`, `origem`, `data_criacao`, `data_atualizacao`, `usuario_inclusao`) VALUES
(1, 1, 1, '5511999999999', 'Joao Silva', NULL, 'ativo', 'N', 'whatsapp', NULL, NULL, NULL),
(2, 1, 2, '5511988888888', 'Maria Souza', NULL, 'ativo', 'S', 'instagram', NULL, NULL, NULL),
(3, 1, NULL, '5511977777777', 'Novo Contato', NULL, 'ativo', 'S', 'facebook', NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_etiqueta`
--

CREATE TABLE `whatsapp_etiqueta` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `cor` varchar(7) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `descricao` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_etiqueta`
--

INSERT INTO `whatsapp_etiqueta` (`id`, `empresa_id`, `nome`, `cor`, `descricao`, `ativo`, `data_inclusao`, `hora_inclusao`) VALUES
(1, 1, 'Urgente', '#FF4444', 'Atendimento prioritario', NULL, NULL, NULL),
(2, 1, 'Aguardando Pagamento', '#FFAA00', 'Paciente com pendencia financeira', NULL, NULL, NULL),
(3, 1, 'Retorno', '#44AA44', 'Paciente em retorno medico', NULL, NULL, NULL),
(4, 1, 'Novo', '#4488FF', 'Novo contato na base', NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_fila_atendimento`
--

CREATE TABLE `whatsapp_fila_atendimento` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `atendimento_id` int DEFAULT NULL,
  `posicao` int DEFAULT NULL,
  `prioridade` int DEFAULT NULL,
  `intencao` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `tempo_espera_segundos` int DEFAULT NULL,
  `data_entrada` datetime DEFAULT NULL,
  `data_saida` datetime DEFAULT NULL,
  `operador_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_gateway_pagamento`
--

CREATE TABLE `whatsapp_gateway_pagamento` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `provedor` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ambiente` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `api_key` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `api_secret` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `public_key` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `webhook_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `webhook_secret` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `taxa_juros_visa` double DEFAULT NULL,
  `taxa_juros_master` double DEFAULT NULL,
  `taxa_juros_amex` double DEFAULT NULL,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_gateway_pagamento`
--

INSERT INTO `whatsapp_gateway_pagamento` (`id`, `empresa_id`, `nome`, `provedor`, `ambiente`, `api_key`, `api_secret`, `public_key`, `webhook_url`, `webhook_secret`, `taxa_juros_visa`, `taxa_juros_master`, `taxa_juros_amex`, `ativo`, `data_inclusao`, `hora_inclusao`, `usuario_inclusao`) VALUES
(1, 1, 'MercadoPago Principal', 'mercadopago', 'production', NULL, NULL, NULL, 'https://api.clinica.com.br/webhook/mp', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(2, 1, 'Stripe Backup', 'stripe', 'sandbox', NULL, NULL, NULL, 'https://api.clinica.com.br/webhook/stripe', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_ia_config`
--

CREATE TABLE `whatsapp_ia_config` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `provedor` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `modelo` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `api_key` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `api_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `temperatura` double DEFAULT NULL,
  `max_tokens` int DEFAULT NULL,
  `contexto_sistema` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `is_local` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_ia_config`
--

INSERT INTO `whatsapp_ia_config` (`id`, `empresa_id`, `nome`, `provedor`, `modelo`, `api_key`, `api_url`, `temperatura`, `max_tokens`, `contexto_sistema`, `ativo`, `is_local`, `data_inclusao`, `hora_inclusao`, `usuario_inclusao`) VALUES
(1, 1, 'Ollama Local', 'ollama', 'llama3.2', NULL, 'http://localhost:11434', NULL, NULL, 'Voce e um assistente virtual de uma clinica medica. Seja gentil e profissional.', NULL, 'S', NULL, NULL, NULL),
(2, 1, 'GPT-4 Backup', 'openai', 'gpt-4', NULL, 'https://api.openai.com/v1', NULL, NULL, 'Assistente virtual de clinica. Ajude com agendamentos e tirar duvidas.', NULL, 'N', NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_mensagem`
--

CREATE TABLE `whatsapp_mensagem` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `atendimento_id` int DEFAULT NULL,
  `remetente_tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `tipo_mensagem` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `conteudo` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `conteudo_criptografado` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `midia_url` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `midia_tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `arquivo_nome` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `arquivo_tamanho` int DEFAULT NULL,
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_envio` datetime DEFAULT NULL,
  `data_leitura` datetime DEFAULT NULL,
  `operador_leitura_id` int DEFAULT NULL,
  `ip_envio` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `whatsapp_msg_id` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `remetente_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_mensagem`
--

INSERT INTO `whatsapp_mensagem` (`id`, `empresa_id`, `atendimento_id`, `remetente_tipo`, `tipo_mensagem`, `conteudo`, `conteudo_criptografado`, `midia_url`, `midia_tipo`, `arquivo_nome`, `arquivo_tamanho`, `status`, `data_envio`, `data_leitura`, `operador_leitura_id`, `ip_envio`, `whatsapp_msg_id`, `remetente_id`) VALUES
(1, 1, 1, 'paciente', 'texto', 'Ola, gostaria de agendar uma consulta', NULL, NULL, NULL, NULL, NULL, 'lida', NULL, NULL, NULL, NULL, NULL, 1),
(2, 1, 1, 'operador', 'texto', 'Claro! Qual especialidade voce precisa?', NULL, NULL, NULL, NULL, NULL, 'lida', NULL, NULL, NULL, NULL, NULL, 1),
(3, 1, 2, 'paciente', 'texto', 'Bom dia, nao consigo acessar meu resultado', NULL, NULL, NULL, NULL, NULL, 'entregue', NULL, NULL, NULL, NULL, NULL, 2);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_pagamento`
--

CREATE TABLE `whatsapp_pagamento` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `atendimento_id` int DEFAULT NULL,
  `gateway_id` int DEFAULT NULL,
  `pessoa_id` int DEFAULT NULL,
  `descricao` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `valor` double DEFAULT NULL,
  `valor_juros` double DEFAULT NULL,
  `valor_total` double DEFAULT NULL,
  `metodo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `bandeira` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `transacao_id` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `pix_qrcode` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `pix_codigo` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `pix_expiracao` datetime DEFAULT NULL,
  `boleto_url` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `comprovante_url` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `token_cartao` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `cobranca_recorrente` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `split_profissional_id` int DEFAULT NULL,
  `split_percentual` double DEFAULT NULL,
  `data_criacao` datetime DEFAULT NULL,
  `data_confirmacao` datetime DEFAULT NULL,
  `data_cancelamento` datetime DEFAULT NULL,
  `motivo_cancelamento` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `tentativas` int DEFAULT NULL,
  `ultima_tentativa` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_parametrizacao`
--

CREATE TABLE `whatsapp_parametrizacao` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome_parametro` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `valor_parametro` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `descricao` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL,
  `data_alteracao` date DEFAULT NULL,
  `hora_alteracao` time DEFAULT NULL,
  `usuario_alteracao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_parametrizacao`
--

INSERT INTO `whatsapp_parametrizacao` (`id`, `empresa_id`, `nome_parametro`, `valor_parametro`, `descricao`, `tipo`, `ativo`, `data_inclusao`, `hora_inclusao`, `usuario_inclusao`, `data_alteracao`, `hora_alteracao`, `usuario_alteracao`) VALUES
(1, 1, 'TIMEOUT_INATIVIDADE_MINUTOS', '30', 'Tempo em minutos para encerrar atendimento por inatividade', 'inteiro', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(2, 1, 'COR_NOVO_CONTATO', '#FF6B35', 'Cor de destaque para novos contatos na interface', 'cor', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 1, 'NOTIFICACAO_SOM', 'S', 'Habilitar sons de alerta no navegador', 'booleano', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4, 1, 'SLA_PRIMEIRA_RESPOSTA_MIN', '5', 'SLA maximo em minutos para primeira resposta', 'inteiro', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 1, 'SLA_RESPOSTA_ENTRE_MIN', '10', 'SLA maximo em minutos entre respostas', 'inteiro', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6, 1, 'PIX_TEMPO_VALIDADE_MIN', '30', 'Tempo de validade do QR Code Pix em minutos', 'inteiro', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 1, 'IA_PROVEDOR_PADRAO', 'ollama', 'Provedor de IA padrao (gpt, claude, gemini, ollama, kimi)', 'texto', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 1, 'CHATBOT_HIBRIDO', 'S', 'Ativar fluxo hibrido (regra + IA fallback)', 'booleano', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(9, 1, 'LGPD_ANONIMIZAR_RELATORIOS', 'S', 'Mascarar dados sensiveis em relatorios', 'booleano', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(10, 1, 'WHATSAPP_PROVEDOR', 'evolution', 'Provedor WhatsApp (oficial, evolution, wppconnect, waba)', 'texto', NULL, NULL, NULL, NULL, NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_regra_automatica`
--

CREATE TABLE `whatsapp_regra_automatica` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `nome` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `gatilho` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `condicao` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL,
  `acao` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `acao_parametros` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_regra_automatica`
--

INSERT INTO `whatsapp_regra_automatica` (`id`, `empresa_id`, `nome`, `gatilho`, `condicao`, `ativo`, `data_inclusao`, `hora_inclusao`, `usuario_inclusao`, `acao`, `acao_parametros`) VALUES
(1, 1, 'Lembrete Inatividade', 'nao_responde', NULL, NULL, NULL, NULL, NULL, 'enviar_mensagem', '{\"template_id\": 1, \"tempo_minutos\": 30}'),
(2, 1, 'Cobranca Pendente', 'pagamento_pendente', NULL, NULL, NULL, NULL, NULL, 'enviar_cobranca', '{\"template_id\": 3}'),
(3, 1, 'Boas-vindas Novo', 'novo_contato', NULL, NULL, NULL, NULL, NULL, 'enviar_mensagem', '{\"template_id\": 1}'),
(4, 1, 'Recuperacao Abandono', 'abandono_agendamento', NULL, NULL, NULL, NULL, NULL, 'retomar_fluxo', '{\"fluxo_id\": 1}');

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_sessao_operador`
--

CREATE TABLE `whatsapp_sessao_operador` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `operador_id` int DEFAULT NULL,
  `socket_id` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ip` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `user_agent` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `atendimento_atual_id` int DEFAULT NULL,
  `data_login` datetime DEFAULT NULL,
  `data_ultima_atividade` datetime DEFAULT NULL,
  `data_logout` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_template`
--

CREATE TABLE `whatsapp_template` (
  `id` int NOT NULL,
  `empresa_id` int DEFAULT NULL,
  `titulo` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `atalho` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `conteudo` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `variaveis` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
  `tipo` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `categoria` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `ativo` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_inclusao` date DEFAULT NULL,
  `hora_inclusao` time DEFAULT NULL,
  `usuario_inclusao` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Dumping data for table `whatsapp_template`
--

INSERT INTO `whatsapp_template` (`id`, `empresa_id`, `titulo`, `atalho`, `conteudo`, `variaveis`, `tipo`, `categoria`, `ativo`, `data_inclusao`, `hora_inclusao`, `usuario_inclusao`) VALUES
(1, 1, 'Boas-vindas', '/ola', 'Ola {nome}! Bem-vindo a nossa clinica. Como posso ajudar?', '[\"nome\"]', 'rapida', NULL, NULL, NULL, NULL, NULL),
(2, 1, 'Confirmacao Consulta', '/conf', 'Ola {nome}, confirmamos sua consulta para {data_consulta} as {hora_consulta} com Dr. {profissional}.', '[\"nome\",\"data_consulta\",\"hora_consulta\",\"profissional\"]', 'agendamento', NULL, NULL, NULL, NULL, NULL),
(3, 1, 'Lembrete Pagamento', '/cob', 'Ola {nome}, identificamos um pagamento pendente no valor de {valor}. Pode regularizar?', '[\"nome\",\"valor\"]', 'cobranca', NULL, NULL, NULL, NULL, NULL);

-- --------------------------------------------------------

--
-- Table structure for table `whatsapp_transferencia`
--

CREATE TABLE `whatsapp_transferencia` (
  `id` int NOT NULL,
  `atendimento_id` int DEFAULT NULL,
  `operador_origem_id` int DEFAULT NULL,
  `operador_destino_id` int DEFAULT NULL,
  `motivo` varchar(150) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `data_transferencia` datetime DEFAULT NULL,
  `usuario_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `whatsapp_atendimento`
--
ALTER TABLE `whatsapp_atendimento`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `protocolo` (`protocolo`),
  ADD KEY `fk_whatsapp_atendimento_1_1` (`empresa_id`);

--
-- Indexes for table `whatsapp_atendimento_etiqueta`
--
ALTER TABLE `whatsapp_atendimento_etiqueta`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_avaliacao`
--
ALTER TABLE `whatsapp_avaliacao`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_campanha`
--
ALTER TABLE `whatsapp_campanha`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_chatbot_fluxo`
--
ALTER TABLE `whatsapp_chatbot_fluxo`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_consentimento_lgpd`
--
ALTER TABLE `whatsapp_consentimento_lgpd`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_contato`
--
ALTER TABLE `whatsapp_contato`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_whatsapp_contato_1_1` (`empresa_id`),
  ADD KEY `fk_whatsapp_contato_2_2` (`pessoa_id`),
  ADD KEY `fk_whatsapp_contato_3_3` (`usuario_inclusao`);

--
-- Indexes for table `whatsapp_etiqueta`
--
ALTER TABLE `whatsapp_etiqueta`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_fila_atendimento`
--
ALTER TABLE `whatsapp_fila_atendimento`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_gateway_pagamento`
--
ALTER TABLE `whatsapp_gateway_pagamento`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_ia_config`
--
ALTER TABLE `whatsapp_ia_config`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_mensagem`
--
ALTER TABLE `whatsapp_mensagem`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_whatsapp_mensagem_1_1` (`empresa_id`);

--
-- Indexes for table `whatsapp_pagamento`
--
ALTER TABLE `whatsapp_pagamento`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_parametrizacao`
--
ALTER TABLE `whatsapp_parametrizacao`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_whatsapp_parametrizacao_1_1` (`empresa_id`),
  ADD KEY `fk_whatsapp_parametrizacao_2_2` (`usuario_inclusao`),
  ADD KEY `fk_whatsapp_parametrizacao_3_3` (`usuario_alteracao`);

--
-- Indexes for table `whatsapp_regra_automatica`
--
ALTER TABLE `whatsapp_regra_automatica`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_sessao_operador`
--
ALTER TABLE `whatsapp_sessao_operador`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_template`
--
ALTER TABLE `whatsapp_template`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `whatsapp_transferencia`
--
ALTER TABLE `whatsapp_transferencia`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `whatsapp_atendimento`
--
ALTER TABLE `whatsapp_atendimento`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_atendimento_etiqueta`
--
ALTER TABLE `whatsapp_atendimento_etiqueta`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_avaliacao`
--
ALTER TABLE `whatsapp_avaliacao`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_campanha`
--
ALTER TABLE `whatsapp_campanha`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_chatbot_fluxo`
--
ALTER TABLE `whatsapp_chatbot_fluxo`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_consentimento_lgpd`
--
ALTER TABLE `whatsapp_consentimento_lgpd`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_contato`
--
ALTER TABLE `whatsapp_contato`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT for table `whatsapp_etiqueta`
--
ALTER TABLE `whatsapp_etiqueta`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT for table `whatsapp_fila_atendimento`
--
ALTER TABLE `whatsapp_fila_atendimento`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_gateway_pagamento`
--
ALTER TABLE `whatsapp_gateway_pagamento`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- AUTO_INCREMENT for table `whatsapp_ia_config`
--
ALTER TABLE `whatsapp_ia_config`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- AUTO_INCREMENT for table `whatsapp_mensagem`
--
ALTER TABLE `whatsapp_mensagem`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT for table `whatsapp_pagamento`
--
ALTER TABLE `whatsapp_pagamento`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_parametrizacao`
--
ALTER TABLE `whatsapp_parametrizacao`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;

--
-- AUTO_INCREMENT for table `whatsapp_regra_automatica`
--
ALTER TABLE `whatsapp_regra_automatica`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT for table `whatsapp_sessao_operador`
--
ALTER TABLE `whatsapp_sessao_operador`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `whatsapp_template`
--
ALTER TABLE `whatsapp_template`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT for table `whatsapp_transferencia`
--
ALTER TABLE `whatsapp_transferencia`
  MODIFY `id` int NOT NULL AUTO_INCREMENT;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `whatsapp_atendimento`
--
ALTER TABLE `whatsapp_atendimento`
  ADD CONSTRAINT `fk_whatsapp_atendimento_empresa_id` FOREIGN KEY (`empresa_id`) REFERENCES `system_unit` (`id`);

--
-- Constraints for table `whatsapp_contato`
--
ALTER TABLE `whatsapp_contato`
  ADD CONSTRAINT `fk_whatsapp_contato_empresa_id` FOREIGN KEY (`empresa_id`) REFERENCES `system_unit` (`id`),
  ADD CONSTRAINT `fk_whatsapp_contato_pessoa_id` FOREIGN KEY (`pessoa_id`) REFERENCES `pessoa` (`id`),
  ADD CONSTRAINT `fk_whatsapp_contato_usuario_inclusao` FOREIGN KEY (`usuario_inclusao`) REFERENCES `system_users` (`id`);

--
-- Constraints for table `whatsapp_mensagem`
--
ALTER TABLE `whatsapp_mensagem`
  ADD CONSTRAINT `fk_whatsapp_mensagem_empresa_id` FOREIGN KEY (`empresa_id`) REFERENCES `system_unit` (`id`);

--
-- Constraints for table `whatsapp_parametrizacao`
--
ALTER TABLE `whatsapp_parametrizacao`
  ADD CONSTRAINT `fk_whatsapp_parametrizacao_empresa_id` FOREIGN KEY (`empresa_id`) REFERENCES `system_unit` (`id`),
  ADD CONSTRAINT `fk_whatsapp_parametrizacao_usuario_alteracao` FOREIGN KEY (`usuario_alteracao`) REFERENCES `system_users` (`id`),
  ADD CONSTRAINT `fk_whatsapp_parametrizacao_usuario_inclusao` FOREIGN KEY (`usuario_inclusao`) REFERENCES `system_users` (`id`);
COMMIT;

O que costuma dar problema no Adianti/MadBuilder
1. Webhook
Nunca processe tudo direto no endpoint.

Faça:
Webhook recebe -> grava fila -> worker processa

2. Envio síncrono
Nunca envie WhatsApp dentro:
onSave pesado
transaction crítica
geração financeira
Use fila.

3. Multiempresa
Separe instância por empresa.
Nunca compartilhe sessão WhatsApp entre filiais/clientes.
//-------------------------------------------------------------------
-- ============================================
-- PASSO 1: Cadastra ou atualiza o programa
-- ============================================
INSERT INTO system_program (name, controller)
VALUES ('GestorWebZap - Chat WhatsApp', 'WhatsAppChatView')
ON DUPLICATE KEY UPDATE 
    name = VALUES(name);

-- ============================================
-- PASSO 2: Pega o ID do programa
-- ============================================
SET @prog_id = (SELECT id FROM system_program WHERE controller = 'WhatsAppChatView' LIMIT 1);

-- ============================================
-- PASSO 3: Vincula ao grupo ADMIN (ID 1)
-- ============================================
INSERT IGNORE INTO system_group_program (system_program_id, system_group_id)
VALUES (@prog_id, 1);

-- ============================================
-- PASSO 4: Vincula ao grupo USERS (ID 2) se existir
-- ============================================
INSERT IGNORE INTO system_group_program (system_program_id, system_group_id)
SELECT @prog_id, 2 
FROM system_group 
WHERE id = 2;

-- ============================================
-- PASSO 5: Cadastra também a tela de configuração
-- ============================================
INSERT INTO system_program (name, controller)
VALUES ('GestorWebZap - Configuração', 'WhatsAppConfigView')
ON DUPLICATE KEY UPDATE 
    name = VALUES(name);

SET @config_id = (SELECT id FROM system_program WHERE controller = 'WhatsAppConfigView' LIMIT 1);

INSERT IGNORE INTO system_group_program (system_program_id, system_group_id)
VALUES (@config_id, 1);

INSERT IGNORE INTO system_group_program (system_program_id, system_group_id)
SELECT @config_id, 2 
FROM system_group 
WHERE id = 2;

-- ============================================
-- VERIFICAÇÃO: Confirma se deu certo
-- ============================================
SELECT 
    sp.id AS programa_id,
    sp.name AS programa_nome,
    sp.controller,
    sg.id AS grupo_id,
    sg.name AS grupo_nome
FROM system_program sp
LEFT JOIN system_group_program sgp ON sgp.system_program_id = sp.id
LEFT JOIN system_group sg ON sg.id = sgp.system_group_id
WHERE sp.controller IN ('WhatsAppChatView', 'WhatsAppConfigView');
//---------------------------------
PREVISÃO DE TEMPO DE ESPERA DINÂMICO
Exibir atualizações em tempo real sobre a posição na fila e uma estimativa precisa de quanto falta para ser atendido, reduzindo a ansiedade do usuário.

RECONHECIMENTO DE DOCUMENTOS POR IA
Ferramenta em que o paciente envia a foto da receita ou pedido médico e a IA extrai automaticamente os dados para agilizar o cadastro no sistema da clínica.

GESTÃO DE CANCELAMENTOS POR IMPREVISTOS
Botão de atalho rápido para o paciente informar imprevistos no trânsito ou atrasos, notificando automaticamente o médico e reajustando a agenda se necessário.

EMISSÃO DE CARTEIRINHA E COMPROVANTES DIGITAIS
Facilidade para o paciente baixar o comprovante de atendimento, declaração de comparecimento para trabalho/escola ou carteirinha virtual da clínica com um único clique.

//------------------------------------

transcrever audio automaticamente

para criar paciente precisa solicitar alguns dados ao paciente como
xxxx
xx

relatorio de atendimento realizado no dia


DISTRIBUIÇÃO INTELIGENTE (ROUND ROBIN) 
Sistema de filas que direciona os chats automaticamente de forma equilibrada entre os atendentes disponíveis ou conforme a especialidade médica.


Número único compartilhado: Utilização da API oficial do WhatsApp Business para permitir que vários recepcionistas atendam simultaneamente pelo mesmo número sem conflitos ou duplicidade de respostas.

Métricas de atendimento: Painéis gerenciais com relatórios de tempo médio de espera, tempo de atendimento (TMA), volume de mensagens por período e status dos operadores (disponível, em pausa, offline).

Supervisão e auditoria: Ferramentas para que o gestor possa monitorar conversas em tempo real, assumir chats complexos ou inserir notas internas visíveis apenas para a equipe.


TRANSBORDO AUTOMATIZADO

Definição de regras de tempo: O gestor configura um limite máximo de tempo de inatividade (por exemplo, 3 minutos) em que um chat pode ficar sem resposta na fila de um recepcionista.

Monitoramento em segundo plano: O sistema rastreia continuamente o tempo decorrido desde a última mensagem enviada pelo paciente caso o atendente não interaja.

Gatilho de alerta: Se o cronômetro esgotar, o sistema emite um alerta visual ou sonoro para o atendente responsável.

Redirecionamento automático: Caso o alerta seja ignorado, a conversa é automaticamente removida da tela daquele operador e devolvida para a fila geral ou transferida para um supervisor ou recepcionista reserva, garantindo que o paciente não fique sem resposta


PREVENÇÃO DE DUPLICIDADE 
O sistema sinaliza visualmente quando outro atendente já está digitando ou conversando em um chat, evitando que dois profissionais respondam à mesma mensagem.


MÉTRICAS DE ATENDIMENTO

Coleta automática de dados: A ferramenta registra de forma contínua carimbos de tempo (timestamps) de cada interação: hora de chegada da mensagem, momento de distribuição, primeira resposta e encerramento do chat.

Cálculo de indicadores-chave (KPIs): O sistema processa os dados para gerar métricas como o Tempo Médio de Espera (TME), o Tempo Médio de Atendimento (TMA) por operador e o volume total de chamados em horários de pico.

Gestão de status dos operadores: Cada recepcionista atualiza seu estado no painel (Disponível, Em Atendimento, Em Pausa ou Offline), permitindo que o sistema filtre quem está apto a receber novos fluxos.

Exibição em dashboards: Os gestores acessam painéis visuais em tempo real para identificar gargalos operacionais e ajustar a escala da equipe conforme a demanda.


SUPERVISÃO E AUDITORIA

Monitoramento ativo: O gestor acessa uma aba de supervisão onde visualiza todas as conversas em andamento na clínica, divididas por atendente ou setor.

Entrada e assunção de chats (Takeover): Caso um atendimento exija intervenção superior (como uma reclamação grave ou caso complexo), o gestor pode assumir a conversa diretamente ou entrar como participante oculto.

Notas internas colaborativas: Os atendentes e gestores utilizam campos de texto restritos à equipe (invisíveis para o paciente) para registrar observações importantes sobre o histórico ou pendências daquele contato.

Histórico de auditoria: Todas as ações, mudanças de status, transferências e visualizações ficam registradas em logs para fins de controle de qualidade e conformidade interna.


CENTRAL DE DOCUMENTOS E EXAMES
Canal seguro para que o paciente envie fotos de exames ou carteirinha de convênio, com armazenamento automático e mascaramento de dados confidenciais.


GESTÃO DE FALTAS E LISTA DE ESPERA INTELIGENTE
Sistema que avisa automaticamente pacientes da lista de espera quando ocorre um cancelamento de última hora, preenchendo o horário vago na agenda.


ASSISTENTE DE VOZ E ÁUDIO INTELIGENTE
Permitir que o paciente envie e receba mensagens de áudio transcritas automaticamente por inteligência artificial, oferecendo uma experiência mais acolhedora e acessível para quem tem dificuldade de digitação.


QUIZ E QUESTIONÁRIOS INTERATIVOS DE PRÉ-TRIAGEM
Enviar formulários dinâmicos com perguntas de múltipla escolha sobre sintomas ou histórico médico recente enquanto o paciente aguarda na fila, otimizando o tempo do profissional de saúde.


GAMIFICAÇÃO E MICROCONTEÚDOS EDUCATIVOS
Disponibilizar dicas rápidas de saúde, curiosidades médicas ou informativos breves em formato de carrossel ou cards interativos para entreter o paciente durante a espera.


RESPOSTAS CONTEXTUAIS COM EMPATIA ARTIFICIAL
Programar o bot para utilizar linguagem acolhedora, com uso adequado de emojis e termos empáticos, transmitindo cuidado humanizado mesmo nos momentos de automação.


PORTAL DE AUTOATENDIMENTO E FAQ INTERATIVO
Um menu rápido onde o paciente pode consultar orientações de preparo para exames (como jejum ou suspensão de remédios) e dúvidas frequentes por meio de botões de navegação intuitiva.


HISTÓRICO UNIFICADO MULTICANAL
Capacidade da ferramenta de reconhecer o paciente caso ele interaja por diferentes canais (WhatsApp, Instagram Direct ou chat do site), mantendo a mesma linha do tempo de conversa.


GEOLOCALIZAÇÃO E ROTAS INTEGRADAS
Envio automático de cartões interativos com o mapa da clínica, links diretos para Waze/Google Maps e orientações sobre estacionamento ou pontos de referência próximos.

Com base nas diretrizes oficiais e nas melhores práticas do ecossistema de mensageria do WhatsApp para prevenção de bloqueios (anti-ban), elaborei a arquitetura e a lógica de um módulo de proteção que pode ser acoplado diretamente ao GestorWebZap.Como o sistema lida com envios em massa, o módulo antibanimento deve atuar diretamente sobre o fluxo de disparos, aplicando pacing humanizado (delays aleatórios), variação de texto (Spintax), controle de limite volumétrico por hora/dia e gestão automática de opt-out (palavra-chave STOP).  Abaixo está a proposta de implementação estruturada para o ecossistema PHP 7.4 / MadBuilder do GestorWebZap.1. Análise e Estratégia do Módulo AntibanimentoProblema Identificado: Disparos em massa lineares, instantâneos e com mensagens idênticas são identificados pelos algoritmos de moderação como comportamento de bot/spam, resultando no banimento imediato do número.Causa Provável: Ausência de variação de texto, envio sem pausas (intervalos fixos ou nulos) e falta de controle de taxa por lote.  Estratégia de Mitigação:Delay Humano Aleatório: Introduzir pausas randômicas entre o envio de cada mensagem (ex: entre 8 e 22 segundos).Pausas de Descanso: A cada lote de 50 mensagens, forçar uma pausa longa (ex: 5 a 10 minutos) para simular o comportamento de descanso humano.Spintax Dinâmico: Processar e variar as saudações e termos do texto para que nenhum disparo seja 100% idêntico.Filtro de Opt-Out Automático: Monitorar o recebimento da palavra-chave "STOP" ou "SAIR" para bloquear automaticamente o contato na base de dados, evitando denúncias de spam (Report).  

Aprimoramentos Complementares para Blindagem Antibanimento

O sistema básico com Spintax, delays e controle de limite horário já reduz drasticamente o risco de bloqueios. No entanto, para garantir estabilidade máxima em um ambiente de produção no GestorWebZap, os seguintes pontos críticos devem ser considerados:

Aquecimento de Chip (Warm-up): Números novos ou recém-vinculados não podem iniciar disparando 60 mensagens por hora. O sistema precisa de uma tabela de controle de "idade da instância" ou dias de uso, iniciando com limites reduzidos (ex: 5 mensagens no primeiro dia) e escalando gradativamente.

Validação Prévia de Números (Opt-In e Existência no WhatsApp): Enviar mensagens para números que não possuem WhatsApp ativo gera uma alta taxa de falhas (bounce rate), métrica que os servidores de moderação utilizam para banir instantaneamente instâncias comerciais.

Gerenciamento de Fila Assíncrona (Background Jobs): O uso de comandos como sleep() dentro de requisições web síncronas pode causar timeout no servidor HTTP/PHP. O ideal é que o loop de disparos com delays seja processado em filas de background (trabalhando com crontabs ou workers dedicados no MadBuilder).

Taxa de Resposta e Engajamento (Interação Humana): Algoritmos de detecção avaliam a proporção de mensagens enviadas versus respondidas. Se uma instância apenas envia e nunca recebe respostas (ou se os usuários apenas bloqueiam/denunciam), o banimento ocorre por reputação. O sistema deve incentivar ou pontuar campanhas que geram engajamento real.

Rotação de Instâncias (Multi-Device): Para volumes muito altos de disparos, o GestorWebZap deve implementar a distribuição de carga entre múltiplos números conectados, impedindo que toda a volumetria recaia sobre uma única linha telefônica.

PROCESSO DE CONFIRMAÇÃO VIA ZAP DO AGENDAMENTO
*/