From d7cd2541e448dbf0e13f26a6f7be23f8ee5a297e Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 21 May 2026 05:22:25 -0300 Subject: [PATCH] =?UTF-8?q?wiki=20+=20padronizacao:=20=C2=A71.3=20UX=203/4?= =?UTF-8?q?=20fechado=20(#10/#11/#13=20done=20=C2=B7=20#12=20bloqueado)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Atualiza PADRONIZACAO.md marcando §1.3 UX como 3 de 4 fechados. #12 papel timbrado documentado como bloqueado em codigo externo do UniaoApp. Co-Authored-By: Claude Opus 4.7 (1M context) --- Obsidian/Brain/log.md | 37 ++++++++++++++++++++++++ development/02-auditoria/PADRONIZACAO.md | 5 ++++ 2 files changed, 42 insertions(+) diff --git a/Obsidian/Brain/log.md b/Obsidian/Brain/log.md index b1b85f7..ce6605b 100644 --- a/Obsidian/Brain/log.md +++ b/Obsidian/Brain/log.md @@ -1318,3 +1318,40 @@ quando record.status === 'paid'. Toast + loading state. PROXIMO: UX §1.3 (busca global + recently viewed + papel timbrado + relatorios export) OU sweep residual (M4 cutover billing decisoes #2/#3/#6). + +## [2026-05-21 evening] session | ROADMAP §1.3 UX 3/4 (#10/#11/#13) +Touched: none + +3 commits fechando 3 dos 4 itens da Fase 1.3 UX: + +#10 Busca global topbar — GlobalSearch.vue ja estava feito no Rail/ +classic. **MelissaBusca promovida** de preview client-side pra RPC +search_global com debounce 200ms + searchSeq pra ignorar respostas +obsoletas. 3 grupos novos exibidos quando RPC retorna: sessoes, +documentos, cadastros recebidos. @paciente no MelissaLayout +corrigido (antes ignorava payload — bug). Emits novos: documento, +intake. + +#11 Recently viewed — composables/useRecentPatients.js (localStorage +por user_id, max 5, dedup, eventos CustomEvent + 'storage' pra sync +entre instancias no mesmo browser). registerPatientVisit chamado +em MelissaPaciente.loadAll e PatientProntuario.loadDetail. Grupo +"Acessados recentemente" no GlobalSearch.vue + MelissaBusca.vue +quando query vazia. Decisao: localStorage > tabela user_recent_access +por simplicidade + zero round-trip por visita. + +#13 Relatorios export PDF/Excel — services/reportExport.service.js +com exportSessionsToPDF (pdf.service HTML→PDF + KPIs + tabela A4), +exportSessionsToXLSX (exceljs com import dinamico, frozen header, +alternating rows, branded), exportSessionsToCSV (vanilla, BOM UTF-8, +separador ';'). 3 botoes pi-file-pdf/pi-file-excel/pi-table em +RelatoriosPage.vue (therapist) + MelissaRelatorios.vue. Respeita +filtro de status da tabela. + +#12 Papel timbrado — BLOQUEADO: codigo no UniaoApp. Quando user +importar, plugar como cabecalho_html/rodape_html global em +document_templates ou setting tenants.letterhead_html. + +PROXIMO: NFS-e (#15, esforco L), §1.5 Sentry (#18 nao-teste), +sweep residual (M4 cutover billing — bloqueado decisoes #2/#3/#6), +ou agenda Fase 4 residual. diff --git a/development/02-auditoria/PADRONIZACAO.md b/development/02-auditoria/PADRONIZACAO.md index 76cfc89..7ec84cf 100644 --- a/development/02-auditoria/PADRONIZACAO.md +++ b/development/02-auditoria/PADRONIZACAO.md @@ -114,6 +114,11 @@ Do `project_graphify_findings_20260504`: - #8 (nome social): JÁ INTEGRADO — `patients.nome_social` schema existia + UI em 7 arquivos. - #9 (especialidades): `20260521000004_specialties.sql` (tabela + profile_specialties M:N + RLS) + `seed_050_specialties.sql` (33 specialties) + `src/services/specialtiesService.js`. - [x] **Recibo profissional PDF (#14 · 2026-05-21)** — `valorExtenso.js` helper pt-BR. `DocumentGenerate.service` puxa registro profissional do profile (auto-formato `CRP 12345/SP`), formata `cpf_cnpj` do tenant, computa `valor`+`valor_extenso`, mapeia `templateTipo` → `tipo_documento` (recibo_pagamento → 'recibo'). Migration `20260521000008` substitui `{{terapeuta_crp}}` por `{{terapeuta_registro}}` no template — universal pra qualquer conselho. `emitirReciboParaSessao(eventoId, opts)` é quick path one-call. Botão "Emitir recibo" no `AgendaEventoFinanceiroPanel` quando `record.status === 'paid'`. #15 NFS-e ainda em aberto. +- [x] **§1.3 UX block 3/4 (#10 + #11 + #13 · 2026-05-21)** — + - #10 Busca global: `GlobalSearch.vue` (RPC `search_global`) já estava completo no AppTopbar/Rail. **MelissaBusca promovida** de client-side preview pra RPC com debounce 200ms + searchSeq. 3 grupos novos (rpc-appointments, rpc-documents, rpc-intakes). `@paciente` no MelissaLayout corrigido pra navegar pro paciente clicado (era bug — ignorava payload). + - #11 Recently viewed: `composables/useRecentPatients.js` (localStorage por user_id, max 5, dedup, eventos sync entre instâncias). `registerPatientVisit` chamado em `MelissaPaciente.loadAll` + `PatientProntuario.loadDetail`. Grupo "Acessados recentemente" no GlobalSearch + MelissaBusca quando query vazia. + - #13 Relatórios export: `services/reportExport.service.js` com 3 funções (PDF via pdf.service, Excel via exceljs com import dinâmico, CSV vanilla). 3 botões no header de `RelatoriosPage.vue` e `MelissaRelatorios.vue`. +- [ ] **#12 Papel timbrado (BLOQUEADO)** — código no UniaoApp (projeto externo). Quando user importar o código, plugar como variável `cabecalho_html`/`rodape_html` global em `document_templates` ou criar setting `tenants.letterhead_html`. - [ ] NFS-e emissão (#15) — Esforço L, decisão de provider pendente (Focus NF-e vs prefeitura direta). - [ ] E2E Playwright crítico (#16) - [ ] Sentry (#18)