From 73788c70317baba85c9c6e48b58622d0f2300a7e Mon Sep 17 00:00:00 2001 From: Leonardo Date: Fri, 8 May 2026 19:33:08 -0300 Subject: [PATCH] =?UTF-8?q?AgendaEventDialog:=20lockType=20auto-seleciona?= =?UTF-8?q?=20commitment=20"Sess=C3=A3o"=20(fix=20jornada/billing/freq=20s?= =?UTF-8?q?umidos)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User apontou que jornada de trabalho, frequencia e billing (particular/ convenio/gratuito) sumiam quando o dialog abria do prontuario. Causa: meu watch original do commit 30d09eb so forcava step.value=2 sem inicializar form.commitment_id. Sem commitment, o computed isSessionEvent virava false e esses 3 blocos do template (que dependem de isSessionEvent) ficavam ocultos: - jornadaDialog: - frequencia: bloco v-if="!hasSerie" tem gates internos de billing/ patient que dependem de isSessionEvent - billing radio (particular/convenio/gratuito): isSessionEvent FIX: watch agora chama selectCommitment(sessao) — exatamente o que o user faria clicando no card "Sessão" no step 1. Isso seta: - form.commitment_id pro id do native_key='session' - form.extra_fields = {} populado pelos fields do commitment - step.value = 2 Adicionei props.commitmentOptions ao watch dep — necessario pq quando o dialog abre antes do tenant load terminar, commitmentOptions chega vazio inicialmente. Watch re-roda quando popula. Idempotente: so chama selectCommitment se ainda nao tem commitment_id ou se id atual nao bate com sessao.id (re-open com mesmo lockType nao reinicializa redundantemente). 301 specs do agenda continuam passando. ESLint: 31 errors pre-existentes (mesmos do commit anterior). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../agenda/components/AgendaEventDialog.vue | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/features/agenda/components/AgendaEventDialog.vue b/src/features/agenda/components/AgendaEventDialog.vue index 3d4dbbf..d937f6b 100644 --- a/src/features/agenda/components/AgendaEventDialog.vue +++ b/src/features/agenda/components/AgendaEventDialog.vue @@ -193,13 +193,27 @@ const { resetForm } = _composer; -// Lock de tipo: quando lockType=true (callsite no contexto de Sessao do -// paciente, ex: MelissaPaciente), pula o step 1 e vai direto pro form. -// Watch immediate cobre tanto open quanto re-open com novo eventRow. +// Lock de tipo: quando lockType=true (ex: MelissaPaciente), simula o +// click no card "Sessão" do step 1. Chama selectCommitment com o +// commitment native_key='session' — isso seta form.commitment_id + +// extra_fields + step.value=2. Sem isso, pular pro step 2 sem +// commitment_id deixaria isSessionEvent=false e esconderia jornada, +// billing (particular/convenio/gratuito) e frequencia. +// +// Re-roda quando commitmentOptions popula tarde (caso usual: dialog +// abre antes do tenant load terminar). Idempotente: so chama se ainda +// nao tem commitment_id ou step != 2. watch( - () => [props.lockType, props.modelValue], + [() => props.lockType, () => props.modelValue, () => props.commitmentOptions], ([locked, open]) => { - if (locked && open) step.value = 2; + if (!locked || !open) return; + const sessao = commitmentCards.value.find((c) => c.native_key === 'session'); + if (!sessao) return; + if (!form.value.commitment_id || form.value.commitment_id !== sessao.id) { + selectCommitment(sessao); + } else if (step.value !== 2) { + step.value = 2; + } }, { immediate: true } );