Saltar a contenido

Importación de E-Test (Import E-Test)

Descripción

La importación de E-Test permite a un administrador vincular un E-Test Onboarding ya completado a un usuario de E-Training, saltando el paso de entrevista obligatorio. Es el camino alternativo al flujo estándar de 11-entrevista.md: en lugar de que el usuario haga la entrevista desde la plataforma, el admin busca el resultado preexistente en E-Talent y lo asocia directamente.

Casos de uso típico: - Un usuario ya realizó un E-Test Onboarding en otro contexto (ej. un proceso de selección previo). - Se crea el usuario en E-Training y se importa el resultado sin pedirle que repita la entrevista.

Una vez importado, el usuario queda en el mismo estado que si hubiera completado la entrevista normalmente: tiene eMode asignado y puede acceder a todas las funcionalidades que lo requieren.


Casos de uso

1. Buscar candidatos en E-Talent (GET /interviews/candidates/search)

Actor: Administrador autenticado con permiso USER:WRITE.

Objetivo: Encontrar entrevistas completadas en E-Talent para un candidato, a partir de su nombre y/o email.

Precondiciones: - El administrador debe estar autenticado (JWT válido). - El administrador debe tener permiso USER:WRITE. - El parámetro name es obligatorio.

Flujo principal:

  1. El administrador busca al candidato por nombre (y opcionalmente email).
  2. El sistema consulta a E-Talent las entrevistas completadas que coincidan con los criterios.
  3. El sistema devuelve la lista de candidatos con sus entrevistas completadas.

Resultado esperado: Lista de candidatos con su external_interview_id (identificador en E-Talent), nombre, email, organización y fecha de completado.

Flujos alternativos:

  • Sin resultados: Devuelve lista vacía (200, sin error).
  • Parámetro name ausente: Error 400 (validación).
  • No autenticado o sin permiso: Error 401 / 403.

2. Importar entrevista a un usuario (POST /users/:id/interview/import)

Actor: Administrador autenticado con permiso USER:WRITE.

Objetivo: Vincular una entrevista completada en E-Talent al usuario especificado, asignándole su eMode.

Precondiciones: - El administrador debe estar autenticado (JWT válido) con permiso USER:WRITE. - El usuario destino debe existir en el sistema. - El usuario destino no debe tener entrevista registrada. - El usuario destino no debe tener eMode asignado. - El source_external_interview_id debe corresponder a una entrevista completada en E-Talent. - El reporte de esa entrevista en E-Talent debe contener un eMode válido. - Esa entrevista no debe haber sido importada previamente a otro usuario.

Flujo principal:

  1. El administrador envía el source_external_interview_id (obtenido del paso de búsqueda).
  2. El sistema verifica que la entrevista exista en E-Talent y esté en estado COMPLETED.
  3. El sistema verifica que el reporte de la entrevista en E-Talent contenga un eMode válido.
  4. El sistema verifica que esa entrevista no haya sido importada antes.
  5. El sistema verifica que el usuario destino no tenga ya una entrevista.
  6. El sistema verifica que el usuario destino no tenga eMode asignado.
  7. El sistema crea la entrevista localmente con estado COMPLETED y el reporte de E-Talent.
  8. El sistema asigna el eMode al usuario con el valor del reporte.
  9. El sistema devuelve los datos de la entrevista importada.

Resultado esperado: La entrevista queda registrada en estado COMPLETED y el usuario tiene su eMode asignado (código 201).

Flujos alternativos:

Situación Respuesta
Entrevista no encontrada en E-Talent o no completada Error 404
Resultado de la entrevista en E-Talent sin eMode válido Error 422
Entrevista ya importada (mismo source_external_interview_id en BD) Error 409
Usuario ya tiene una entrevista registrada Error 409
Usuario ya tiene eMode asignado Error 409
Usuario destino no existe Error 404
No autenticado o sin permiso Error 401 / 403
Validación del body Error 400

Flujo completo (diagrama)

Admin (con permiso USER:WRITE)
GET /interviews/candidates/search?name=Juan&email=juan@empresa.com
[Sistema consulta E-Talent por entrevistas COMPLETED]
[Admin recibe lista con external_interview_id de cada candidato]
[Admin selecciona el external_interview_id correcto]
POST /users/:id/interview/import
  { "source_external_interview_id": "etalent-uuid" }
[Sistema valida: entrevista existe y está COMPLETED en E-Talent]
[Sistema valida: el reporte de E-Talent contiene un eMode válido]
[Sistema valida: no importada antes, usuario sin entrevista ni eMode]
[Sistema crea Interview local con status COMPLETED + reporte]
[Sistema actualiza eMode del usuario]
[Admin recibe 201 con datos de la entrevista importada]
[Usuario ya tiene eMode — puede usar la plataforma normalmente]

