Skip to content

Use Cases

Este documento detalla los casos de uso implementados en el microservicio de Utilidades de Inventario WMS. Cada caso de uso representa una operación específica que el sistema puede realizar, encapsulando la lógica de negocio correspondiente.

Descripción: Este caso de uso permite ajustar el inventario de productos en una ubicación o contenedor específico. Puede aumentar o disminuir la cantidad de un producto basándose en la diferencia entre la cantidad deseada y la cantidad actual en inventario.

Interfaz de entrada:

interface AdjustmentProductParams {
description: string // Descripción del ajuste
details?: string // Detalles adicionales (opcional)
source: LocationName | ContainerName // Ubicación o contenedor donde se realiza el ajuste
ean: string // Código EAN del producto
quantity: number // Cantidad deseada después del ajuste
country: Country // País
warehouse: Warehouse // Bodega
}

Interfaz de salida:

Either<BusinessError, Input | Output[]>

Donde:

  • Input: Representa una entrada de inventario (aumento de stock)
  • Output[]: Representa una o más salidas de inventario (disminución de stock)
  • BusinessError: Error de negocio en caso de fallo

Flujo principal:

  1. Obtiene la fuente (ubicación o contenedor) y las entradas de inventario para el producto especificado.
  2. Verifica que existan entradas de inventario para el producto.
  3. Ordena las entradas según la estrategia FEFO (First Expired, First Out).
  4. Calcula la diferencia entre la cantidad deseada y la cantidad actual en inventario.
  5. Si la cantidad deseada es mayor que la cantidad actual:
    • Crea una entrada de inventario para aumentar el stock.
    • Ejecuta la operación de entrada en el servicio de inventario.
  6. Si la cantidad deseada es menor que la cantidad actual:
    • Crea una o más salidas de inventario para disminuir el stock.
    • Ejecuta las operaciones de salida en el servicio de inventario.
  7. Registra la operación en el servicio de métricas.
  8. Retorna el resultado de la operación.

Reglas de negocio:

  • No se puede ajustar un producto que no existe en el inventario.
  • Al disminuir el stock, se sigue la estrategia FEFO para determinar qué lotes se reducen primero.
  • Si la cantidad a reducir es mayor que el stock disponible, se genera un error.
  • Las operaciones de ajuste deben incluir una descripción y pueden incluir detalles adicionales.

Puertos y Adaptadores:

  • Puertos de Entrada: Método invoke de la clase AdjustmentProduct.
  • Puertos de Salida:
    • LocationService: Para obtener información de ubicaciones.
    • ContainerService: Para obtener información de contenedores.
    • InventoryService: Para realizar operaciones de inventario.
    • MetricService: Para registrar métricas de las operaciones.

Excepciones:

  • IllegalArgumentError: Cuando no se encuentran entradas de inventario o cuando la cantidad a reducir es mayor que el stock disponible.
  • Otros errores de negocio que puedan ocurrir durante las operaciones de inventario.

Descripción: Este caso de uso permite mover un contenedor de una ubicación a otra, transfiriendo todo su inventario a la nueva ubicación.

Interfaz de entrada:

interface MoveContainerParams {
description: string // Descripción del movimiento
details?: string // Detalles adicionales (opcional)
source: ContainerName // Nombre del contenedor a mover
target: LocationName // Ubicación destino
country: Country // País
warehouse: Warehouse // Bodega
}

Interfaz de salida:

Either<BusinessError, any>

Donde:

  • any: Resultado exitoso de la operación
  • BusinessError: Error de negocio en caso de fallo

Flujo principal:

  1. Obtiene el contenedor fuente y la ubicación destino.
  2. Verifica que el contenedor y la ubicación destino sean diferentes.
  3. Verifica que la ubicación destino sea de tipo almacenamiento o pre-almacenamiento.
  4. Verifica que la ubicación destino acepte el contenedor.
  5. Crea una transferencia para mover todo el inventario del contenedor.
  6. Ejecuta la transferencia de inventario.
  7. Actualiza la ubicación del contenedor.
  8. Retorna el resultado de la operación.

Reglas de negocio:

  • El contenedor y la ubicación destino deben ser diferentes.
  • La ubicación destino debe ser de tipo almacenamiento o pre-almacenamiento.
  • La ubicación destino debe aceptar el tipo de contenedor que se está moviendo.
  • Las operaciones de movimiento deben incluir una descripción y pueden incluir detalles adicionales.

