Ejecucion de Automatizaciones

Como se ejecutan las automatizaciones cuando un candidato se mueve entre etapas

ejecucionautomatizacionmovertareaprocesoflujo

Ejecucion de Automatizaciones

Entiende como se ejecutan las automatizaciones configuradas cuando un candidato se mueve entre etapas del proceso.

Flujo General

  1. Usuario mueve candidato a nueva etapa
  2. ProcessTaskService.moveTask()
  3. Validaciones previas
  4. Ejecutar automatizaciones de entrada
  5. Mover la tarea
  6. Acciones post-movimiento
  7. Candidato en nueva etapa con automatizaciones ejecutadas

Orden de Ejecucion

Secuencia de Automatizaciones

Al mover candidato a etapa con configuracion:

  1. autoAssignTests() - Asignar tests configurados
  2. autoCreateEvent() - Crear evento desde plantilla
  3. autoSendEmail() - Enviar email al candidato
  4. autoUpdateApplicationStatus() - Actualizar estado de aplicacion
  5. autoSendSchedulingLink() - Enviar enlace de auto-agendamiento
  6. Mover tarea (actualizar currentStepId)
  7. Crear historial
  8. Manejar recordatorios/SLA
  9. Evaluar branching
  10. 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:

  1. Leer step.configuration.testIds
  2. Leer step.configuration.assignOnEntry
  3. 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:

  1. Leer step.configuration.eventTemplateId
  2. Leer step.configuration.createEventOnEntry
  3. 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:

  1. Leer step.configuration.emailTemplateId
  2. Leer step.configuration.sendEmailOnEntry
  3. 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:

  1. Leer step.configuration.applicationStatusOnEntry
  2. 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:

  1. Leer step.configuration.sendSchedulingLinkOnEntry
  2. Leer step.configuration.schedulingLinkVideoProvider
  3. 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

  1. autoAssignTests() → Exito
  2. autoCreateEvent() → Falla (servicio caido)
    • Log: "Error creating event: service unavailable"
  3. autoSendEmail() → Exito
  4. 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:

  1. Evaluar cada regla en orden de prioridad
  2. Primera regla que cumple condicion:
    • Ejecutar accion (mover a otra etapa)
  3. Si ninguna cumple:
    • Quedarse en etapa actual

Ejemplo de Branching

Regla: "Si test score >= 80, mover a Entrevista"

Candidato completa test con score 85:

  1. Tarea en etapa "Evaluacion"
  2. Branching evalua regla
  3. Score 85 >= 80 → Cumple
  4. Mover a "Entrevista"
  5. 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

¿No encontraste lo que buscabas?

Nuestro equipo de soporte está listo para ayudarte.

Contactar Soporte