# Modulo Pacientes

Status de implementacao confrontado com banco de dados, services e frontend
AgenciaPsi v5 Vue 3 + Supabase Atualizado: 2026-03-30
5
Tabelas core
4
Tabelas aux
2
Views
3
Services
10
Componentes
8+8
Rotas (T+C)
50+
Colunas patients
5
Triggers
Implementado (DB + frontend)
Parcial / migration pendente
Planejado / nao implementado
1
Cadastro & Dados Pessoais
Identidade & dados pessoais
pronto
Formulario completo com 6 secoes em accordion. Nome completo, nome social, pronomes, data nascimento, genero, estado civil, CPF (validacao checksum), RG, naturalidade, etnia, profissao, escolaridade. Avatar com upload ao Storage.
nome_completonome_socialpronomes data_nascimentogeneroestado_civil cpfrgetnia profissaoescolaridadeavatar_url
PatientsCadastroPage.vue → secao "Identidade"
Contato & preferencias
pronto
Telefone principal e alternativo, email principal e alternativo. Canal preferido de contato (WhatsApp, Telefone, E-mail, SMS). Horario preferido para contato com janela inicio/fim. Idioma.
telefonetelefone_alternativoemail_principal email_alternativocanal_preferido horario_contato_iniciohorario_contato_fimidioma
DB: CHECK canal_preferido IN (whatsapp, email, sms, telefone)
Endereco com auto-preenchimento
pronto
CEP com consulta ViaCEP automatica (onBlur). Preenche logradouro, bairro, cidade, estado. Complemento e numero manuais. Pais default Brasil.
cependereconumero bairrocomplementocidade estadopais
PatientsCadastroPage.vue → secao "Endereco" + ViaCEP API
Responsavel legal
pronto
Para menores ou cobranca em terceiro. Nome, CPF (validacao), telefone, observacao. Flag de cobranca no responsavel.
nome_responsavelcpf_responsavel telefone_responsavelobservacao_responsavel cobranca_no_responsavel
PatientsCadastroPage.vue → secao "Responsavel"
Cadastro rapido & link externo
pronto
3 modos de criacao: Cadastro rapido (nome, email, telefone), Cadastro completo (formulario full), Link externo (paciente preenche). Convite via token com validade.
ComponentCadastroRapido.vue + PatientCreatePopover.vue + PatientsExternalLinkPage.vue
Dados socioeconomicos
pronto
Religiao, faixa de renda (ate_1sm, 1_3sm, 3_6sm, 6_10sm, acima_10sm, nao_informado), origem (indicacao, agendador, redes_sociais, encaminhamento).
religiaofaixa_rendaorigem onde_nos_conheceuencaminhado_por
DB: CHECK constraints com valores permitidos
2
Listagem, Busca & Organizacao
Lista de pacientes com filtros
pronto
DataTable com busca por nome/email/telefone (debounce 250ms). Filtros: status, grupo, tag, data de criacao. Colunas dinamicas com visibilidade configuravel. Vista tabela (desktop) e cards (mobile). Vista agrupada por grupo.
searchstatusgroupId tagIdcreatedFromcreatedTo
PatientsListPage.vue (1457 linhas)
Grupos de pacientes
pronto
CRUD completo de grupos com cor. Associacao paciente ↔ grupo via junction table. Contagem de pacientes por grupo. Pagina de gestao dedicada.
patient_groupspatient_group_patient
GruposPacientesPage.vue + GruposPacientes.service.js
Tags de pacientes
pronto
CRUD de tags com cor e nome. Multi-select no cadastro. Autocomplete. Contagem de pacientes por tag. Tags padrao do sistema.
patient_tagspatient_patient_tag
TagsPage.vue + patientTags.service.js
Medicos & referencias
pronto
Cadastro de medicos que encaminham pacientes. CRM, especialidade (13 opcoes), contatos. Contagem de pacientes por medico. Soft delete. Busca de pacientes referidos.
medicosnomecrm especialidadeencaminhado_por
MedicosPage.vue + Medicos.service.js
Lista de espera
placeholder
Tab "Lista de espera" existe na PatientsListPage mas e um placeholder. Comentario no codigo: "Quando voce quiser, podemos ligar isso a uma tabela (ex: patient_waitlist)". Nao tem tabela no banco.
PatientsListPage.vue → tab placeholder
Cadastros recebidos (intake)
pronto
Formularios de cadastro externo submetidos por pacientes prospectivos. Status: new, converted, rejected. Pagina de gestao dedicada com badge no menu.
patient_intake_requestsstatusconverted_patient_id
CadastrosRecebidosPage.vue
3
Prontuario do Paciente
Perfil completo (tab 1)
pronto
Sidebar com avatar, badges (status, convenio, scope), tags e metricas (sessoes, comparecimento %, LTV, dias sem sessao). Corpo com 6 sub-secoes em accordion: dados pessoais, contato, endereco, dados adicionais, responsavel, anotacoes.
PatientProntuario.vue → tab "Perfil" (1167 linhas total)
Prontuario clinico (tab 2)
estrutura
Tab existe no componente mas conteudo clinico (notas de sessao, evolucao, plano terapeutico) ainda precisa ser detalhado. Placeholder no modal.
Agenda do paciente (tab 3)
estrutura
Tab de sessoes/agenda existe. Lista de agenda_eventos carregada. Falta validar se a UI mostra corretamente os agendamentos futuros e historico completo.
Financeiro do paciente (tab 4)
estrutura
Tab existe. patient_discounts funciona (desconto percentual ou valor fixo, periodo de validade). Detalhes de cobrancas e pagamentos por paciente a validar.
patient_discountsdiscount_pctdiscount_flat
Documentos do paciente (tab 5)
pronto
DocumentsListPage embarcada no prontuario com prop embedded. Upload, preview, download, geracao de PDF, compartilhamento. Integrado com modulo de documentos completo.
DocumentsListPage.vue (embedded)
Flag de risco clinico
pronto
Banner vermelho no prontuario quando risco_elevado = true. Obriga risco_nota e risco_sinalizado_por (CHECK constraint). Trigger registra na patient_timeline. View v_patients_risco para dashboard.
risco_elevadorisco_nota risco_sinalizado_emrisco_sinalizado_por
DB: trg_patient_risco_timeline + v_patients_risco
4
Rede de Suporte & Contatos
Contatos de suporte (legado)
pronto
patient_support_contacts: nome, relacao, tipo (emergencia, familiar, profissional_saude, amigo, outro), telefone, email, flag is_primario. CRUD no cadastro do paciente.
nomerelacaotipo telefoneemailis_primario
PatientsCadastroPage.vue → secao "Rede de Suporte"
Contatos estruturados (novo)
db pronto
patient_contacts: tabela mais completa que substitui campos legado (nome_parente, telefone_parente). Inclui CPF, especialidade, registro profissional (CRM/CRP). Unique constraint para contato primario. Migrada com dados legados. Frontend ainda usa patient_support_contacts.
nometipocpf especialidaderegistro_profissional is_primarioativo
DB: patient_contacts (migration_patients.sql) — frontend pendente
5
Status, Timeline & Engajamento
Gestao de status
pronto
6 status: Ativo, Em espera, Inativo, Alta, Encaminhado, Arquivado. Campos de saida: motivo_saida, data_saida, encaminhado_para. Historico automatico via trigger.
statusmotivo_saidadata_saida encaminhado_para
DB: patient_status_history (trigger automatico)
Historico de status
db pronto
Tabela imutavel patient_status_history. Registra automaticamente: status anterior, novo, motivo, encaminhamento, data saida, quem alterou. Trigger trg_patient_status_history.
status_anteriorstatus_novomotivo alterado_poralterado_em
Timeline do paciente
db pronto
patient_timeline: feed cronologico com 18 tipos de evento. Auto-populada por triggers (status, risco, documentos, assinaturas). Cores por tipo. Referencia polimorfica para links.
evento_tipotitulodescricao icone_corlink_ref_tipolink_ref_id
DB: 18 event types + 3 triggers auto-insert
View de engajamento
db pronto
v_patient_engajamento: score 0-100 calculado em real-time. Metricas: total sessoes, sessoes ultimo mes, taxa comparecimento, LTV, ticket medio, cobrancas vencidas/pagas, taxa pagamentos em dia, duracao tratamento. Formula: 50% frequencia + 30% financeiro + 20% recencia.
DB: VIEW v_patient_engajamento (security_invoker = on)
View de pacientes em risco
db pronto
v_patients_risco: lista pacientes que precisam de atencao. Criterios: risco_elevado, sem sessao ha 30+ dias, comparecimento <60%, cobranca vencida. Alertas categorizados.
DB: VIEW v_patients_risco
UI de timeline no prontuario
pendente
A tabela patient_timeline e as views estao prontas no banco. Falta o componente frontend para exibir a timeline visualmente no prontuario do paciente (feed cronologico com icones e cores).
6
Financeiro & Convenios
Convenio / plano de saude
pronto
Associacao paciente → insurance_plans. Campo convenio (texto livre) + convenio_id (FK). Cadastro rapido de convenio via dialog. Exibido no prontuario como badge.
convenioconvenio_idinsurance_plans
CadastroRapidoConvenio.vue + PatientsCadastroPage.vue
Metodo de pagamento preferido
pronto
PIX, cartao, dinheiro, deposito, convenio. CHECK constraint no banco. Selecionavel no cadastro.
metodo_pagamento_preferido
DB: CHECK (pix, cartao, dinheiro, deposito, convenio)
Descontos por paciente
pronto
patient_discounts: desconto percentual ou valor fixo, motivo, periodo de validade (active_from, active_to). Gerenciavel pela listagem de pacientes.
discount_pctdiscount_flatreason active_fromactive_to
!
Pendencias & Itens a Implementar
Prontuario clinico (tab 2) — notas de sessao e evolucao
estrutura
Tab existe no modal mas sem conteudo clinico detalhado. Precisa: notas de sessao vinculadas a agenda_eventos, evolucao terapeutica, plano de tratamento, hipoteses diagnosticas.
UI da timeline no prontuario
db pronto
Tabela patient_timeline com 18 event types e triggers automaticos existe. Falta componente frontend para exibir feed cronologico no prontuario (icones, cores, links para entidades referenciadas).
Dashboard de engajamento e risco
db pronto
Views v_patient_engajamento e v_patients_risco existem no banco. Score de engajamento (0-100) calculado em real-time. Falta UI para exibir dashboard de risco e engajamento geral dos pacientes.
Migrar frontend para patient_contacts
db pronto
Tabela patient_contacts (mais completa: CPF, especialidade, registro profissional) existe e foi populada com dados legados. Frontend ainda usa patient_support_contacts (mais simples). Migrar UI para usar a nova tabela.
Lista de espera (patient_waitlist)
nao existe
Tab placeholder na PatientsListPage. Nao existe tabela no banco. Precisa: criacao da tabela, service, UI com gestao de fila (posicao, prioridade, data de entrada, notificacao quando vaga abrir).
Botao "+ Sessao" no prontuario
placeholder
Botao existe no header do prontuario mas sem click handler. Precisa abrir dialog de agendamento rapido pre-preenchido com o paciente atual.
Tabs Agenda e Financeiro no prontuario
estrutura
Tabs existem no modal. Dados de agenda_eventos e patient_discounts carregam. Falta validar se a UI mostra corretamente: agendamentos futuros, historico completo, cobrancas, pagamentos, recibos.
Migrations nao aplicadas
verificar
Verificar se as migrations estao aplicadas no banco local: 20260328000002 (new columns), 20260328000003 (drop constraints), 20260328000004 (support_contacts), migration_patients.sql (timeline, contacts, views, risk). Algumas dependem de tabelas que podem nao existir ainda (insurance_plans, etc).
Multi-tenant: Todas as queries filtram por owner_id (terapeuta individual) ou tenant_id (clinica). RLS no banco garante isolamento. Feature flags (patients.view, patients.create, patients.edit, patients.delete) controlam acesso por plano. Rotas admin usam meta tenantFeature: 'patients'.
Escopo dual: patient_scope = 'clinic' (paciente da clinica, sem therapist_member_id) ou 'therapist' (paciente particular, com therapist_member_id obrigatorio). CHECK constraint garante consistencia.