diff --git a/HANDOFF.md b/HANDOFF.md index 65d0b54..03ca331 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,12 +1,96 @@ -# HANDOFF — 2026-04-26 (continuação 2026-04-27: bug Teleport resolvido) +# HANDOFF — 2026-04-27 (domingo, pincelada de polimento Melissa) Documento de continuidade. **Quando voltar, comece lendo esta página.** -Sessão inteira polindo o Layout Melissa: light mode, integração no /profile, -Agenda fullscreen, dock taskbar, cadastro de paciente, ações contextuais. +Sessão de domingo curta — bug do chip resolvido, polimento da Agenda +(toolbar + stats interativos + extração do evento panel novo). --- -## ✅ BUG RESOLVIDO — chip do cronômetro (2026-04-27) +## 🧪 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 em `MelissaLayout.vue:851-940` +- **Bug latente do panel inline corrigido:** o panel referenciava + `.valor.toFixed`, `.participantes`, `.supervisorNome`, `.local` — campos + que NÃO existem no `useMelissaEventos.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 })` — + `MelissaLayout` chama via `melissaAgendaRef` +- `MelissaLayout` ganhou imports: `useToast`, `MelissaEventoPanel`, + `supabase`, `useConversationDrawerStore`. Handlers: + `updateEventoStatus(novoStatus, msg)` faz UPDATE em `agenda_eventos`, + toast verde, refetch da agenda, fecha painel. Erro → toast vermelho. +- `useMelissaEventos.js`: adicionado `patient_id` ao `normalizeEvent` + + ao SELECT (era `null`, agora vem do DB) +- Removido CSS órfão do panel inline (linhas 1495-1561) e função `tipoLabel` + que 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 `PatientProntuario` do 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 `AgendaEventDialog` numa 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 com `AgendaEventDialog` depois. + +**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) — `onWhatsapp` mostra + toast warn "Paciente sem id"; `onAbrirProntuario` mesmo padrão +- `eventoBusy` durante 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 `` (chip cronômetro + dock contextual) com `` interno + `v-if` interno apontando pro mesmo target. O slot @@ -36,135 +120,31 @@ no target compartilhado. ``` 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. --- -## ✅ O que aconteceu hoje (cronologia) +## ✅ B1 — Toolbar Agenda (commit 6a92735) -### Manhã — Light mode + /profile -- **Light bloom no MelissaLayout** — gradiente Bloom usa CSS vars (`--bloom-c1/c2/base-1/base-2`) que flipam dark/light. Dark: 400/300/950. Light: 200/100/0. Removido `background-image: none !important`. Corrigido branco-em-branco do clock + ψ + psi-kbd. Panels light com 92% opacity. Classe `win11-has-photo` quando upload de foto. -- **Layout Melissa em /profile** — 3º card na seção 06 com badge "Em construção" + listras diagonais. Aceita `'melissa'` em `setVariant`/`_loadVariant`/bootstrap. Migration `20260425000001_user_settings_layout_variant_melissa.sql` (já aplicada). **Switch real do app fica pra Fase 5 (A#32 no dev_auditoria_items).** -- **Cronômetro/Personalização em light** — trocados `color: white` scoped → `var(--m-text)` em `.mc-select`, `.mc-display`, `.mc-btn--secondary`, `.mc-chip`, `.settings-select`, `.settings-test-btn`. Pílula `psi-kbd` ganhou tokens `--m-kbd-bg/--m-kbd-text` (era `rgba(0,0,0,.65)` hardcoded — em light virava preto sobre preto). Shadow do `.psi-btn` suavizada em light. -- **Ícones tons claros** — bloco de overrides em light mapeia `text-{cor}-200/300/400` → `text-{cor}-600` (17 cores Tailwind: emerald, green, amber, purple, blue, sky, cyan, teal, indigo, violet, pink, rose, red, orange, yellow, fuchsia, lime). +- Cluster Hoje + chevrons num pill único (mais coeso) +- Título com flex+ellipsis (some `min-width:130px` que 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.top` nos chevrons (memória: tooltips PrimeVue) +- `focus-visible` outline accent em todos os botões da toolbar +- View-btn ativo ganhou `box-shadow` sutil -### Tarde — Agenda fullscreen -- **Cores light na MelissaAgenda** — 12 substituições de `color: white` → `var(--m-text)` semântico. Mantido white em `.mini-cal__day.is-hoje` (bg accent saturado). Avatar do paciente: bg `--m-accent-strong` (translúcido, invisível em light) → `--m-accent` (saturado). Tweaks light: shadow suave na `.ma-page`, eventos do FC com `saturate(140%)` + box-shadow leve, cursor "agora" com glow vermelho. -- **Mini-cal funcionalidades** — click no dia pula o FC (`fcApi().gotoDate`), range visível do FC destacado (`is-in-range` via `viewStart/viewEnd`), dots por evento real do mês (`useMelissaEventosRange(miniRangeStart, miniRangeEnd)` separado), até 3 dots por dia. -- **Feriados** — `useFeriados` integrado. Cores: nacional=rose, municipal=amber, personalizado=violet. Tooltip combina nome do feriado + count de eventos. Hoje + feriado: ring externo na cor do feriado. Recarrega ao mudar de ano via watch. -- **Dias fechados** — `useAgendaSettings.workRules` carregado. `workDowSet` computed. Dias fora da jornada → `is-fechado` (cinza apagado). Mutex com feriado (feriado vence cinza). Fallback seg-sex se sem regras. -- **FC central com feriados** — `fcEvents` agora `[...eventosSemana, ...feriadoFcEvents]` (display:'background' amber suave). +## ✅ B2 — Stats interativos (commit 6a92735) -### Tarde 2 — Layout estrutural da Agenda -- **Card `Hoje` mesclado** — antes 2 cards (stats + sessões). Agora 1 só: header + 4 stats + divider + lista de sessões. Count à direita do header. -- **Card Hoje movido pra esquerda** — sai da col 3 (widgets), vai pro topo da col 1 (sidebar pacientes). Modificador `.ma-w--side` com margem + max-height 50vh + lista interna scrollable. -- **ProximosFeriadosCard reaproveitado** — entre mini-cal e Hoje na col 3. Override visual (`bg-soft`, `border-color`, `border-radius: 12px`) pra encaixar no glass. - -### Noite 1 — Dock + cadastro de paciente -- **Dock taskbar** (`.melissa-dock`) — faixa fixa 76px no bottom, transparente, `position:fixed`. ψ desceu pra `bottom: 10px` (centralizado vertical na faixa). Token `--m-dock-h: 76px`. Páginas reservam space via `inset` (`.ma-page` ajustada). **CSS no `