Files
agenciapsilmno/database-novo/migrations/20260504000001_fix_cancel_notifications_excluido.sql
T
Leonardo 957e912a7f Melissa polish + Prontuario Visao Geral + agenda historico
Sprints B (05-03) e C (05-04) acumulados:

- NotificationDrawer/Item redesign (visual mais limpo, ações inline)
- Dock pins compose (useMelissaDockPins) + cache store global (melissaCacheStore)
- MelissaAgenda: timeline FullCalendar parity + cards resumo, histórico
  card com useMelissaAgendaHistorico, MelissaEventoPanel ajustado
- useFeriados: cache opt-in pra evitar fetch redundante de feriados
- PatientProntuario: aba Visão Geral nova; PatientConversationsTab polish
- AgendaClinicMosaic / AgendaTerapeutaPage / useAgendaSettings: ajustes
  de paridade com Melissa
- DocumentsListPage: pequenos ajustes
- DB migration 20260504000001: fix do trigger pra status 'excluido' nas
  cancel_notifications

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 09:11:55 -03:00

35 lines
1.5 KiB
PL/PgSQL

-- ==========================================================================
-- Agencia PSI — Fix: cancel_notifications_on_session_cancel referencia 'excluido'
-- ==========================================================================
-- A funcao trigger comparava NEW.status IN ('cancelado', 'excluido'), mas o
-- enum status_evento_agenda nunca teve o valor 'excluido'. Postgres precisa
-- fazer cast do literal pro tipo do enum, e o cast falha com:
--
-- invalid input value for enum status_evento_agenda: "excluido"
--
-- Isso quebrava QUALQUER UPDATE que mudasse status pra um valor != atual,
-- pois o IF tinha que avaliar a expressao com 'excluido'.
--
-- O front-end nunca usou 'excluido' (statusOptions em AgendaEventDialog.vue
-- so tem agendado/realizado/faltou/cancelado/remarcado). Delete e hard delete
-- via DELETE — nao tem soft-delete em agenda_eventos. Logo, 'excluido' eh
-- codigo morto e pode ser removido.
--
-- Refs:
-- - src/features/agenda/components/AgendaEventDialog.vue:1071 (statusOptions)
-- - schema/03_functions/_all.sql:1056 (funcao original)
-- ==========================================================================
CREATE OR REPLACE FUNCTION public.cancel_notifications_on_session_cancel() RETURNS trigger
LANGUAGE plpgsql SECURITY DEFINER
AS $$
BEGIN
IF NEW.status = 'cancelado' AND OLD.status <> 'cancelado' THEN
PERFORM public.cancel_patient_pending_notifications(
NEW.patient_id, NULL, NEW.id
);
END IF;
RETURN NEW;
END;
$$;