| Migration | Tabela / Objeto | O que faz | Campos principais |
|---|---|---|---|
| 005_create_documents_tables.sql | documents | Arquivo vinculado a paciente. Path no Supabase Storage, tipo/categoria, visibilidade, tags, soft delete com retencao LGPD. Tabela central do modulo. O campo storage_bucket indica qual bucket do Storage contem o arquivo (documents ou generated-docs), permitindo que PDFs gerados aparecam na mesma listagem. |
id
patient_id
tenant_id
owner_id
bucket_path
storage_bucket
nome_original
mime_type
tamanho_bytes
tipo_documento
categoria
descricao
tags[]
visibilidade
compartilhado_portal
compartilhado_supervisor
agenda_evento_id
session_note_id
enviado_pelo_paciente
status_revisao
revisado_por
revisado_em
uploaded_by
uploaded_at
deleted_at
deleted_by
retencao_ate
|
| document_access_logs | Log imutavel de quem visualizou ou baixou cada arquivo. Conformidade CFP e LGPD. Sem UPDATE/DELETE — somente INSERT e SELECT. |
id
documento_id
acao
user_id
ip
user_agent
acessado_em
|
|
| document_signatures | Assinaturas eletronicas. Cada signatario (paciente, responsavel, terapeuta) tem seu registro com IP, timestamp e hash do documento. |
id
documento_id
signatario_tipo
signatario_id
ordem
status
ip
user_agent
assinado_em
hash_documento
|
|
| document_share_links | Links temporarios assinados para compartilhar documento com profissional externo sem conta no sistema. Prazo e limite de usos. |
id
documento_id
token
expira_em
usos_max
usos
criado_por
criado_em
|
|
| 006_create_document_templates.sql | document_templates | Templates de documentos (declaracao de comparecimento, atestado, recibo etc.). Corpo HTML com variaveis. Templates globais do sistema + personalizados por tenant com logo/cabecalho. |
id
tenant_id
nome_template
tipo
corpo_html
variaveis[]
is_global
owner_id
logo_url
cabecalho_html
rodape_html
ativo
|
| document_generated | Cada PDF gerado a partir de um template. Guarda os dados usados no preenchimento e o path do PDF resultante no Storage. |
id
template_id
patient_id
tenant_id
dados_preenchidos
pdf_path
gerado_em
gerado_por
|
| Bucket | Uso | Path pattern |
|---|---|---|
| documents | Arquivos enviados por terapeuta ou paciente (PDF, imagem, DOCX, etc.) | {tenant_id}/{patient_id}/{timestamp}-{filename} |
| generated-docs | PDFs gerados pelo sistema a partir de templates. Referenciado tanto por document_generated (snapshot) quanto por documents (listagem do paciente) via campo storage_bucket. | {tenant_id}/{patient_id}/{template_nome_sanitizado}_{timestamp}.pdf |
| Arquivo | O que faz |
|---|---|
| Documents.service.js | CRUD completo de documentos: upload ao Storage + insert no banco, listagem por paciente com filtros (tipo, categoria, tags), soft delete com retencao, restauracao, download com URL assinada |
| DocumentTemplates.service.js | CRUD de templates: criar/editar templates (globais e por tenant), listar variaveis disponiveis, duplicar template, ativar/desativar |
| DocumentGenerate.service.js | Gerar PDF a partir de template: preencher variaveis com dados do paciente/sessao, renderizar HTML para PDF via pdf.service.js (jsPDF + html2canvas-pro), salvar no bucket generated-docs, registrar em document_generated E automaticamente na tabela documents (para aparecer na listagem do paciente). Nomes de arquivo sanitizados (sem acentos) para compatibilidade com Supabase Storage. |
| pdf.service.js | Servico de geracao de PDF client-side usando jsPDF + html2canvas-pro. Substitui pdfmake que apresenta incompatibilidade com Vite (UMD vs ESM — getBlob/getBuffer travam silenciosamente). Recebe HTML completo, renderiza em canvas oculto (scale 1.5, JPEG 85%), gera PDF A4 com paginacao automatica. Retorna Blob para upload/download. |
| DocumentSignatures.service.js | Criar solicitacao de assinatura, registrar assinatura (IP, hash, timestamp, user_agent), consultar status de cada signatario, verificar integridade via hash |
| DocumentShareLinks.service.js | Gerar link temporario com token, validar token no acesso, registrar uso, expirar link |
| DocumentAuditLog.service.js | Registrar log de acesso (visualizacao/download) e consultar historico de acessos por documento |
| Arquivo | O que faz |
|---|---|
| useDocuments.js | State reativo: lista de documentos do paciente, loading, filtros ativos (tipo, categoria, tags), operacoes CRUD, refresh automatico apos upload/delete |
| useDocumentTemplates.js | State reativo: lista de templates disponiveis (globais + tenant), preview com dados ficticios, variaveis extraidas do corpo HTML |
| useDocumentGenerate.js | Logica de geracao: carregar dados do paciente/sessao, mapear variaveis, chamar servico de geracao, retornar URL do PDF |
| Arquivo | Tipo | O que faz |
|---|---|---|
| DocumentsListPage.vue | Pagina | Pagina principal — lista todos os documentos do paciente com DataTable, filtros (tipo, categoria, tags), botoes de upload, preview, download. Hero header sticky com stats rapidos. |
| DocumentUploadDialog.vue | Dialog | Upload de arquivo — drag & drop ou seletor, campos: tipo do documento, categoria, descricao, tags, vinculo com sessao (opcional), visibilidade. Validacao de tamanho e tipo de arquivo. |
| DocumentPreviewDialog.vue | Dialog | Preview inline — renderiza PDF/imagem no dialog. Botoes: download, compartilhar, solicitar assinatura, excluir. Exibe metadados (tipo, tags, quem enviou, data). |
| DocumentTemplatesPage.vue | Pagina | Gestao de templates — lista templates disponiveis (globais + do tenant), criar novo, editar, duplicar, ativar/desativar. Cards com preview do template. |
| DocumentTemplateEditor.vue | Componente | Editor de template — edicao do corpo HTML (editor rich text), insercao de variaveis via dropdown, preview ao vivo com dados ficticios, config de cabecalho/rodape/logo. |
| DocumentGenerateDialog.vue | Dialog | Gerar documento — selecionar template, campos preenchidos automaticamente com dados do paciente/sessao, edicao manual se necessario, preview final via iframe sandbox, botao "Salvar documento" (salva online, sem download automatico). Botao "So baixar" gera PDF local sem salvar no banco. |
| DocumentSignatureDialog.vue | Dialog | Solicitar assinatura — adicionar signatarios (paciente, responsavel, terapeuta), definir ordem, enviar link por email/whatsapp, acompanhar status de cada signatario. |
| DocumentShareDialog.vue | Dialog | Compartilhar — gerar link temporario com prazo (24h, 48h, 7d) e limite de usos, copiar link, enviar por email. Exibe links ja criados com status. |
| components/DocumentCard.vue | Componente | Card reutilizavel de documento — thumbnail (icone por tipo ou preview de imagem), nome, tipo, data, tags, menu de acoes (3 dots). |
| components/DocumentTagsInput.vue | Componente | Input de tags livres — chips editaveis com autocomplete baseado em tags ja usadas pelo terapeuta. Criacao de novas tags inline. |
| Arquivo existente | Alteracao |
|---|---|
| src/features/patients/prontuario/PatientProntuario.vue | Adicionar aba/secao "Documentos" que renderiza DocumentsListPage filtrada pelo patient_id atual. Botao rapido de upload direto do prontuario. |
| Rota | Pagina | Descricao |
|---|---|---|
| /therapist/documents | DocumentsListPage.vue | Lista geral de documentos (todos os pacientes do terapeuta) |
| /therapist/documents/templates | DocumentTemplatesPage.vue | Gestao de templates do terapeuta |
| /therapist/patients/:id/documents | DocumentsListPage.vue | Documentos de um paciente especifico (via props) |
| /clinic/documents/templates | DocumentTemplatesPage.vue | Templates da clinica (admin configura templates compartilhados) |
| Arquivo | Item adicionado | Onde no menu |
|---|---|---|
| therapist.menu.js | "Documentos" — icon: pi-file, to: /therapist/documents | Grupo "Pacientes", abaixo de "Tags" |
| therapist.menu.js | "Templates" — icon: pi-file-edit, to: /therapist/documents/templates | Sub-item de Documentos |
| clinic.menu.js | "Templates de Documentos" — icon: pi-file-edit, to: /clinic/documents/templates | Grupo "Configuracoes" |
| Feature key | Descricao | Planos |
|---|---|---|
| documents.upload | Upload de arquivos a pacientes — funcionalidade base | Free + Pro |
| documents.templates | Templates de documentos (declaracao, atestado, recibo etc.) | Pro |
| documents.signatures | Assinatura eletronica (TCLE, consentimentos) | Pro |
| documents.share_links | Links temporarios para compartilhamento externo | Pro |
| documents.patient_portal | Paciente visualiza e envia documentos pelo portal | Pro |
| Arquivo | O que insere |
|---|---|
| seed_015_document_templates.sql |
4 templates globais (is_global = true) com corpo HTML e variaveis mapeadas:
Declaracao de Comparecimento
Atestado Psicologico
Relatorio de Acompanhamento
Recibo de Pagamento
|
| Fase | O que | Depende de |
|---|---|---|
| 1 | Migrations (tabelas, RLS, triggers, indexes) | — |
| 2 | Buckets no Supabase Storage | Fase 1 |
| 3 | Services (camada de dados) | Fase 1 + 2 |
| 4 | Composables (logica reativa) | Fase 3 |
| 5 | Componentes e Paginas Vue | Fase 4 |
| 6 | Rotas, menus, feature flags | Fase 5 |
| 7 | Integracao com Prontuario | Fase 5 |
| 8 | Seed data (templates padrao) | Fase 1 |