cd67f7e9f5
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>
72 lines
2.6 KiB
PL/PgSQL
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;
|