Use Cases
Este documento detalla los casos de uso implementados en el Microservicio de Conteo de Inventario, describiendo su propósito, interfaces, flujo principal, reglas de negocio y excepciones.
Caso de Uso
Section titled “Caso de Uso”Crear Conteo de Inventario
Section titled “Crear Conteo de Inventario”Descripción: Este caso de uso permite registrar un nuevo conteo de inventario en el sistema, calculando la diferencia con el inventario esperado y notificando a otros sistemas sobre el conteo.
Interfaz de Entrada:
interface CreateInventoryCountingInput { ean: string location: string quantity: number user: string country: string warehouse: string}Interfaz de Salida:
interface CreateInventoryCountingOutput { id: string ean: string location: string locationType: LocationType locationZone?: Zone quantity: number difference: number type: DifferenceType user: string timestamp: string country: string warehouse: string}Flujo Principal:
- Validar los datos de entrada.
- Obtener información del producto a partir del EAN.
- Obtener información de la ubicación.
- Obtener información del inventario actual en la ubicación.
- Calcular la diferencia entre la cantidad contada y la cantidad esperada.
- Determinar el tipo de diferencia (exceso, faltante, correcto).
- Crear una nueva entidad de conteo de inventario.
- Persistir la entidad en la base de datos.
- Notificar a los observadores sobre la creación del conteo.
- Retornar los datos del conteo creado.
Reglas de Negocio:
- El EAN debe corresponder a un producto válido.
- La ubicación debe existir en el sistema.
- La cantidad contada debe ser un número positivo.
- La diferencia se calcula como la cantidad contada menos la cantidad esperada.
- El tipo de diferencia se determina según el valor de la diferencia:
- Si la diferencia es positiva, el tipo es “exceso”.
- Si la diferencia es negativa, el tipo es “faltante”.
- Si la diferencia es cero, el tipo es “correcto”.
Puertos y Adaptadores Implicados:
-
Puertos de Entrada:
- Controlador HTTP para recibir las solicitudes de creación de conteo.
-
Puertos de Salida:
- Repositorio de conteos para persistir la entidad.
- Servicio de producto para obtener información del producto.
- Servicio de ubicación para obtener información de la ubicación.
- Servicio de inventario para obtener el inventario actual.
- Despachador de eventos para notificar sobre la creación del conteo.
Excepciones:
ProductNotFoundError: Cuando el producto con el EAN especificado no existe.LocationNotFoundError: Cuando la ubicación especificada no existe.InvalidQuantityError: Cuando la cantidad contada no es válida.RepositoryError: Cuando ocurre un error al persistir el conteo.UnexpectedError: Cuando ocurre un error inesperado durante el proceso.
Enviar Notificaciones
Section titled “Enviar Notificaciones”Descripción: Este caso de uso permite enviar notificaciones a través de diferentes canales, como Slack, para informar sobre eventos importantes en el sistema.
Interfaz de Entrada:
interface SendNotificationInput { channel: string message: string attachments?: any[]}Interfaz de Salida:
interface SendNotificationOutput { success: boolean messageId?: string error?: string}Flujo Principal:
- Validar los datos de entrada.
- Determinar el canal de notificación.
- Formatear el mensaje según el canal.
- Enviar la notificación a través del canal seleccionado.
- Retornar el resultado de la operación.
Reglas de Negocio:
- El canal de notificación debe estar configurado en el sistema.
- El mensaje debe cumplir con los requisitos del canal seleccionado.
Puertos y Adaptadores Implicados:
-
Puertos de Entrada:
- Controlador HTTP o eventos para recibir las solicitudes de notificación.
-
Puertos de Salida:
- Servicio de notificación Slack para enviar mensajes a Slack.
Excepciones:
InvalidChannelError: Cuando el canal especificado no está configurado.NotificationError: Cuando ocurre un error al enviar la notificación.UnexpectedError: Cuando ocurre un error inesperado durante el proceso.
Verificar Conteo
Section titled “Verificar Conteo”Descripción: Este caso de uso permite verificar la validez de un conteo de inventario, comprobando que cumple con las reglas de negocio establecidas.
Interfaz de Entrada:
interface VerifyCountingInput { ean: string location: string quantity: number}Interfaz de Salida:
interface VerifyCountingOutput { valid: boolean errors?: string[]}Flujo Principal:
- Validar los datos de entrada.
- Verificar que el producto existe.
- Verificar que la ubicación existe.
- Verificar que la cantidad es válida.
- Retornar el resultado de la verificación.
Reglas de Negocio:
- El EAN debe corresponder a un producto válido.
- La ubicación debe existir en el sistema.
- La cantidad debe ser un número positivo.
Puertos y Adaptadores Implicados:
-
Puertos de Entrada:
- Controlador HTTP para recibir las solicitudes de verificación.
-
Puertos de Salida:
- Servicio de producto para verificar el producto.
- Servicio de ubicación para verificar la ubicación.
Excepciones:
ProductNotFoundError: Cuando el producto con el EAN especificado no existe.LocationNotFoundError: Cuando la ubicación especificada no existe.InvalidQuantityError: Cuando la cantidad no es válida.UnexpectedError: Cuando ocurre un error inesperado durante el proceso.