Worker
Este documento describe la lógica del Worker de Evaluación de Reabastecimiento Urgente, incluyendo los procesos que maneja, las estructuras de mensajes de entrada/salida, el flujo de procesamiento, los adaptadores y puertos involucrados, las reglas de negocio aplicadas, y los posibles errores o excepciones.
Evaluación de Reabastecimiento Urgente
Section titled “Evaluación de Reabastecimiento Urgente”El proceso de Evaluación de Reabastecimiento Urgente monitorea requisitos de pedidos que están en espera debido a reabastecimiento pendiente. Cuando se detectan estos eventos, el worker los evalúa y crea o actualiza alertas de reabastecimiento al nivel “Urgente”. Esto ayuda a priorizar las operaciones de reabastecimiento para artículos que están bloqueando pedidos de clientes.
Estructura de Mensajes de Entrada/Salida
Section titled “Estructura de Mensajes de Entrada/Salida”Mensaje de Entrada (OrderRequirementOnHold)
Section titled “Mensaje de Entrada (OrderRequirementOnHold)”interface OrderRequirementOnHold { event: string; // "ORDER_REQUIREMENT_ON_HOLD" reason: string; // Razón de la espera orderId: string; // ID del pedido country: string; // Código de país warehouseSapCode: string; // Código SAP del almacén ean: string; // EAN del producto brand: string; // Marca del producto cause: string; // "pending-restock"}Salida (Restocking)
Section titled “Salida (Restocking)”interface Restocking { readonly id: string; readonly ean: string; type: 'Transactional'; level: 'Urgent' | 'Critical' | 'Warning'; readonly country: string; readonly warehouse: string;}Flujo de Procesamiento
Section titled “Flujo de Procesamiento”-
Recepción de Mensajes:
- El worker consulta la cola SQS para obtener mensajes
- Los mensajes se reciben en lotes de hasta 10 a la vez
-
Validación de Mensajes:
- El mensaje se valida para asegurar que tiene el formato correcto
- Se verifica el tipo de evento para asegurar que es “ORDER_REQUIREMENT_ON_HOLD”
- Se verifica la causa para asegurar que es “pending-restock”
-
Validación de Almacén:
- El código SAP del almacén se utiliza para encontrar el almacén correspondiente
- Se verifica que el almacén existe
- Se verifica que el almacén tiene habilitada la bandera de característica “restocking_urgent”
-
Verificación de Alerta de Reabastecimiento:
- El worker verifica si ya existe una alerta de reabastecimiento para el producto (EAN) y almacén
- Si existe una alerta y ya está en el nivel “Urgente”, el proceso se detiene
- Si existe una alerta pero no está en el nivel “Urgente”, se actualiza
- Si no existe una alerta, se crea una nueva
-
Creación/Actualización de Alerta:
- Para nuevas alertas, se realiza una solicitud POST al servicio de reabastecimiento
- Para alertas existentes, se realiza una solicitud PUT al servicio de reabastecimiento
- La alerta se establece con tipo “Transactional” y nivel “Urgent”
-
Eliminación de Mensajes:
- Después de un procesamiento exitoso, el mensaje se elimina de la cola
- Si el procesamiento falla debido a un error de negocio, el mensaje puede eliminarse o retenerse dependiendo del tipo de error
Adaptadores y Puertos Involucrados
Section titled “Adaptadores y Puertos Involucrados”Puertos (Interfaces)
Section titled “Puertos (Interfaces)”-
QueueService: Interfaz para interactuar con colas de mensajes
receiveMessage(maxNumberOfMessages: number): Promise<Either<BusinessError, Array<QueueMessage<OrderRequirementOnHold>>>>deleteMessage(receiptHandle: string): Promise<Either<BusinessError, any>>
-
RestockingService: Interfaz para gestionar alertas de reabastecimiento
findByEan(params: { ean: string, warehouse: string }): Promise<Either<BusinessError, Restocking | null>>create(restocking: NewRestocking): Promise<Either<BusinessError, Restocking>>update(restocking: UpdateRestocking): Promise<Either<BusinessError, Restocking>>
Adaptadores (Implementaciones)
Section titled “Adaptadores (Implementaciones)”- AwsQueueService: Implementa la interfaz QueueService para AWS SQS
- HttpRestockingService: Implementa la interfaz RestockingService para comunicación HTTP
Reglas de Negocio
Section titled “Reglas de Negocio”-
Validación de Eventos:
- El tipo de evento debe ser “ORDER_REQUIREMENT_ON_HOLD”
- La causa debe ser “pending-restock”
-
Validación de Almacén:
- El almacén debe existir en el sistema
- El almacén debe tener habilitada la bandera de característica “restocking_urgent”
-
Reglas de Alerta de Reabastecimiento:
- Si ya existe una alerta de reabastecimiento para el producto y almacén y está en el nivel “Urgente”, no se realiza ninguna acción
- Si ya existe una alerta de reabastecimiento pero no está en el nivel “Urgente”, se actualiza a “Urgente”
- Si no existe una alerta de reabastecimiento, se crea una nueva con nivel “Urgente”
- Todas las alertas de reabastecimiento creadas o actualizadas por este worker tienen tipo “Transactional”
Posibles Errores y Excepciones
Section titled “Posibles Errores y Excepciones”Errores de Negocio
Section titled “Errores de Negocio”- InvalidEventFormatError: El formato del evento es inválido
- UnprocessableEventTypeError: El tipo de evento no es “ORDER_REQUIREMENT_ON_HOLD” o la causa no es “pending-restock”
- WarehouseNotFoundError: El almacén con el código SAP dado no existe
- WarehouseNotEnabledError: El almacén no tiene habilitada la bandera de característica “restocking_urgent”
- RestockingAlreadyExistsError: Ya existe una alerta de reabastecimiento para el producto y almacén y está en el nivel “Urgente”
- InternalRestockingServiceError: Ocurrió un error en el servicio de reabastecimiento
Errores del Sistema
Section titled “Errores del Sistema”- GettingQueueMessageError: Ocurrió un error al recibir mensajes de la cola
- DeleteQueueMessageError: Ocurrió un error al eliminar un mensaje de la cola
- UnexpectedError: Ocurrió un error inesperado durante el procesamiento
Manejo de Errores
Section titled “Manejo de Errores”El worker utiliza la mónada Either para el manejo funcional de errores. Esto permite una clara separación de los caminos de éxito y fracaso.
- Errores de Negocio: Algunos errores de negocio (como UnprocessableEventTypeError, InvalidEventFormatError, RestockingAlreadyExistsError y WarehouseNotEnabledError) se consideran errores “manejados”. El mensaje se elimina de la cola y el error se registra como una advertencia.
- Errores del Sistema: Los errores del sistema y otros errores de negocio se consideran errores “no manejados”. El mensaje permanece en la cola para reintento y el error se registra como un error.
El worker registra todos los errores con el contexto apropiado para ayudar en la depuración y monitoreo.