Skip to content

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.

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.

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"
}
interface Restocking {
readonly id: string;
readonly ean: string;
type: 'Transactional';
level: 'Urgent' | 'Critical' | 'Warning';
readonly country: string;
readonly warehouse: string;
}
  1. 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
  2. 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”
  3. 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”
  4. 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
  5. 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”
  6. 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
  • 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>>
  • AwsQueueService: Implementa la interfaz QueueService para AWS SQS
  • HttpRestockingService: Implementa la interfaz RestockingService para comunicación HTTP
  1. Validación de Eventos:

    • El tipo de evento debe ser “ORDER_REQUIREMENT_ON_HOLD”
    • La causa debe ser “pending-restock”
  2. 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”
  3. 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”
  • 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
  • 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

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.