Skip to content

Use Cases

Este documento detalla los principales casos de uso implementados en el microservicio de Logística Inversa, organizados por categorías funcionales.

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:

  1. Crear un nuevo elemento con los datos proporcionados
  2. Verificar si el elemento ya existe (si tiene una tara)
  3. Registrar una entrada en el sistema de inventario
  4. Guardar el elemento en la base de datos
  5. 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

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:

  1. Encontrar el elemento por ID, país y almacén
  2. Verificar si el elemento puede ser cancelado
  3. Cancelar el elemento
  4. Guardar el elemento actualizado en la base de datos
  5. 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 existe
  • ReverseLogisticItemAlreadyCancelledError: Si el elemento ya está cancelado
  • ReverseLogisticItemAlreadyCompletedError: 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:

  1. Encontrar el elemento por ID, país y almacén
  2. 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:

  1. Encontrar el elemento por código de barras, país y almacén
  2. 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

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:

  1. Aplicar filtros a la consulta del repositorio
  2. Recuperar resultados paginados
  3. 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:

  1. Aplicar filtros a la consulta del repositorio
  2. Recuperar resultados paginados
  3. 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