120 lines
5.0 KiB
SQL
120 lines
5.0 KiB
SQL
-- ==========================================================================
|
||
-- Agência PSI — Migração: novos campos em `patients`
|
||
-- ==========================================================================
|
||
-- Arquivo: supabase/migrations/20260328000002_patients_new_columns.sql
|
||
-- Criado por: Leonardo Nohama · 2026 · São Carlos/SP
|
||
--
|
||
-- Adiciona as colunas identificadas na engenharia reversa da tela de detalhe
|
||
-- (PatientsDetailPage) que ainda não existiam na tabela `patients`.
|
||
--
|
||
-- Também ajusta os CHECK constraints de `status` e `patient_scope` para
|
||
-- aceitar os valores usados no novo formulário de cadastro.
|
||
-- ==========================================================================
|
||
|
||
-- --------------------------------------------------------------------------
|
||
-- 1. Colunas novas
|
||
-- --------------------------------------------------------------------------
|
||
|
||
-- Identidade
|
||
ALTER TABLE public.patients
|
||
ADD COLUMN IF NOT EXISTS pronomes text,
|
||
ADD COLUMN IF NOT EXISTS nome_social text,
|
||
ADD COLUMN IF NOT EXISTS etnia text;
|
||
|
||
-- Contato
|
||
ALTER TABLE public.patients
|
||
ADD COLUMN IF NOT EXISTS canal_preferido text,
|
||
ADD COLUMN IF NOT EXISTS horario_contato text;
|
||
|
||
-- Clínico / convênio
|
||
-- convenio: nome de exibição (badge azul no header)
|
||
-- convenio_id: FK para insurance_plans (opcional — permite vincular ao cadastro)
|
||
ALTER TABLE public.patients
|
||
ADD COLUMN IF NOT EXISTS convenio text,
|
||
ADD COLUMN IF NOT EXISTS convenio_id uuid REFERENCES public.insurance_plans(id) ON DELETE SET NULL;
|
||
|
||
-- Origem
|
||
ALTER TABLE public.patients
|
||
ADD COLUMN IF NOT EXISTS metodo_pagamento_preferido text,
|
||
ADD COLUMN IF NOT EXISTS motivo_saida text;
|
||
|
||
-- --------------------------------------------------------------------------
|
||
-- 2. Ajuste do CHECK constraint de `status`
|
||
-- Valores originais: Ativo | Inativo | Alta | Encaminhado | Arquivado
|
||
-- Valores novos: + Em espera
|
||
-- --------------------------------------------------------------------------
|
||
ALTER TABLE public.patients
|
||
DROP CONSTRAINT IF EXISTS patients_status_check;
|
||
|
||
ALTER TABLE public.patients
|
||
ADD CONSTRAINT patients_status_check CHECK (
|
||
status = ANY (ARRAY[
|
||
'Ativo'::text,
|
||
'Em espera'::text,
|
||
'Inativo'::text,
|
||
'Alta'::text,
|
||
'Encaminhado'::text,
|
||
'Arquivado'::text
|
||
])
|
||
);
|
||
|
||
-- --------------------------------------------------------------------------
|
||
-- 3. Ajuste do CHECK constraint de `patient_scope`
|
||
-- Valores originais: clinic | therapist (valores técnicos internos)
|
||
-- Valores novos: + Clínica | Particular | Online | Híbrido
|
||
-- Estratégia: remover o constraint restritivo e deixar livre (text),
|
||
-- pois o controle já é feito no frontend via Select com opções fixas.
|
||
-- --------------------------------------------------------------------------
|
||
ALTER TABLE public.patients
|
||
DROP CONSTRAINT IF EXISTS patients_patient_scope_check;
|
||
|
||
-- Também remove a constraint de consistência que dependia do scope antigo
|
||
ALTER TABLE public.patients
|
||
DROP CONSTRAINT IF EXISTS patients_therapist_scope_consistency;
|
||
|
||
-- --------------------------------------------------------------------------
|
||
-- 4. Índices de performance
|
||
-- --------------------------------------------------------------------------
|
||
CREATE INDEX IF NOT EXISTS patients_convenio_id_idx
|
||
ON public.patients USING btree (convenio_id);
|
||
|
||
CREATE INDEX IF NOT EXISTS patients_pronomes_idx
|
||
ON public.patients USING btree (pronomes);
|
||
|
||
CREATE INDEX IF NOT EXISTS patients_etnia_idx
|
||
ON public.patients USING btree (etnia);
|
||
|
||
-- --------------------------------------------------------------------------
|
||
-- 5. Comentários
|
||
-- --------------------------------------------------------------------------
|
||
COMMENT ON COLUMN public.patients.pronomes
|
||
IS 'Pronomes de tratamento. Ex: ela/dela, ele/dele. Exibido no header do perfil.';
|
||
|
||
COMMENT ON COLUMN public.patients.nome_social
|
||
IS 'Nome social / como prefere ser chamado(a) no atendimento.';
|
||
|
||
COMMENT ON COLUMN public.patients.etnia
|
||
IS 'Etnia / raça autodeclarada. Exibida no card "Dados pessoais".';
|
||
|
||
COMMENT ON COLUMN public.patients.canal_preferido
|
||
IS 'Canal preferido de contato. Ex: WhatsApp, Telefone, E-mail.';
|
||
|
||
COMMENT ON COLUMN public.patients.horario_contato
|
||
IS 'Horário preferido para contato. Ex: 08h–18h.';
|
||
|
||
COMMENT ON COLUMN public.patients.convenio
|
||
IS 'Nome do convênio para exibição (badge azul no header). Derivado de convenio_id.';
|
||
|
||
COMMENT ON COLUMN public.patients.convenio_id
|
||
IS 'FK para insurance_plans.id. Vincula o paciente ao convênio cadastrado.';
|
||
|
||
COMMENT ON COLUMN public.patients.metodo_pagamento_preferido
|
||
IS 'Método de pagamento preferido. Ex: PIX, Cartão crédito. Exibido no card Origem.';
|
||
|
||
COMMENT ON COLUMN public.patients.motivo_saida
|
||
IS 'Motivo de encerramento do acompanhamento. Exibido no card Origem quando preenchido.';
|
||
|
||
-- ==========================================================================
|
||
-- FIM DA MIGRAÇÃO
|
||
-- ==========================================================================
|