riseup-squad18/api-testing-results.md
Fernando Pirichowski Aguiar 389a191f20 fix: corrige persistência de avatar, agendamento de consulta e download de PDF
- 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
2025-11-15 08:36:41 -03:00

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:

  1. Minimal fields test: email, password, full_name, role only
  2. With CPF: If minimal failed, add cpf field
  3. With phone_mobile: If CPF failed, add phone_mobile field

Detailed Results

Pacientes (Patients) - 5 users tested

User Email 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 Email 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 Email 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 Email 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

  1. Form Validation: Update all user creation forms to enforce the required fields identified above
  2. Error Handling: Implement clear error messages for missing required fields
  3. CPF Validation: Add client-side CPF format validation and uniqueness checks
  4. Phone Format: Validate phone number format before submission
  5. 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-XXXX ou (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_check constraint
  • ⚠️ The Edge Function /functions/v1/create-patient does 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