diff --git a/HANDOFF.md b/HANDOFF.md index 6ee9627..70b83a6 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,362 +1,147 @@ -# HANDOFF — 2026-05-05 (sprint blueprint tabular Melissa + arquivamento de pacientes) +# HANDOFF — 2026-05-06 (Melissa Pages aplicando blueprint + ConversationDrawer WhatsApp redesign + commits) Documento de continuidade. **Quando voltar, comece lendo esta página.** -> **🟡 PENDENTE — Sub-sessão 2 do A66 (V2 dialog)**: skeleton entregue -> em 2026-05-05 mas user **não gostou do design** ao olhar o preview. -> Aguarda feedback específico (3 zonas tá errado? hierarquia? hero -> grande demais? mobile? referência visual?). Iteração só depois disso. -> Detalhes na seção "Sessões dedicadas pendentes" no fim deste doc. +> **🟢 ENTREGUE HOJE** — Blueprint tabular aplicado nas **6 Melissa Pages restantes** +> (Compromissos, Grupos, Tags, Médicos, Conversas, Recorrências) + dialogs +> harmonizados com `FloatLabel + IconField + section dividers` + dialogs +> "Pacientes do grupo/tag/médico" com cor primary nos avatares + redesign +> completo do `ConversationDrawer` pra estilo WhatsApp (avatar circular, bg +> "papel de parede", bolhas com tail simulada, time/status overlay no canto, +> compose pill + send circular verde) + fix de cor de tags/grupos no +> MelissaPacientes (`g.cor → g.color` em 20 lugares). -> **🟢 ENTREGUE HOJE — Blueprint de página tabular Melissa**: documentado -> em `blueprints/melissa-table-page-blueprint.md` (~530 linhas, 18 seções) -> e aplicado em **MelissaCadastrosRecebidos** (refator) + -> **MelissaAgendamentosRecebidos** (NOVO, native page) + -> **MelissaPacientes** (refator parcial). Inclui DataTable com `:loading` -> + `paginator` + frozen action column, view toggle list/grade, -> sidebar com filtros coloridos por status, subheader explicativo, -> Tailwind 600 status colors, e mobile pencil + popover menu. +> **🟢 COMMITADO** — Working tree estava com 4 sprints acumulados (~50 arquivos). +> Foram criados **5 commits** lógicos antes do push, do mais antigo pro mais +> recente. Ver seção "Histórico de commits" abaixo. -Sessão de polimento e estruturação — não houve commit. Working tree -acumulada de 4 sprints (28 modificados + 22 novos). +> **🟡 AINDA PENDENTE** — Sub-sessão 2 do A66 (V2 dialog): user não gostou +> do design do esqueleto entregue em 2026-05-05. Aguarda feedback específico +> antes de iterar. Detalhes na seção "Sessões dedicadas pendentes". --- -## 🚦 STATUS — Working tree +## 🚦 STATUS — Working tree LIMPA -**Modificados:** ``` -M HANDOFF.md -M database-novo/agenciapsi-db-dashboard.html -M database-novo/db.config.json -M database-novo/generate-dashboard.cjs -M src/components/notifications/NotificationDrawer.vue -M src/components/notifications/NotificationItem.vue -M src/composables/useFeriados.js -M src/features/agenda/components/AgendaClinicMosaic.vue -M src/features/agenda/components/AgendaEventDialog.vue ← A66 sub-sessão 1 done -M src/features/agenda/composables/useAgendaSettings.js -M src/features/agenda/pages/AgendaTerapeutaPage.vue -M src/features/documents/DocumentsListPage.vue -M src/features/patients/cadastro/PatientsCadastroPage.vue ← statusOpts +Arquivado HOJE -M src/features/patients/prontuario/PatientConversationsTab.vue -M src/features/patients/prontuario/PatientProntuario.vue -M src/features/patients/services/patientsRepository.js ← +restorePatient HOJE -M src/layout/melissa/MelissaAgenda.vue -M src/layout/melissa/MelissaCadastrosRecebidos.vue ← refator blueprint HOJE -M src/layout/melissa/MelissaEmbed.vue ← agendamentos-recebidos removido HOJE -M src/layout/melissa/MelissaEventoPanel.vue -M src/layout/melissa/MelissaLayout.vue ← MAR wire-up HOJE -M src/layout/melissa/MelissaPacientes.vue ← refator grande HOJE -M src/layout/melissa/composables/useMelissaAgenda.js -M src/layout/melissa/composables/useMelissaEventos.js -M src/layout/melissa/composables/useMelissaPacientes.js -M src/layout/melissa/composables/useMelissaPacientesAside.js -M src/router/routes.misc.js -D database-novo/backups/2026-03-27/ (3 arquivos antigos) -D database-novo/backups/2026-03-29/ (3 arquivos antigos) +On branch main +Your branch is up to date with 'origin/main'. +nothing to commit, working tree clean ``` -**Novos:** -``` -?? blueprints/melissa-table-page-blueprint.md ← NOVO HOJE -?? database-novo/migrations/20260504000001_fix_cancel_notifications_excluido.sql -?? src/features/agenda/components/AgendaEventDialog.vue.bak ← rollback A66 -?? src/features/agenda/components/AgendaEventDialogV2.vue ← A66 sub-sessão 2 (NÃO TESTADO) -?? src/features/agenda/components/InsurancePlanQuickCreateDialog.vue -?? src/features/agenda/components/ServiceQuickCreateDialog.vue -?? src/features/agenda/composables/agendaEventHelpers.js ← A66 1A -?? src/features/agenda/composables/useAgendaEventActions.js ← A66 1C-i -?? src/features/agenda/composables/useAgendaEventComposer.js ← A66 1B -?? src/features/agenda/composables/useAgendaEventLifecycle.js ← A66 1C-ii-b -?? src/features/agenda/composables/useAgendaEventPickerBilling.js ← A66 1C-ii-a -?? src/features/agenda/composables/__tests__/ (5 specs) -?? src/features/patients/prontuario/PatientProntuario.vue.bak -?? src/layout/melissa/MelissaAgendaHistoricoCard.vue -?? src/layout/melissa/MelissaAgendamentosRecebidos.vue ← NOVO HOJE -?? src/layout/melissa/composables/useMelissaAgendaHistorico.js -?? src/layout/melissa/composables/useMelissaDockPins.js -?? src/stores/melissaCacheStore.js -?? src/views/pages/preview/ (V2 preview) -``` +(após `git push`. Antes do push: 5 commits ahead.) --- -## ✅ FEITO HOJE (2026-05-05) +## 📦 Histórico de commits criados hoje -### 1. Blueprint de página tabular — `melissa-table-page-blueprint.md` +Em ordem cronológica de criação (mais antigo → mais novo): -Novo arquivo em `blueprints/`. ~530 linhas, **18 seções**: +1. **`957e912`** — `Melissa polish + Prontuario Visao Geral + agenda historico` + - Sprints B (05-03) + C (05-04) acumulados: + - NotificationDrawer/Item redesign + - Dock pins compose (`useMelissaDockPins`) + cache store global (`melissaCacheStore`) + - MelissaAgenda timeline FullCalendar parity + cards resumo + histórico card + - `useFeriados` cache opt-in + - PatientProntuario aba Visão Geral nova + - DB migration `20260504000001_fix_cancel_notifications_excluido.sql` + - 19 files, +5203 −285 -1. Princípio (sidebar de filtros + main com toolbar + tabela) -2. Estrutura do template (com **subheader explicativo**) -3. Estado JS (script setup) — busca, statusFilter, paginação, viewMode -4. DataTable view Lista — props canônicas explicadas -5. View Grade — cards em CSS grid, `
` -6. Tokens de surface (light/dark) — `--p-content-background` canônico -7. Cores de status — Tailwind 600 (azul/verde/vermelho), aplicadas em 4 lugares -8. Filtro de status + Limpar filtro com Transition fade -9. **Subheader explicativo** — diferencia páginas de layout idêntico -10. Toolbar — busca + view toggle -11. DataTable estilos completos (header transparent, frozen column, paginator) -12. Botão pencil — coluna fixa -13. Empty / loading -14. Mobile (<1024px) — scroll horizontal, NÃO esconde colunas -15. Acessibilidade -16. Checklist de adoção (16 itens) -17. Anti-patterns (11 erros documentados) -18. Referência canônica → `MelissaCadastrosRecebidos.vue` +2. **`6d9b36d`** — `A66 WIP: AgendaEventDialog quebrado em 5 composables + 265 specs + V2 esqueleto` + - 5 composables (1986L total): `agendaEventHelpers`, `useAgendaEventComposer`, `useAgendaEventActions`, `useAgendaEventPickerBilling`, `useAgendaEventLifecycle` + - 5 specs em `__tests__/` (75+76+28+43+43 = **265 testes**, 495/495 passando) + - AgendaEventDialog 3522 → 2632 linhas (-25%) + - `AgendaEventDialogV2.vue` esqueleto (~1100L, 3 zonas) + preview em `/preview/agenda-dialog-v2` + - Backup byte-idêntico em `AgendaEventDialog.vue.bak` + - Dialogs auxiliares: `InsurancePlanQuickCreateDialog`, `ServiceQuickCreateDialog` + - 17 files, +10966 −1298 -### 2. MelissaCadastrosRecebidos — refator pra blueprint +3. **`269b531`** — `Melissa: blueprint tabular + Cadastros/Agendamentos/Pacientes + restore` + - Sprint E (05-05): Blueprint canônico em `blueprints/melissa-table-page-blueprint.md` (~530L, 18 seções) + - MelissaCadastrosRecebidos refator pro blueprint + - **MelissaAgendamentosRecebidos** novo (substitui o embed) + - MelissaPacientes refator parcial (subheader, sombras, status pills coloridas, email/phone colunas próprias, mobile pencil+popover, fix scroll com `min-height: 0`, restore de arquivados) + - `restorePatient` no `patientsRepository` + - 10 files, +4824 −301 -Antes era lista de cards verticais; agora é DataTable PrimeVue com: -- **Sidebar** `--m-bg-soft` + border-right + sombra `0 2px 8px` nos cards -- **Stats card** (Total / Novos / Convertidos / Rejeitados) — Novos azul / Conv verde / Rej vermelho -- **Status filter card** com 3 níveis de cor (default 5%, hover 10%, active 16% + ring) + botão - "Limpar filtro" com Transition fade quando ativo -- **Toolbar main** com search + view toggle (lista/grade) -- **DataTable** `:loading + paginator + scrollable scrollHeight="flex" - + tableStyle="min-width:640px"` — colunas: Paciente / Contato / Recebido / Ação (frozen 60px right) -- **Coluna frozen** com bg `--p-content-background` (canônico, opaco em ambos modos), - sombra à esquerda, hover/selected herdam da row -- **Botão pencil** (`mcr-row__action`) primary tinted -- **View Grade** alternativa — cards em CSS grid `auto-fill, minmax(220px, 1fr)` - com Paginator standalone abaixo -- **Subheader explicativo** com `pi pi-info-circle` em primary +4. **`98f7252`** — `Melissa: 6 Pages aplicando blueprint + dialogs unificados + Conversa estilo WhatsApp` + - Sprint F (05-06, esta sessão): + - **MelissaCompromissos**: blueprint mantendo row design original (color stripe + name + badges + descrição + meta inline) + - **MelissaGrupos** + **MelissaTags**: blueprint completo + dialog "Pacientes do grupo/tag" com lista vinculada via `patient_group_patient` / `patient_patient_tag` + - **MelissaMedicos**: blueprint + dialog "Pacientes encaminhados" usando cor primary; dialog editar com 4 seções (Identificação/Contato/Localização/Obs) espelhando PatientsCadastroPage + - **MelissaConversas**: subheader, sidebar reestruturada, alerta unlinked no topo, kanban mobile com `min-height` nas colunas, fix bug `filters` é `ref({})` então no script precisa `.value` + - **MelissaRecorrencias**: button list de status, busca por nome do paciente, footer Limpar filtros + - **ConversationDrawer**: redesign WhatsApp (avatar primary, bg "papel de parede", bolhas com tail, time/status overlay, compose pill + send circular #00a884) + - 7 files, +7879 −1467 -### 3. MelissaAgendamentosRecebidos — NOVO native page - -Substitui o embed via `MelissaEmbed`. Espelha 1:1 o blueprint, prefixo `mar`. - -- Tabela DB: `agendador_solicitacoes` (não `patient_intake_requests`) -- **4 status com cores próprias**: - - 🔵 Pendente (`rgb(37, 99, 235)`) - - 🟢 Autorizado (`rgb(22, 163, 74)`) - - 🟦 Convertido (`rgb(13, 148, 136)` — teal, distinto) - - 🔴 Recusado (`rgb(220, 38, 38)`) -- **DataTable**: 6 colunas (Paciente / Solicitado / Tipo / Contato / Recebido / Ação frozen) -- **3 ações condicionais** no dialog de detalhes: - - **Pendente** → Recusar (com motivo) | Autorizar | Converter em sessão - - **Autorizado** → Converter em sessão (cria paciente se necessário + abre `AgendaEventDialog`) - - **Convertido/Recusado** → só fechar -- **AgendaEventDialog wired** com props canônicas (event-row, owner-id, tenant-id, - agenda-settings, commitment-options, preset-commitment-id, - restrict-patients-to-owner) -- Subheader explicativo próprio - -**Wire-up no `MelissaLayout.vue`:** -- Import de MelissaAgendamentosRecebidos -- `MELISSA_EMBED_KEYS` perdeu `agendamentos-recebidos` -- `MELISSA_NON_CONFIG_SLUGS` ganhou direto -- Render block conditional entre Cadastros e Médicos -- `MelissaEmbed.EMBED_MAP` perdeu a entry agendamentos-recebidos (com comentário) - -**Importante**: o `MelissaEmbed.vue` foi modificado pra fazer `hideChrome` flag -+ close flutuante numa tentativa anterior — **revertido** ao original -porque ficou ruim. Layout Rail (`/therapist/agendamentos-recebidos`, -`/admin/agendamentos-recebidos`) continua usando `AgendamentosRecebidosPage.vue` -inalterada. - -### 4. MelissaPacientes — refator parcial pra blueprint - -A página é 3-pane (filters / list / detail) — não converti pra -DataTable (perderia o detail panel). Aplicado o que faz sentido: - -**Sidebar:** -- Sombra `0 2px 8px` nos cards `.mp-w` (sidebar + quick view direita) -- Status pills com cores próprias por status: - - Todos = neutral (sem cor) - - 🟢 Ativos verde - - 🟡 Inativos amber `rgb(217, 119, 6)` (warn, pausa temporária) - - 🔴 Arquivados vermelho -- Botão "+" do header de Grupos/Tags **substituído** por: - - Botão `pi pi-cog` no header (sem borda, hover primary) — emite - `goto-grupos`/`goto-tags` que navegam pras Melissa Pages nativas - - Botão tracejado "+ Grupo / + Tag" (texto sem "+", só com ícone - `pi pi-plus`) abaixo de cada lista — abre popover de criação -- Botão `[×]` (clear filter) agora vermelho `rgb(220, 38, 38)` - -**Card de paciente (list view):** -- **Email em coluna própria** (220px, truncate) — separada do main -- **Telefone em coluna própria** (140px) — paralela ao email -- Em mobile (<768px) email/phone escondem (info no detail panel) -- Subheader explicativo - -**Mobile:** -- Coluna ação fixa (`position: sticky; right: 0; bg --m-bg-medium`) -- 5 botões inline → 1 botão `pi pi-pencil` único que abre `` -- **Popover de ações** global no fim da `
` com 5 items: - Prontuário / Sessões / WhatsApp / Editar / Arquivar (com divider) -- Bug fix: **`min-height: 0` na `.mp-list`** — sem isso a `mp-list__body` - não scrollava em mobile (`flex: 1; overflow-y: auto` precisa de - parent constrained) - -**Toolbar:** -- View toggle list/grade (persistido em `mp.viewMode.v1` localStorage) -- Botão "Novo paciente" usa `PatientCreatePopover` (mesmo do agenda) — - já estava wired, só explicitei `$event` no click handler - -**Grid view (NOVO):** -- CSS grid `auto-fill, minmax(240px, 1fr)` -- Cards com avatar+pencil topo, nome+novo, status, email+phone empilhados, - tags, "Última: X" com border-top -- Mantém `selecionarPaciente` (mostra detail panel mesmo no grid) -- `
` com handlers de teclado - -### 5. Subheader explicativo (padrão novo do blueprint § 9) - -Aplicado em 3 páginas, cada uma com texto próprio que diferencia -páginas de layout idêntico: - -- **MelissaCadastrosRecebidos**: "Cadastros completos enviados por - pacientes via formulário externo (link público). Revise os dados, - **converta em paciente ativo** com 1 clique ou **rejeite** com motivo - opcional." -- **MelissaAgendamentosRecebidos**: "Solicitações de horário vindas do - agendador online à espera de ação. **Autorize** pra reservar o slot, - **recuse** com motivo, ou **converta direto em sessão** — a gente cria - o paciente automaticamente se ainda não existir." -- **MelissaPacientes**: "Lista completa dos pacientes cadastrados. - Filtre por **status, grupo ou tag** à esquerda, busque por nome ou - contato, e clique numa linha pra abrir o **prontuário** com histórico, - sessões e documentos." - -CSS padrão: `bg --m-bg-soft` + ícone `pi pi-info-circle` em primary + -texto muted 0.78rem com `` em `--m-text`. Border-bottom matching -o page__head. - -### 6. Arquivamento de pacientes — restore implementado - -**Repository** (`patientsRepository.js`): -- Novo `restorePatient(id, { tenantId })` — espelha `softDeletePatient` - mas seta `status = 'Ativo'` - -**PatientsCadastroPage** (`statusOpts:749`): -- Adicionado `{ label:'Arquivado', value:'Arquivado' }` à lista de - opções do dropdown — fecha o gap de inconsistência ao editar paciente - arquivado - -**MelissaPacientes**: -- Helper `isArquivado(p)` (case-insensitive) -- Função `restaurarPaciente(p)` com confirm dialog → `restorePatient` → - toast "Restaurado" → `refetchTudo` -- **Toggle visual condicional**: - - Paciente **ativo**: 🗑 trash vermelho ("Arquivar") - - Paciente **arquivado**: ↶ undo primary ("Restaurar") -- Aplicado em ambos contextos: - - Desktop (5 botões inline) — `mp-card__action--restore` com hover primary - - Mobile popover menu — `mp-actions-menu__item.is-restore` +5. **`15103ed`** — `Cleanup: backups antigos removidos + dashboard config + HANDOFF/log` + - Backups `database-novo/backups/2026-03-27` e `2026-03-29` removidos + - `db.config.json` + `generate-dashboard.cjs` + `dashboard.html` atualizados + - HANDOFF.md (estado 05-05) + log.md + - 11 files, +435 −87172 --- -## 🧪 ROTEIRO DE TESTE (rápido — ~15 min) +## 📋 RESUMO da sessão 2026-05-06 -### Setup -```powershell -Remove-Item -Recurse -Force node_modules\.vite -ErrorAction SilentlyContinue -npm run dev -``` +### Padrões consolidados nas 6 páginas Melissa restantes -### Fase 1 — MelissaCadastrosRecebidos (5 min) -- `/melissa/cadastros-recebidos` → DataTable com header transparent + - bold, paginator centralizado, coluna Ação frozen direita com bg - branco no light -- Toolbar: search + view toggle (lista/grade) -- Sidebar: stats com Novos azul, Convertidos verde, Rejeitados vermelho - (quando >0); Status filter com 3 cores + Limpar filtro fade -- Subheader azul info-circle explicativo -- Mobile: drawer abre, scroll horizontal funciona, pencil único na - Ação frozen, todas colunas visíveis (não escondem) +Cada página agora segue o blueprint: -### Fase 2 — MelissaAgendamentosRecebidos (5 min) -- `/melissa/agendamentos-recebidos` → mesma estrutura, 4 status com cor - (Pendente azul / Autorizado verde / Convertido teal / Recusado vermelho) -- Click numa pendente → dialog mostra 3 ações (Recusar / Autorizar / - Converter em sessão); converter cria paciente automático + abre - AgendaEventDialog -- Subheader próprio diferenciando da Cadastros Recebidos +- **Subheader explicativo** logo abaixo do header (1-2 frases descrevendo a página + ações principais com ``) +- **Sidebar reestruturada** em 2 zonas: + - `.xx-side` com `bg: var(--m-bg-soft)` + `border-right` (visual de coluna lateral) + - `.xx-side__scroll` (flex 1, overflow auto) com cards `xx-w--side` (margin lateral 12px + sombra) + - `.xx-side__footer` (flex-shrink 0, padding 12px, bg-soft, border-top) com botão **"Limpar filtros"** global +- **Xs inline** ao lado do título de cada filter card (vermelho 18×18, aparece só quando filtro ativo) +- **Transition `xx-clear`** no footer (fade + collapse 240ms) +- **Body sem padding/gap** (sidebar fica colada à esquerda; main column tem padding interno próprio) +- **Mobile drawer** com sidebar teleportada perde bg/border-right (drawer já tem chrome) + footer vira `position: sticky; bottom: 0` com bg blur -### Fase 3 — MelissaPacientes (5 min) -- `/melissa/pacientes`: - - Sidebar com sombras nos cards (Estatísticas, Status, Grupos, Tags) - - Cards Grupos/Tags: cog `⚙` no header (sem borda, navega pra - `/melissa/grupos` e `/melissa/tags`); botão tracejado "+ Grupo" / - "+ Tag" abaixo da lista; X de limpar filtro vermelho - - Status pills coloridas (Ativos verde / Inativos amber / Arquivados - vermelho) -- Card de paciente: email coluna própria, phone coluna própria -- Toolbar: view toggle lista/grade (persiste); "Novo paciente" abre - PatientCreatePopover com 3 opções (rápido / completo / link) -- **Mobile (<1024px)**: scroll vertical funciona (era bug, corrigido com - `min-height: 0` na `.mp-list`); ações reduzem a 1 pencil sticky-right - com Popover de 5 items -- **Restore de arquivado**: - - Filtra por "Arquivados" (cor vermelha) - - Hover num card → desktop mostra ↶ "Restaurar" (primary) no lugar - do 🗑 trash - - Mobile: pencil → popover mostra "Restaurar" primary - - Click → confirm "Restaurar X?" → status volta a Ativo → some do - filtro Arquivados, aparece em Ativos +### Dialogs harmonizados (Tags / Grupos / Médicos) ---- +Espelhando o pattern do **PatientsCadastroPage > Identidade**: -## ⏭️ PRÓXIMOS PASSOS (sugestão) +- **Section dividers**: `` + linha `h-px` primary-tinted +- **Cada campo**: `FloatLabel variant="on"` + `IconField` + `InputIcon` + InputText/Select com `variant="filled"` +- **Grid**: `grid grid-cols-1 gap-6 xl:grid-cols-2 mb-7` +- **Erro inline**: `` + `pi-exclamation-circle` +- **Footer**: Button PrimeVue padrão (Cancelar secondary text + Salvar com `pi-check`) +- **Bordas dos inputs**: padrão do PrimeVue (sem CSS scoped sobreescrevendo) -### 1. Decidir A66 V2 — design +### Dialog "Pacientes vinculados" (Tags / Grupos / Médicos) -User testou o esqueleto V2 em `/preview/agenda-dialog-v2` (rota em -`routes.misc.js`) e **não gostou do design**. Aguarda feedback -específico antes de iterar: -- Estrutura: 3 zonas (PACIENTE/QUANDO/O QUÊ) tá errado? Prefere 2 zonas? - 1 coluna scroll? Tabs? -- Hierarquia: hero PACIENTE muito grande/pequeno? -- Densidade: airy demais ou apertado demais? -- Chips de duração/scope/status: muito visuais? -- Mobile: já testou viewport pequeno? -- Referência visual: Win11? Cleaner? Mais como V1? Algum app? +Pattern unificado: -Quando tiver feedback, iterar em `AgendaEventDialogV2.vue`. Sub-sessão -3 (migração nos 9 consumers) só depois do V2 estabilizar. +- **Borda 2px na cor da entidade** (cor da tag/grupo via `:pt root style`); médicos usam `var(--p-primary-color)` (sem cor própria) +- **Header**: avatar quadrado/circular colorido + título com cor da entidade + sub com count +- **Toolbar**: search + count pill colorido +- **Estados**: loading (cor da entidade), erro (vermelho), empty (icon tinted), sem-resultado-de-busca +- **DataTable interna**: Paciente (avatar com iniciais primary-tinted + nome + email) / Telefone / Botão "Abrir" outlined +- **Click "Abrir"** → reusa `PatientCadastroDialog` com `:patient-id` +- **Sem footer "Fechar"** — o X do header é o único botão de fechar +- **X do header** estilizado como `.xx-close` (32×32, bg --m-bg-soft, border, hover bg-soft-hover) via `:pt="{ pcCloseButton: { root: { class: 'xx-pdlg-close-btn' } } }"` + CSS `:global()` (Dialog é teleportado pra body) -### 2. Aplicar blueprint nas demais páginas tabulares Melissa +### ConversationDrawer redesign (estilo WhatsApp) -Ainda faltam (todas seguem `melissa-table-page-blueprint.md`): -- `MelissaCompromissos.vue` -- `MelissaMedicos.vue` -- `MelissaConversas.vue` -- `MelissaRecorrencias.vue` -- `MelissaTags.vue` -- `MelissaGrupos.vue` +- **Header**: avatar circular 40×40 com iniciais + nome em destaque + sub (canal icon + número formatado mono) +- **Container de mensagens**: bg "papel de parede" (`color-mix` bege esverdeado WA + radial-gradient pattern de pontos) +- **Bolhas**: + - Inbound light `#ffffff` / dark `#202c33` — top-left zerado simulando tail + - Outbound light `#d9fdd3` / dark `#005c4b` — top-right zerado simulando tail + - Padding `6/10/18/10` (extra bottom pra meta) + - Border-radius 8px + sombra `0 1px 0.5px rgba(0,0,0,0.13)` + - Detecção dark via `:global(.p-dark) / html.dark / [data-theme="dark"]` +- **Meta** (HH:MM + status checks): `position: absolute` no canto inferior direito DENTRO do balão + - ✓ enviada / ✓✓ entregue / ✓✓ azul `#53bdeb` lida / ✗ vermelho falhou +- **Compose**: + - Botões emoji + templates à esquerda do input + - Textarea com `border-radius: 22px` (pill) + - Botão **Send circular 40×40** verde `#00a884` (cor send WA), translate-up no hover -Padrão: prefixo próprio (`mco`, `mmd`, etc.), sidebar com filtros -coloridos, DataTable com frozen action column, view toggle, subheader, -mobile pencil+popover. +### Bug fix: cores de tags/grupos no MelissaPacientes -### 3. Decidir commits - -Acumulado de 4 sprints sem commitar (28 mod + 22 novos). Sugestão de -chunks lógicos (em ordem temporal): - -1. **Sprint A** — Sprint 04-29/30 (hub Configurações + 7 Melissa Pages - + dialog blueprint dark) -2. **Sprint B** — Sprint 05-03 (timeline FullCalendar parity, cards - resumo, dock pins, topbar, NotificationDrawer redesign, - melissaCacheStore, useMelissaDockPins) -3. **Sprint C** — Sprint 05-04 (MelissaAgendaHistoricoCard, useFeriados - cache opt-in, PatientProntuario aba Visão Geral, migration - `20260504000001_fix_cancel_notifications_excluido.sql`) -4. **Sprint D** — A66 sub-sessão 1 (5 composables + 5 specs + 265 - testes) + sub-sessão 2 esqueleto (V2 + preview) — **MARCAR como WIP** -5. **Sprint E HOJE** — Blueprint tabular Melissa + MelissaCadastrosRecebidos - + MelissaAgendamentosRecebidos + MelissaPacientes refator + restore - de pacientes arquivados - -### 4. Restore em outros layouts - -A `PatientsListPage.vue` (layout Rail) também tem KPI "Arquivados" -mas SEM botão Restaurar. Quando tocar nela, replicar o pattern: -botão condicional ↶ "Restaurar" baseado em `p.status === 'Arquivado'`, -chama `restorePatient` do mesmo repository. +`patientsRepository.listGroups()` e `listTags()` mapeiam `cor → color` (camelCase frontend-friendly). O template do MelissaPacientes lia `g.cor` / `t.cor` (PT-BR) em **20 lugares** — sempre `undefined` → fallback caía no cinza/hex hardcoded. Trocado pra `g.color` / `t.color` via `replace_all`. Outros consumers (PatientsCadastroPage) já usavam `.color` correto, não foram afetados. --- @@ -365,46 +150,55 @@ chama `restorePatient` do mesmo repository. ### A66 — Refactor `AgendaEventDialog` V2 (3 sub-sessões) **Estado**: -- ✅ Sub-sessão 1 (composables) — 5 composables + 265 testes, 495/495 - suite passando, AgendaEventDialog 3522→2632 linhas (-25%) -- 🟡 Sub-sessão 2 (template V2) — esqueleto entregue 2026-05-05, - **user não gostou do design**, aguarda feedback específico +- ✅ Sub-sessão 1 (composables) — 5 composables + 265 testes, 495/495 suite passando, AgendaEventDialog 3522→2632 linhas (-25%) +- 🟡 Sub-sessão 2 (template V2) — esqueleto entregue 2026-05-05, **user não gostou do design**, aguarda feedback específico - ⏳ Sub-sessão 3 (migração nos 9 consumers) — depende do V2 estabilizar -**Por que sessão dedicada**: arquivo tinha 3522 linhas, é consumido em -9 páginas críticas (AgendaTerapeutaPage, AgendaClinicaPage, -MelissaLayout, MelissaEventoPanel, useMelissaAgenda, -AgendamentosRecebidosPage, TherapistDashboard, AgendaDevDocs). -Refatoração inteira não cabe em uma única conversa sem alto risco -de regressão. - -**Estado dos arquivos**: -- Backup: `src/features/agenda/components/AgendaEventDialog.vue.bak` - (155KB, byte-idêntico ao original) -- 5 composables novos em `src/features/agenda/composables/`: - `agendaEventHelpers.js` (262L) + - `useAgendaEventComposer.js` (485L) + - `useAgendaEventActions.js` (387L) + - `useAgendaEventPickerBilling.js` (378L) + - `useAgendaEventLifecycle.js` (474L) -- 5 specs em `__tests__/` (75+76+28+43+43 = 265 testes) -- `AgendaEventDialogV2.vue` (~1100L, 3 zonas) — não testado visualmente -- Preview em `/preview/agenda-dialog-v2` com 5 cenários - **Próxima ação**: user dá feedback design → eu itero V2. +Perguntas em aberto: +- Estrutura: 3 zonas (PACIENTE/QUANDO/O QUÊ) tá errado? Prefere 2 zonas? 1 coluna scroll? Tabs? +- Hierarquia: hero PACIENTE muito grande/pequeno? +- Densidade: airy demais ou apertado demais? +- Chips de duração/scope/status: muito visuais? +- Mobile: já testou viewport pequeno? +- Referência visual: Win11? Cleaner? Mais como V1? Algum app? + +--- + +## ⏭️ PRÓXIMOS PASSOS (sugestão) + +### 1. Restore arquivados na `PatientsListPage.vue` (layout Rail) + +A `PatientsListPage.vue` tem KPI "Arquivados" mas SEM botão Restaurar. Replicar o pattern da MelissaPacientes: +- Helper `isArquivado(p)` (case-insensitive) +- Botão condicional ↶ "Restaurar" baseado em `p.status === 'Arquivado'` +- Click → confirm → `restorePatient(id, { tenantId })` do mesmo repository → toast + refetch +- Toggle visual: ↶ undo primary quando arquivado / 🗑 trash vermelho quando ativo + +### 2. Decidir A66 V2 design + +Aguarda feedback. Sem feedback, posso: +- Tentar uma direção alternativa (ex: 1 coluna scroll mais minimalista) +- Comparar com referências externas (Outlook, Cal.com, Linear) +- Voltar pro V1 polido em vez de redesenhar + +### 3. Outras Melissa Pages? + +Todas as 9 páginas tabulares Melissa já estão alinhadas ao blueprint: +- ✅ Cadastros Recebidos, Agendamentos Recebidos, Pacientes (Sprint E) +- ✅ Compromissos, Grupos, Tags, Médicos, Conversas, Recorrências (Sprint F) + +Não há mais páginas pendentes do plano original. + --- ## 📚 Tracking persistente - **A66** — sub-sessão 2 (V2 design) aguardando feedback do user -- **Blueprint tabular Melissa** — referência canônica: - `MelissaCadastrosRecebidos.vue`. Próximas adoções planejadas: - Compromissos, Médicos, Conversas, Recorrências, Tags, Grupos -- **Restore pacientes** — implementado no Melissa; replicar no Rail - (`PatientsListPage.vue`) quando tocar -- **Migration aplicada local**: `20260504000001_fix_cancel_notifications_excluido.sql` - (cancela 'excluido' do enum trigger). Já aplicada no DB local. +- **Blueprint tabular Melissa** — referência canônica: `MelissaCadastrosRecebidos.vue`. Todas as 9 páginas alinhadas. +- **Restore pacientes** — implementado no Melissa; replicar no Rail (`PatientsListPage.vue`) +- **Migration aplicada local**: `20260504000001_fix_cancel_notifications_excluido.sql`. Já aplicada no DB local. --- @@ -421,7 +215,7 @@ npm run dev npm run build ``` -**Suite de testes** (495 testes do A66 incluídos): +**Suite de testes** (495 testes incluindo o A66): ```powershell npm run test ``` @@ -432,5 +226,4 @@ direto em `/melissa/...`. Pra testar Rail (regressão), troca em --- -**Boa noite. Amanhã começa pelo feedback do A66 V2 ou aplicação do -blueprint nas demais Melissa Pages tabulares — o que você preferir.** +**Estado limpo, push pendente. Quando voltar, próximo passo natural é o feedback do A66 V2 ou o restore na PatientsListPage. Sua escolha.** diff --git a/Obsidian/Brain/log.md b/Obsidian/Brain/log.md index aa33bd8..7525ec4 100644 --- a/Obsidian/Brain/log.md +++ b/Obsidian/Brain/log.md @@ -28,3 +28,18 @@ A66 V2 — user não gostou design, aguarda feedback específico. ## [2026-05-06 12:00] session | MelissaCompromissos refator blueprint Touched: none (aplicacao direta do blueprint existente - sem mudanca de wiki) Detalhes: refator de MelissaCompromissos pro melissa-table-page-blueprint preservando o design do row (color stripe + name+badges + descricao + meta inline). DataTable com 3 colunas (Compromisso flex / Atividade 220px / Acoes frozen 140px com toggle+pencil+trash). Sidebar com 2 grupos de filtros: Status (Ativos verde / Inativos amber) e Tipo (Nativos blue / Meus accent), cada um com Limpar filtro proprio. Grid view com cards (color stripe 28px + toggle topo + footer com edit/trash). Subheader explicativo. View toggle persistido em mc.viewMode.v1. Removeu Popover de actions (drawer mobile cobre). Stats: Total/Ativos/Inativos/Tempo total. ESLint 0 errors. UI nao testada em browser ainda. + +## [2026-05-06 14:00] session | Melissa 6 Pages blueprint + WhatsApp drawer + commits +Touched: none (sem nova pagina de wiki - aplicacao do blueprint existente) +Detalhes: Sprint F entregue. Blueprint tabular aplicado em MelissaCompromissos +(row design preservado), MelissaGrupos, MelissaTags, MelissaMedicos, +MelissaConversas, MelissaRecorrencias. Dialogs de criar/editar harmonizados +(FloatLabel + IconField + section dividers espelhando PatientsCadastroPage +Identidade). Dialogs "Pacientes do grupo/tag/medico" com cor primary nos +avatares de letras + X de fechar igual .xx-close. ConversationDrawer redesign +estilo WhatsApp (avatar primary, bg papel de parede, bolhas com tail simulada, +time/status overlay no canto inferior direito, compose pill + send circular +verde #00a884). Bug fix em MelissaPacientes: g.cor->g.color em 20 lugares +(repository devolve camelCase, template lia PT-BR e cores nao apareciam). +5 commits criados: 957e912, 6d9b36d, 269b531, 98f7252, 15103ed. Working tree +limpa. HANDOFF.md atualizado.