Sessão de domingo curta. Bug do chip resolvido pela manhã, polimento da Agenda à tarde (toolbar + stats interativos), à noite extração do MelissaEventoPanel novo (não testado em browser, fica pra amanhã). Working tree não commitado: B3 (MelissaEventoPanel novo + handlers no MelissaLayout + patient_id no normalize + defineExpose). Ver seção "PENDENTE DE TESTE" no HANDOFF pra plano de validação. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.6 KiB
HANDOFF — 2026-04-27 (domingo, pincelada de polimento Melissa)
Documento de continuidade. Quando voltar, comece lendo esta página. Sessão de domingo curta — bug do chip resolvido, polimento da Agenda (toolbar + stats interativos + extração do evento panel novo).
🧪 PENDENTE DE TESTE — MelissaEventoPanel novo (B3)
Implementado mas ainda não testado em browser. Working tree:
M src/layout/melissa/MelissaAgenda.vue
M src/layout/melissa/MelissaLayout.vue
M src/layout/melissa/composables/useMelissaEventos.js
?? src/layout/melissa/MelissaEventoPanel.vue
O que mudou:
- Novo
MelissaEventoPanel.vue(~350 linhas) substitui o panel inline que vivia emMelissaLayout.vue:851-940 - Bug latente do panel inline corrigido: o panel referenciava
.valor.toFixed,.participantes,.supervisorNome,.local— campos que NÃO existem nouseMelissaEventos.normalizeEvent. Crashava ao clicar em qualquer sessão real. - Novo painel mostra só campos REAIS: hora, modalidade (com ícone correto pra online/presencial), status pílula colorida (realizado verde, faltou vermelho, cancelado cinza, remarcar amber), descrição se houver
- Action bar agrupada em 3 grupos:
- Status (só pra sessão e quando status NÃO é final): Concluir | Faltou | Remarcar | Cancelar
- Paciente (só pra sessão com paciente vinculado): Prontuário | WhatsApp | Histórico
- Geral: Editar (sempre)
- Tooltips PrimeVue (
v-tooltip.top) em todos os botões MelissaAgenda.defineExpose({ refetch, openProntuario, setView })—MelissaLayoutchama viamelissaAgendaRefMelissaLayoutganhou imports:useToast,MelissaEventoPanel,supabase,useConversationDrawerStore. Handlers:updateEventoStatus(novoStatus, msg)faz UPDATE emagenda_eventos, toast verde, refetch da agenda, fecha painel. Erro → toast vermelho.useMelissaEventos.js: adicionadopatient_idaonormalizeEvent+ ao SELECT (eranull, agora vem do DB)- Removido CSS órfão do panel inline (linhas 1495-1561) e função
tipoLabelque ficou sem uso
O que esperar ao testar (em /preview/melissa → Agenda):
5 sessões REALIZADAS já estão no banco hoje (criadas em 2026-04-27 pra testar B2). Click em qualquer uma delas:
- Painel abre SEM CRASH (antes morria em
.valor.toFixed) - Status pílula verde "Realizada"
- Como status é final, NÃO mostra grupo de mudança de status
- Mostra: Prontuário, WhatsApp, Histórico (paciente) + Editar (geral)
Pra testar mudança de status, precisa criar evento com status
agendado. Ver query de seed no fim do HANDOFF.
Actions a validar:
- Prontuário → abre
PatientProntuariodo paciente real - WhatsApp → abre
conversationDrawerStore.openForPatient(patient_id) - Histórico → muda FC pra view "Lista" (MVP — filtro por paciente futuro)
- Editar → toast info "Use a Agenda completa em /agenda" (TODO real:
integrar
AgendaEventDialognuma sessão futura — é grande) - Concluir/Faltou/Cancelar (em evento agendado): UPDATE supabase → toast verde → refetch → painel fecha. Card "Realizadas" deve subir.
- Remarcar: muda status pra
'remarcar'(MVP). Reagendamento real fica pra integrar comAgendaEventDialogdepois.
Edge cases pra olhar:
- Evento de supervisão/reunião (sem
tipo='sessao') — só mostra "Editar" no action bar, sem grupos paciente/status. Visual ok? - Evento sem
patient_id(sessão antiga sem fk) —onWhatsappmostra toast warn "Paciente sem id";onAbrirProntuariomesmo padrão eventoBusydurante UPDATE bloqueia todos os botões (:disabled)
✅ COMMITS DO DIA (2026-04-27)
6a92735 Melissa Agenda: toolbar polish + stats interativos com filtro ← B1+B2
f2b15ce HANDOFF + cleanup: bug Teleport resolvido, backups antigos removidos ← reset HANDOFF
1bcb969 Layout Melissa (Direção B): preview, /profile, Agenda, dock, cadastro ← grupos 2-7 do antigo HANDOFF (todo o trabalho 24-26)
ab103ec Fix admin adjust créditos WhatsApp: clamp silencioso vira erro vermelho ← grupo 1 do antigo HANDOFF
Working tree limpo exceto pelo B3 não testado (ver acima).
✅ BUG RESOLVIDO — chip do cronômetro
Era: dois <Teleport to=".melissa-dock"> (chip cronômetro + dock contextual)
com <Transition> interno + v-if interno apontando pro mesmo target. O slot
do <Transition> colapsava pra comment placeholder VNode quando falsy, e
esses placeholders ficavam intercalados no array de children do target —
ao patch/reorder, shouldUpdateComponent lia .component.emitsOptions em
nó cujo .component foi anulado pelo unmount irmão. Daí null.
Fix (pattern oficial Vue): <Transition> envolvendo <Teleport>, não o
contrário. Assim o Teleport some/aparece como unidade, sem deixar placeholder
no target compartilhado.
<!-- ❌ ANTES -->
<Teleport to=".melissa-dock">
<Transition name="...">
<Element v-if="cond" />
</Transition>
</Teleport>
<!-- ✅ DEPOIS -->
<Transition name="...">
<Teleport v-if="cond" to=".melissa-dock">
<Element />
</Teleport>
</Transition>
Aplicado em MelissaCronometro.vue:322 e MelissaAgenda.vue:842.
Lição persistida: quando múltiplos Teleports compartilham target, evitar
v-if dentro do Teleport — coloca o v-if no próprio Teleport.
✅ B1 — Toolbar Agenda (commit 6a92735)
- Cluster Hoje + chevrons num pill único (mais coeso)
- Título com flex+ellipsis (some
min-width:130pxque truncava em Mês/Lista) - Botão "Hoje" disabled visual (opacity 0.45) quando hoje cai no range
visível — antes ficava idêntico, sem affordance. Computed
refDateIsToday title=""→v-tooltip.topnos chevrons (memória: tooltips PrimeVue)focus-visibleoutline accent em todos os botões da toolbar- View-btn ativo ganhou
box-shadowsutil
✅ B2 — Stats interativos (commit 6a92735)
- Click no stat filtra
fcEvents+sessoesHojepelo predicado correspondente (Total/Sessões/Realizadas/Faltas — feriados continuam sempre como background) - Stat ativo: borda accent + bg
color-mix(--m-accent 16%, --m-bg-soft) - Stats com
value=0ficam disabled (opacity 0.4,cursor:not-allowed) - Click no stat ativo limpa o filtro
- Chip flutuante "Filtrando: X" no canto sup direito do FC, click limpa
STAT_FILTERSmap global +toggleStatFiltro(key)helper- Tooltip dinâmico explicando ação esperada por estado
📦 Setup pra retomar
# Terminal 1 — functions
supabase functions serve --no-verify-jwt --env-file supabase/functions/.env
# Terminal 2 — vite
npm run dev
# Browser
http://localhost:5173/preview/melissa # ← Melissa preview
http://localhost:5173/account/profile # ← /profile com card Melissa
http://localhost:5173/auth/login # ← Login (dados reais)
🌱 Seeds de teste (DB local)
5 sessões REALIZADAS já existem hoje (owner: aaaaaaaa-0002-...):
08:00 Karen Horney, 09:30 André Green, 11:00 Felipe Santos, 14:00 Otto Rank,
16:00 Larissa Souza. Pra testar mudança de status, criar evento agendado:
-- via docker exec supabase_db_agenciapsi-primesakai psql -U postgres -d postgres -c "..."
INSERT INTO agenda_eventos (owner_id, tenant_id, patient_id, tipo, status, inicio_em, fim_em, modalidade, observacoes)
VALUES (
'aaaaaaaa-0002-0002-0002-000000000002',
'bbbbbbbb-0002-0002-0002-000000000002',
'fe670066-0d81-49ea-b177-61e83b455c59', -- Henrique Ferreira
'sessao', 'agendado',
current_date + time '18:00', current_date + time '19:00',
'presencial', 'Seed B3 - testar action bar de status'
);
Pra LIMPAR todas as sessões de seed depois:
DELETE FROM agenda_eventos WHERE observacoes LIKE 'Seed B%';
📌 Próximos passos (amanhã)
1. Testar B3 (prioridade) — ver seção topo. Se quebrar:
- Console errors → me passar pra debug
- Visual ruim em light mode → ajustar tokens no
MelissaEventoPanel.vue - Action falha em paciente sem
patient_id→ revisar guards
2. Commitar B3 após testar:
Melissa: MelissaEventoPanel novo + bug fix latente do panel inline
- Componente extraído MelissaLayout:851-940 → MelissaEventoPanel.vue
- Bug fix: panel inline crashava em .valor.toFixed (campo undefined no
normalizeEvent). Novo só usa campos reais
- Action bar agrupada (status / paciente / geral) com 7 ações
- useMelissaEventos.normalizeEvent: adicionado patient_id
- MelissaAgenda.defineExpose({ refetch, openProntuario, setView })
- MelissaLayout: handlers updateEventoStatus + onConcluir/Faltou/etc
3. Itens futuros maiores (sessão dedicada cada):
- Editar/Remarcar reais — integrar
AgendaEventDialogno MelissaLayout (precisa carregar row crua deagenda_eventos+ props extensas). ~60-90min, blast radius médio - Drag/resize no FC com persist (Fase 2 do roadmap) — UPDATE
inicio_em/fim_emno drop, conflito detection, undo - Recorrências virtuais (RRULE → ocorrências) — biggest fish
- Histórico de sessões com filtro por paciente — refinar lo que hoje só muda view do FC
- Fase 5 (A#32) — wire-up router pra Layout Melissa virar real (alto risco, precisa de Fase 3 antes — split MelissaLayout/MelissaResumo)
4. Outras opções (não-Melissa):
- QA Seção 3.4 do roteiro de testes — SLA conversas + Bot triagem + Lembrar paciente + ...
📚 Tracking persistente
- A#32 — Fase 5 router wire-up (pendente, sessão dedicada)
- A#33 — Bug do chip cronômetro: ✅ RESOLVIDO 2026-04-27
- Memória atualizada:
project_layout_melissa.mdregistra pattern Transition>Teleport e convenções