From 7dd8cde8b4655bba2addeef488696e14ee903dde Mon Sep 17 00:00:00 2001 From: Leonardo Date: Fri, 22 May 2026 14:04:17 -0300 Subject: [PATCH] saas-docs: doc da pagina de Templates de documentos (Fase 2) Doc 04 cobrindo a pagina de gestao de templates: - Globais (sistema, read-only) vs Tenant (seus, editaveis) - Lista em grid com cards + badge "padrao" pros globais - Preview de template global (iframe sandbox A4) + botao Duplicar - Criar novo template (nome/tipo/desc/cabecalho/corpo/rodape) - Editor rich-text com menu de variaveis (insere {{nome_var}}) - Lista de variaveis disponiveis (paciente/terapeuta/clinica/sessao/geral) - Mobile drawer pros templates - Duplicar (cria copia em "Seus templates" com sufixo "(copia)") - Desativar (soft-delete, docs antigos continuam acessiveis) - Mapeamento tipo template -> categoria do doc gerado 12 FAQs: pra que serve, por que nao edita padroes, como usar variavel, quais variaveis, recuperar desativado, duplicar pra personalizar, global vs tenant, imagens (logo/assinatura), cabecalho/rodape em todas as paginas, variaveis obrigatorias, limites, compartilhamento entre terapeutas do mesmo tenant. categoria='Documentos', pagina_path='/melissa/documentos-templates', ordem=4. SQL import em database-novo/tmp/import-doc-documentos- templates.sql. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../tmp/import-doc-documentos-templates.sql | 122 ++++++++++++++++++ .../04-documentos-templates-melissa.json | 87 +++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 database-novo/tmp/import-doc-documentos-templates.sql create mode 100644 development/saas-docs/04-documentos-templates-melissa.json diff --git a/database-novo/tmp/import-doc-documentos-templates.sql b/database-novo/tmp/import-doc-documentos-templates.sql new file mode 100644 index 0000000..cde6b72 --- /dev/null +++ b/database-novo/tmp/import-doc-documentos-templates.sql @@ -0,0 +1,122 @@ +-- Importacao da doc da pagina de Templates de documentos (Fase 2) +-- Gerado a partir de development/saas-docs/04-documentos-templates-melissa.json +BEGIN; + +DO $IMPORT$ +DECLARE + v_doc_id uuid; +BEGIN + INSERT INTO public.saas_docs ( + titulo, conteudo, categoria, exibir_no_faq, tipo_acesso, + pagina_path, ordem, ativo, medias + ) VALUES ( + 'Templates de documentos', + $HTML$

Templates de documentos

+ +

A página Templates de documentos (acessível pelo menu Prontuários → Templates de documentos, ou diretamente em /melissa/documentos-templates) é onde você gerencia os modelos usados pra gerar atestados, declarações, recibos, laudos e outros documentos clínicos.

+ +

1. Globais vs Tenant (Seus templates)

+

A lista é dividida em 2 grupos:

+ +

Todos os templates ativos do tenant (globais + seus) ficam disponíveis na hora de gerar um documento pro paciente.

+ +

2. Lista de templates

+

Cards em grid mostrando: nome, tipo, descrição, badge "padrão" pros globais. No card de cada template do tenant há um menu de 3 pontos com: Duplicar, Editar, Desativar. Pros globais, só Duplicar (e click no card abre a Preview).

+ +

3. Preview de template global (read-only)

+

Click num template padrão abre a Preview — iframe sandbox renderizando o HTML completo (cabeçalho + corpo + rodapé) com estilos de A4 simulando o PDF final. Header tem botão Duplicar pra você levar pros seus templates.

+ +

4. Criar novo template

+

Botão + Novo template abre o editor em modo "create". Campos:

+ + +

5. Editor rich-text + variáveis

+

Cada bloco (cabeçalho/corpo/rodapé) tem editor WYSIWYG com formatação, listas, tabelas e inserção de imagens. Ao clicar no botão de variáveis, abre um menu com todas as variáveis disponíveis. Click numa insere {{nome_da_variavel}} no cursor.

+ +
+ 💡 Variáveis disponíveis: {{paciente_nome}}, {{paciente_cpf}}, {{paciente_rg}}, {{paciente_email}}, {{terapeuta_nome}}, {{terapeuta_registro}} (CRP 12345/SP formatado), {{terapeuta_telefone}}, {{clinica_nome}}, {{clinica_cnpj}}, {{data_atual}}, {{data_atual_extenso}}, e — se gerado a partir de sessão — {{valor}}, {{valor_extenso}}, {{data_sessao}}. Lista completa no dropdown do editor. +
+ +

6. Mobile (drawer pros templates)

+

Em telas <1024px a lista vira um drawer com botão "Templates" no header. Click num item fecha o drawer e mostra o preview/editor ocupando a tela toda.

+ +

7. Duplicar

+

Duplicar copia o template (incluindo cabeçalho, corpo, rodapé e variáveis) pra Seus templates com sufixo "(cópia)" no nome. Você edita à vontade depois.

+ +

8. Desativar (soft-delete)

+

Templates do tenant podem ser desativados (não excluídos). Ficam marcados com ativo = false e somem da lista padrão e do dropdown de geração — mas o registro permanece no banco, e documentos antigos gerados a partir desse template continuam acessíveis. Pra reativar, marque "incluir desativados" no filtro (futuro — atualmente só via DB).

+ +

9. Tipos de template

+

Cada template tem um tipo. O tipo determina automaticamente qual categoria o documento gerado terá no prontuário do paciente:

+ + +

⚠️ Notas pro desenvolvedor

+

O componente MelissaDocumentosTemplates.vue reusa useDocumentTemplates + DocumentTemplateEditor. A lista de tipos vem do composable (TIPOS_TEMPLATE). O mapeamento tipo de template → tipo do documento gerado vive em DocumentGenerate.service.js (TEMPLATE_TYPE_TO_DOC_TYPE). RLS no banco: templates globais (is_global = true) tem leitura aberta; templates do tenant respeitam tenant_id.

$HTML$, + 'Documentos', + true, + 'usuario', + '/melissa/documentos-templates', + 4, + true, + '[{"tipo": "imagem", "url": ""}]'::jsonb + ) + RETURNING id INTO v_doc_id; + + INSERT INTO public.saas_faq_itens (doc_id, pergunta, resposta, ordem, ativo) VALUES + (v_doc_id, 'Pra que serve a página de Templates?', + $FAQ$Pra você gerenciar os modelos que serão usados na hora de gerar atestados, declarações, recibos, laudos e outros documentos clínicos. Cada template tem cabeçalho, corpo e rodapé com variáveis interpoladas (nome do paciente, CRP, data, etc) — quando você usa o botão Gerar num prontuário, é um desses templates que está sendo aplicado.$FAQ$, 0, true), + + (v_doc_id, 'Por que não consigo editar os templates padrão (com badge "padrão")?', + $FAQ$Templates marcados como globais (badge azul "padrão") vêm pré-instalados com o sistema e são compartilhados entre todos os tenants. Não dá pra editar pra preservar a versão de referência. Pra personalizar um, click em Duplicar — uma cópia vai pra Seus templates e ali você edita à vontade.$FAQ$, 1, true), + + (v_doc_id, 'Como uso uma variável no template?', + $FAQ$No editor (cabeçalho, corpo ou rodapé), posicione o cursor onde quer a variável e clique no botão de variáveis na barra de ferramentas. Um menu lista todas as variáveis disponíveis agrupadas por categoria. Click numa variável insere {{nome_da_variavel}} no cursor. Na hora de gerar o documento, esse placeholder é substituído pelo valor real.$FAQ$, 2, true), + + (v_doc_id, 'Quais variáveis estão disponíveis?', + $FAQ$Agrupadas por categoria — Paciente: nome, CPF, RG, data nascimento, email, telefone, endereço. Terapeuta: nome, email, telefone, registro profissional (formatado tipo "CRP 12345/SP"), tipo/número/UF do registro separados. Clínica: nome, endereço, telefone, CNPJ. Sessão: data, hora, valor, valor por extenso, forma de pagamento, modalidade. Geral: data atual, data atual por extenso. Lista completa visível no menu de variáveis do editor.$FAQ$, 3, true), + + (v_doc_id, 'Posso recuperar um template que eu desativei?', + $FAQ$Sim, mas hoje só via banco de dados (administrador). Desativar é soft-delete: o template ganha ativo = false e some da lista. Documentos antigos gerados com ele continuam acessíveis. Em versões futuras teremos um filtro "mostrar desativados" pra reativar via UI.$FAQ$, 4, true), + + (v_doc_id, 'Como duplico um template padrão pra personalizar?', + $FAQ$Click no card do template padrão pra abrir a Preview. No header da preview tem um botão Duplicar. Confirme — a cópia aparece em Seus templates com sufixo "(cópia)" no nome. Em seguida click em Editar nessa cópia pra ajustar texto, variáveis, cabeçalho, rodapé.$FAQ$, 5, true), + + (v_doc_id, 'Qual a diferença prática entre template Global e do Tenant?', + $FAQ$Globais são compartilhados entre todos os tenants (vêm com o sistema) e são read-only. Templates do tenant pertencem só à sua clínica/conta e são editáveis. Ambos aparecem juntos na hora de gerar um documento — você não precisa duplicar pra usar um global, só pra personalizar. Se um global atende, use direto.$FAQ$, 6, true), + + (v_doc_id, 'Posso usar imagens no template (logo da clínica, assinatura digitalizada)?', + $FAQ$Sim. O editor aceita inserção de imagens via toolbar. Recomendado: PNG ou JPG com tamanho moderado (logo até 200x80px, assinatura até 300x120px). Imagens muito grandes inflam o PDF gerado. Pra incluir o logo da clínica, prefira colocar no cabeçalho — assim aparece no topo de toda página do PDF.$FAQ$, 7, true), + + (v_doc_id, 'O cabeçalho e rodapé aparecem em todas as páginas do PDF?', + $FAQ$Sim. O renderizador usa CSS @page com cabeçalho fixo no topo e rodapé fixo no rodapé de cada página gerada. Documentos curtos (1 página) você não percebe; documentos longos (laudos extensos) repetem cabeçalho/rodapé automaticamente. Útil pra manter identificação da clínica em todas as folhas.$FAQ$, 8, true), + + (v_doc_id, 'Como sei se um template tem variável obrigatória?', + $FAQ$Hoje não há marcação "obrigatória" — todas as variáveis declaradas no template aparecem como editáveis na hora de gerar. Se uma vier vazia (porque não cadastrou no perfil/paciente/etc), o sistema mostra um hint embaixo do campo dizendo onde cadastrar (ex: "Perfil → Registro Profissional"). Você pode gerar mesmo com vazias — o placeholder fica como {{variavel}} no PDF, mas isso quase nunca é desejado.$FAQ$, 9, true), + + (v_doc_id, 'Tem limite de templates por tenant?', + $FAQ$Não há limite hard no banco. Em planos free pode haver limite por contrato (verifique seu plano em Configurações → Plano). Recomendado manter o conjunto enxuto (10-20 templates) pra não poluir o dropdown na hora de gerar — se você não usa, desative.$FAQ$, 10, true), + + (v_doc_id, 'Os templates são compartilhados entre os terapeutas do mesmo tenant?', + $FAQ$Sim. Todos os templates do tenant ficam disponíveis pra todos os usuários ativos do mesmo tenant (clínica). Quem cria/edita pode ser qualquer um com permissão de edição — não há "templates privados por usuário" no momento. Se precisar isolar templates por terapeuta, organize por nome (ex: "Atestado · Dra. Ana").$FAQ$, 11, true); + + RAISE NOTICE 'Doc criada: id=%, faq_itens=12', v_doc_id; +END; +$IMPORT$; + +COMMIT; diff --git a/development/saas-docs/04-documentos-templates-melissa.json b/development/saas-docs/04-documentos-templates-melissa.json new file mode 100644 index 0000000..72dd30c --- /dev/null +++ b/development/saas-docs/04-documentos-templates-melissa.json @@ -0,0 +1,87 @@ +{ + "titulo": "Templates de documentos", + "conteudo": "

Templates de documentos

\n\n

A página Templates de documentos (acessível pelo menu Prontuários → Templates de documentos, ou diretamente em /melissa/documentos-templates) é onde você gerencia os modelos usados pra gerar atestados, declarações, recibos, laudos e outros documentos clínicos.

\n\n

1. Globais vs Tenant (Seus templates)

\n

A lista é dividida em 2 grupos:

\n\n

Todos os templates ativos do tenant (globais + seus) ficam disponíveis na hora de gerar um documento pro paciente.

\n\n

2. Lista de templates

\n

Cards em grid mostrando: nome, tipo, descrição, badge \"padrão\" pros globais. No card de cada template do tenant há um menu de 3 pontos com: Duplicar, Editar, Desativar. Pros globais, só Duplicar (e click no card abre a Preview).

\n\n

3. Preview de template global (read-only)

\n

Click num template padrão abre a Preview — iframe sandbox renderizando o HTML completo (cabeçalho + corpo + rodapé) com estilos de A4 simulando o PDF final. Header tem botão Duplicar pra você levar pros seus templates.

\n\n

4. Criar novo template

\n

Botão + Novo template abre o editor em modo \"create\". Campos:

\n\n\n

5. Editor rich-text + variáveis

\n

Cada bloco (cabeçalho/corpo/rodapé) tem editor WYSIWYG com formatação, listas, tabelas e inserção de imagens. Ao clicar no botão de variáveis, abre um menu com todas as variáveis disponíveis. Click numa insere {{nome_da_variavel}} no cursor.

\n\n
\n 💡 Variáveis disponíveis: {{paciente_nome}}, {{paciente_cpf}}, {{paciente_rg}}, {{paciente_email}}, {{terapeuta_nome}}, {{terapeuta_registro}} (CRP 12345/SP formatado), {{terapeuta_telefone}}, {{clinica_nome}}, {{clinica_cnpj}}, {{data_atual}}, {{data_atual_extenso}}, e — se gerado a partir de sessão — {{valor}}, {{valor_extenso}}, {{data_sessao}}. Lista completa no dropdown do editor.\n
\n\n

6. Mobile (drawer pros templates)

\n

Em telas <1024px a lista vira um drawer com botão \"Templates\" no header. Click num item fecha o drawer e mostra o preview/editor ocupando a tela toda.

\n\n

7. Duplicar

\n

Duplicar copia o template (incluindo cabeçalho, corpo, rodapé e variáveis) pra Seus templates com sufixo \"(cópia)\" no nome. Você edita à vontade depois.

\n\n

8. Desativar (soft-delete)

\n

Templates do tenant podem ser desativados (não excluídos). Ficam marcados com ativo = false e somem da lista padrão e do dropdown de geração — mas o registro permanece no banco, e documentos antigos gerados a partir desse template continuam acessíveis. Pra reativar, marque \"incluir desativados\" no filtro (futuro — atualmente só via DB).

\n\n

9. Tipos de template

\n

Cada template tem um tipo. O tipo determina automaticamente qual categoria o documento gerado terá no prontuário do paciente:

\n\n\n

⚠️ Notas pro desenvolvedor

\n

O componente MelissaDocumentosTemplates.vue reusa useDocumentTemplates + DocumentTemplateEditor. A lista de tipos vem do composable (TIPOS_TEMPLATE). O mapeamento tipo de template → tipo do documento gerado vive em DocumentGenerate.service.js (TEMPLATE_TYPE_TO_DOC_TYPE). RLS no banco: templates globais (is_global = true) tem leitura aberta; templates do tenant respeitam tenant_id.

", + "categoria": "Documentos", + "exibir_no_faq": true, + "tipo_acesso": "usuario", + "pagina_path": "/melissa/documentos-templates", + "ordem": 4, + "ativo": true, + "medias": [ + { "tipo": "imagem", "url": "" } + ], + "_faq_itens": [ + { + "pergunta": "Pra que serve a página de Templates?", + "resposta": "Pra você gerenciar os modelos que serão usados na hora de gerar atestados, declarações, recibos, laudos e outros documentos clínicos. Cada template tem cabeçalho, corpo e rodapé com variáveis interpoladas (nome do paciente, CRP, data, etc) — quando você usa o botão Gerar num prontuário, é um desses templates que está sendo aplicado.", + "ordem": 0, + "ativo": true + }, + { + "pergunta": "Por que não consigo editar os templates padrão (com badge \"padrão\")?", + "resposta": "Templates marcados como globais (badge azul \"padrão\") vêm pré-instalados com o sistema e são compartilhados entre todos os tenants. Não dá pra editar pra preservar a versão de referência. Pra personalizar um, click em Duplicar — uma cópia vai pra Seus templates e ali você edita à vontade.", + "ordem": 1, + "ativo": true + }, + { + "pergunta": "Como uso uma variável no template?", + "resposta": "No editor (cabeçalho, corpo ou rodapé), posicione o cursor onde quer a variável e clique no botão de variáveis na barra de ferramentas. Um menu lista todas as variáveis disponíveis agrupadas por categoria. Click numa variável insere {{nome_da_variavel}} no cursor. Na hora de gerar o documento, esse placeholder é substituído pelo valor real.", + "ordem": 2, + "ativo": true + }, + { + "pergunta": "Quais variáveis estão disponíveis?", + "resposta": "Agrupadas por categoria — Paciente: nome, CPF, RG, data nascimento, email, telefone, endereço. Terapeuta: nome, email, telefone, registro profissional (formatado tipo \"CRP 12345/SP\"), tipo/número/UF do registro separados. Clínica: nome, endereço, telefone, CNPJ. Sessão: data, hora, valor, valor por extenso, forma de pagamento, modalidade. Geral: data atual, data atual por extenso. Lista completa visível no menu de variáveis do editor.", + "ordem": 3, + "ativo": true + }, + { + "pergunta": "Posso recuperar um template que eu desativei?", + "resposta": "Sim, mas hoje só via banco de dados (administrador). Desativar é soft-delete: o template ganha ativo = false e some da lista. Documentos antigos gerados com ele continuam acessíveis. Em versões futuras teremos um filtro \"mostrar desativados\" pra reativar via UI.", + "ordem": 4, + "ativo": true + }, + { + "pergunta": "Como duplico um template padrão pra personalizar?", + "resposta": "Click no card do template padrão pra abrir a Preview. No header da preview tem um botão Duplicar. Confirme — a cópia aparece em Seus templates com sufixo \"(cópia)\" no nome. Em seguida click em Editar nessa cópia pra ajustar texto, variáveis, cabeçalho, rodapé.", + "ordem": 5, + "ativo": true + }, + { + "pergunta": "Qual a diferença prática entre template Global e do Tenant?", + "resposta": "Globais são compartilhados entre todos os tenants (vêm com o sistema) e são read-only. Templates do tenant pertencem só à sua clínica/conta e são editáveis. Ambos aparecem juntos na hora de gerar um documento — você não precisa duplicar pra usar um global, só pra personalizar. Se um global atende, use direto.", + "ordem": 6, + "ativo": true + }, + { + "pergunta": "Posso usar imagens no template (logo da clínica, assinatura digitalizada)?", + "resposta": "Sim. O editor aceita inserção de imagens via toolbar. Recomendado: PNG ou JPG com tamanho moderado (logo até 200x80px, assinatura até 300x120px). Imagens muito grandes inflam o PDF gerado. Pra incluir o logo da clínica, prefira colocar no cabeçalho — assim aparece no topo de toda página do PDF.", + "ordem": 7, + "ativo": true + }, + { + "pergunta": "O cabeçalho e rodapé aparecem em todas as páginas do PDF?", + "resposta": "Sim. O renderizador usa CSS @page com cabeçalho fixo no topo e rodapé fixo no rodapé de cada página gerada. Documentos curtos (1 página) você não percebe; documentos longos (laudos extensos) repetem cabeçalho/rodapé automaticamente. Útil pra manter identificação da clínica em todas as folhas.", + "ordem": 8, + "ativo": true + }, + { + "pergunta": "Como sei se um template tem variável obrigatória?", + "resposta": "Hoje não há marcação \"obrigatória\" — todas as variáveis declaradas no template aparecem como editáveis na hora de gerar. Se uma vier vazia (porque não cadastrou no perfil/paciente/etc), o sistema mostra um hint embaixo do campo dizendo onde cadastrar (ex: \"Perfil → Registro Profissional\"). Você pode gerar mesmo com vazias — o placeholder fica como {{variavel}} no PDF, mas isso quase nunca é desejado.", + "ordem": 9, + "ativo": true + }, + { + "pergunta": "Tem limite de templates por tenant?", + "resposta": "Não há limite hard no banco. Em planos free pode haver limite por contrato (verifique seu plano em Configurações → Plano). Recomendado manter o conjunto enxuto (10-20 templates) pra não poluir o dropdown na hora de gerar — se você não usa, desative.", + "ordem": 10, + "ativo": true + }, + { + "pergunta": "Os templates são compartilhados entre os terapeutas do mesmo tenant?", + "resposta": "Sim. Todos os templates do tenant ficam disponíveis pra todos os usuários ativos do mesmo tenant (clínica). Quem cria/edita pode ser qualquer um com permissão de edição — não há \"templates privados por usuário\" no momento. Se precisar isolar templates por terapeuta, organize por nome (ex: \"Atestado · Dra. Ana\").", + "ordem": 11, + "ativo": true + } + ] +}