MelissaPaciente: pre-popula eventRow com commitment_id + paciente nome/avatar/status

User detectou bug: jornada/freq/billing continuavam ocultos mesmo apos
o fix do commit anterior, e o resumo lateral nao mostrava o nome do
paciente apesar de aparecer no subtitle do header. Diagnostico correto:
form.paciente_nome estava vazio.

CAUSA: meu watch lockType (commit 73788c7) chamava selectCommitment
APOS o lifecycle watcher do composer rodar resetForm(). Mas resetForm
le do props.eventRow — e eu so passava paciente_id + tipo. Sem
paciente_nome/avatar/status no eventRow, o form ficava com paciente_id
solto e nome vazio. E sem determined_commitment_id, o lifecycle setava
step=1 antes do meu watch tentar consertar via selectCommitment, gerando
race condition (lifecycle await nextTick + resetForm DESFAZIA o trabalho
do watch sync).

FIX em goAgendar() do MelissaPaciente:
1. Acha o commitment "Sessão" (native_key='session') em
   melissaAgenda.commitmentOptions e pre-popula determined_commitment_id
   no eventRow. resetForm le isso e ja deixa form.commitment_id setado
   na inicializacao — isSessionEvent fica true imediatamente, sem
   precisar do watch lockType.
2. Pre-popula paciente_nome/avatar/status no eventRow direto dos
   computeds (nomeCompleto, avatarUrl, statusPaciente) que ja existem
   no MelissaPaciente desde a Fase 3. Composer s o faz fetch async de
   nome quando isEdit=true — pra criacao precisa vir no eventRow.

Resultado: dialog abre ja com:
- paciente_id + nome + avatar + status preenchidos no resumo lateral
- commitment_id setado, isSessionEvent=true
- Jornada de trabalho aparece
- Billing radio (particular/convenio/gratuito) aparece
- Frequencia aparece

O watch lockType continua valido como redundancia (caso commitmentOptions
chegue async), mas agora nao e mais o caminho principal.

301 specs passando. ESLint 0 errors da minha mudanca.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-08 19:38:41 -03:00
parent 73788c7031
commit cf1cd67314
+15 -2
View File
@@ -495,16 +495,29 @@ function goAgendar() {
const remainder = base.getMinutes() % 15;
if (remainder !== 0) base.setMinutes(base.getMinutes() + (15 - remainder));
// Acha o commitment "Sessão" (native_key='session') pra pre-popular o
// determined_commitment_id no eventRow — assim o resetForm do composer
// ja inicia com form.commitment_id setado, isSessionEvent=true e os
// blocos de jornada/billing/frequencia aparecem.
const sessaoCommitment = (melissaAgenda.commitmentOptions?.value || [])
.find((c) => c.native_key === 'session');
// Pre-popula tambem nome/avatar/status do paciente — sem isso o resumo
// lateral do dialog mostra "Paciente vinculado" sem nome (ja que o
// composer so faz fetch async de nome quando isEdit=true).
sessaoDialogEventRow.value = {
owner_id: melissaAgenda.ownerId.value,
terapeuta_id: null,
paciente_id: String(props.patientId),
paciente_nome: nomeCompleto.value || '',
paciente_avatar: avatarUrl.value || '',
paciente_status: statusPaciente.value || 'Ativo',
determined_commitment_id: sessaoCommitment?.id || null,
tipo: 'sessao',
status: 'agendado',
titulo: null,
observacoes: null,
visibility_scope: 'public',
determined_commitment_id: null
visibility_scope: 'public'
};
sessaoDialogStartISO.value = base.toISOString();
sessaoDialogEndISO.value = new Date(base.getTime() + durMin * 60000).toISOString();