Rexistrar Nova Compañía
POST/company/auth/register
Endpoint para rexistrar novas empresas e o seu usuario administrador inicial.
Realiza as seguintes operacións:
- Valida datos obrigatorios (razón social, contrasinais coincidentes)
- Verifica unicidade do email
- Crea dirección fiscal
- Crea empresa na base de datos
- Crea usuario administrador
- Configura conta Stripe (customer + connected account)
- Envía email de benvida
- Crea tarifa inicial gratuíta por 1 mes
- Vincula con provedor existente se o taxid coincide
Fluxo detallado:
- Cliente envía datos de empresa e usuario en formato JSON
- Servidor valida campos obrigatorios (406 se faltan)
- Verifica taxid segundo normas fiscais españolas (406 se inválido)
- Comproba unicidade do email (403 se existe)
- Crea dirección fiscal cos datos proporcionados
- Rexistra empresa na base de datos
- Crea usuario administrador con contrasinal hasheado
- Configura conta Stripe (customer + connected account) para pagos futuros
- Envía email de activación con token único
- Crea tarifa inicial gratuíta por 30 días
- Se existe un company_provider co mesmo taxid, vincúlao
Requisitos de datos:
- Taxid/NIF/CIF válido segundo normativa española (opcional pero recomendado)
- Razón social completa
- Email corporativo non rexistrado
- Contrasinal seguro (mínimo 8 caracteres, maiúsculas, números e especiais)
- Dirección fiscal completa
Estrutura do request:
\{
user: \{
email: admin@empresa.com,
password: ContrasinalSeguro123!,
password_confirm: ContrasinalSeguro123!
\},
invoice_data: \{
taxid: B12345678,
email: admin@empresa.com,
socialName: Transportes Exemplo S.L
<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>
<ParamsDetails
parameters={[]}
>
</ParamsDetails>
<RequestSchema
title={"Body"}
body={{"content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","description":"Datos do usuario administrador","properties":{"email":{"type":"string","format":"email","description":"Correo electrónico do usuario"},"password":{"type":"string","format":"password","description":"Contrasinal do usuario"},"password_confirm":{"type":"string","description":"Confirmación do contrasinal"}}},"invoice_data":{"type":"object","description":"Datos fiscais de facturación","properties":{"taxid":{"type":"string","description":"NIF/CIF da empresa."},"email":{"type":"string","format":"email","description":"Correo de facturación"},"socialName":{"type":"string","description":"Razón social"},"phone":{"type":"string","description":"Teléfono de contacto"}}},"socialName":{"type":"string","description":"Razón social da empresa"},"address":{"type":"object","description":"Enderezo fiscal da empresa","properties":{"place_id":{"type":"string","description":"ID do lugar de Google Places"},"formatted_address":{"type":"string","description":"Enderezo formatado"},"geometry":{"type":"object","description":"Coordenadas GPS","properties":{"location":{"type":"object","properties":{"lat":{"type":"number","format":"float"},"lng":{"type":"number","format":"float"}}}}},"address_components":{"type":"array","description":"Compoñentes da dirección","items":{"type":"object"}},"phone":{"type":"string","description":"Teléfono da dirección"}}}},"required":["user","invoice_data","socialName","address"],"title":"RegisterRequest"},"example":{"user":{"email":"admin@transportesejemplo.com","password":"Transportes2024!","password_confirm":"Transportes2024!"},"invoice_data":{"taxid":"B12345678","email":"admin@transportesejemplo.com","socialName":"Transportes Ejemplo S.L.","phone":"+34123456789"},"socialName":"Transportes Ejemplo S.L.","address":{"place_id":"ChIJgTwKgJcpQg0RaSKMYcHeNs","address_components":[{"long_name":"123","types":["street_number"]},{"long_name":"Calle Mayor","types":["route"]},{"long_name":"Madrid","types":["locality","administrative_area_level_2"]},{"long_name":"Madrid","types":["administrative_area_level_1"]},{"long_name":"28013","types":["postal_code"]},{"long_name":"Spain","types":["country"]}],"formatted_address":"Calle Mayor 123, Madrid, 28013, Spain","geometry":{"location":{"lat":40.4168,"lng":-3.7038}},"phone":"+34123456789"}}}},"required":true}}
>
</RequestSchema>
<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Rexistro exitoso (retorna obxecto baleiro)","content":{"application/json":{"schema":{"type":"object","example":{}}}},"headers":{}},"400":{"description":"Erro ao crear dirección ou UTC inválido","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":400},"message":{"type":"string","example":"Error creating address"}}}}},"headers":{}},"403":{"description":"Correo electrónico xa rexistrado","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":403},"message":{"type":"string","example":"COMPANY_EXISTS"},"existingCompany":{"type":"object"}}}}},"headers":{}},"406":{"description":"Erro de validación","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":406},"message":{"type":"string","enum":["NAME_REQUIRED","PASSWORD_NOT_MATCH","USER_ALREADY_EXISTS","USER_DISABLED_RECOVERABLE","CIA_ASIGN_FAILED","TRUCKER_DATA_INCOMPLETE"],"example":"PASSWORD_NOT_MATCH"}}}}},"headers":{}}}}
>
</StatusCodes>