wiki + padronizacao: §1.3 UX 3/4 fechado (#10/#11/#13 done · #12 bloqueado)
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) <noreply@anthropic.com>
This commit is contained in:
@@ -1318,3 +1318,40 @@ quando record.status === 'paid'. Toast + loading state.
|
|||||||
PROXIMO: UX §1.3 (busca global + recently viewed + papel timbrado
|
PROXIMO: UX §1.3 (busca global + recently viewed + papel timbrado
|
||||||
+ relatorios export) OU sweep residual (M4 cutover billing decisoes
|
+ relatorios export) OU sweep residual (M4 cutover billing decisoes
|
||||||
#2/#3/#6).
|
#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.
|
||||||
|
|||||||
@@ -114,6 +114,11 @@ Do `project_graphify_findings_20260504`:
|
|||||||
- #8 (nome social): JÁ INTEGRADO — `patients.nome_social` schema existia + UI em 7 arquivos.
|
- #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`.
|
- #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] **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).
|
- [ ] NFS-e emissão (#15) — Esforço L, decisão de provider pendente (Focus NF-e vs prefeitura direta).
|
||||||
- [ ] E2E Playwright crítico (#16)
|
- [ ] E2E Playwright crítico (#16)
|
||||||
- [ ] Sentry (#18)
|
- [ ] Sentry (#18)
|
||||||
|
|||||||
Reference in New Issue
Block a user