# 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 ```json { "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 ```json { "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 ```json { "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 ```json { "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 ```json { "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 ```json { "Authorization": "Bearer ", "Content-Type": "application/json" } ``` ### Request Body Schema ```json { "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 ```bash 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 ```typescript // 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 ```tsx 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:** ```json { "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:** ```json { "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_