Files
agenciapsilmno/database-novo/migrations/20260521000003_profiles_professional_registration.sql
T
Leonardo cd67f7e9f5 compliance CFP: #5 registro profissional + #9 especialidades
ROADMAP Fase 1.2 (Compliance basico BR). Item #5: profiles ganha
3 colunas (professional_registration_type/number/uf) com CHECK
constraint dos conselhos comuns (CRP, CRM, CRFa, CREFITO, CRESS,
CRN, RMS, outro). Item #9: catalogo public.specialties + join
M:N profile_specialties + RLS. Seed seed_050 popula 33
especialidades is_system=true (clinica, jurídica, neuropsicologia,
ABA, TCC, psicanalise etc). Service specialtiesService.js no
src/services pra consumo na UI.

Item #8 (nome social) ja estava integrado. #6 (consent forms UI)
e #7 (assinatura no portal) adiados — schemas document_templates
e document_signatures existem, falta workflow UI dedicado.

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

72 lines
2.6 KiB
PL/PgSQL

-- ============================================================================
-- Compliance CFP — Tipo de registro profissional (ROADMAP item #5)
-- ----------------------------------------------------------------------------
-- Adiciona campos de registro profissional ao perfil. Necessário pra emissão
-- de recibos/laudos válidos (CFP exige tipo, número e UF do conselho).
--
-- Conselhos comuns no Brasil:
-- CRP — Psicólogo
-- CRM — Médico
-- CRFa — Fonoaudiólogo
-- CREFITO — Fisioterapeuta / Terapeuta Ocupacional
-- CRESS — Assistente Social
-- CRN — Nutricionista
-- RMS — Residência Multiprofissional (Saúde)
-- outro — Catch-all (campo livre na UI)
-- ============================================================================
BEGIN;
ALTER TABLE public.profiles
ADD COLUMN IF NOT EXISTS professional_registration_type text,
ADD COLUMN IF NOT EXISTS professional_registration_number text,
ADD COLUMN IF NOT EXISTS professional_registration_uf text;
-- CHECK não pode ser ADD IF NOT EXISTS — guard com DO block
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'profiles_registration_type_check'
) THEN
ALTER TABLE public.profiles
ADD CONSTRAINT profiles_registration_type_check CHECK (
professional_registration_type IS NULL
OR professional_registration_type = ANY (ARRAY[
'CRP',
'CRM',
'CRFa',
'CREFITO',
'CRESS',
'CRN',
'RMS',
'outro'
])
);
END IF;
END $$;
-- UF check (regex pra 2 chars uppercase ou NULL)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'profiles_registration_uf_check'
) THEN
ALTER TABLE public.profiles
ADD CONSTRAINT profiles_registration_uf_check CHECK (
professional_registration_uf IS NULL
OR professional_registration_uf ~ '^[A-Z]{2}$'
);
END IF;
END $$;
COMMENT ON COLUMN public.profiles.professional_registration_type IS
'Tipo de registro profissional. Obrigatório pra emitir recibos/laudos. ROADMAP item #5.';
COMMENT ON COLUMN public.profiles.professional_registration_number IS
'Número do registro (ex: 06/12345 ou 123456). Formato livre — UI ajuda com mask se relevante.';
COMMENT ON COLUMN public.profiles.professional_registration_uf IS
'UF do conselho (2 chars uppercase). Alguns conselhos exigem regionalização (CRP 06/SP, CRP 03/BA).';
COMMIT;