MelissaPaciente Fase 7: Tabs Documentos + Conversas (KPIs + embed componentes existentes)
Duas tabs entregues numa sessao — sao mais leves porque reusam
DocumentsListPage e PatientConversationsTab existentes (testados em
producao no PatientProntuario legacy) com KPIs Melissa por cima.
EXTENSAO src/features/patients/utils/patientFormatters.js
- fmtSize(bytes): legivel B/KB/MB/GB
- DOC_TYPE_LABEL map: atestado/receita/laudo/encaminhamento/termo/etc
- chConvLabel(c): whatsapp -> WhatsApp / sms -> SMS / email -> E-mail
EXTENSAO src/features/patients/composables/usePatientDocuments.js
- topType computed: { tipo, count, label } do tipo mais comum
- pendentes computed: count status_revisao === 'pendente'
- sizeTotalFormatted computed: fmtSize(totalBytes)
EXTENSAO src/features/patients/composables/usePatientMessages.js
- primeiraMensagem computed (mais antiga)
- canais computed: Set de m.channel unicos
MELISSAPACIENTE.VUE — Tab Documentos
- 4 KPIs adaptativos (so renderizam com dados):
Total + sizeTotalFormatted / Mais comum / Ultimo / Revisao pendente
- DocumentsListPage embedded no card Melissa (mpa-embed wrapper).
Reusa upload/preview/listagem testados.
MELISSAPACIENTE.VUE — Tab Conversas
- 4 KPIs: Mensagens com canais / Recebidas % / Enviadas % / Ultima
- CTA "Abrir conversa no drawer" estilo WhatsApp pill verde #25d366
que emite open-whatsapp pro parent (Fase 8 integra com
conversationDrawerStore.openForPatient)
- PatientConversationsTab embedded — thread completa com filter/media
CSS: ~50L novos (mpa-conv-cta + mpa-embed wrapper).
Removido kpiDocumentos nao usado (substituido por documentsHook.total
direto).
ESLint: 0 errors da minha mudanca.
PROXIMA: Fase 8 wire-up final (Dialog -> router.push em MelissaPacientes/
MelissaAgenda; decisao sobre TherapistDashboard + PatientsListPage).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,66 @@ Touched: none
|
||||
## [2026-05-08 00:00] session | Melissa cfg-* nativas + temas + cronometro DB
|
||||
Touched: none
|
||||
|
||||
## [2026-05-08 18:30] session | MelissaPaciente Fase 7 — Tabs Documentos + Conversas
|
||||
Touched: none
|
||||
Detalhes: Duas tabs entregues numa sessao (sao mais leves: KPIs + embed
|
||||
de componentes existentes ja testados).
|
||||
|
||||
EXTENSAO patientFormatters.js:
|
||||
- fmtSize(bytes): B/KB/MB/GB legivel
|
||||
- DOC_TYPE_LABEL: atestado/receita/laudo/encaminhamento/termo/etc
|
||||
- chConvLabel: whatsapp/sms/email -> WhatsApp/SMS/E-mail
|
||||
|
||||
EXTENSAO usePatientDocuments.js:
|
||||
- topType computed: { tipo, count, label } do mais comum (DOC_TYPE_LABEL)
|
||||
- pendentes computed: count de status_revisao === 'pendente'
|
||||
- sizeTotalFormatted computed: fmtSize(totalBytes)
|
||||
- Import patientFormatters dentro do composable.
|
||||
|
||||
EXTENSAO usePatientMessages.js:
|
||||
- primeiraMensagem computed (mais antiga, [length-1])
|
||||
- canais computed: Set de m.channel unicos
|
||||
|
||||
MELISSAPACIENTE.VUE — script
|
||||
- Imports: DocumentsListPage, PatientConversationsTab, chConvLabel
|
||||
- Removido kpiDocumentos (nao usado mais — substituido por
|
||||
documentsHook.total.value direto)
|
||||
|
||||
MELISSAPACIENTE.VUE — Tab Documentos (Fase 7)
|
||||
- Loading state.
|
||||
- 4 KPIs adaptativos (so renderizam quando ha dados):
|
||||
- 01 Total + sizeTotalFormatted
|
||||
- 02 Mais comum (label do tipo + count) — opcional
|
||||
- 03 Ultimo + relative + dateBR — opcional
|
||||
- 04 Revisao pendente (laranja) — opcional, so quando > 0
|
||||
- DocumentsListPage embedded no card Melissa (mpa-embed) — reusa o
|
||||
componente existente que ja faz upload/preview/listagem completa.
|
||||
Wrapper ze-ra padding pra ele preencher tudo.
|
||||
|
||||
MELISSAPACIENTE.VUE — Tab Conversas (Fase 7)
|
||||
- Loading state.
|
||||
- 4 KPIs (so renderizam quando ha mensagens):
|
||||
- 01 Mensagens total + canais ("via WhatsApp, SMS")
|
||||
- 02 Recebidas + % do total
|
||||
- 03 Enviadas + % do total
|
||||
- 04 Ultima relative + direction + 1ª contato dim
|
||||
- CTA "Abrir conversa no drawer" estilo WhatsApp (verde #25d366) que
|
||||
emite open-whatsapp pro parent (futuro: integra com
|
||||
conversationDrawerStore.openForPatient na Fase 8).
|
||||
- PatientConversationsTab embedded no mesmo wrapper mpa-embed —
|
||||
thread completa com filter/scroll/media.
|
||||
|
||||
CSS: ~50L novos pros componentes (mpa-conv-cta + mpa-embed wrapper).
|
||||
Padrao Melissa: CTA WhatsApp circular pill, embed wrapper transparente.
|
||||
|
||||
ESLint: 0 errors da minha mudanca.
|
||||
|
||||
PROXIMA: Fase 8 (wire-up final) — substituir Dialog do PatientProntuario
|
||||
por router.push('/melissa/paciente?id=X') nos 4 callsites Melissa
|
||||
(MelissaPacientes, MelissaAgenda); decidir se TherapistDashboard e
|
||||
PatientsListPage tambem migram. PatientProntuario.vue pode ficar (legacy
|
||||
fallback) ou deletar.
|
||||
|
||||
## [2026-05-08 17:30] session | MelissaPaciente Fase 6 — Tab Financeiro completa + mark paid mutation
|
||||
Touched: none
|
||||
Detalhes: Tab Financeiro espelha o legacy + adiciona mutation que o
|
||||
|
||||
Reference in New Issue
Block a user