HANDOFF: estado completo MelissaPaciente Fases 1-8 + iteracao pos-Fase 8

Reescreve HANDOFF.md com:
- Status final: 24 commits no branch, working tree limpa
- Historico completo dos commits (mais recente -> mais antigo)
- Lista de arquivos novos/modificados (composables, utils, paginas)
- Pendentes pra proxima sessao
- 5 decisoes arquiteturais documentadas
- Hotspots de drift no AgendaEventDialog
- Comandos uteis pra retomar

Adiciona entry no log.md descrevendo a iteracao pos-Fase 8 (16 commits
de UX/funcionalidades novas + debugging do AgendaEventDialog reuse).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-08 19:52:00 -03:00
parent 6ad91e7853
commit 646cec5833
2 changed files with 158 additions and 184 deletions
+102 -184
View File
@@ -1,23 +1,18 @@
# HANDOFF — 2026-05-06 (Melissa Pages aplicando blueprint + ConversationDrawer WhatsApp redesign + commits) # HANDOFF — 2026-05-08 (MelissaPaciente — port completo + iteração de UX)
Documento de continuidade. **Quando voltar, comece lendo esta página.** Documento de continuidade. **Quando voltar, comece lendo esta página.**
> **🟢 ENTREGUE HOJE** — Blueprint tabular aplicado nas **6 Melissa Pages restantes** > **🟢 PLANO DE 8 FASES COMPLETO** — `MelissaPaciente.vue` (~2400L) é a versão
> (Compromissos, Grupos, Tags, Médicos, Conversas, Recorrências) + dialogs > Melissa nativa do `PatientProntuario.vue` legacy (3593L). Todas as 7 abas
> harmonizados com `FloatLabel + IconField + section dividers` + dialogs > entregues, wire-up final feito (Dialog → route `/melissa/paciente?id=X`).
> "Pacientes do grupo/tag/médico" com cor primary nos avatares + redesign > 5 composables + utils compartilhados extraídos.
> 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).
> **🟢 COMMITADO** — Working tree estava com 4 sprints acumulados (~50 arquivos). > **🟢 ITERAÇÃO PÓS-FASE 8** — Várias rodadas de feedback do user com fixes:
> Foram criados **5 commits** lógicos antes do push, do mais antigo pro mais > full-width, sidebar "Voltar pra Pacientes" (no lugar de Configurações),
> recente. Ver seção "Histórico de commits" abaixo. > editar inline, openWhatsapp fix, dialog Lançamento, dialog Nova Sessão
> com `AgendaEventDialog` real, recorrências do paciente.
> **🟡 AINDA PENDENTE** — Sub-sessão 2 do A66 (V2 dialog): user não gostou > **🟢 COMMITADO + PUSHED** — Working tree limpa.
> do design do esqueleto entregue em 2026-05-05. Aguarda feedback específico
> antes de iterar. Detalhes na seção "Sessões dedicadas pendentes".
--- ---
@@ -29,201 +24,124 @@ Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean nothing to commit, working tree clean
``` ```
(após `git push`. Antes do push: 5 commits ahead.) ---
## 📦 Histórico de commits da sessão (mais recente → mais antigo)
| # | Hash | Resumo |
|---|------|--------|
| 24 | `6ad91e7` | passa preset-commitment-id pro AgendaEventDialog (fix botão Salvar sumido) |
| 23 | `cf1cd67` | pré-popula eventRow com commitment_id + paciente nome/avatar/status |
| 22 | `73788c7` | AgendaEventDialog: lockType auto-seleciona commitment "Sessão" (fix jornada/billing/freq sumidos) |
| 21 | `30d09eb` | AgendaEventDialog: props lockType + lockPatient + slot #headerLeft (aditivos) |
| 20 | `88dff50` | (REVERTIDO em 30d09eb) usa AgendaEventDialog GLOBAL via inject |
| 19 | `b040e15` | header custom do dialog Nova Sessão (ícone + título + nome) |
| 18 | `42a39ed` | dialog Nova Sessão usa "Frequência" estilo AgendaEventDialog |
| 17 | `9e76e4e` | bloco "Recorrências do paciente" na Tab Agenda |
| 16 | `f1d6fba` | dialog nova sessão integra useRecurrence (recorrência semanal) |
| 15 | `a8ab13b` | dialog inline nova sessão + createSession mutation |
| 14 | `21c71f7` | addFinancial navega pra Financeiro + novo botão Agendar |
| 13 | `64005a5` | fix openWhatsapp + dialog inline novo lançamento financeiro |
| 12 | `301a712` | editPatient abre PatientCadastroDialog INLINE (sem sair) |
| 11 | `5d2c389` | fix sidebar cards encolhendo + gap das abas main |
| 10 | `159b80d` | full-width + sidebar "Voltar pra Pacientes" no lugar de Configurações |
| 9 | `71ee51d` | **Fase 8** wire-up final (Dialog → route /melissa/paciente?id=X) |
| 8 | `167e864` | **Fase 7** Tabs Documentos + Conversas (KPIs + embed componentes existentes) |
| 7 | `e7c0f6c` | **Fase 6** Tab Financeiro + mark paid (mutation que legacy não tem) |
| 6 | `8a8d2e0` | **Fase 5** Tab Agenda (KPIs + filtros + grupos por mês + ações) |
| 5 | `1278e93` | **Fase 4** Tab Prontuário MVP (evolução via session.observacoes) |
| 4 | `4fc0e3a` | **Fase 3** Tab Perfil (6 sections stacked + anchors) |
| 3 | `ab7526b` | **Fase 2** Tab Visão Geral (4 KPIs + timeline + msgs + notas) |
| 2 | `df61cc4` | **Fase 1** Foundation (5 composables + skeleton 7 tabs + slug paciente) |
| 1 | `f3f0d83` | (pré-MelissaPaciente) preview teleport 3-way no Agendador/LinkExterno + chrome 6 páginas |
--- ---
## 📦 Histórico de commits criados hoje ## 📂 Arquivos novos / modificados
Em ordem cronológica de criação (mais antigo → mais novo): ### NOVOS — composables + utils compartilhados
- `src/features/patients/composables/usePatientDetail.js` (~108L) — patient + groups + tags
- `src/features/patients/composables/usePatientSessions.js` (~155L) — agenda_eventos + computeds + `updateStatus`/`createSession` mutations
- `src/features/patients/composables/usePatientFinancial.js` (~155L) — financial_records + computeds + `markPaid`/`markUnpaid`/`createRecord` mutations
- `src/features/patients/composables/usePatientMessages.js` (~80L) — conversation_messages + computeds
- `src/features/patients/composables/usePatientDocuments.js` (~110L) — documents + computeds (topType, pendentes, sizeTotalFormatted)
- `src/features/patients/composables/usePatientRecurrences.js` (~110L) — recurrence_rules + cancel/reactivate + ativas/canceladas computeds
- `src/features/patients/utils/patientFormatters.js` (~280L) — fmt* helpers + STATUS_LABEL/SEVERITY + tagStyle (luminance) + DOC_TYPE_LABEL + chConvLabel + recordStatus + RECORD_STATUS_LABEL + WEEKDAY_LABEL + fmtRecurrenceLabel/Fim
1. **`957e912`** — `Melissa polish + Prontuario Visao Geral + agenda historico` ### NOVO — página Melissa
- Sprints B (05-03) + C (05-04) acumulados: - `src/layout/melissa/MelissaPaciente.vue` (~2400L) — 7 abas funcionais, header custom, sidebar com Voltar pra Pacientes, dialog Lançamento inline, dialog Nova Sessão usando AgendaEventDialog real
- 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
2. **`6d9b36d`** — `A66 WIP: AgendaEventDialog quebrado em 5 composables + 265 specs + V2 esqueleto` ### MODIFICADOS — wire-up
- 5 composables (1986L total): `agendaEventHelpers`, `useAgendaEventComposer`, `useAgendaEventActions`, `useAgendaEventPickerBilling`, `useAgendaEventLifecycle` - `src/layout/melissa/MelissaLayout.vue` — entry SECOES.paciente + render condicional `<MelissaPaciente :patient-id="String(route.query.id || '')" @close="fecharSecao" />`
- 5 specs em `__tests__/` (75+76+28+43+43 = **265 testes**, 495/495 passando) - `src/layout/melissa/MelissaPacientes.vue``abrirProntuario` agora navega via `router.push('/melissa/paciente', query: { id })`. Removeu `<PatientProntuario>` Dialog. Watch em `route.query.edit` pra abrir cadastro full quando vem de `MelissaPaciente.editPatient`.
- AgendaEventDialog 3522 → 2632 linhas (-25%) - `src/layout/melissa/MelissaAgenda.vue``abrirProntuarioPorId` igual. Removeu Dialog legacy.
- `AgendaEventDialogV2.vue` esqueleto (~1100L, 3 zonas) + preview em `/preview/agenda-dialog-v2` - `src/layout/melissa/composables/useMelissaAgenda.js` — adicionou `onCreateEventoForPatient(patientId)` (não usado mais após reverter inject, mas mantido)
- Backup byte-idêntico em `AgendaEventDialog.vue.bak` - `src/features/agenda/components/AgendaEventDialog.vue`**3 props aditivas** (lockType, lockPatient, slot #headerLeft) + watch que auto-seleciona commitment "Sessão" quando lockType. **Zero regressão (301 specs passando)**.
- Dialogs auxiliares: `InsurancePlanQuickCreateDialog`, `ServiceQuickCreateDialog`
- 17 files, +10966 1298
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
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
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
--- ---
## 📋 RESUMO da sessão 2026-05-06 ## 🟡 PENDENTES PRA PRÓXIMA SESSÃO
### Padrões consolidados nas 6 páginas Melissa restantes User mencionou: **"tem alguns ajustes pra fazer nessa tela ainda"** após o último fix
do botão Salvar (commit `6ad91e7`). Ajustes específicos não foram detalhados ainda
— próxima sessão começa pelo feedback do user no dialog Nova Sessão.
Cada página agora segue o blueprint: ### Pendentes conhecidos (não ditos pelo user, mas observados)
- **PatientProntuario.vue legacy (3593L)** continua existindo intocado. Usado por:
- **Subheader explicativo** logo abaixo do header (1-2 frases descrevendo a página + ações principais com `<strong>`) - `TherapistDashboard.vue` (homepage role therapist sem Melissa)
- **Sidebar reestruturada** em 2 zonas: - `PatientsListPage.vue` (rota `/therapist/patients`)
- `.xx-side` com `bg: var(--m-bg-soft)` + `border-right` (visual de coluna lateral) - Quando user troca pra Melissa em `/account/profile`, vê a versão nativa
- `.xx-side__scroll` (flex 1, overflow auto) com cards `xx-w--side` (margin lateral 12px + sombra) - Pra deletar de vez precisa portar TherapistDashboard + PatientsListPage também
- `.xx-side__footer` (flex-shrink 0, padding 12px, bg-soft, border-top) com botão **"Limpar filtros"** global - **Tab Prontuário** é MVP usando `agenda_eventos.observacoes` como evolução. Quando schema clínico (`anamnese`, `clinical_notes`, `plano_terapeutico`) for adicionado, vira o real
- **Xs inline** ao lado do título de cada filter card (vermelho 18×18, aparece só quando filtro ativo) - **2 errors pré-existentes em MelissaLayout.vue** (duplicate key 'financeiro' L242, empty block L1130) — não foram tocados durante o port
- **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
### Dialogs harmonizados (Tags / Grupos / Médicos)
Espelhando o pattern do **PatientsCadastroPage > Identidade**:
- **Section dividers**: `<span class="text-[0.7rem] font-bold uppercase tracking-widest text-[var(--p-primary-color)]">` + 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**: `<small class="text-red-500">` + `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)
### Dialog "Pacientes vinculados" (Tags / Grupos / Médicos)
Pattern unificado:
- **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)
### ConversationDrawer redesign (estilo WhatsApp)
- **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
### Bug fix: cores de tags/grupos no MelissaPacientes
`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.
--- ---
## 🛠️ Sessões dedicadas pendentes ## 🧠 Conhecimento adicional acumulado nesta sessão
### A66 — Refactor `AgendaEventDialog` V2 (3 sub-sessões) ### Decisões arquiteturais
1. **`MelissaPaciente` segue o padrão Melissa** (mesmo prefix `mpa-`, glass chrome, sidebar 320px à esquerda, drawer mobile). Diferente das outras Melissa Pages: **largura total** (sem `right: max(...)`) porque conteúdo (KPIs grid + tabelas + timeline) precisa de espaço.
**Estado**: 2. **Reuso do `AgendaEventDialog`** via 2 props aditivas (`lockType` + `lockPatient`) + slot `#headerLeft` — caminho A escolhido após discussão honesta sobre drift risk de duplicação.
- ✅ 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
**Próxima ação**: user dá feedback design → eu itero V2. 3. **Inject vs state local**`MelissaPaciente` injeta `MELISSA_AGENDA_KEY` SÓ pra ler dados pesados (commitmentOptions, workRules, etc) e mantém state LOCAL pro dialog (sessaoDialogOpen/EventRow/StartISO/EndISO). Não colide com dialog global da Agenda.
Perguntas em aberto: 4. **Inicialização do dialog**: precisa passar **TANTO** `determined_commitment_id` no eventRow **QUANTO** prop `presetCommitmentId` separada. O resetForm lê o primeiro pra popular `form.commitment_id`; o lifecycle lê o segundo pra decidir step inicial. Sem ambos, cair em race condition (lifecycle reset desfaz selectCommitment).
- Estrutura: 3 zonas (PACIENTE/QUANDO/O QUÊ) tá errado? Prefere 2 zonas? 1 coluna scroll? Tabs?
- Hierarquia: hero PACIENTE muito grande/pequeno? 5. **Pré-popular paciente_nome/avatar/status no eventRow** é obrigatório pra não-edit — o composer só faz fetch async do nome quando isEdit=true.
- Densidade: airy demais ou apertado demais?
- Chips de duração/scope/status: muito visuais? ### Hotspots de drift no `AgendaEventDialog`
- Mobile: já testou viewport pequeno? Arquivo tem 5 composables que fazem o trabalho pesado: `useAgendaEventComposer` (state + computeds), `useAgendaEventActions` (save/delete), `useAgendaEventLifecycle` (watchers + init), `useAgendaEventPickerBilling` (selectCommitment, paciente picker), `agendaEventHelpers` (utils). Mexer aqui é seguro pelo coverage de **301 specs**.
- Referência visual: Win11? Cleaner? Mais como V1? Algum app?
### Slug `/melissa/paciente?id=<uuid>`
Registrado em `MelissaLayout.vue` SECOES + adicionado a `MELISSA_NON_CONFIG_SLUGS`. ID vem via query param. Funciona pra deep-link.
--- ---
## PRÓXIMOS PASSOS (sugestão) ## 🛠 Comandos úteis
### 1. Restore arquivados na `PatientsListPage.vue` (layout Rail) ```bash
# Specs do agenda (regression check pro AgendaEventDialog)
npx vitest run src/features/agenda/composables/__tests__
A `PatientsListPage.vue` tem KPI "Arquivados" mas SEM botão Restaurar. Replicar o pattern da MelissaPacientes: # Lint só dos arquivos do MelissaPaciente
- Helper `isArquivado(p)` (case-insensitive) npx eslint src/layout/melissa/MelissaPaciente.vue src/features/patients/composables/usePatient*.js src/features/patients/utils/patientFormatters.js
- 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 # Testar visualmente
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`. 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.
---
## 📦 Setup pra retomar
```powershell
# Limpa cache do Vite (recomendado depois de muita mudança em styles)
Remove-Item -Recurse -Force node_modules\.vite -ErrorAction SilentlyContinue
# Sobe dev
npm run dev npm run dev
# → http://localhost:5173/melissa/paciente?id=<uuid-real-de-paciente>
# Build sanity check (opcional, mas roda em ~25s)
npm run build
``` ```
**Suite de testes** (495 testes incluindo o A66):
```powershell
npm run test
```
**Login**: user com `layout_variant=melissa` no profile pra testar
direto em `/melissa/...`. Pra testar Rail (regressão), troca em
`/account/profile` → terceiro card "Layout".
--- ---
**Estado limpo, push pendente. Quando voltar, próximo passo natural é o feedback do A66 V2 ou o restore na PatientsListPage. Sua escolha.** ## ▶️ Próxima sessão — onde retomar
1. **Ler primeiro**: este HANDOFF.md (você já está nele)
2. **Aguardar feedback do user** sobre ajustes específicos no dialog Nova Sessão (mencionou que tem mais alguma coisa)
3. **Possíveis frentes**:
- Polish do dialog Nova Sessão pós-feedback
- Port do TherapistDashboard pra remover dependência do PatientProntuario legacy
- Schema clínico (anamnese/evolução) pra Tab Prontuário sair do MVP
4. **Antes de mexer em `AgendaEventDialog`**: rodar `npx vitest run src/features/agenda/composables/__tests__` (301 specs) pra confirmar baseline limpo
Boa sessão!
+56
View File
@@ -50,6 +50,62 @@ Touched: none
## [2026-05-08 00:00] session | Melissa cfg-* nativas + temas + cronometro DB ## [2026-05-08 00:00] session | Melissa cfg-* nativas + temas + cronometro DB
Touched: none Touched: none
## [2026-05-08 21:00] session | MelissaPaciente iteracao pos-Fase 8 + AgendaEventDialog reuse
Touched: none (iteracao de UX, sem novas paginas wiki)
Detalhes: 16 commits adicionais apos Fase 8 cobrindo ajustes de UX e
funcionalidades novas pedidas pelo user em sequencia:
LAYOUT/CHROME
- Full-width (removido right:max) — prontuario tem KPIs+tabelas+timeline,
precisa espaco. Outras Melissa Pages mantem o constraint.
- Sidebar: substituido botao "Configuracoes" por "Voltar para Pacientes"
(prontuario nao pertence a config). X faz history.back; sidebar btn
forca /melissa/pacientes.
- Cards da sidebar com flex-shrink:0 (estavam encolhendo, cortando conteudo).
- .mpa-tab com display:flex+gap:12px (filhos estavam colados).
FUNCIONALIDADES NOVAS
- editPatient abre PatientCadastroDialog INLINE (antes redirecionava pra
MelissaPacientes?edit=).
- openWhatsapp passa string id (era objeto) + detecta store.error pra
toast warn quando paciente sem telefone.
- addFinancial: dialog inline com createRecord mutation no
usePatientFinancial.
- goAgendar: dialog inline com createSession mutation, depois evoluiu
pra usar AgendaEventDialog real via lockType/lockPatient props.
- Botao "Agendar" novo na sidebar Acoes Rapidas (antes so tinha Lancamento).
DIALOG NOVA SESSAO — evolucao em 4 etapas
1. Inline simples (createSession direto)
2. Frequencia integrando useRecurrence (recorrencia semanal)
3. Frequencia estilo AgendaEventDialog (chips Avulsa/Semanal/Quinzenal/
diasEspecificos + qtd sessoes 4/8/12/personalizar)
4. Header custom (icon + Nova sessao + nome paciente)
5. **Decisao final**: trocar tudo por reuso do AgendaEventDialog real.
User pediu pra ver dialog completo da Agenda dentro do prontuario.
Caminho A escolhido: 2 props aditivas (lockType, lockPatient) + slot
#headerLeft no AgendaEventDialog. 301 specs continuam passando — zero
regressao nos 5 callsites legacy.
BLOCO DE RECORRENCIAS NA TAB AGENDA
- 5o KPI "Recorrencias" (count de ativas).
- Lista de cards mostrando regras com label legivel (fmtRecurrenceLabel)
+ meta (duracao/modalidade/fim/desde) + acoes inline (cancelar/reativar).
- Toggle "Ver canceladas".
DEBUGGING DIALOG (etapas finais)
- jornada/billing/freq sumiram: causa = lockType so setava step=2 sem
inicializar form.commitment_id. Fix: watch chama selectCommitment(sessao).
- Resumo lateral sem nome paciente: causa = nao passar paciente_nome/
avatar/status no eventRow. Fix: pre-popular dos computeds.
- Botao Salvar sumido: causa = footer tem v-if step=2; sem
presetCommitmentId prop, lifecycle ia step=1. Fix: passar
:preset-commitment-id no template.
TOTAL: 24 commits no branch. HANDOFF.md reescrito com estado completo +
historico + arquivos novos/modificados + decisoes arquiteturais +
hotspots de drift. Push pendente.
## [2026-05-08 19:30] session | MelissaPaciente Fase 8 — wire-up final (Dialog -> route) ## [2026-05-08 19:30] session | MelissaPaciente Fase 8 — wire-up final (Dialog -> route)
Touched: none Touched: none
Detalhes: PLANO DE 8 FASES COMPLETO. Os 2 callsites Melissa do Detalhes: PLANO DE 8 FASES COMPLETO. Os 2 callsites Melissa do