Skip to content

Use Cases

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

  • Descripción: Registra un nuevo evento de demanda de producto en el sistema.
  • Interfaz de entrada:
    interface CreateProductDemandParams {
    ean: Ean
    type: DemandType
    orderId: OrderId
    quantity: number
    timestamp: Instant
    country: Country
    warehouse: Warehouse
    }
  • Interfaz de salida:
    Either<BusinessError, ProductDemand>
  • Flujo principal:
    1. Validar parámetros de entrada
    2. Crear una nueva entity ProductDemand con un ID generado
    3. Guardar la entity en el repository
    4. Notificar a los observers sobre la nueva demanda
    5. Retornar la demanda creada
  • Reglas de negocio:
    • La cantidad debe ser un número positivo
    • El EAN debe ser válido
    • El país y el almacén deben ser válidos
  • Adaptadores implicados:
    • ProductDemandRepository
    • IdGenerator
  • Excepciones:
    • BusinessError: Error base para violaciones de reglas de negocio
    • UnexpectedError: Para errores inesperados durante la ejecución
  • Descripción: Calcula y crea una estadística de demanda diaria para un producto.
  • Interfaz de entrada:
    country: Country
    warehouse: Warehouse
    ean: Ean
  • Interfaz de salida:
    Either<BusinessError, DemandPerDay>
  • Flujo principal:
    1. Obtener la suma de demanda para el producto en los últimos 30 días
    2. Calcular la demanda diaria promedio utilizando el método estadístico
    3. Obtener información del producto desde el servicio de productos
    4. Crear una nueva entity DemandPerDay
    5. Guardar la entity en el repository
    6. Retornar la demanda diaria creada
  • Reglas de negocio:
    • El cálculo utiliza los últimos 30 días de datos
    • El método estadístico es AVERAGE
  • Adaptadores implicados:
    • ProductDemandRepository
    • DemandPerDayRepository
    • ProductService
    • IdGenerator
    • Calendar
  • Excepciones:
    • BusinessError: Error base para violaciones de reglas de negocio
    • UnexpectedError: Para errores inesperados durante la ejecución
  • Descripción: Categoriza productos en categorías A, B, C y Z basadas en su demanda.
  • Interfaz de entrada:
    warehouse: Warehouse
  • Interfaz de salida:
    interface CategoryResult {
    groupA: number
    groupB: number
    groupC: number
    groupZ: number
    }
  • Flujo principal:
    1. Encontrar todos los registros de demanda diaria para el almacén
    2. Ordenar productos por demanda en orden descendente
    3. Agrupar productos en categorías basadas en porcentajes configurados
    4. Actualizar la categoría para cada producto en el repository
    5. Notificar a los observers sobre la categorización
    6. Retornar el conteo de productos en cada categoría
  • Reglas de negocio:
    • Los productos con demanda cero son automáticamente categorizados como Z
    • Los productos con demanda > 0 son categorizados como A, B o C basados en su demanda relativa
    • El porcentaje de productos en cada categoría es configurable por almacén
  • Adaptadores implicados:
    • DemandPerDayRepository
  • Excepciones:
    • BusinessError: Error base para violaciones de reglas de negocio
    • UnexpectedError: Para errores inesperados durante la ejecución
  • Descripción: Recupera información de demanda de productos con filtrado opcional y paginación.
  • Interfaz de entrada:
    warehouse: Warehouse
    ean?: Ean
    page: number
    limit: number
  • Interfaz de salida:
    Either<BusinessError, PaginatedResult<ProductDemand>>
  • Flujo principal:
    1. Validar parámetros de entrada
    2. Consultar el repository con filtros y paginación
    3. Retornar el resultado paginado
  • Reglas de negocio:
    • El número de página debe ser positivo
    • El límite debe estar entre 1 y 100
  • Adaptadores implicados:
    • ProductDemandRepository
  • Excepciones:
    • BusinessError: Error base para violaciones de reglas de negocio
    • UnexpectedError: Para errores inesperados durante la ejecución
  • Descripción: Recupera estadísticas de demanda de productos con filtrado opcional y paginación.
  • Interfaz de entrada:
    warehouse: Warehouse
    category?: ProductCategory
    page: number
    limit: number
  • Interfaz de salida:
    Either<BusinessError, PaginatedResult<DemandPerDay>>
  • Flujo principal:
    1. Validar parámetros de entrada
    2. Consultar el repository con filtros y paginación
    3. Retornar el resultado paginado
  • Reglas de negocio:
    • El número de página debe ser positivo
    • El límite debe estar entre 1 y 100
    • La categoría debe ser válida si se proporciona
  • Adaptadores implicados:
    • DemandPerDayRepository
  • Excepciones:
    • BusinessError: Error base para violaciones de reglas de negocio
    • UnexpectedError: Para errores inesperados durante la ejecución