Skip to content

Registro y aprobación

Cualquier empresa puede registrarse desde la web pública. El flujo crea simultáneamente la cuenta del usuario responsable y el registro de la empresa, ambos en estado pendiente, hasta que un administrador HUMAE los apruebe.

Recorrido global

1. Usuario llena form  →  Backend crea:
                            · User (status=pending_approval, role=company_user)
                            · Company (status=pending, is_verified=false)
                            · CompanyMember (role=owner, accepted_at=now)
                          + Notificación a TODOS los admins
                          + Correo de verify-email al usuario

2. Usuario verifica el correo

3. Admin revisa la solicitud → Aprobar / Rechazar

4a. Aprobar  →  User pasa a active  →  Login OK
4b. Rechazar →  User pasa a inactive →  Login bloqueado

La empresa queda igualmente en pending

Aprobar al usuario lo deja en active para que pueda iniciar sesión, pero no marca a la Company como verificada. Esa verificación (status active + is_verified=true) la hace el admin desde la pantalla de empresas si necesita validar documentación adicional. En la práctica, una vez que el usuario puede entrar, ya puede operar su empresa con su pivote owner.

Paso 1 · Formulario público

URL: /register → tarjeta "Represento una empresa"/register/empresa

El form tiene dos secciones visuales:

A) Tu cuenta (responsable de la empresa)

CampoValidación
nameRequerido, 2–120 caracteres
emailRequerido, formato email, único en users
phoneOpcional, máx. 30 caracteres
password8+ caracteres, al menos 1 letra y 1 número
password_confirmationDebe coincidir
accept_termsCheckbox obligatorio

B) Datos de la empresa

CampoValidación
company.legal_nameRequerido, 2–200 caracteres
company.trade_nameOpcional, máx. 200
company.rfcOpcional, máx. 30
company.websiteOpcional, URL válida
company.contact_phoneOpcional, máx. 30
company.industry_idOpcional, debe existir en industries
company.company_size_idOpcional, debe existir en company_sizes
company.motivoOpcional, máx. 500 caracteres — texto libre para el admin

Endpoint: POST /api/v1/auth/register/companyRate limit: 5 por minuto por IP.

Los campos opcionales aceleran la aprobación

Mientras más datos provea la empresa (RFC, sitio web, motivo), más rápido el admin valida que es legítima. Recomendamos llenar al menos trade_name y website.

Paso 2 · Lo que crea el backend

AuthService::registerCompanyUser() corre dentro de una transacción que persiste tres registros:

  1. User (status=pending_approval, password hasheada, email_verified_at=NULL).
  2. Company (status='pending', is_verified=false, slug derivado de legal_name con sufijo numérico si colisiona).
  3. CompanyMember (pivote): role='owner', is_primary_contact=true, accepted_at=now() (el dueño no necesita aceptar invitación porque él mismo se registró).

Después de la transacción:

  1. Dispatch del evento Registered → envía VerifyEmail al usuario.
  2. PendingUserRegistrationNotification a todos los admins (incluye el legal_name de la empresa para que el admin sepa de quién es la solicitud).

La respuesta 201 no incluye token; el frontend muestra la pantalla "¡Recibimos el registro de tu empresa!".

Paso 3 · Verificación de email

Idéntica al resto de roles: signed URL con expiración de 60 min, marca email_verified_at. No cambia status ni el flag de la empresa.

Paso 4 · Aprobación o rechazo

Ver Gestión de usuarios y aprobaciones (admin) para el detalle operativo. Una vez aprobado:

  • El usuario inicia sesión normal y aterriza en /me/empresa/vacantes.
  • Su pivote CompanyMember con role='owner' le da permisos para crear vacantes, editar datos de la empresa y solicitar entrevistas.
  • Si el admin necesita marcar la empresa como verificada (badge ✔ en cards de candidatos), lo hace desde el panel de empresas — pero esto es separado del login.

Paso 5 · Login antes y después

EstadoResultado
Pre-aprobación, email no verificado403 errors.code = email_unverified
Pre-aprobación, email verificado403 errors.code = pending_approval con texto "Tu cuenta está en revisión"
Aprobado y verificado200 {user, token} → redirect a /me/empresa/vacantes
Rechazado por el admin403 errors.code = account_inactive

Notificaciones relacionadas

EventoDestinatarioPlantilla
Solicitud creadaUsuario solicitanteVerifyEmail
Solicitud creadaCada adminPendingUserRegistrationNotification (incluye companyName)
AprobaciónUsuarioAccountApprovedNotification
RechazoUsuarioAccountRejectedNotification(reason?)

Errores comunes

SíntomaCausaSolución
422 errors.emailEmail ya existeUsar Recuperar contraseña
422 errors.company.legal_nameRazón social vacíaLlenar el campo (es requerido)
422 errors.company.websiteURL malformadaIncluir esquema https://... o dejarlo vacío
422 errors.company.industry_id / company.company_size_idID no existe en catálogoElegir del select; el campo es opcional

Siguiente

Tras la aprobación: Publicar una vacante →.

Manual de usuario HUMAE · Uso interno