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.
Casos de Uso
Section titled “Casos de Uso”Ajuste de Productos
Section titled “Ajuste de Productos”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:
- Obtiene la fuente (ubicación o contenedor) y las entradas de inventario para el producto especificado.
- Verifica que existan entradas de inventario para el producto.
- Ordena las entradas según la estrategia FEFO (First Expired, First Out).
- Calcula la diferencia entre la cantidad deseada y la cantidad actual en inventario.
- 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.
- 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.
- Registra la operación en el servicio de métricas.
- 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
invokede la claseAdjustmentProduct. - 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.
Movimiento de Contenedores
Section titled “Movimiento de Contenedores”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ónBusinessError: Error de negocio en caso de fallo
Flujo principal:
- Obtiene el contenedor fuente y la ubicación destino.
- Verifica que el contenedor y la ubicación destino sean diferentes.
- Verifica que la ubicación destino sea de tipo almacenamiento o pre-almacenamiento.
- Verifica que la ubicación destino acepte el contenedor.
- Crea una transferencia para mover todo el inventario del contenedor.
- Ejecuta la transferencia de inventario.
- Actualiza la ubicación del contenedor.
- 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
invokede la claseMoveContainers. - 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.
Creación de Ajuste de Producto
Section titled “Creación de Ajuste de Producto”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 inventarioBusinessError: Error de negocio en caso de fallo
Flujo principal:
- Verifica que la fuente (ubicación o contenedor) exista.
- Crea una entrada de inventario con los parámetros especificados.
- Ejecuta la operación de entrada en el servicio de inventario.
- Registra la operación en el servicio de métricas.
- 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
invokede la claseCreateAdjustmentProduct. - 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.
Movimiento de Productos
Section titled “Movimiento de Productos”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ónBusinessError: Error de negocio en caso de fallo
Flujo principal:
- Verifica que la fuente y el destino existan.
- Verifica que la fuente y el destino sean diferentes.
- Obtiene las entradas de inventario para el producto en la fuente.
- Verifica que haya suficiente stock para mover.
- Ordena las entradas según la estrategia FEFO (First Expired, First Out).
- Crea una o más transferencias para mover el producto.
- Ejecuta las transferencias de inventario.
- 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
invokede la claseMoveProducts. - 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.