Use Cases
Este documento detalla los principales casos de uso implementados en el microservicio de Logística Inversa, organizados por categorías funcionales.
Casos de Uso
Section titled “Casos de Uso”Crear Elemento de Logística Inversa
Section titled “Crear Elemento de Logística Inversa”Descripción: Crea un nuevo elemento de logística inversa con productos asociados y tara opcional.
Interfaz de entrada:
interface CreateReverseLogisticItemParams { type: ItemType; products: Array<{ ean: string; sku: string; name: string; zone: string; quantity: number; isSampling: boolean; image?: string; }>; tara?: { id: string; barcode: string; orderNumber: string; }; country: string; warehouse: string;}Interfaz de salida:
Either<BusinessError, ReverseLogisticsItem>Flujo principal:
- Crear un nuevo elemento con los datos proporcionados
- Verificar si el elemento ya existe (si tiene una tara)
- Registrar una entrada en el sistema de inventario
- Guardar el elemento en la base de datos
- Notificar a los observers sobre el elemento creado
Reglas de negocio:
- Si el elemento tiene una tara, no debe existir ya en el sistema
- Los productos deben tener EAN y SKU válidos
- El país y el almacén deben ser válidos
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
- Caso de uso Register Input From Item
- Generador de ID
- Calendario
- Despachador de Eventos de Logística Inversa
Excepciones:
ReverseLogisticItemTaraAlreadyExistsError: Si ya existe un elemento con el mismo código de barras de tara- Varios errores de validación para entradas inválidas
Cancelar Elemento de Logística Inversa
Section titled “Cancelar Elemento de Logística Inversa”Descripción: Cancela un elemento de logística inversa existente.
Interfaz de entrada:
interface CancelReverseLogisticItemParams { id: string; country: string; warehouse: string; user: { id: string; };}Interfaz de salida:
Either<BusinessError, ReverseLogisticsItem>Flujo principal:
- Encontrar el elemento por ID, país y almacén
- Verificar si el elemento puede ser cancelado
- Cancelar el elemento
- Guardar el elemento actualizado en la base de datos
- Notificar a los observers sobre el elemento cancelado
Reglas de negocio:
- El elemento debe existir
- El elemento no debe estar ya cancelado
- El elemento no debe estar completado
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
- Servicio de Usuarios
- Calendario
- Despachador de Eventos de Logística Inversa
Excepciones:
ReverseLogisticItemNotFoundError: Si el elemento no existeReverseLogisticItemAlreadyCancelledError: Si el elemento ya está canceladoReverseLogisticItemAlreadyCompletedError: Si el elemento ya está completado
Encontrar Elemento de Logística Inversa por ID
Section titled “Encontrar Elemento de Logística Inversa por ID”Descripción: Encuentra un elemento de logística inversa por su ID, país y almacén.
Interfaz de entrada:
interface FindReverseLogisticItemByIdParams { id: string; country: string; warehouse: string;}Interfaz de salida:
Either<BusinessError, ReverseLogisticsItem>Flujo principal:
- Encontrar el elemento por ID, país y almacén
- Devolver el elemento si se encuentra
Reglas de negocio:
- El elemento debe existir
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
Excepciones:
ReverseLogisticItemNotFoundError: Si el elemento no existe
Encontrar Elemento de Logística Inversa por Código de Barras
Section titled “Encontrar Elemento de Logística Inversa por Código de Barras”Descripción: Encuentra un elemento de logística inversa por el código de barras de su tara, país y almacén.
Interfaz de entrada:
interface FindReverseLogisticItemByBarcodeParams { barcode: string; country: string; warehouse: string;}Interfaz de salida:
Either<BusinessError, ReverseLogisticsItem>Flujo principal:
- Encontrar el elemento por código de barras, país y almacén
- Devolver el elemento si se encuentra
Reglas de negocio:
- El elemento debe existir
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
Excepciones:
ReverseLogisticItemNotFoundError: Si el elemento no existe
Filtrar Elementos de Logística Inversa
Section titled “Filtrar Elementos de Logística Inversa”Descripción: Filtra elementos de logística inversa basados en varios criterios.
Interfaz de entrada:
interface FilterReverseLogisticItemsParams { country: string; warehouse: string; pagination: { page: number; limit: number; }; filters?: { type?: ItemType; status?: ItemStatus; createdAt?: { from?: string; to?: string; }; taraBarcode?: string; taraOrderNumber?: string; };}Interfaz de salida:
Either<BusinessError, PaginatedResult<ReverseLogisticsItem>>Flujo principal:
- Aplicar filtros a la consulta del repositorio
- Recuperar resultados paginados
- Devolver los elementos paginados
Reglas de negocio:
- Los parámetros de paginación deben ser válidos
- Los filtros de fecha deben ser fechas válidas
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
Excepciones:
- Varios errores de validación para entradas inválidas
Filtrar Productos en Elementos de Logística Inversa
Section titled “Filtrar Productos en Elementos de Logística Inversa”Descripción: Filtra productos dentro de elementos de logística inversa basados en varios criterios.
Interfaz de entrada:
interface FilterProductsInReverseLogisticItemsParams { country: string; warehouse: string; pagination: { page: number; limit: number; }; filters?: { ean?: string; sku?: string; name?: string; zone?: string; };}Interfaz de salida:
Either<BusinessError, PaginatedResult<ProductSummary>>Flujo principal:
- Aplicar filtros a la consulta del repositorio
- Recuperar resultados paginados
- Devolver los resúmenes de productos paginados
Reglas de negocio:
- Los parámetros de paginación deben ser válidos
Adaptadores implicados:
- Repositorio de Elementos de Logística Inversa
Excepciones:
- Varios errores de validación para entradas inválidas