Skip to content

Use Cases

Este documento detalla los principales casos de uso implementados en el worker de recolección de logística inversa, organizados por categorías funcionales.

  • Descripción: Procesa un evento de suministro desde la cola, lo valida y crea un elemento de logística inversa.

  • Interfaz de entrada:

    interface SupplyEventMessage {
    type: 'SupplyDeprecated'
    data: {
    _id: string
    orderId: string
    barcode: string
    items: Array<{
    ean: string
    quantity: number
    zone: string
    }>
    samplings: Array<{
    ean: string
    quantity: number
    zone: string
    }>
    }
    context: {
    country: string
    warehouse: string
    }
    }
  • Interfaz de salida:

    Either<BusinessError, string> // string es el ID del elemento de logística inversa creado
  • Flujo principal:

    1. Validar el formato y tipo del evento
    2. Comprobar si el almacén está habilitado
    3. Comprobar si ya existe un elemento de logística inversa con el mismo código de barras de tara
    4. Buscar productos por sus EANs
    5. Transformar el evento y los productos en un elemento de logística inversa
    6. Completar zonas faltantes para productos
    7. Comprobar si todos los productos tienen zona
    8. Crear el elemento de logística inversa
    9. Retornar el ID del elemento creado
  • Reglas de negocio:

    • El tipo de evento debe ser ‘SupplyDeprecated’
    • El almacén debe estar en la lista de almacenes habilitados
    • No debe existir ya un elemento de logística inversa con el mismo código de barras de tara
    • Todos los productos deben existir en el sistema
    • Todos los productos deben tener una zona
  • Adaptadores implicados:

    • QueueService: Para recibir y eliminar mensajes de la cola
    • ProductService: Para buscar productos por sus EANs
    • ReverseLogisticService: Para crear elementos de logística inversa
    • LocationAssignmentService: Para buscar zonas para productos
  • Excepciones:

    • EventTypeUnprocessableError: Si el tipo de evento no es ‘SupplyDeprecated’
    • WarehouseNotEnabledError: Si el almacén no está en la lista de almacenes habilitados
    • ReverseLogisticsItemAlreadyExistsError: Si ya existe un elemento de logística inversa con el mismo código de barras de tara
    • ProductsNotFoundError: Si no se encuentra algún producto
    • ZoneNotFoundError: Si algún producto no tiene zona
    • UnexpectedError: Para errores inesperados
  • Descripción: Ejecuta el worker según una programación, recibiendo y procesando mensajes de la cola.

  • Interfaz de entrada: Ninguna (activado por un cron job)

  • Interfaz de salida: Ninguna

  • Flujo principal:

    1. Recibir mensajes de la cola
    2. Para cada mensaje: a. Comprobar si el evento es procesable b. Comprobar si el almacén está habilitado c. Procesar el evento d. Eliminar el mensaje de la cola si el procesamiento es exitoso
    3. Registrar los resultados
  • Reglas de negocio:

    • El worker se ejecuta según una programación definida por una expresión cron
    • El worker procesa un máximo de 10 mensajes por ejecución
    • Algunos errores se consideran no críticos y el mensaje se elimina de la cola
    • Otros errores se consideran críticos y el mensaje no se elimina de la cola
  • Adaptadores implicados:

    • QueueService: Para recibir y eliminar mensajes de la cola
    • CollectorProcessor: Para procesar eventos
  • Excepciones: Ninguna (los errores se manejan internamente)