9a6eb56827
Script usado pra importar a doc 01-busca-global-melissa.json diretamente no banco via psql (sem passar pelo botao "Importar JSON" da UI). DO block com dollar quoting pra evitar escape hell no HTML conteudo + nos FAQs (que contem aspas, kbd, etc). Importacao executada. Doc id=d9d2e431-0bd7-4883-9cfa-3a1a3228c295 + 12 FAQ itens vinculados. Path: database-novo/tmp/import-doc-busca.sql — pasta tmp pra artefatos de operacao (nao parte do schema canonico). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
169 lines
11 KiB
PL/PgSQL
169 lines
11 KiB
PL/PgSQL
-- Importação da doc Fase 1 (Busca global + Recently viewed)
|
||
-- Gerado a partir de development/saas-docs/01-busca-global-melissa.json
|
||
BEGIN;
|
||
|
||
DO $IMPORT$
|
||
DECLARE
|
||
v_doc_id uuid;
|
||
BEGIN
|
||
-- 1) Cria a doc principal
|
||
INSERT INTO public.saas_docs (
|
||
titulo, conteudo, categoria, exibir_no_faq, tipo_acesso,
|
||
pagina_path, ordem, ativo, medias
|
||
) VALUES (
|
||
'Busca global e Acessados recentemente',
|
||
$HTML$<h2>Busca global no Layout Melissa</h2>
|
||
|
||
<p>A <strong>busca global</strong> é o atalho mais rápido para encontrar pacientes, sessões, documentos e cadastros recebidos sem precisar navegar pelos menus. Você acessa pelo <em>dock central</em> do Layout Melissa ou usando o atalho de teclado <kbd>Ctrl</kbd> + <kbd>K</kbd> (em qualquer página do Melissa).</p>
|
||
|
||
<h3>1. Como abrir</h3>
|
||
<p>Localize o campo de busca no dock central do Melissa. Ele aparece como um botão com o ícone de lupa e o placeholder <em>"Buscar paciente, agenda, atalho…"</em>, com o atalho <kbd>Ctrl K</kbd> indicado no canto direito.</p>
|
||
|
||
<div style="border: 1px solid #cbd5e1; border-radius: 12px; padding: 0 14px; height: 44px; max-width: 480px; display: flex; align-items: center; gap: 10px; background: #1e2333; color: #cbd5e1; font-family: 'Segoe UI', sans-serif; margin: 12px 0;">
|
||
<i class="pi pi-search" style="font-size: 0.95rem;"></i>
|
||
<span style="flex: 1; font-size: 0.9rem;">Buscar paciente, agenda, atalho…</span>
|
||
<span style="font-size: 0.62rem; padding: 2px 7px; border-radius: 4px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.15); letter-spacing: 0.05em;">Ctrl K</span>
|
||
</div>
|
||
|
||
<p><strong>Três jeitos de abrir:</strong></p>
|
||
<ul>
|
||
<li>Clicando no campo no dock central</li>
|
||
<li>Pressionando <kbd>Ctrl + K</kbd> (Windows/Linux) ou <kbd>⌘ + K</kbd> (Mac) em qualquer página</li>
|
||
<li>Pelo menu lateral, opção "Buscar" (quando disponível)</li>
|
||
</ul>
|
||
|
||
<h3>2. O Dialog Spotlight</h3>
|
||
<p>Ao abrir, o sistema mostra um <strong>diálogo centralizado</strong> com o input grande no topo e os resultados em colunas abaixo. Isso é o padrão Spotlight (igual ao usado em macOS, Linear, GitHub, Slack).</p>
|
||
|
||
<div style="background: var(--surface-card, #fff); border: 1px solid #e2e8f0; border-radius: 14px; max-width: 520px; box-shadow: 0 12px 32px rgba(0,0,0,0.15); overflow: hidden; margin: 12px 0; font-family: 'Segoe UI', sans-serif;">
|
||
<div style="padding: 14px 18px; border-bottom: 1px solid #e2e8f0; display: flex; align-items: center; gap: 12px;">
|
||
<i class="pi pi-search" style="color: #64748b;"></i>
|
||
<span style="flex: 1; color: #94a3b8; font-size: 1.05rem;">Buscar paciente, agenda, atalho…</span>
|
||
<span style="font-size: 0.65rem; padding: 2px 8px; border-radius: 4px; background: #f1f5f9; border: 1px solid #e2e8f0; color: #64748b;">Esc</span>
|
||
</div>
|
||
<div style="padding: 6px;">
|
||
<div style="text-transform: uppercase; letter-spacing: 0.18em; color: #64748b; font-size: 0.62rem; font-weight: 700; padding: 8px 10px 4px; opacity: 0.75;">Acessados recentemente</div>
|
||
<div style="display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 8px;">
|
||
<span style="width: 32px; height: 32px; display: grid; place-items: center; border-radius: 7px; background: rgba(244,114,182,0.18); color: #ec4899; font-size: 0.9rem;">
|
||
<i class="pi pi-user"></i>
|
||
</span>
|
||
<div style="flex: 1;">
|
||
<div style="font-size: 0.88rem; font-weight: 500;">André Green</div>
|
||
<div style="font-size: 0.74rem; color: #64748b;">andre@email.com</div>
|
||
</div>
|
||
<i class="pi pi-arrow-right" style="color: #94a3b8; font-size: 0.75rem;"></i>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<h3>3. Onde a busca procura</h3>
|
||
<p>Digitando <strong>pelo menos 2 caracteres</strong>, o sistema dispara uma busca completa em 5 categorias:</p>
|
||
<ul>
|
||
<li><strong style="color: #ec4899;">Pacientes</strong> — por nome completo, e-mail, telefone ou CPF</li>
|
||
<li><strong style="color: #6366f1;">Sessões</strong> — por título ou nome do paciente, em qualquer data</li>
|
||
<li><strong style="color: #0ea5e9;">Documentos</strong> — por nome do arquivo ou descrição</li>
|
||
<li><strong style="color: #f97316;">Cadastros recebidos</strong> — solicitações de novos pacientes pendentes</li>
|
||
<li><strong>Atalhos</strong> — ações rápidas como "Agenda", "Financeiro", etc.</li>
|
||
</ul>
|
||
|
||
<p>Cada categoria aparece com um <strong>ícone colorido distinto</strong> para facilitar a leitura visual. Os resultados são limitados aos 6 mais relevantes por categoria.</p>
|
||
|
||
<h3>4. Como navegar nos resultados</h3>
|
||
<p>Você pode usar o mouse ou o teclado:</p>
|
||
<ul>
|
||
<li><kbd>↑</kbd> / <kbd>↓</kbd> — navegar entre os resultados</li>
|
||
<li><kbd>Enter</kbd> — abrir o item selecionado</li>
|
||
<li><kbd>Esc</kbd> — fechar o diálogo</li>
|
||
<li><kbd>Clique no backdrop</kbd> — fecha também</li>
|
||
</ul>
|
||
|
||
<h3>5. Acessados recentemente</h3>
|
||
<p>Quando você abre a busca <strong>sem digitar nada</strong>, a primeira seção mostra <strong>"Acessados recentemente"</strong> — os últimos 5 pacientes que você visitou (em qualquer dispositivo deste navegador).</p>
|
||
|
||
<div style="background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px 16px; margin: 12px 0; font-size: 0.88rem; color: #475569;">
|
||
<strong>💡 Dica:</strong> Use Ctrl+K + Enter para reabrir o último paciente acessado em 2 segundos.
|
||
</div>
|
||
|
||
<p>Esses 5 pacientes ficam salvos no seu navegador (não no banco de dados), então:</p>
|
||
<ul>
|
||
<li>São <strong>privados</strong> — outros usuários não veem</li>
|
||
<li>São <strong>por navegador</strong> — se trocar do Chrome pro Firefox, a lista recomeça</li>
|
||
<li><strong>Persistem</strong> após fechar o navegador (localStorage)</li>
|
||
<li>Auto-rotacionam: ao acessar o 6º paciente, o mais antigo sai</li>
|
||
</ul>
|
||
|
||
<h3>6. Clique nos resultados</h3>
|
||
<p>Ao clicar:</p>
|
||
<ul>
|
||
<li><strong>Paciente</strong> → abre o prontuário (<code>/melissa/paciente?id=…</code>)</li>
|
||
<li><strong>Sessão</strong> → abre o evento na agenda</li>
|
||
<li><strong>Documento</strong> → abre o prontuário do paciente na aba Documentos</li>
|
||
<li><strong>Cadastro recebido</strong> → vai pra lista de Cadastros recebidos</li>
|
||
<li><strong>Atalho</strong> → navega pra seção (Agenda, Financeiro, etc.)</li>
|
||
</ul>
|
||
|
||
<h3>7. Tema claro × escuro</h3>
|
||
<p>O Dialog adapta automaticamente as cores conforme o tema escolhido em <strong>Meu Perfil → Preferências</strong>. Texto, fundos e bordas seguem as configurações do sistema. Apenas os ícones por categoria (paciente rosa, sessão índigo, documento azul, cadastro laranja) mantêm a mesma cor para preservar a identificação visual rápida.</p>
|
||
|
||
<h3>⚠️ Notas pro desenvolvedor</h3>
|
||
<p>Atualmente o componente <code>MelissaBusca.vue</code> <strong>não tem atributos <code>id</code></strong> em seus elementos. Para o sistema de highlight da ajuda funcionar (links <code>data-highlight</code>), sugere-se adicionar:</p>
|
||
<ul>
|
||
<li><code>id="melissa-busca-trigger"</code> no botão de trigger no dock</li>
|
||
<li><code>id="melissa-busca-dialog"</code> no Dialog</li>
|
||
<li><code>id="melissa-busca-input"</code> no input dentro do Dialog</li>
|
||
<li><code>id="melissa-busca-recent"</code> no grupo de Acessados recentemente</li>
|
||
</ul>$HTML$,
|
||
'Navegação',
|
||
true,
|
||
'usuario',
|
||
'/melissa',
|
||
1,
|
||
true,
|
||
'[{"tipo": "imagem", "url": ""}]'::jsonb
|
||
)
|
||
RETURNING id INTO v_doc_id;
|
||
|
||
-- 2) Insere os 12 FAQ items vinculados
|
||
INSERT INTO public.saas_faq_itens (doc_id, pergunta, resposta, ordem, ativo) VALUES
|
||
(v_doc_id, 'Como abrir a busca rapidamente?',
|
||
$FAQ$Use o atalho <kbd>Ctrl + K</kbd> (Windows/Linux) ou <kbd>⌘ + K</kbd> (Mac) em qualquer página do Melissa. Você também pode clicar diretamente no campo de busca no dock central.$FAQ$, 0, true),
|
||
|
||
(v_doc_id, 'Posso buscar paciente por telefone ou CPF?',
|
||
$FAQ$Sim. A busca de pacientes encontra pelo <strong>nome completo, e-mail, telefone ou CPF</strong>. Digite pelo menos 2 caracteres e aguarde os resultados.$FAQ$, 1, true),
|
||
|
||
(v_doc_id, 'O que aparece em "Acessados recentemente"?',
|
||
$FAQ$Os últimos 5 pacientes que você abriu pelo prontuário, em ordem do mais recente pro mais antigo. A lista aparece quando você abre a busca <strong>sem digitar nada</strong>.$FAQ$, 2, true),
|
||
|
||
(v_doc_id, 'Outros usuários veem meus "Acessados recentemente"?',
|
||
$FAQ$Não. A lista é <strong>privada e local</strong> — fica salva apenas no seu navegador atual (localStorage). Se você logar em outro navegador ou computador, a lista começa vazia naquele dispositivo.$FAQ$, 3, true),
|
||
|
||
(v_doc_id, 'Quantos caracteres preciso digitar pra começar a buscar?',
|
||
$FAQ$<strong>Pelo menos 2</strong>. Buscas de 1 caractere são muito amplas e não disparam pesquisa. A partir de 2 caracteres, o sistema aguarda 200ms (tempo de digitação) antes de consultar o banco — assim você não dispara dezenas de buscas digitando rápido.$FAQ$, 4, true),
|
||
|
||
(v_doc_id, 'Por que minha busca não retorna nada?',
|
||
$FAQ$Verifique: (1) digitou pelo menos 2 caracteres; (2) o termo está sem erros graves de digitação (a busca tolera pequenas variações via similarity); (3) o paciente/sessão realmente existe no seu cadastro. Se persistir, faça uma busca mais ampla — ex: apenas o primeiro nome.$FAQ$, 5, true),
|
||
|
||
(v_doc_id, 'O que cada cor de ícone significa?',
|
||
$FAQ$Cada categoria tem uma cor própria: <strong style="color: #ec4899;">Rosa</strong> = Paciente, <strong style="color: #6366f1;">Índigo</strong> = Sessão da agenda, <strong style="color: #0ea5e9;">Azul</strong> = Documento, <strong style="color: #f97316;">Laranja</strong> = Cadastro recebido pendente. Atalhos vêm em cinza neutro.$FAQ$, 6, true),
|
||
|
||
(v_doc_id, 'Como navegar pelos resultados sem usar o mouse?',
|
||
$FAQ$Use as setas do teclado <kbd>↑</kbd> e <kbd>↓</kbd> para navegar entre os itens e <kbd>Enter</kbd> para abrir o selecionado. Pra fechar sem selecionar, use <kbd>Esc</kbd>.$FAQ$, 7, true),
|
||
|
||
(v_doc_id, 'Posso buscar documentos pelo nome do paciente?',
|
||
$FAQ$Sim. A busca de documentos cruza pelo nome do arquivo, descrição e <strong>nome do paciente vinculado</strong>. Ao clicar num resultado de documento, você é levado direto pra aba Documentos do prontuário daquele paciente.$FAQ$, 8, true),
|
||
|
||
(v_doc_id, 'Como limpar a lista de "Acessados recentemente"?',
|
||
$FAQ$Hoje não há um botão na interface — a lista é gerenciada automaticamente (limite de 5, mais antigo cai quando você acessa um novo). Pra limpar manualmente, você pode apagar os dados do site no seu navegador (Configurações → Privacidade → Limpar dados de navegação → escopo "localStorage").$FAQ$, 9, true),
|
||
|
||
(v_doc_id, 'A busca encontra sessões antigas ou só as de hoje?',
|
||
$FAQ$Encontra sessões de <strong>qualquer data</strong> — passadas e futuras. O grupo "Agenda de hoje" mostra apenas as do dia atual (preview rápido); o grupo "Sessões" inclui todas as outras encontradas no banco. Cada item mostra a data e horário da sessão.$FAQ$, 10, true),
|
||
|
||
(v_doc_id, 'Os atalhos (Agenda, Financeiro, etc.) sempre aparecem?',
|
||
$FAQ$Sim. Quando o campo está vazio, mostramos 4 atalhos padrão. Conforme você digita, os atalhos que combinam com sua busca permanecem visíveis (junto com os resultados do banco).$FAQ$, 11, true);
|
||
|
||
RAISE NOTICE 'Doc criada: id=%, faq_itens=12', v_doc_id;
|
||
END;
|
||
$IMPORT$;
|
||
|
||
COMMIT;
|