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:
- El administrador busca al candidato por nombre (y opcionalmente email).
- El sistema consulta a E-Talent las entrevistas completadas que coincidan con los criterios.
- 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
nameausente: 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:
- El administrador envía el
source_external_interview_id(obtenido del paso de búsqueda). - El sistema verifica que la entrevista exista en E-Talent y esté en estado
COMPLETED. - El sistema verifica que el reporte de la entrevista en E-Talent contenga un
eModeválido. - El sistema verifica que esa entrevista no haya sido importada antes.
- El sistema verifica que el usuario destino no tenga ya una entrevista.
- El sistema verifica que el usuario destino no tenga eMode asignado.
- El sistema crea la entrevista localmente con estado
COMPLETEDy el reporte de E-Talent. - El sistema asigna el eMode al usuario con el valor del reporte.
- 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 | Sí | 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 | Sí | ID del usuario destino en E-Training |
source_external_interview_id |
string | Sí | 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-Talentcandidate_name: nombre del candidatocandidate_email: email del candidatoorganization_id: organización del candidato en E-Talentcompleted_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-Traininguser_id: UUID del usuariocompany_id: UUID de la organizaciónexternal_interview_id: ID E-Talent importadostatus: siempreCOMPLETEDredirect_url: siemprenull(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:WRITEpueden buscar candidatos e importar entrevistas. - Solo se pueden importar entrevistas en estado
COMPLETEDen 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_idya 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_urlsiempre esnullen entrevistas importadas (no hay URL de redirección porque la entrevista ya fue completada fuera de la plataforma). - El
external_interview_iden 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.