Skip to content

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.

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:

  1. Validar los datos de entrada.
  2. Obtener información del producto a partir del EAN.
  3. Obtener información de la ubicación.
  4. Obtener información del inventario actual en la ubicación.
  5. Calcular la diferencia entre la cantidad contada y la cantidad esperada.
  6. Determinar el tipo de diferencia (exceso, faltante, correcto).
  7. Crear una nueva entidad de conteo de inventario.
  8. Persistir la entidad en la base de datos.
  9. Notificar a los observadores sobre la creación del conteo.
  10. 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.

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:

  1. Validar los datos de entrada.
  2. Determinar el canal de notificación.
  3. Formatear el mensaje según el canal.
  4. Enviar la notificación a través del canal seleccionado.
  5. 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.

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:

  1. Validar los datos de entrada.
  2. Verificar que el producto existe.
  3. Verificar que la ubicación existe.
  4. Verificar que la cantidad es válida.
  5. 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.