From dc83db3e7cf606dc8b52aac6f7d05b29c74f3dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gustavo?= <166467972+JoaoGustavo-dev@users.noreply.github.com> Date: Thu, 6 Nov 2025 21:44:51 -0300 Subject: [PATCH 1/4] fix-report-page --- susconecta/app/(auth)/login-paciente/page.tsx | 127 +----- .../dashboard/relatorios/page.tsx | 419 ++++-------------- 2 files changed, 85 insertions(+), 461 deletions(-) diff --git a/susconecta/app/(auth)/login-paciente/page.tsx b/susconecta/app/(auth)/login-paciente/page.tsx index 67b2329..0927014 100644 --- a/susconecta/app/(auth)/login-paciente/page.tsx +++ b/susconecta/app/(auth)/login-paciente/page.tsx @@ -3,7 +3,6 @@ import { useState } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { useAuth } from '@/hooks/useAuth' -import { ENV_CONFIG } from '@/lib/env-config' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' @@ -55,83 +54,7 @@ export default function LoginPacientePage() { - // --- Auto-cadastro (client-side) --- - const [showRegister, setShowRegister] = useState(false) - const [reg, setReg] = useState({ email: '', full_name: '', phone_mobile: '', cpf: '', birth_date: '' }) - const [regLoading, setRegLoading] = useState(false) - const [regError, setRegError] = useState('') - const [regSuccess, setRegSuccess] = useState('') - - function cleanCpf(cpf: string) { - return String(cpf || '').replace(/\D/g, '') - } - - function validateCPF(cpfRaw: string) { - const cpf = cleanCpf(cpfRaw) - if (!/^\d{11}$/.test(cpf)) return false - if (/^([0-9])\1+$/.test(cpf)) return false - const digits = cpf.split('').map((d) => Number(d)) - const calc = (len: number) => { - let sum = 0 - for (let i = 0; i < len; i++) sum += digits[i] * (len + 1 - i) - const v = (sum * 10) % 11 - return v === 10 ? 0 : v - } - return calc(9) === digits[9] && calc(10) === digits[10] - } - - const handleRegister = async (e?: React.FormEvent) => { - if (e) e.preventDefault() - setRegError('') - setRegSuccess('') - - // client-side validation - if (!reg.email || !/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(reg.email)) return setRegError('Email inválido') - if (!reg.full_name || reg.full_name.trim().length < 3) return setRegError('Nome deve ter ao menos 3 caracteres') - if (!reg.phone_mobile || !/^\d{10,11}$/.test(reg.phone_mobile)) return setRegError('Telefone inválido (10-11 dígitos)') - if (!reg.cpf || !/^\d{11}$/.test(cleanCpf(reg.cpf))) return setRegError('CPF deve conter 11 dígitos') - if (!validateCPF(reg.cpf)) return setRegError('CPF inválido') - - setRegLoading(true) - try { - const url = `${ENV_CONFIG.SUPABASE_URL}/functions/v1/register-patient` - const body = { - email: reg.email, - full_name: reg.full_name, - phone_mobile: reg.phone_mobile, - cpf: cleanCpf(reg.cpf), - // always include redirect to patient landing as requested - redirect_url: 'https://mediconecta-app-liart.vercel.app/' - } as any - if (reg.birth_date) body.birth_date = reg.birth_date - - const res = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json', apikey: ENV_CONFIG.SUPABASE_ANON_KEY, Accept: 'application/json' }, - body: JSON.stringify(body), - }) - - const json = await res.json().catch(() => null) - if (res.ok) { - setRegSuccess(json?.message ?? 'Cadastro realizado com sucesso! Verifique seu email para acessar a plataforma.') - // clear form but keep email for convenience - setReg({ ...reg, full_name: '', phone_mobile: '', cpf: '', birth_date: '' }) - } else if (res.status === 400) { - setRegError(json?.error ?? json?.message ?? 'Dados inválidos') - } else if (res.status === 409) { - setRegError(json?.error ?? 'CPF ou email já cadastrado') - } else if (res.status === 429) { - setRegError(json?.error ?? 'Rate limit excedido. Tente novamente mais tarde.') - } else { - setRegError(json?.error ?? json?.message ?? `Erro (${res.status})`) - } - } catch (err: any) { - console.error('[REGISTER PACIENTE] erro', err) - setRegError(err?.message ?? String(err)) - } finally { - setRegLoading(false) - } - } + // Auto-cadastro foi removido (UI + client-side endpoint call) return (
| Médico | -Consultas | -Absenteísmo (%) | -
|---|---|---|
| {m.nome} | -{m.consultas} | -{m.absenteismo} | -
Escolha o formato ideal, selecione a especialidade e encontre o profissional perfeito para você.
+Escolha o formato ideal, selecione a especialidade e encontre o profissional perfeito para você.