Skip to main content

Historia de Usuario: Job Batch para Orquestar Validación de Líneas de Pedido

Versión: 1.0
Fecha: 2025-06-03
Autor: Arquitecto de Tecnologías

🎯 Historia de Usuario

Como Sistema de Integración EDI
Quiero un proceso Spring Batch (Job de Validación)
Para que pueda leer líneas de pedido en estado NEW_LINE, disparar su validación a través de la máquina de estados, y que esta interactúe con Oracle Fusion para validar los datos.

✅ Criterios de Aceptación

  • Se debe implementar un Job de Spring Batch (orderLineValidationJob).
  • El ItemReader del job debe leer registros de la tabla file_lines donde sm_state sea NEW_LINE.
  • El ItemProcessor del job debe, para cada file_line leída:
    • Obtener su line_id.
    • Invocar al OrderLineStateMachineManager enviando el evento EV_VALIDATE para esa line_id.
  • La acción asociada al estado S_VALIDATING en la State Machine (invocada por el evento EV_VALIDATE) debe:
    • Extraer los datos necesarios de file_lines (o del contexto de la SM si se pasaron).
    • Llamar a la API de validación de Oracle Fusion (cliente de API debe estar implementado e inyectado).
    • Basado en la respuesta de Oracle:
      • Si la validación es exitosa: la SM debe transicionar a S_VALIDATED, y sm_state en file_lines debe actualizarse a VALIDATED.
      • Si la validación falla: la SM debe transicionar a S_VALIDATION_FAILED, y sm_state en file_lines debe actualizarse a VALIDATION_FAILED, y el campo validation_error_details debe poblarse con el mensaje de error.
  • El Job debe ser configurable (ej. tamaño de chunk, políticas de reintento del job si falla una interacción con OrderLineStateMachineManager).
  • El Job debe registrar métricas (leídos, procesados, fallos en procesador) vía Micrometer/Prometheus.
  • Logs detallados para cada línea procesada por el job y para la interacción con la SM.

🧪 Definition of Done (DoD)

  • orderLineValidationJob implementado y configurado.
  • Lee líneas en NEW_LINE correctamente.
  • Envía evento EV_VALIDATE al OrderLineStateMachineManager por cada línea.
  • La SM ejecuta la validación contra Oracle y actualiza sm_state y validation_error_details en file_lines según el resultado.
  • Job maneja errores y es reiniciable (considerando que la SM es idempotente a eventos si ya está en el estado esperado o uno posterior).
  • Métricas y logs del job implementados.

📦 Consideraciones Técnicas

  • Usar JpaPagingItemReader o JdbcCursorItemReader para leer de file_lines.
  • El ItemProcessor será el punto de integración con OrderLineStateMachineManager.
  • El ItemWriter podría ser un NoOpItemWriter si toda la lógica de actualización de estado la maneja la SM y su persister, o podría usarse para una actualización final si es necesario.
  • Implementar un cliente HTTP robusto (RestTemplate, WebClient, Feign) para interactuar con las APIs de Oracle Fusion.

🛠️ Consideraciones para Ambientes Productivos

🔐 Seguridad

  • Asegurar credenciales para la API de Oracle Fusion (ej. OAuth2, API Keys) gestionadas de forma segura.

🧠 Eficiencia e Idempotencia

  • Configurar tamaño de chunk apropiado para el job.
  • El job puede ser paralelizado (multi-threaded step) si el OrderLineStateMachineManager y la persistencia de SM son thread-safe o si se particiona la data.
  • La SM debe manejar correctamente eventos duplicados si el job se reinicia y reenvía un evento a una SM que ya lo procesó.

🧪 Observabilidad y Logging

  • Métricas de Spring Batch (items leídos, escritos, omitidos, duración del job).
  • Logs con line_id para trazar el procesamiento de cada ítem del batch.
  • Alertas si el job de validación falla repetidamente o tiene un backlog grande de líneas NEW_LINE.