Datos de las peticiones

GET /interviews/candidates/search

Parámetro Tipo Obligatorio Descripción
name Query string Nombre del candidato a buscar en E-Talent
email Query string No Email del candidato (filtro adicional)

Header: Authorization: Bearer <JWT>

POST /users/:id/interview/import

Campo Tipo Obligatorio Descripción
id (path param) UUID ID del usuario destino en E-Training
source_external_interview_id string ID de la entrevista en E-Talent a importar

Header: Authorization: Bearer <JWT>


Respuestas del sistema

GET /interviews/candidates/search

  • Éxito: Código 200 con lista de candidatos. Cada ítem incluye:
  • external_interview_id: identificador de la entrevista en E-Talent
  • candidate_name: nombre del candidato
  • candidate_email: email del candidato
  • organization_id: organización del candidato en E-Talent
  • completed_at: fecha de completado de la entrevista
  • Sin resultados: Código 200 con lista vacía.
  • Validación fallida (falta name): Código 400.
  • No autenticado: Código 401.
  • Sin permiso: Código 403.

POST /users/:id/interview/import

  • Éxito: Código 201 con datos de la entrevista importada (igual que la respuesta del flujo estándar de entrevista):
  • id: UUID de la entrevista en E-Training
  • user_id: UUID del usuario
  • company_id: UUID de la organización
  • external_interview_id: ID E-Talent importado
  • status: siempre COMPLETED
  • redirect_url: siempre null (no aplica en importaciones)
  • created_at, updated_at
  • Entrevista no encontrada / no completada en E-Talent: Código 404.
  • Resultado de la entrevista sin eMode válido: Código 422.
  • Entrevista ya importada: Código 409.
  • Usuario ya tiene entrevista: Código 409.
  • Usuario ya tiene eMode: Código 409.
  • Usuario destino no existe: Código 404.
  • Validación fallida: Código 400.
  • No autenticado: Código 401.
  • Sin permiso: Código 403.

Condiciones de negocio (resumen)

  • Solo administradores con permiso USER:WRITE pueden buscar candidatos e importar entrevistas.
  • Solo se pueden importar entrevistas en estado COMPLETED en E-Talent. Entrevistas pendientes o en proceso no son elegibles.
  • La importación exige que el resultado de la entrevista en E-Talent contenga un eMode válido. Si el resultado no trae eMode, la importación se rechaza con un error de negocio (422), ya que no habría eMode que asignar al usuario.
  • Una entrevista de E-Talent solo puede importarse una vez: si el mismo external_interview_id ya está en la base de datos, la operación es rechazada.
  • Un usuario solo puede tener una entrevista registrada. Si ya tiene una (importada o iniciada por el flujo estándar), no se puede importar otra.
  • Si el usuario ya tiene eMode asignado (por cualquier vía), la importación es rechazada.
  • La importación funciona tanto para usuarios recién creados como para usuarios existentes sin entrevista.
  • El redirect_url siempre es null en entrevistas importadas (no hay URL de redirección porque la entrevista ya fue completada fuera de la plataforma).
  • El external_interview_id en la entrevista importada contiene el ID de E-Talent, garantizando trazabilidad completa del origen.
  • El eMode del usuario se asigna automáticamente al importar, con el valor incluido en el reporte de E-Talent.
  • La búsqueda de candidatos no está restringida por organización: E-Talent devuelve resultados de todas las organizaciones. El admin es responsable de seleccionar al candidato correcto.

Diferencias con el flujo estándar de entrevista

Aspecto Flujo estándar (11-entrevista.md) Importación (este documento)
Actor que inicia El propio usuario Un administrador
Entrevista en E-Talent Se crea nueva en el momento Ya existe (previa)
redirect_url Presente (URL para completar la entrevista) Siempre null
Estado inicial PENDING → progresa por webhook Directamente COMPLETED
Webhook necesario Sí (para actualizar estado y recibir reporte) No (el reporte se obtiene al importar)
eMode resultante Igual — el usuario queda con eMode asignado Igual

Relación con otros módulos

  • E-Test Onboarding (flujo estándar): El camino alternativo a este flujo. Ver 11-entrevista.md.
  • Modos existenciales (E-Modes): El eMode asignado al importar tiene el mismo efecto que el obtenido por el flujo estándar. Ver 05-modos-existenciales.md.
  • Usuarios: El eMode es un atributo del usuario; se actualiza al importar la entrevista. Ver 07-usuarios.md.
  • Permisos: La operación requiere USER:WRITE. Ver 02-permisos.md.