Ejecucion de Automatizaciones
Entiende como se ejecutan las automatizaciones configuradas cuando un candidato se mueve entre etapas del proceso.
Flujo General
- Usuario mueve candidato a nueva etapa
- ProcessTaskService.moveTask()
- Validaciones previas
- Ejecutar automatizaciones de entrada
- Mover la tarea
- Acciones post-movimiento
- Candidato en nueva etapa con automatizaciones ejecutadas
Orden de Ejecucion
Secuencia de Automatizaciones
Al mover candidato a etapa con configuracion:
- autoAssignTests() - Asignar tests configurados
- autoCreateEvent() - Crear evento desde plantilla
- autoSendEmail() - Enviar email al candidato
- autoUpdateApplicationStatus() - Actualizar estado de aplicacion
- autoSendSchedulingLink() - Enviar enlace de auto-agendamiento
- Mover tarea (actualizar currentStepId)
- Crear historial
- Manejar recordatorios/SLA
- Evaluar branching
- Enviar notificaciones
Diagrama de Flujo
moveTask(taskId, targetStepId)
Validaciones:
- Tests completados?
- Aprobaciones obtenidas?
- Dependencias cumplidas?
(si pasa validaciones)
autoAssignTests():
- Cargar tests de configuration
- Verificar limite suscripcion
- Crear UserTest records
- Crear DependencyRelation
autoCreateEvent():
- Cargar EventTemplate
- Crear Event
- Agregar candidato como EventAttendee
- Vincular a tarea
autoSendEmail():
- Cargar EmailTemplate
- Compilar con Handlebars
- Reemplazar variables
- Enviar via EmailService
autoUpdateApplicationStatus():
- Buscar JobApplication
- Actualizar status
- Trigger hired workflow si status = "hired"
Actualizar Tarea:
- task.currentStepId = newStepId
Acciones Post-Movimiento:
- Crear ProcessTaskHistory
- Manejar SLA/Recordatorios
- Evaluar branching rules
- Detectar etapa final
- Enviar notificaciones
Detalle de Cada Automatizacion
1. autoAssignTests()
Entrada:
- task: ProcessTask
- step: ProcessStep (con configuration)
- assignedBy: User (quien mueve)
Proceso:
- Leer step.configuration.testIds
- Leer step.configuration.assignOnEntry
- Si assignOnEntry = true:
- a) Verificar limite de suscripcion
- b) Para cada testId:
- Verificar no duplicado
- Crear UserTest (status: pending)
- Crear DependencyRelation
- c) Notificar al reclutador
Salida:
- UserTest records creados
- Notificacion enviada
- Log de asignacion
2. autoCreateEvent()
Entrada:
- task: ProcessTask
- step: ProcessStep
- process: Process
- taskUser: User (candidato)
- createdBy: User (quien mueve)
Proceso:
- Leer step.configuration.eventTemplateId
- Leer step.configuration.createEventOnEntry
- Si createEventOnEntry = true:
- a) Cargar EventTemplate
- b) Crear Event:
- titulo, descripcion de template
- startTime: ahora + 1 hora
- endTime: startTime + duracion
- video si configurado
- c) Crear EventAttendee (candidato)
- d) Crear DependencyRelation (task-event)
- e) Notificar al reclutador
Salida:
- Event creado
- Candidato como asistente
- Vinculo con tarea
3. autoSendEmail()
Entrada:
- task: ProcessTask
- step: ProcessStep
- process: Process
- taskUser: User (candidato)
Proceso:
- Leer step.configuration.emailTemplateId
- Leer step.configuration.sendEmailOnEntry
- Si sendEmailOnEntry = true:
- a) Cargar EmailTemplate
- b) Preparar variables:
- userName: taskUser.name
- userEmail: taskUser.email
- stepName: step.name
- processName: process.name
- taskId: task.id
- c) Compilar con Handlebars
- d) Enviar via EmailService
- e) Incluir CC/BCC de template
Salida:
- Email enviado
- Log de envio
4. autoUpdateApplicationStatus()
Entrada:
- task: ProcessTask
- step: ProcessStep
- movedById: number
Proceso:
- Leer step.configuration.applicationStatusOnEntry
- Si tiene valor:
- a) Buscar JobApplication vinculada
- b) Actualizar status
- c) Si status = "hired":
- Ejecutar flujo de contratacion
- Notificar al reclutador
- Retornar metadata de hired
Salida:
- JobApplication actualizada
- Workflow triggered si hired
5. autoSendSchedulingLink()
Entrada:
- task: ProcessTask
- step: ProcessStep
- taskUser: User
- movedById: number
Proceso:
- Leer step.configuration.sendSchedulingLinkOnEntry
- Leer step.configuration.schedulingLinkVideoProvider
- Si sendSchedulingLinkOnEntry = true:
- a) Crear SchedulingLink
- b) Enviar email con link
- c) Candidato puede auto-agendar
Salida:
- SchedulingLink creado
- Email enviado
Validaciones Previas
Antes de Mover
El sistema valida:
1. requireTestCompletion
- Verifica tests asignados
- Error si tests pendientes
2. requireApproval
- Verifica aprobaciones
- Error si faltan aprobaciones
3. Dependencias personalizadas
- Otras reglas de negocio
Ejemplo de Bloqueo
Candidato en "Evaluacion"
- Tests asignados: 3
- Tests completados: 2
- requireTestCompletion: true
Intento de mover:
Error: "Debe completar todos los tests antes de avanzar"
Saltar Automatizaciones
Flag skipAutomations
En algunos casos se pueden saltar:
moveTask(taskId, stepId, { skipAutomations: true })
Uso:
- Movimientos masivos/batch
- Migracion de datos
- Correccion de errores
- Movimientos por bot (a veces)
- Testing
Cuando NO Saltar
Mantener automatizaciones para:
- Movimientos normales de usuario
- Procesos de produccion
- Cuando candidato debe ser notificado
- Cuando tests/eventos son requeridos
Manejo de Errores
Durante Automatizacion
Si falla una automatizacion:
- Error se registra en log
- Otras automatizaciones continuan
- Movimiento de tarea continua
- Notificacion de error (dependiendo)
- Tarea queda en nueva etapa
Ejemplo
- autoAssignTests() → Exito
- autoCreateEvent() → Falla (servicio caido)
- Log: "Error creating event: service unavailable"
- autoSendEmail() → Exito
- Tarea movida → Exito
Resultado:
- Tarea en nueva etapa
- Tests asignados
- Email enviado
- Evento NO creado (debe hacerse manual)
- Log del error disponible
Notificaciones Generadas
Al Reclutador
Notificaciones internas:
- "Candidato X movido a etapa Y"
- "3 tests auto-asignados"
- "Evento creado: Entrevista"
- "Email enviado al candidato"
- Errores si los hay
Al Candidato
Comunicaciones externas:
- Email de cambio de etapa (si config)
- Email de tests asignados
- Invitacion a evento
- Link de auto-agendamiento
- Actualizacion de estado
Branching Post-Movimiento
Evaluacion de Reglas
Despues de mover, si hay branchingRules:
- Evaluar cada regla en orden de prioridad
- Primera regla que cumple condicion:
- Ejecutar accion (mover a otra etapa)
- Si ninguna cumple:
- Quedarse en etapa actual
Ejemplo de Branching
Regla: "Si test score >= 80, mover a Entrevista"
Candidato completa test con score 85:
- Tarea en etapa "Evaluacion"
- Branching evalua regla
- Score 85 >= 80 → Cumple
- Mover a "Entrevista"
- Automatizaciones de "Entrevista" ejecutadas
Logs y Auditoria
Historial de Tarea
ProcessTaskHistory:
- fromStepId: 5
- toStepId: 8
- movedAt: 2024-01-15 10:30:00
- movedById: 12
- notes: "Automatizaciones ejecutadas"
- metadata:
- testsAssigned: [1, 2]
- eventCreated: 45
- emailSent: true
Consultar Historial
En perfil del candidato:
- Timeline de movimientos
- Automatizaciones ejecutadas
- Errores registrados
- Quien movio y cuando
Mejores Practicas
Configuracion
Recomendaciones:
- Probar en proceso de prueba
- Verificar servicios conectados
- Validar plantillas referenciadas
- Documentar flujo esperado
- Capacitar al equipo
Monitoreo
Verificar regularmente:
- Logs de errores
- Automatizaciones fallidas
- Candidatos sin tests/eventos
- Emails no enviados
- Tiempos de SLA
Debugging
Si algo no funciona:
- Revisar configuracion de etapa
- Verificar plantillas activas
- Revisar logs del sistema
- Probar manualmente cada paso
- Contactar soporte si persiste
Proximos Pasos
- Crear Plantillas - Configurar plantillas
- Aplicar Plantillas - Usar en procesos
- SLA y Aprobaciones - Controles de flujo