Skip to content

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.

RegisterLiftMove (Registrar Levantamiento de Pallet)

Section titled “RegisterLiftMove (Registrar Levantamiento de Pallet)”

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).

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
}
// 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
}
  1. Validar y convertir los parámetros de entrada a objetos de valor del dominio
  2. Buscar el contenedor por nombre para verificar su existencia
  3. Verificar si la ubicación destino existe y es válida
  4. Verificar si la ubicación destino está disponible (no tiene otros contenedores)
  5. Verificar si el contenedor está en almacenamiento (no en tránsito)
  6. Mover el contenedor a la ubicación destino utilizando el servicio de utilidades de inventario
  7. Crear un nuevo registro de movimiento de pallet con tipo ‘lift’
  8. Guardar el movimiento en la base de datos
  9. Registrar una métrica para la operación de levantamiento
  10. Retornar el movimiento de pallet creado
  • 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
  • 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
  • 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)”

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).

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
}
// 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
}
  1. Validar y convertir los parámetros de entrada a objetos de valor del dominio
  2. Buscar el contenedor por nombre para verificar su existencia
  3. Verificar si la ubicación destino existe y es válida
  4. Verificar si el contenedor está en almacenamiento (no en tránsito)
  5. Mover el contenedor a la ubicación destino utilizando el servicio de utilidades de inventario
  6. Crear un nuevo registro de movimiento de pallet con tipo ‘drop’
  7. Guardar el movimiento en la base de datos
  8. Registrar una métrica para la operación de depósito
  9. Retornar el movimiento de pallet creado
  • 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)
  • 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
  • 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

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).

interface FilterParams {
country: string // País donde se realiza la operación
warehouse: string // Almacén donde se realiza la operación
}
// Retorna Either<BusinessError, Suggestion[]>
interface Suggestion {
container: {
id: string
name: string
}
location: {
id: string
name: string
}
// Otros campos relacionados con las sugerencias de reabastecimiento
}
  1. Validar y convertir los parámetros de entrada a objetos de valor del dominio
  2. Obtener sugerencias de reabastecimiento del servicio de reabastecimiento
  3. Filtrar las sugerencias para incluir solo aquellas con ubicaciones que cumplen con el patrón LOCATION_LIFT_REGEX
  4. Retornar las sugerencias filtradas
  • Solo se muestran sugerencias para contenedores en ubicaciones de tipo “lift”
  • RestockingService: Para obtener sugerencias de reabastecimiento
  • Errores generales del servicio de reabastecimiento