Debug Agenda Funcionando : - Cadastrar compromisso do tipo Sessão, ok - Editar compromisso do tipo Sessão, ok - Trocar Valor do compromisso do tipo sessão, ok - Ajustar horário arrastando do compromisso do tipo sessão, ok - Cada compromisso exibe sua cor própria ao ser adicionado na agenda, ok - Ao Atualizar as cores na Sessão de Compromissos, elas são ajustadas na agenda também, ok - Status [Agendado, Realizado, Faltou, Cancelado e Remarcar] Todos estão funcionando, ok - O criar compromisso do tipo sessão está trazendo o valor padrão das configuraçãoes, ok - O editar está salvando o novo valor informado, ok - Modalidade [Presencial, Online] está sendo salva ao editar, ok - Ajuste de Mensagem : "Conflito com X às HH:MM" não é do samePatientConflict : Encontrei o bug. Na timeConflict (linha 1785), a exclusão do evento atual usa form.value.id — mas ocorrências virtuais têm id: null, então nunca são excluídas. A ocorrência fica conflitando consigo mesma. Causa: ocorrências virtuais têm id: null, então if (form.value.id && ...) nunca excluía a própria ocorrência da checagem — ela conflitava consigo mesma. Agora, para ocorrências virtuais, a exclusão é feita pelo par recurrence_id + original_date. - Adição de Recorrencia, ok - Remoção de reorrencia, ok - Remoção de recorrencias futuras, ok - Remoção de todas as recorrencias, mantendo o compromisso raiz (inicial), ok - Adicionado Confirmação de remoção e frase de efeito, ok - "Todos os agendamentos futuros da série serão removidos permanentemente. Esta sessão será mantida como avulsa. Esta ação é irreversível." - "A série foi encerrada. Esta sessão foi mantida como avulsa." Bugs conhecidos corrigidos : Feito. Resumo dos 4 fixes: ┌──────┬─────────────────────────────────────────┬───────────────────────────────────────────────────────────────┐ │ # │ Problema │ Solução │ ├──────┼─────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤ │ Bug │ Recorrência em evento existente → só │ Removida condição !id — agora cria a regra e vincula o evento │ │ 1 │ fazia update │ existente │ ├──────┼─────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤ │ Bug │ Botão de lixeira some quando form.id é │ Substituído por botão "Encerrar série" para hasSerie, lixeira │ │ 2a │ null (virtual) │ simples para eventos avulsos │ ├──────┼─────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤ │ Bug │ X das pills some para sessões │ Removida restrição v-if="!isPast" — X sempre visível │ │ 2b │ passadas/canceladas │ │ ├──────┼─────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤ │ Bug │ Sem confirmação ao encerrar série pelo │ onEncerrarSerie() com confirm.require() e aviso de │ │ 2c │ botão novo │ irreversibilidade │ └──────┴─────────────────────────────────────────┴───────────────────────────────────────────────────────────────┘ - Dots (mini-day-dot) adicionados em todos os dias que possuem compromissos, ok Corrigido também na AgendaClinicaPage: ┌────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────┐ │ Fix │ O que foi feito │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤ │ Mini-day-dot │ loadMiniMonthEvents agora itera sobre todos os ownerIds da clínica chamando │ │ │ loadAndExpand para incluir ocorrências virtuais de recorrência │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤ │ 'todos' delete │ Mantém sessão atual como avulsa antes de cancelar a regra (igual ao terapeuta, usando │ │ │ createClinic/updateClinic) │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤ │ Recorrente em evento │ Removida condição !id, cria a regra e vincula evento via updateClinic │ │ existente │ │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤ │ ConfirmDialog │ Adicionado na página para as confirmações funcionarem corretamente │ └────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────┘ Quando adiciona um compromisso na agenda e não aparece : 1. Join FK errada (!determined_commitment_id → !agenda_eventos_determined_commitment_fk) em ambos agendaClinicRepository.js e useAgendaEvents.js — esse era o bug principal. O Supabase usava o nome do constraint FK (agenda_eventos_determined_commitment_fk), não o nome da coluna. A query estava falhando silenciosamente, mantendo rows.value no estado anterior (vazio na primeira carga). 2. modalidade ausente do pickDbFields — adicionado para não perder a modalidade selecionada pelo usuário. 3. Toast de erro após _reloadRange — agora, se o reload falhar, um warning aparece em vez de mostrar sucesso sem eventos. Para colorir o background dos compromissos : Pronto. Adicionei eventContent no buildFcOptions do AgendaClinicMosaic — mesmo código do AgendaTerapeutaPage — com avatar (foto ou iniciais), horário, título e observações. O CSS foi adicionado em bloco não-scoped para que o HTML injetado pelo FullCalendar seja estilizado corretamente. As cores dos compromissos já chegavam via backgroundColor no mapper (tanto para o terapeuta quanto para a clínica), o que estava faltando era o eventContent customizado que dá o mesmo visual.