Use Cases
Este documento detalla los casos de uso implementados en el microservicio de gestión de mermas. Cada caso de uso representa una operación específica que puede realizar el sistema.
Gestión de Reportes de Mermas
Section titled “Gestión de Reportes de Mermas”Crear Reporte de Merma
Section titled “Crear Reporte de Merma”Nombre: CreateWasteReport
Descripción: Permite a un usuario reportar una merma de producto en un almacén. Crea un nuevo reporte de merma en el sistema y notifica a los observadores sobre el evento.
Interfaz de Entrada:
interface CreateReportParams { productEan: string; productName: string; productSku: string; productImage?: string; quantity: number; location: string; container?: string; reason: string; username: string; warehouse: string; country: string;}Interfaz de Salida:
Either<BusinessError, WasteReport>Flujo Principal:
- Validar los datos de entrada
- Convertir los datos primitivos a objetos de valor (Ean, Location, Container, etc.)
- Verificar que el producto existe consultando al servicio de productos
- Verificar que la ubicación existe consultando al servicio de ubicaciones
- Si se proporciona un contenedor, verificar que existe consultando al servicio de contenedores
- Realizar una salida de inventario utilizando la estrategia FEFO
- Crear una nueva entidad WasteReport con un ID generado
- Guardar el reporte en el repositorio
- Notificar a los observadores sobre el nuevo reporte
- Devolver el reporte creado
Reglas de Negocio:
- El producto debe existir en el sistema
- La ubicación debe existir en el sistema
- Si se proporciona un contenedor, debe existir en el sistema
- La cantidad debe ser mayor que cero
- El usuario debe tener permisos para reportar mermas
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
- Servicio de productos (salida)
- Servicio de ubicaciones (salida)
- Servicio de contenedores (salida)
- Servicio de inventario (salida)
- Generador de IDs (salida)
- Calendario (salida)
- Despachador de eventos (salida)
Excepciones:
- ProductNotFoundError: Si el producto no existe
- LocationNotFoundError: Si la ubicación no existe
- ContainerNotFoundError: Si el contenedor no existe
- ValidationError: Si los datos de entrada no son válidos
- UnexpectedError: Para errores inesperados
Validar Reporte de Merma
Section titled “Validar Reporte de Merma”Nombre: ValidateWasteReport
Descripción: Permite a un supervisor validar un reporte de merma previamente creado. Actualiza el estado del reporte y notifica a los observadores sobre el evento.
Interfaz de Entrada:
interface ValidateReportParams { id: string; username: string;}Interfaz de Salida:
Either<BusinessError, WasteReport>Flujo Principal:
- Buscar el reporte por ID en el repositorio
- Verificar que el reporte existe y está en estado REPORTED
- Actualizar el reporte con la información de validación
- Guardar el reporte actualizado en el repositorio
- Notificar a los observadores sobre la validación
- Devolver el reporte actualizado
Reglas de Negocio:
- El reporte debe existir
- El reporte debe estar en estado REPORTED
- El usuario debe tener permisos para validar mermas
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
- Calendario (salida)
- Despachador de eventos (salida)
Excepciones:
- ReportNotFoundError: Si el reporte no existe
- InvalidStateError: Si el reporte no está en el estado correcto
- UnexpectedError: Para errores inesperados
Confirmar Reporte de Merma
Section titled “Confirmar Reporte de Merma”Nombre: ConfirmWasteReport
Descripción: Permite a un gerente confirmar un reporte de merma previamente validado. Actualiza el estado del reporte y notifica a los observadores sobre el evento.
Interfaz de Entrada:
interface ConfirmReportParams { id: string; username: string;}Interfaz de Salida:
Either<BusinessError, WasteReport>Flujo Principal:
- Buscar el reporte por ID en el repositorio
- Verificar que el reporte existe y está en estado VALIDATED
- Actualizar el reporte con la información de confirmación
- Guardar el reporte actualizado en el repositorio
- Notificar a los observadores sobre la confirmación
- Devolver el reporte actualizado
Reglas de Negocio:
- El reporte debe existir
- El reporte debe estar en estado VALIDATED
- El usuario debe tener permisos para confirmar mermas
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
- Calendario (salida)
- Despachador de eventos (salida)
Excepciones:
- ReportNotFoundError: Si el reporte no existe
- InvalidStateError: Si el reporte no está en el estado correcto
- UnexpectedError: Para errores inesperados
Rechazar Reporte de Merma
Section titled “Rechazar Reporte de Merma”Nombre: RejectWasteReport
Descripción: Permite a un supervisor o gerente rechazar un reporte de merma. Actualiza el estado del reporte, registra la razón del rechazo y notifica a los observadores sobre el evento.
Interfaz de Entrada:
interface RejectReportParams { id: string; username: string; reason: string;}Interfaz de Salida:
Either<BusinessError, WasteReport>Flujo Principal:
- Buscar el reporte por ID en el repositorio
- Verificar que el reporte existe y está en un estado que permite rechazo (REPORTED o VALIDATED)
- Actualizar el reporte con la información de rechazo
- Guardar el reporte actualizado en el repositorio
- Notificar a los observadores sobre el rechazo
- Devolver el reporte actualizado
Reglas de Negocio:
- El reporte debe existir
- El reporte debe estar en un estado que permite rechazo
- Se debe proporcionar una razón para el rechazo
- El usuario debe tener permisos para rechazar mermas
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
- Calendario (salida)
- Despachador de eventos (salida)
Excepciones:
- ReportNotFoundError: Si el reporte no existe
- InvalidStateError: Si el reporte no está en un estado que permite rechazo
- ValidationError: Si no se proporciona una razón para el rechazo
- UnexpectedError: Para errores inesperados
Buscar Reporte por ID
Section titled “Buscar Reporte por ID”Nombre: FindWasteReportById
Descripción: Permite buscar un reporte de merma por su ID.
Interfaz de Entrada:
interface FindReportByIdParams { id: string;}Interfaz de Salida:
Either<BusinessError, WasteReport>Flujo Principal:
- Buscar el reporte por ID en el repositorio
- Verificar que el reporte existe
- Devolver el reporte encontrado
Reglas de Negocio:
- El reporte debe existir
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
Excepciones:
- ReportNotFoundError: Si el reporte no existe
- UnexpectedError: Para errores inesperados
Filtrar Reportes de Merma
Section titled “Filtrar Reportes de Merma”Nombre: FilterWasteReports
Descripción: Permite filtrar reportes de merma según varios criterios.
Interfaz de Entrada:
interface FilterReportsParams { warehouse?: string; country?: string; status?: string; startDate?: string; endDate?: string; productEan?: string; location?: string; page?: number; limit?: number;}Interfaz de Salida:
Either<BusinessError, { reports: WasteReport[]; total: number }>Flujo Principal:
- Convertir los parámetros de filtro a objetos de valor si es necesario
- Aplicar los filtros en el repositorio
- Devolver los reportes que coinciden con los criterios y el total
Reglas de Negocio:
- Los parámetros de filtro deben ser válidos
- La paginación debe ser válida
Adaptadores/Puertos Implicados:
- Repositorio de mermas (salida)
Excepciones:
- ValidationError: Si los parámetros de filtro no son válidos
- UnexpectedError: Para errores inesperados