Skip to content

Use Cases

Este documento detalla los casos de uso implementados en el BFF de Logística Inversa, describiendo su propósito, entradas, salidas, flujo principal y reglas de negocio.

Este caso de uso permite filtrar y obtener una lista de elementos pendientes de logística inversa para un país y almacén específicos, enriqueciendo los datos de productos con información adicional.

Entrada (Input):

interface PendingFilterQuery {
country: string;
warehouse: string;
}

Salida (Output):

Either<BusinessError, ReverseLogisticItem[]>

Donde ReverseLogisticItem es una entidad de dominio que representa un elemento de logística inversa, con propiedades como id, tipo, prioridad, estado, productos, etc.

  1. Recibe los parámetros de filtrado (país y almacén).
  2. Llama al servicio de logística inversa para obtener los elementos pendientes.
  3. Extrae los EANs de los productos en los elementos de tipo “Product”.
  4. Llama al servicio de productos para obtener información detallada de los productos por sus EANs.
  5. Combina la información de los elementos pendientes con la información detallada de los productos.
  6. Devuelve la lista enriquecida de elementos pendientes.
  • Solo se enriquecen con información adicional los elementos de tipo “Product”.
  • Los elementos de tipo “Tara” se devuelven sin modificaciones.
  • Si no se encuentran productos para algún EAN, se utiliza la información básica disponible.
  • Puerto de Entrada: Controlador HTTP que recibe la petición.
  • Puertos de Salida:
    • ReverseLogisticService: Para obtener los elementos pendientes.
    • ProductService: Para obtener información detallada de los productos.
  • Errores de negocio específicos del dominio.
  • Errores inesperados durante la ejecución.

Este caso de uso permite buscar un elemento específico de logística inversa por su ID, país y almacén.

Entrada (Input):

interface PendingFindQuery {
id: string;
country: string;
warehouse: string;
}

Salida (Output):

Either<BusinessError, ReverseLogisticItem>
  1. Recibe los parámetros de búsqueda (id, país y almacén).
  2. Llama al servicio de logística inversa para buscar el elemento específico.
  3. Devuelve el elemento encontrado o un error si no existe.
  • El elemento debe existir en el sistema.
  • El elemento debe pertenecer al país y almacén especificados.
  • Puerto de Entrada: Controlador HTTP que recibe la petición.
  • Puerto de Salida: ReverseLogisticService para buscar el elemento.
  • NotFoundError: Si el elemento no existe.
  • Otros errores de negocio específicos del dominio.
  • Errores inesperados durante la ejecución.

Este caso de uso permite reportar productos faltantes en un elemento de logística inversa.

Entrada (Input):

interface MissingReportQuery {
id: string;
ean: string;
country?: string;
warehouse?: string;
token?: string;
}
// Los datos adicionales dependen de la implementación específica

Salida (Output):

Either<BusinessError, ReverseLogisticItem>
  1. Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
  2. Llama al servicio de logística inversa para registrar el reporte de producto faltante.
  3. Devuelve el elemento actualizado con el reporte registrado.
  • El elemento y el producto deben existir en el sistema.
  • El usuario debe tener permisos para reportar productos faltantes.
  • La cantidad reportada debe ser válida según las reglas de negocio específicas.
  • Puerto de Entrada: Controlador HTTP que recibe la petición.
  • Puerto de Salida: ReverseLogisticService para registrar el reporte.
  • NotFoundError: Si el elemento o producto no existe.
  • BadRequestError: Si los datos del reporte son inválidos.
  • InvalidError: Si hay errores de validación en los datos.
  • Errores inesperados durante la ejecución.

Este caso de uso permite reportar productos que no fueron recogidos (unpick) en un elemento de logística inversa.

Entrada (Input):

interface UnpickReportQuery {
id: string;
ean: string;
country?: string;
warehouse?: string;
token?: string;
}
// Los datos adicionales dependen de la implementación específica

Salida (Output):

Either<BusinessError, ReverseLogisticItem>
  1. Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
  2. Llama al servicio de logística inversa para registrar el reporte de producto no recogido.
  3. Devuelve el elemento actualizado con el reporte registrado.
  • El elemento y el producto deben existir en el sistema.
  • El usuario debe tener permisos para reportar productos no recogidos.
  • La cantidad y el destino del producto no recogido deben ser válidos según las reglas de negocio específicas.
  • Puerto de Entrada: Controlador HTTP que recibe la petición.
  • Puerto de Salida: ReverseLogisticService para registrar el reporte.
  • NotFoundError: Si el elemento o producto no existe.
  • BadRequestError: Si los datos del reporte son inválidos.
  • InvalidError: Si hay errores de validación en los datos.
  • Errores inesperados durante la ejecución.

Este caso de uso permite reportar productos para merma en un elemento de logística inversa.

Entrada (Input):

interface WasteReportQuery {
id: string;
ean: string;
country?: string;
warehouse?: string;
token?: string;
}
// Los datos adicionales dependen de la implementación específica

Salida (Output):

Either<BusinessError, ReverseLogisticItem>
  1. Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
  2. Llama al servicio de logística inversa para registrar el reporte de producto de desecho.
  3. Devuelve el elemento actualizado con el reporte registrado.
  • El elemento y el producto deben existir en el sistema.
  • El usuario debe tener permisos para reportar productos de desecho.
  • La cantidad y la razón del desecho deben ser válidas según las reglas de negocio específicas.
  • Puerto de Entrada: Controlador HTTP que recibe la petición.
  • Puerto de Salida: ReverseLogisticService para registrar el reporte.
  • NotFoundError: Si el elemento o producto no existe.
  • BadRequestError: Si los datos del reporte son inválidos.
  • InvalidError: Si hay errores de validación en los datos.
  • Errores inesperados durante la ejecución.