-- ========================================================================== -- 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 -- ==========================================================================