Puertos y Adaptadores:

  • Puertos de Entrada: Método invoke de la clase MoveContainers.
  • Puertos de Salida:
    • ContainerService: Para obtener información de contenedores y actualizar su ubicación.
    • LocationService: Para obtener información de ubicaciones.
    • InventoryService: Para realizar transferencias de inventario.

Excepciones:

  • Errores de negocio relacionados con las verificaciones de compatibilidad entre el contenedor y la ubicación destino.
  • Otros errores de negocio que puedan ocurrir durante las operaciones de inventario o contenedor.

Descripción: Este caso de uso permite crear un ajuste de inventario para un producto específico, estableciendo directamente la cantidad, lote y fecha de caducidad.

Interfaz de entrada:

interface CreateAdjustmentProductParams {
description: string // Descripción del ajuste
details?: string // Detalles adicionales (opcional)
ean: string // Código EAN del producto
quantity: number // Cantidad a establecer
source: LocationName | ContainerName // Ubicación o contenedor donde se realiza el ajuste
lot?: string // Lote del producto (opcional)
expirationDate?: LocalDate // Fecha de caducidad (opcional)
country: Country // País
warehouse: Warehouse // Bodega
}

Interfaz de salida:

Either<BusinessError, Input>

Donde:

  • Input: Representa una entrada de inventario
  • BusinessError: Error de negocio en caso de fallo

Flujo principal:

  1. Verifica que la fuente (ubicación o contenedor) exista.
  2. Crea una entrada de inventario con los parámetros especificados.
  3. Ejecuta la operación de entrada en el servicio de inventario.
  4. Registra la operación en el servicio de métricas.
  5. Retorna el resultado de la operación.

Reglas de negocio:

  • La fuente (ubicación o contenedor) debe existir.
  • La cantidad debe ser un número positivo.
  • Las operaciones de ajuste deben incluir una descripción y pueden incluir detalles adicionales.
  • El lote y la fecha de caducidad son opcionales.

Puertos y Adaptadores:

  • Puertos de Entrada: Método invoke de la clase CreateAdjustmentProduct.
  • Puertos de Salida:
    • LocationService: Para verificar la existencia de ubicaciones.
    • ContainerService: Para verificar la existencia de contenedores.
    • InventoryService: Para realizar operaciones de inventario.
    • MetricService: Para registrar métricas de las operaciones.

Excepciones:

  • Errores de negocio relacionados con la validación de los parámetros.
  • Otros errores de negocio que puedan ocurrir durante las operaciones de inventario.

Descripción: Este caso de uso permite mover productos de una ubicación o contenedor a otra ubicación o contenedor.

Interfaz de entrada:

interface MoveProductsParams {
description: string // Descripción del movimiento
details?: string // Detalles adicionales (opcional)
source: LocationName | ContainerName // Ubicación o contenedor origen
target: LocationName | ContainerName // Ubicación o contenedor destino
ean: string // Código EAN del producto
quantity: number // Cantidad a mover
country: Country // País
warehouse: Warehouse // Bodega
}

Interfaz de salida:

Either<BusinessError, any>

Donde:

  • any: Resultado exitoso de la operación
  • BusinessError: Error de negocio en caso de fallo

Flujo principal:

  1. Verifica que la fuente y el destino existan.
  2. Verifica que la fuente y el destino sean diferentes.
  3. Obtiene las entradas de inventario para el producto en la fuente.
  4. Verifica que haya suficiente stock para mover.
  5. Ordena las entradas según la estrategia FEFO (First Expired, First Out).
  6. Crea una o más transferencias para mover el producto.
  7. Ejecuta las transferencias de inventario.
  8. Retorna el resultado de la operación.

Reglas de negocio:

  • La fuente y el destino deben existir y ser diferentes.
  • Debe haber suficiente stock en la fuente para realizar el movimiento.
  • Al mover productos, se sigue la estrategia FEFO para determinar qué lotes se mueven primero.
  • Las operaciones de movimiento deben incluir una descripción y pueden incluir detalles adicionales.

Puertos y Adaptadores:

  • Puertos de Entrada: Método invoke de la clase MoveProducts.
  • Puertos de Salida:
    • LocationService: Para verificar la existencia de ubicaciones.
    • ContainerService: Para verificar la existencia de contenedores.
    • InventoryService: Para obtener información de inventario y realizar transferencias.

Excepciones:

  • Errores de negocio relacionados con la validación de los parámetros.
  • Errores cuando no hay suficiente stock para mover.
  • Otros errores de negocio que puedan ocurrir durante las operaciones de inventario.