Skip to content

Use Cases

Este documento detalla los principales casos de uso implementados en el microservicio Storage Manager, organizados por categorías funcionales.

  • Descripción: Almacena un contenedor en una ubicación de almacenamiento, moviéndolo desde una ubicación de pre-almacenamiento a una ubicación de almacenamiento permanente.

  • Interfaz de entrada:

    interface StoreContainerParams {
    container: ContainerName
    target: LocationName
    country: Country
    warehouse: Warehouse
    username: Username
    }
  • Interfaz de salida:

    type Result = Either<BusinessError, Storage>
  • Flujo principal:

    1. Encontrar el contenedor, la ubicación objetivo y las entradas del contenedor desde sus respectivos servicios
    2. Validar que el contenedor esté en estado de pre-almacenamiento
    3. Validar que la ubicación objetivo sea una ubicación de almacenamiento con la zona correcta
    4. Validar que el contenedor no esté vacío
    5. Verificar si la ubicación objetivo ya está en uso
    6. Mover el contenedor a la ubicación objetivo utilizando el servicio WMS utils
    7. Crear un nuevo registro de Storage
    8. Guardar el registro de Storage en la base de datos
    9. Actualizar métricas
    10. Devolver el registro de Storage
  • Reglas de negocio:

    • El contenedor debe estar en estado de pre-almacenamiento
    • La ubicación objetivo debe ser una ubicación de almacenamiento
    • La ubicación objetivo debe tener la zona correcta para almacenamiento de contenedores
    • El contenedor no debe estar vacío
    • La ubicación objetivo no debe estar ya en uso
  • Adaptadores implicados:

    • Location Service
    • Container Service
    • Inventory Service
    • WMS Utils Service
    • Storage Repository
    • ID Generator
    • Metric Service
    • Calendar
  • Excepciones:

    • ContainerNotPreStorageError: Si el contenedor no está en estado de pre-almacenamiento
    • LocationNotStorageError: Si la ubicación objetivo no es una ubicación de almacenamiento
    • LocationInvalidZoneError: Si la ubicación objetivo no tiene la zona correcta
    • EmptyContainerError: Si el contenedor está vacío
    • LocationInUseError: Si la ubicación objetivo ya está en uso
    • UnexpectedError: Para errores inesperados durante operaciones de base de datos
  • Descripción: Almacena un subconjunto de productos de un contenedor en una ubicación de almacenamiento, creando un nuevo contenedor para los productos restantes.

  • Interfaz de entrada:

    interface StorePartialContainerParams {
    container: ContainerName
    target: LocationName
    country: Country
    warehouse: Warehouse
    username: Username
    products: Array<{
    ean: string
    quantity: number
    }>
    }
  • Interfaz de salida:

    type Result = Either<BusinessError, Storage>
  • Flujo principal:

    1. Encontrar el contenedor, la ubicación objetivo y las entradas del contenedor desde sus respectivos servicios
    2. Validar que el contenedor esté en estado de pre-almacenamiento
    3. Validar que la ubicación objetivo sea una ubicación de almacenamiento con la zona correcta
    4. Validar que los productos especificados existan en el contenedor
    5. Verificar si la ubicación objetivo ya está en uso
    6. Mover los productos especificados a la ubicación objetivo utilizando el servicio WMS utils
    7. Crear un nuevo registro de Storage
    8. Guardar el registro de Storage en la base de datos
    9. Actualizar métricas
    10. Devolver el registro de Storage
  • Reglas de negocio:

    • El contenedor debe estar en estado de pre-almacenamiento
    • La ubicación objetivo debe ser una ubicación de almacenamiento
    • La ubicación objetivo debe tener la zona correcta para almacenamiento de contenedores
    • Los productos especificados deben existir en el contenedor
    • La ubicación objetivo no debe estar ya en uso
  • Adaptadores implicados:

    • Location Service
    • Container Service
    • Inventory Service
    • WMS Utils Service
    • Storage Repository
    • ID Generator
    • Metric Service
    • Calendar
  • Excepciones:

    • ContainerNotPreStorageError: Si el contenedor no está en estado de pre-almacenamiento
    • LocationNotStorageError: Si la ubicación objetivo no es una ubicación de almacenamiento
    • LocationInvalidZoneError: Si la ubicación objetivo no tiene la zona correcta
    • ProductNotFoundError: Si un producto especificado no existe en el contenedor
    • LocationInUseError: Si la ubicación objetivo ya está en uso
    • UnexpectedError: Para errores inesperados durante operaciones de base de datos
  • Descripción: Recupera contenedores en estado de pre-almacenamiento, junto con sus recuentos de alertas.

  • Interfaz de entrada:

    interface ContainerPreStorageQuery {
    warehouse: string
    country: string
    page?: number
    limit?: number
    search?: string
    }
  • Interfaz de salida:

    type Result = Either<BusinessError, Array<{
    containerId: string
    name: string
    location: string
    createdAt: string
    alerts: {
    critical: number
    warning: number
    }
    }>>
  • Flujo principal:

    1. Encontrar contenedores en estado de pre-almacenamiento utilizando el servicio de contenedores
    2. Obtener recuentos de alertas para los contenedores utilizando el servicio de reabastecimiento
    3. Combinar los datos del contenedor con los datos de alertas
    4. Devolver los datos combinados
  • Reglas de negocio:

    • El warehouse y el country deben ser válidos
    • Los parámetros de paginación son opcionales
  • Adaptadores implicados:

    • Container Service
    • Restocking Service
  • Excepciones:

    • Varios errores de negocio de los servicios de contenedores y reabastecimiento
  • Descripción: Proporciona sugerencias para ubicaciones óptimas de almacenamiento para un contenedor.

  • Interfaz de entrada:

    interface SuggestStorageParams {
    container: ContainerName
    country: Country
    warehouse: Warehouse
    }
  • Interfaz de salida:

    type Result = Either<BusinessError, Array<{
    location: string
    zone: string
    type: string
    score: number
    }>>
  • Flujo principal:

    1. Encontrar el contenedor y sus entradas utilizando los servicios de contenedores e inventario
    2. Obtener ubicaciones sugeridas del servicio de reabastecimiento
    3. Devolver las ubicaciones sugeridas con puntuaciones
  • Reglas de negocio:

    • El contenedor debe existir
    • El contenedor debe tener entradas
  • Adaptadores implicados:

    • Container Service
    • Inventory Service
    • Restocking Service
  • Excepciones:

    • Varios errores de negocio de los servicios de contenedores, inventario y reabastecimiento
  • Descripción: Filtra contenedores basados en varios criterios.

  • Interfaz de entrada:

    interface FilterContainersParams {
    country: Country
    warehouse: Warehouse
    page?: number
    limit?: number
    search?: string
    location?: string
    zone?: string
    type?: string
    }
  • Interfaz de salida:

    type Result = Either<BusinessError, {
    data: Array<{
    containerId: string
    name: string
    location: string
    zone: string
    type: string
    createdAt: string
    }>
    pagination: {
    total: number
    page: number
    limit: number
    }
    }>
  • Flujo principal:

    1. Filtrar contenedores utilizando el servicio de contenedores basado en los criterios proporcionados
    2. Devolver los contenedores filtrados con información de paginación
  • Reglas de negocio:

    • El warehouse y el country deben ser válidos
    • Los parámetros de paginación son opcionales
    • Los criterios de filtro son opcionales
  • Adaptadores implicados:

    • Container Service
  • Excepciones:

    • Varios errores de negocio del servicio de contenedores