diff --git a/Obsidian/Brain/log.md b/Obsidian/Brain/log.md
index a9b3eca..6e33ab9 100644
--- a/Obsidian/Brain/log.md
+++ b/Obsidian/Brain/log.md
@@ -50,6 +50,49 @@ Touched: none
## [2026-05-08 00:00] session | Melissa cfg-* nativas + temas + cronometro DB
Touched: none
+## [2026-05-08 15:30] session | MelissaPaciente Fase 4 — Tab Prontuario MVP
+Touched: none
+Detalhes: O legacy PatientProntuario.vue tem a aba Prontuario como
+PLACEHOLDER ("Em breve"). MVP entregue aqui supera o legacy: usa
+agenda_eventos.observacoes como nota evolutiva (pq nao tem schema de
+anamnese/clinical_notes ainda).
+
+ESTADO + COMPUTEDS adicionados:
+- pronFilter ref ('com-evolucao' default) + PRON_FILTERS array com 5
+ opcoes (Com evolucao, Todas, Realizadas, Faltas, Cancelamentos).
+- pronSessions computed: filtra sessions por status/observacoes presentes.
+- sessoesComEvolucao computed: count de sessoes com observacoes nao-vazia.
+
+TEMPLATE Tab Prontuario (substitui placeholder Fase 1):
+- Hint banner top: "Prontuario em construcao", explica que usa observacoes
+ de sessoes como historico evolutivo.
+- 4 mini-stats em grid responsivo: com evolucao / realizadas / faltas /
+ total. Cada uma colorida + icone + value 800.
+- 5 filter chips redondas (estilo Melissa): com-evolucao default; troca
+ pra todas/realiz/falt/cancel.
+- Empty state contextual:
+ - Se nao tem sessoes: "Quando atender este paciente..."
+ - Se filtro 'com-evolucao' e zero: "Use o campo Observacoes ao editar
+ sessao..."
+ - Outro filtro: "Tente outro filtro acima."
+- Lista de sessoes (pron-list) com:
+ - border-left colorida por status (verde realiz / vermelho falta /
+ amarelo cancel / cinza default)
+ - head com data + relative + chips status/modalidade/duracao
+ - titulo opcional (titulo_custom || titulo)
+ - block "Evolucao" quando tem observacoes (background medium, border-
+ left primary, label uppercase com icone, texto pre-wrap)
+ - mensagem "Sem evolucao registrada" italico cinza quando nao tem
+- Roadmap card (border-dashed) listando 4 features futuras: anamnese
+ estruturada / plano terapeutico / evolucao por temas / assinatura
+ digital + LGPD Art. 18.
+
+CSS: ~200L novos pros componentes (mpa-pron-hint/stats/filters/list/
+item/roadmap). Padrao visual Melissa: chips redondas estilo MelissaTags,
+border-left adaptativa, monospace inutilizado.
+
+ESLint: 0 errors da minha mudanca.
+
## [2026-05-08 14:30] session | MelissaPaciente Fase 3 — Tab Perfil (6 sections stacked)
Touched: none
Detalhes: Substituiu o placeholder da aba Perfil por 6 sections stacked
diff --git a/src/layout/melissa/MelissaPaciente.vue b/src/layout/melissa/MelissaPaciente.vue
index 0bc2417..4e5c1c9 100644
--- a/src/layout/melissa/MelissaPaciente.vue
+++ b/src/layout/melissa/MelissaPaciente.vue
@@ -91,6 +91,16 @@ function selectTab(key) {
if (isMobile.value) drawerOpen.value = false;
}
+// Filtros da aba Prontuario (MVP — usa session.observacoes como evolucao)
+const pronFilter = ref('com-evolucao'); // com-evolucao | todas | realiz | falt | cancel
+const PRON_FILTERS = [
+ { value: 'com-evolucao', label: 'Com evolução', icon: 'pi pi-file-edit' },
+ { value: 'todas', label: 'Todas', icon: 'pi pi-list' },
+ { value: 'realiz', label: 'Realizadas', icon: 'pi pi-check-circle' },
+ { value: 'falt', label: 'Faltas', icon: 'pi pi-user-minus' },
+ { value: 'cancel', label: 'Cancelamentos', icon: 'pi pi-ban' }
+];
+
// Sub-nav da aba Perfil
const PROFILE_SECTIONS = [
{ key: 'pessoais', label: 'Informações Pessoais', icon: 'pi pi-pencil' },
@@ -185,6 +195,31 @@ const groupNames = computed(() => detail.groups.value.map((g) => g?.name).filter
const groupLabel = computed(() => groupNames.value.length ? groupNames.value.join(', ') : '—');
const groupCountLabel = computed(() => groupNames.value.length <= 1 ? 'Grupo' : 'Grupos');
+// ── Tab Prontuario: lista filtrada de sessoes ──────────────
+// MVP enquanto anamnese/evolucao_clinica nao existem no schema:
+// usa agenda_eventos.observacoes como nota evolutiva.
+const pronSessions = computed(() => {
+ const all = sessionsHook.sessions.value;
+ if (pronFilter.value === 'todas') return all;
+ if (pronFilter.value === 'com-evolucao') {
+ return all.filter((s) => s.observacoes && String(s.observacoes).trim());
+ }
+ if (pronFilter.value === 'realiz') {
+ return all.filter((s) => /realiz|present/i.test(String(s.status || '')));
+ }
+ if (pronFilter.value === 'falt') {
+ return all.filter((s) => /falt/i.test(String(s.status || '')));
+ }
+ if (pronFilter.value === 'cancel') {
+ return all.filter((s) => /cancel|remarca/i.test(String(s.status || '')));
+ }
+ return all;
+});
+const pronSessionsCount = computed(() => pronSessions.value.length);
+const sessoesComEvolucao = computed(() =>
+ sessionsHook.sessions.value.filter((s) => s.observacoes && String(s.observacoes).trim()).length
+);
+
// ── KPIs Visao Geral (Fase 2) ──────────────────────────────
const kpiSessoes = computed(() => sessionsHook.totalSessoes.value);
const kpiRealizadas = computed(() => sessionsHook.totalRealizadas.value);
@@ -991,20 +1026,184 @@ void toast;
-
+
-
+
+
+
+
+ Prontuário em construção.
+ Por enquanto mostra as observações que você anota nas sessões
+ como histórico evolutivo. Anamnese estruturada, plano terapêutico e
+ evolução por temas chegam quando o módulo clínico for liberado.
+
+
+
+
+
+
+
+
+
{{ sessoesComEvolucao }}
+
com evolução
+
+
+
+
+
+
{{ sessionsHook.totalRealizadas.value }}
+
realizadas
+
+
+
+
+
+
{{ sessionsHook.totalFaltas.value }}
+
faltas
+
+
+
+
+
+
{{ sessionsHook.totalSessoes.value }}
+
total
+
+
+
+
+
+
+
+
+
+
+
+ Carregando…
+
+
+
+
+
+ Sem sessões registradas
+
+
+ Nenhuma sessão tem evolução escrita ainda
+
+
+ Nenhuma sessão neste filtro
+
+
+
+
+ Use o campo Observações ao editar uma sessão pra registrar
+ como ela transcorreu — vai aparecer aqui como nota evolutiva.
+
+
+ Quando você atender este paciente, as sessões e evoluções aparecerão aqui.
+
+
+ Tente outro filtro acima ou veja "Todas" pra listar o histórico completo.
+
+