Use Cases
Este documento detalla los principales casos de uso implementados en el microservicio de Product Demand, organizados por categorías funcionales.
Casos de Uso
Section titled “Casos de Uso”Create Product Demand
Section titled “Create Product Demand”- Descripción: Registra un nuevo evento de demanda de producto en el sistema.
- Interfaz de entrada:
interface CreateProductDemandParams {ean: Eantype: DemandTypeorderId: OrderIdquantity: numbertimestamp: Instantcountry: Countrywarehouse: Warehouse}
- Interfaz de salida:
Either<BusinessError, ProductDemand>
- Flujo principal:
- Validar parámetros de entrada
- Crear una nueva entity ProductDemand con un ID generado
- Guardar la entity en el repository
- Notificar a los observers sobre la nueva demanda
- 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 negocioUnexpectedError: Para errores inesperados durante la ejecución
Create Demand Per Day
Section titled “Create Demand Per Day”- Descripción: Calcula y crea una estadística de demanda diaria para un producto.
- Interfaz de entrada:
country: Countrywarehouse: Warehouseean: Ean
- Interfaz de salida:
Either<BusinessError, DemandPerDay>
- Flujo principal:
- Obtener la suma de demanda para el producto en los últimos 30 días
- Calcular la demanda diaria promedio utilizando el método estadístico
- Obtener información del producto desde el servicio de productos
- Crear una nueva entity DemandPerDay
- Guardar la entity en el repository
- 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 negocioUnexpectedError: Para errores inesperados durante la ejecución
Categorize Products
Section titled “Categorize Products”- 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: numbergroupB: numbergroupC: numbergroupZ: number}
- Flujo principal:
- Encontrar todos los registros de demanda diaria para el almacén
- Ordenar productos por demanda en orden descendente
- Agrupar productos en categorías basadas en porcentajes configurados
- Actualizar la categoría para cada producto en el repository
- Notificar a los observers sobre la categorización
- 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 negocioUnexpectedError: Para errores inesperados durante la ejecución
Get Product Demands
Section titled “Get Product Demands”- Descripción: Recupera información de demanda de productos con filtrado opcional y paginación.
- Interfaz de entrada:
warehouse: Warehouseean?: Eanpage: numberlimit: number
- Interfaz de salida:
Either<BusinessError, PaginatedResult<ProductDemand>>
- Flujo principal:
- Validar parámetros de entrada
- Consultar el repository con filtros y paginación
- 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 negocioUnexpectedError: Para errores inesperados durante la ejecución
Get Product Demand Statistics
Section titled “Get Product Demand Statistics”- Descripción: Recupera estadísticas de demanda de productos con filtrado opcional y paginación.
- Interfaz de entrada:
warehouse: Warehousecategory?: ProductCategorypage: numberlimit: number
- Interfaz de salida:
Either<BusinessError, PaginatedResult<DemandPerDay>>
- Flujo principal:
- Validar parámetros de entrada
- Consultar el repository con filtros y paginación
- 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 negocioUnexpectedError: Para errores inesperados durante la ejecución