-- ============================================================================= -- FIX: Corrige acentuação perdida (caracteres ?? no banco) -- ============================================================================= -- Causa: Seeds aplicados originalmente sem encoding UTF-8 correto. -- Os ?? são bytes literais 0x3F (ASCII ?) onde deveria haver UTF-8. -- Este fix faz UPDATE direto nos valores conhecidos. -- ============================================================================= BEGIN; SET client_encoding TO 'UTF8'; -- ============================================================ -- 1. PROFILES — full_name -- ============================================================ UPDATE profiles SET full_name = 'Clínica Espaço Psi' WHERE id = 'aaaaaaaa-0003-0003-0003-000000000003' AND full_name != 'Clínica Espaço Psi'; UPDATE profiles SET full_name = 'Clínica Mente Sã' WHERE id = 'aaaaaaaa-0004-0004-0004-000000000004' AND full_name != 'Clínica Mente Sã'; UPDATE profiles SET full_name = 'Clínica Bem Estar' WHERE id = 'aaaaaaaa-0005-0005-0005-000000000005' AND full_name != 'Clínica Bem Estar'; UPDATE profiles SET full_name = 'Gabriela Secretária' WHERE id = 'aaaaaaaa-0011-0011-0011-000000000011' AND full_name != 'Gabriela Secretária'; -- ============================================================ -- 2. TENANTS — name -- ============================================================ UPDATE tenants SET name = 'Clínica Espaço Psi' WHERE id = 'bbbbbbbb-0003-0003-0003-000000000003'; UPDATE tenants SET name = 'Clínica Mente Sã' WHERE id = 'bbbbbbbb-0004-0004-0004-000000000004'; UPDATE tenants SET name = 'Clínica Bem Estar' WHERE id = 'bbbbbbbb-0005-0005-0005-000000000005'; -- ============================================================ -- 3. DETERMINED_COMMITMENTS — name -- ============================================================ UPDATE determined_commitments SET name = 'Sessão' WHERE native_key = 'session'; UPDATE determined_commitments SET name = 'Supervisão' WHERE native_key = 'supervision'; UPDATE determined_commitments SET name = 'Análise Pessoal' WHERE native_key = 'analysis'; -- ============================================================ -- 4. PLANS — name, description -- ============================================================ UPDATE plans SET name = 'THERAPIST PRO', description = 'Plano profissional para terapeutas' WHERE key = 'therapist_pro' AND description LIKE '%??%'; UPDATE plans SET name = 'CLINIC PRO', description = 'Plano profissional para clínicas' WHERE key = 'clinic_pro' AND description LIKE '%??%'; UPDATE plans SET name = 'THERAPIST FREE', description = 'Plano gratuito para terapeutas' WHERE key = 'therapist_free' AND description LIKE '%??%'; UPDATE plans SET name = 'CLINIC FREE', description = 'Plano gratuito para clínicas' WHERE key = 'clinic_free' AND description LIKE '%??%'; -- ============================================================ -- 5. FEATURES — name, description -- ============================================================ UPDATE features SET name = 'Agenda - Visualizar', description = 'Visualização da agenda' WHERE key = 'agenda.view'; UPDATE features SET name = 'Agenda - Gerenciar', description = 'Gerenciamento completo da agenda' WHERE key = 'agenda.manage'; UPDATE features SET name = 'Pacientes', description = 'Módulo de pacientes' WHERE key = 'patients'; UPDATE features SET name = 'Pacientes - Visualizar', description = 'Visualização de pacientes' WHERE key = 'patients.view'; UPDATE features SET name = 'Pacientes - Gerenciar', description = 'Gerenciamento completo de pacientes' WHERE key = 'patients.manage'; UPDATE features SET name = 'Agendamento Online', description = 'Sistema de agendamento online' WHERE key = 'online_scheduling'; UPDATE features SET name = 'Agendamento Online - Gerenciar', description = 'Gerenciamento do agendamento online' WHERE key = 'online_scheduling.manage'; UPDATE features SET name = 'Agendamento Online - Público', description = 'Página pública do agendador' WHERE key = 'online_scheduling.public'; UPDATE features SET name = 'Lembretes', description = 'Sistema de lembretes automáticos' WHERE key = 'reminders'; UPDATE features SET name = 'Relatórios Básicos', description = 'Relatórios básicos' WHERE key = 'reports_basic'; UPDATE features SET name = 'Relatórios Avançados', description = 'Relatórios avançados com exportação' WHERE key = 'reports_advanced'; UPDATE features SET name = 'Secretária', description = 'Funcionalidade de secretária' WHERE key = 'secretary'; UPDATE features SET name = 'Recepção Compartilhada', description = 'Recepção compartilhada entre terapeutas' WHERE key = 'shared_reception'; UPDATE features SET name = 'Salas', description = 'Gerenciamento de salas' WHERE key = 'rooms'; UPDATE features SET name = 'Intake Público', description = 'Formulário de intake público' WHERE key = 'intake_public'; UPDATE features SET name = 'Intakes PRO', description = 'Funcionalidades avançadas de intake' WHERE key = 'intakes_pro'; UPDATE features SET name = 'Branding Personalizado', description = 'Personalização de marca' WHERE key = 'custom_branding'; UPDATE features SET name = 'Acesso API', description = 'Acesso via API' WHERE key = 'api_access'; UPDATE features SET name = 'Log de Auditoria', description = 'Log de auditoria completo' WHERE key = 'audit_log'; UPDATE features SET name = 'Lembrete SMS', description = 'Lembretes via SMS' WHERE key = 'sms_reminder'; UPDATE features SET name = 'Calendário da Clínica', description = 'Visão consolidada do calendário' WHERE key = 'clinic_calendar'; UPDATE features SET name = 'Relatórios Avançados (Clínica)', description = 'Relatórios avançados da clínica' WHERE key = 'advanced_reports'; UPDATE features SET name = 'Supervisor - Acesso', description = 'Acesso ao módulo de supervisão' WHERE key = 'supervisor.access'; UPDATE features SET name = 'Supervisor - Convidar', description = 'Convidar supervisionados' WHERE key = 'supervisor.invite'; UPDATE features SET name = 'Supervisor - Sessões', description = 'Gerenciar sessões de supervisão' WHERE key = 'supervisor.sessions'; UPDATE features SET name = 'Supervisor - Relatórios', description = 'Relatórios de supervisão' WHERE key = 'supervisor.reports'; -- ============================================================ -- 6. EMAIL_TEMPLATES_GLOBAL — subject, body_html, body_text -- ============================================================ UPDATE email_templates_global SET subject = 'Lembrete: sua sessão amanhã às {{session_time}}', body_text = 'Olá {{patient_name}}, lembrete da sua sessão amanhã às {{session_time}} com {{therapist_name}}.' WHERE key = 'session.reminder'; UPDATE email_templates_global SET subject = 'Sessão confirmada — {{session_date}} às {{session_time}}', body_text = 'Sua sessão com {{therapist_name}} em {{session_date}} às {{session_time}} foi confirmada.' WHERE key = 'session.confirmation'; UPDATE email_templates_global SET subject = 'Sessão cancelada — {{session_date}}', body_text = 'A sessão de {{session_date}} às {{session_time}} com {{therapist_name}} foi cancelada.' WHERE key = 'session.cancellation'; UPDATE email_templates_global SET subject = 'Sessão reagendada — novo horário: {{session_date}} às {{session_time}}', body_text = 'Sua sessão foi reagendada para {{session_date}} às {{session_time}} com {{therapist_name}}.' WHERE key = 'session.rescheduled'; UPDATE email_templates_global SET subject = 'Recebemos seu cadastro — {{patient_name}}', body_text = 'Olá {{patient_name}}, recebemos seu formulário de cadastro. Entraremos em contato em breve.' WHERE key = 'intake.received'; UPDATE email_templates_global SET subject = 'Cadastro aprovado — Bem-vindo(a)!', body_text = 'Olá {{patient_name}}, seu cadastro foi aprovado. Você já pode acessar a plataforma.' WHERE key = 'intake.approved'; UPDATE email_templates_global SET subject = 'Cadastro não aprovado', body_text = 'Olá {{patient_name}}, infelizmente seu cadastro não foi aprovado no momento.' WHERE key = 'intake.rejected'; UPDATE email_templates_global SET subject = 'Solicitação aceita — {{session_date}} às {{session_time}}', body_text = 'Sua solicitação de agendamento para {{session_date}} às {{session_time}} foi aceita.' WHERE key = 'scheduler.request_accepted'; UPDATE email_templates_global SET subject = 'Solicitação não disponível', body_text = 'Infelizmente o horário solicitado não está disponível. Por favor, escolha outro horário.' WHERE key = 'scheduler.request_rejected'; UPDATE email_templates_global SET subject = 'Bem-vindo(a) à AgenciaPsi!', body_text = 'Olá {{user_name}}, sua conta foi criada com sucesso. Acesse a plataforma para começar.' WHERE key = 'system.welcome'; UPDATE email_templates_global SET subject = 'Redefinição de senha — AgenciaPsi', body_text = 'Clique no link abaixo para redefinir sua senha: {{reset_link}}' WHERE key = 'system.password_reset'; -- ============================================================ -- 7. LOGIN_CAROUSEL_SLIDES — title, description -- ============================================================ UPDATE login_carousel_slides SET title = 'Gestão clínica simplificada', body = 'Gerencie agenda, pacientes e financeiro em um só lugar. Simples, rápido e seguro.' WHERE ordem = 1; UPDATE login_carousel_slides SET title = 'Múltiplos profissionais, uma só plataforma', body = 'Ideal para clínicas com vários terapeutas. Cada profissional com sua agenda e seus pacientes.' WHERE ordem = 2; UPDATE login_carousel_slides SET title = 'Seguro, privado e sempre disponível', body = 'Seus dados protegidos com criptografia. Acesse de qualquer lugar, a qualquer hora.' WHERE ordem = 3; -- ============================================================ -- 8. PATIENT_GROUPS (default groups) — name -- ============================================================ UPDATE patient_groups SET nome = 'Crianças' WHERE nome LIKE 'Crian%' AND is_system = true; UPDATE patient_groups SET nome = 'Adolescentes' WHERE nome LIKE 'Adolescen%' AND is_system = true; UPDATE patient_groups SET nome = 'Idosos' WHERE nome LIKE 'Idoso%' AND is_system = true; -- ============================================================ -- 9. AUTH.USERS — raw_user_meta_data (name field) -- ============================================================ UPDATE auth.users SET raw_user_meta_data = jsonb_set(raw_user_meta_data, '{name}', '"Clínica Espaço Psi"') WHERE id = 'aaaaaaaa-0003-0003-0003-000000000003'; UPDATE auth.users SET raw_user_meta_data = jsonb_set(raw_user_meta_data, '{name}', '"Clínica Mente Sã"') WHERE id = 'aaaaaaaa-0004-0004-0004-000000000004'; UPDATE auth.users SET raw_user_meta_data = jsonb_set(raw_user_meta_data, '{name}', '"Clínica Bem Estar"') WHERE id = 'aaaaaaaa-0005-0005-0005-000000000005'; UPDATE auth.users SET raw_user_meta_data = jsonb_set(raw_user_meta_data, '{name}', '"Gabriela Secretária"') WHERE id = 'aaaaaaaa-0011-0011-0011-000000000011'; COMMIT; -- ============================================================ DO $$ DECLARE broken_count int; BEGIN SELECT count(*) INTO broken_count FROM profiles WHERE full_name LIKE '%??%'; IF broken_count = 0 THEN RAISE NOTICE 'fix_encoding_accents: Todos os acentos corrigidos com sucesso.'; ELSE RAISE WARNING 'fix_encoding_accents: Ainda restam % registros com ?? em profiles.full_name', broken_count; END IF; END $$;