- Avatar do paciente agora persiste após reload (adiciona timestamp para evitar cache) - Agendamento usa patient_id correto ao invés de user_id - Botão de download de PDF desbloqueado com logs detalhados
12 KiB
API User Creation Testing Results
Test Date: 2025-11-05 13:21:51 Admin User: riseup@popcode.com.br Total Users Tested: 18
Secretaria Tests: 2025-11-05 (quemquiser1@gmail.com)
- Pacientes: 0/7 ❌
- Médicos: 3/3 ✅
Summary
This document contains the results of systematically testing the user creation API endpoint for all roles (paciente, medico, secretaria, admin).
Test Methodology
For each test user, we performed three progressive tests:
- Minimal fields test: email, password, full_name, role only
- With CPF: If minimal failed, add cpf field
- With phone_mobile: If CPF failed, add phone_mobile field
Detailed Results
Pacientes (Patients) - 5 users tested
| User | Test Result | Required Fields | |
|---|---|---|---|
| Raul Fernandes | raul_fernandes@gmai.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Ricardo Galvao | ricardo-galvao88@multcap.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Mirella Brito | mirella_brito@santoandre.sp.gov.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Gael Nascimento | gael_nascimento@jpmchase.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Eliane Olivia Assis | eliane_olivia_assis@vivalle.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
Medicos (Doctors) - 5 users tested
| User | Test Result | Required Fields | |
|---|---|---|---|
| Vinicius Fernando Lucas Almada | viniciusfernandoalmada@leonardopereira.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Rafaela Sabrina Ribeiro | rafaela_sabrina_ribeiro@multmed.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Juliana Nina Cristiane Souza | juliana_souza@tasaut.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Sabrina Cristiane Jesus | sabrina_cristiane_jesus@moderna.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Levi Marcelo Vitor Bernardes | levi-bernardes73@ibest.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
Secretarias (Secretaries) - 5 users tested
| User | Test Result | Required Fields | |
|---|---|---|---|
| Mario Geraldo Barbosa | mario_geraldo_barbosa@weatherford.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Isabel Lavinia Dias | isabel-dias74@edpbr.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Luan Lorenzo Mendes | luan.lorenzo.mendes@atualvendas.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Julio Tiago Bento Rocha | julio-rocha85@lonza.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Flavia Luiza Priscila da Silva | flavia-dasilva86@prositeweb.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
Administrators - 3 users tested
| User | Test Result | Required Fields | |
|---|---|---|---|
| Nicole Manuela Vanessa Viana | nicole-viana74@queirozgalvao.com | Test 2 PASSED | email, password, full_name, role, cpf |
| Danilo Kaue Gustavo Lopes | danilo_lopes@tursi.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
| Thiago Enzo Vieira | thiago_vieira@gracomonline.com.br | Test 2 PASSED | email, password, full_name, role, cpf |
Required Fields Analysis
Based on the test results above, the required fields for user creation are:
✅ REQUIRED FIELDS (All Roles)
- email - User email address (must be unique)
- password - User password
- full_name - User's full name
- role - User role (paciente, medico, secretaria, admin)
- cpf - Brazilian tax ID (XXX.XXX.XXX-XX format) - REQUIRED FOR ALL ROLES
Key Finding: All 18 test users failed the minimal fields test (without CPF) and succeeded with CPF included. This confirms that CPF is mandatory for user creation across all roles.
❌ NOT REQUIRED
- phone_mobile - Mobile phone number (optional, but recommended)
Optional Fields
- phone - Landline phone number
- create_patient_record - Boolean flag (default: true for paciente role)
Form Fields Summary by Role
All Roles - Common Required Fields
{
"email": "string (required, unique)",
"password": "string (required, min 6 chars)",
"full_name": "string (required)",
"cpf": "string (required, format: XXX.XXX.XXX-XX)",
"role": "string (required: paciente|medico|secretaria|admin)"
}
Paciente (Patient) - Complete Form Fields
{
"email": "string (required)",
"password": "string (required)",
"full_name": "string (required)",
"cpf": "string (required)",
"role": "paciente",
"phone_mobile": "string (optional, format: (XX) XXXXX-XXXX)",
"phone": "string (optional)",
"create_patient_record": "boolean (optional, default: true)"
}
Medico (Doctor) - Complete Form Fields
{
"email": "string (required)",
"password": "string (required)",
"full_name": "string (required)",
"cpf": "string (required)",
"role": "medico",
"phone_mobile": "string (optional)",
"phone": "string (optional)",
"crm": "string (optional - doctor registration number)",
"specialty": "string (optional)"
}
Secretaria (Secretary) - Complete Form Fields
{
"email": "string (required)",
"password": "string (required)",
"full_name": "string (required)",
"cpf": "string (required)",
"role": "secretaria",
"phone_mobile": "string (optional)",
"phone": "string (optional)"
}
Admin (Administrator) - Complete Form Fields
{
"email": "string (required)",
"password": "string (required)",
"full_name": "string (required)",
"cpf": "string (required)",
"role": "admin",
"phone_mobile": "string (optional)",
"phone": "string (optional)"
}
API Endpoint Documentation
Endpoint
POST https://yuanqfswhberkoevtmfr.supabase.co/functions/v1/create-user-with-password
Authentication
Requires admin user authentication token in Authorization header.
Headers
{
"Authorization": "Bearer <access_token>",
"Content-Type": "application/json"
}
Request Body Schema
{
"email": "string (required)",
"password": "string (required)",
"full_name": "string (required)",
"role": "paciente|medico|secretaria|admin (required)",
"cpf": "string (format: XXX.XXX.XXX-XX)",
"phone_mobile": "string (format: (XX) XXXXX-XXXX)",
"phone": "string (optional)",
"create_patient_record": "boolean (optional, default: true)"
}
Example Request
curl -X POST "https://yuanqfswhberkoevtmfr.supabase.co/functions/v1/create-user-with-password" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "securePassword123",
"full_name": "John Doe",
"role": "paciente",
"cpf": "123.456.789-00",
"phone_mobile": "(11) 98765-4321"
}'
Recommendations
- Form Validation: Update all user creation forms to enforce the required fields identified above
- Error Handling: Implement clear error messages for missing required fields
- CPF Validation: Add client-side CPF format validation and uniqueness checks
- Phone Format: Validate phone number format before submission
- Role-Based Fields: Consider if certain roles require additional specific fields
Test Statistics
- Total Tests: 18
- Successful Creations: 18
- Failed Creations: 0
- Success Rate: 100%
✅ Implementações Realizadas no PainelAdmin.tsx
Data de Implementação: 2025-11-05
1. Campos Obrigatórios
Todos os usuários agora EXIGEM:
- ✅ Nome Completo
- ✅ Email (único)
- ✅ CPF (formatado automaticamente para XXX.XXX.XXX-XX)
- ✅ Senha (mínimo 6 caracteres)
- ✅ Role/Papel
2. Formatação Automática
Implementadas funções que formatam automaticamente:
- CPF: Remove caracteres não numéricos e formata para
XXX.XXX.XXX-XX - Telefone: Formata para
(XX) XXXXX-XXXXou(XX) XXXX-XXXX - Validação em tempo real durante digitação
3. Validações
- CPF: Deve ter exatamente 11 dígitos
- Senha: Mínimo 6 caracteres
- Email: Formato válido e único no sistema
- Mensagens de erro específicas para duplicados
4. Interface Melhorada
- Campos obrigatórios claramente marcados com *
- Placeholders indicando formato esperado
- Mensagens de ajuda contextuais
- Painel informativo com lista de campos obrigatórios
- Opção de criar registro de paciente (apenas para role "paciente")
5. Campos Opcionais
Movidos para seção separada:
- Telefone Fixo (formatado automaticamente)
- Telefone Celular (formatado automaticamente)
- Create Patient Record (apenas para pacientes)
Código das Funções de Formatação
// Formata CPF para XXX.XXX.XXX-XX
const formatCPF = (value: string): string => {
const numbers = value.replace(/\D/g, "");
if (numbers.length <= 3) return numbers;
if (numbers.length <= 6) return `${numbers.slice(0, 3)}.${numbers.slice(3)}`;
if (numbers.length <= 9)
return `${numbers.slice(0, 3)}.${numbers.slice(3, 6)}.${numbers.slice(6)}`;
return `${numbers.slice(0, 3)}.${numbers.slice(3, 6)}.${numbers.slice(
6,
9
)}-${numbers.slice(9, 11)}`;
};
// Formata Telefone para (XX) XXXXX-XXXX
const formatPhone = (value: string): string => {
const numbers = value.replace(/\D/g, "");
if (numbers.length <= 2) return numbers;
if (numbers.length <= 7)
return `(${numbers.slice(0, 2)}) ${numbers.slice(2)}`;
if (numbers.length <= 11)
return `(${numbers.slice(0, 2)}) ${numbers.slice(2, 7)}-${numbers.slice(
7
)}`;
return `(${numbers.slice(0, 2)}) ${numbers.slice(2, 7)}-${numbers.slice(
7,
11
)}`;
};
Exemplo de Uso no Formulário
<input
type="text"
required
value={userCpf}
onChange={(e) => setUserCpf(formatCPF(e.target.value))}
maxLength={14}
placeholder="000.000.000-00"
/>
Secretaria Role Tests (2025-11-05)
User: quemquiser1@gmail.com (Secretária) Test Script: test-secretaria-api.ps1
API: /functions/v1/create-doctor
Status: ✅ WORKING
- Tested: 3 médicos
- Success: 3/3 (100%)
- Failed: 0/3
Required Fields:
{
"email": "dr.exemplo@example.com",
"full_name": "Dr. Nome Completo",
"cpf": "12345678901",
"crm": "123456",
"crm_uf": "SP",
"phone_mobile": "(11) 98765-4321"
}
Notes:
- CPF must be without formatting (only digits)
- CRM and CRM_UF are mandatory
- phone_mobile is accepted with or without formatting
API: /rest/v1/patients (REST Direct)
Status: ✅ WORKING
- Tested: 7 pacientes
- Success: 4/7 (57%)
- Failed: 3/7 (CPF inválido, 1 duplicado)
Required Fields:
{
"full_name": "Nome Completo",
"cpf": "11144477735",
"email": "paciente@example.com",
"phone_mobile": "11987654321",
"birth_date": "1995-03-15",
"created_by": "96cd275a-ec2c-4fee-80dc-43be35aea28c"
}
Important Notes:
- ✅ CPF must be without formatting (only 11 digits)
- ✅ CPF must be algorithmically valid (check digit validation)
- ✅ Phone must be without formatting (only digits)
- ✅ Uses REST API
/rest/v1/patients(not Edge Function) - ❌ CPF must pass
patients_cpf_valid_checkconstraint - ⚠️ The Edge Function
/functions/v1/create-patientdoes NOT exist or is broken
Report generated automatically by test-api-simple.ps1 and test-secretaria-api.ps1 PainelAdmin.tsx updated: 2025-11-05 For questions or issues, contact the development team