Use Cases
Este documento detalla los casos de uso implementados en el microservicio op-forklift, describiendo su propósito, interfaces de entrada y salida, flujo principal, reglas de negocio aplicadas y excepciones que pueden ocurrir.
Casos de Uso
Section titled “Casos de Uso”RegisterLiftMove (Registrar Levantamiento de Pallet)
Section titled “RegisterLiftMove (Registrar Levantamiento de Pallet)”Descripción General
Section titled “Descripción General”Este caso de uso permite registrar la operación de levantar un contenedor con un montacargas desde su ubicación actual hacia una ubicación de tipo “lift” (elevación).
Interfaces
Section titled “Interfaces”Entrada (Input)
Section titled “Entrada (Input)”interface MoveParams { country: string // País donde se realiza la operación warehouse: string // Almacén donde se realiza la operación target: string // Ubicación destino donde se colocará el contenedor container: string // Identificador del contenedor a levantar username: string // Usuario que realiza la operación}Salida (Output)
Section titled “Salida (Output)”// Retorna Either<BusinessError, PalletMovement>class PalletMovement { id: PalletMovementId container: ContainerName origin: LocationName target: LocationName timestamp: Instant type: 'lift' | 'drop' username: Username country: Country warehouse: Warehouse}Flujo Principal
Section titled “Flujo Principal”- Validar y convertir los parámetros de entrada a objetos de valor del dominio
- Buscar el contenedor por nombre para verificar su existencia
- Verificar si la ubicación destino existe y es válida
- Verificar si la ubicación destino está disponible (no tiene otros contenedores)
- Verificar si el contenedor está en almacenamiento (no en tránsito)
- Mover el contenedor a la ubicación destino utilizando el servicio de utilidades de inventario
- Crear un nuevo registro de movimiento de pallet con tipo ‘lift’
- Guardar el movimiento en la base de datos
- Registrar una métrica para la operación de levantamiento
- Retornar el movimiento de pallet creado
Reglas de Negocio
Section titled “Reglas de Negocio”- La ubicación destino debe ser de tipo “lift” (debe cumplir con el patrón LOCATION_LIFT_REGEX)
- La ubicación destino no debe tener otros contenedores
- El contenedor debe existir y estar en almacenamiento (no en tránsito)
- Solo se puede levantar un contenedor a la vez
Puertos Utilizados
Section titled “Puertos Utilizados”- PalletMovementRepository: Para guardar el movimiento de pallet
- ContainerService: Para buscar contenedores y verificar su existencia
- LocationService: Para validar ubicaciones
- InventoryUtilsService: Para mover contenedores en el inventario
- MetricService: Para registrar métricas de la operación
Excepciones
Section titled “Excepciones”- ContainerNotFoundError: Cuando no se encuentra el contenedor especificado
- LocationNotFoundError: Cuando no se encuentra la ubicación destino
- LocationNotAvailableError: Cuando la ubicación destino ya tiene un contenedor
- ContainerNotInStorageError: Cuando el contenedor no está en almacenamiento
RegisterDropMove (Registrar Depósito de Pallet)
Section titled “RegisterDropMove (Registrar Depósito de Pallet)”Descripción General
Section titled “Descripción General”Este caso de uso permite registrar la operación de depositar un contenedor con un montacargas en una ubicación de tipo “drop” (depósito).
Interfaces
Section titled “Interfaces”Entrada (Input)
Section titled “Entrada (Input)”interface MoveParams { country: string // País donde se realiza la operación warehouse: string // Almacén donde se realiza la operación target: string // Ubicación destino donde se depositará el contenedor container: string // Identificador del contenedor a depositar username: string // Usuario que realiza la operación}Salida (Output)
Section titled “Salida (Output)”// Retorna Either<BusinessError, PalletMovement>class PalletMovement { id: PalletMovementId container: ContainerName origin: LocationName target: LocationName timestamp: Instant type: 'lift' | 'drop' username: Username country: Country warehouse: Warehouse}Flujo Principal
Section titled “Flujo Principal”- Validar y convertir los parámetros de entrada a objetos de valor del dominio
- Buscar el contenedor por nombre para verificar su existencia
- Verificar si la ubicación destino existe y es válida
- Verificar si el contenedor está en almacenamiento (no en tránsito)
- Mover el contenedor a la ubicación destino utilizando el servicio de utilidades de inventario
- Crear un nuevo registro de movimiento de pallet con tipo ‘drop’
- Guardar el movimiento en la base de datos
- Registrar una métrica para la operación de depósito
- Retornar el movimiento de pallet creado
Reglas de Negocio
Section titled “Reglas de Negocio”- La ubicación destino debe ser de tipo “drop” (debe cumplir con el patrón LOCATION_DROP_REGEX)
- El contenedor debe existir y estar en almacenamiento (no en tránsito)
Puertos Utilizados
Section titled “Puertos Utilizados”- PalletMovementRepository: Para guardar el movimiento de pallet
- ContainerService: Para buscar contenedores y verificar su existencia
- LocationService: Para validar ubicaciones
- InventoryUtilsService: Para mover contenedores en el inventario
- MetricService: Para registrar métricas de la operación
Excepciones
Section titled “Excepciones”- ContainerNotFoundError: Cuando no se encuentra el contenedor especificado
- LocationNotFoundError: Cuando no se encuentra la ubicación destino
- ContainerNotInStorageError: Cuando el contenedor no está en almacenamiento
FilterContainers (Filtrar Contenedores)
Section titled “FilterContainers (Filtrar Contenedores)”Descripción General
Section titled “Descripción General”Este caso de uso permite filtrar contenedores basados en sugerencias de reabastecimiento, mostrando solo aquellos que están en ubicaciones de tipo “lift” (elevación).
Interfaces
Section titled “Interfaces”Entrada (Input)
Section titled “Entrada (Input)”interface FilterParams { country: string // País donde se realiza la operación warehouse: string // Almacén donde se realiza la operación}Salida (Output)
Section titled “Salida (Output)”// Retorna Either<BusinessError, Suggestion[]>interface Suggestion { container: { id: string name: string } location: { id: string name: string } // Otros campos relacionados con las sugerencias de reabastecimiento}Flujo Principal
Section titled “Flujo Principal”- Validar y convertir los parámetros de entrada a objetos de valor del dominio
- Obtener sugerencias de reabastecimiento del servicio de reabastecimiento
- Filtrar las sugerencias para incluir solo aquellas con ubicaciones que cumplen con el patrón LOCATION_LIFT_REGEX
- Retornar las sugerencias filtradas
Reglas de Negocio
Section titled “Reglas de Negocio”- Solo se muestran sugerencias para contenedores en ubicaciones de tipo “lift”
Puertos Utilizados
Section titled “Puertos Utilizados”- RestockingService: Para obtener sugerencias de reabastecimiento
Excepciones
Section titled “Excepciones”- Errores generales del servicio de reabastecimiento