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.
Filtrar Elementos Pendientes
Section titled “Filtrar Elementos Pendientes”Descripción General
Section titled “Descripción General”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.
Interfaz de Entrada/Salida
Section titled “Interfaz de Entrada/Salida”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.
Flujo Principal
Section titled “Flujo Principal”- Recibe los parámetros de filtrado (país y almacén).
- Llama al servicio de logística inversa para obtener los elementos pendientes.
- Extrae los EANs de los productos en los elementos de tipo “Product”.
- Llama al servicio de productos para obtener información detallada de los productos por sus EANs.
- Combina la información de los elementos pendientes con la información detallada de los productos.
- Devuelve la lista enriquecida de elementos pendientes.
Reglas de Negocio
Section titled “Reglas de Negocio”- 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.
Adaptadores/Puertos Implicados
Section titled “Adaptadores/Puertos Implicados”- 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.
Excepciones
Section titled “Excepciones”- Errores de negocio específicos del dominio.
- Errores inesperados durante la ejecución.
Buscar Elemento Pendiente
Section titled “Buscar Elemento Pendiente”Descripción General
Section titled “Descripción General”Este caso de uso permite buscar un elemento específico de logística inversa por su ID, país y almacén.
Interfaz de Entrada/Salida
Section titled “Interfaz de Entrada/Salida”Entrada (Input):
interface PendingFindQuery { id: string; country: string; warehouse: string;}Salida (Output):
Either<BusinessError, ReverseLogisticItem>Flujo Principal
Section titled “Flujo Principal”- Recibe los parámetros de búsqueda (id, país y almacén).
- Llama al servicio de logística inversa para buscar el elemento específico.
- Devuelve el elemento encontrado o un error si no existe.
Reglas de Negocio
Section titled “Reglas de Negocio”- El elemento debe existir en el sistema.
- El elemento debe pertenecer al país y almacén especificados.
Adaptadores/Puertos Implicados
Section titled “Adaptadores/Puertos Implicados”- Puerto de Entrada: Controlador HTTP que recibe la petición.
- Puerto de Salida:
ReverseLogisticServicepara buscar el elemento.
Excepciones
Section titled “Excepciones”NotFoundError: Si el elemento no existe.- Otros errores de negocio específicos del dominio.
- Errores inesperados durante la ejecución.
Reportar Producto Faltante
Section titled “Reportar Producto Faltante”Descripción General
Section titled “Descripción General”Este caso de uso permite reportar productos faltantes en un elemento de logística inversa.
Interfaz de Entrada/Salida
Section titled “Interfaz de Entrada/Salida”Entrada (Input):
interface MissingReportQuery { id: string; ean: string; country?: string; warehouse?: string; token?: string;}
// Los datos adicionales dependen de la implementación específicaSalida (Output):
Either<BusinessError, ReverseLogisticItem>Flujo Principal
Section titled “Flujo Principal”- Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
- Llama al servicio de logística inversa para registrar el reporte de producto faltante.
- Devuelve el elemento actualizado con el reporte registrado.
Reglas de Negocio
Section titled “Reglas de Negocio”- 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.
Adaptadores/Puertos Implicados
Section titled “Adaptadores/Puertos Implicados”- Puerto de Entrada: Controlador HTTP que recibe la petición.
- Puerto de Salida:
ReverseLogisticServicepara registrar el reporte.
Excepciones
Section titled “Excepciones”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.
Reportar Producto No Recogido
Section titled “Reportar Producto No Recogido”Descripción General
Section titled “Descripción General”Este caso de uso permite reportar productos que no fueron recogidos (unpick) en un elemento de logística inversa.
Interfaz de Entrada/Salida
Section titled “Interfaz de Entrada/Salida”Entrada (Input):
interface UnpickReportQuery { id: string; ean: string; country?: string; warehouse?: string; token?: string;}
// Los datos adicionales dependen de la implementación específicaSalida (Output):
Either<BusinessError, ReverseLogisticItem>Flujo Principal
Section titled “Flujo Principal”- Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
- Llama al servicio de logística inversa para registrar el reporte de producto no recogido.
- Devuelve el elemento actualizado con el reporte registrado.
Reglas de Negocio
Section titled “Reglas de Negocio”- 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.
Adaptadores/Puertos Implicados
Section titled “Adaptadores/Puertos Implicados”- Puerto de Entrada: Controlador HTTP que recibe la petición.
- Puerto de Salida:
ReverseLogisticServicepara registrar el reporte.
Excepciones
Section titled “Excepciones”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.
Reportar Producto como Merma
Section titled “Reportar Producto como Merma”Descripción General
Section titled “Descripción General”Este caso de uso permite reportar productos para merma en un elemento de logística inversa.
Interfaz de Entrada/Salida
Section titled “Interfaz de Entrada/Salida”Entrada (Input):
interface WasteReportQuery { id: string; ean: string; country?: string; warehouse?: string; token?: string;}
// Los datos adicionales dependen de la implementación específicaSalida (Output):
Either<BusinessError, ReverseLogisticItem>Flujo Principal
Section titled “Flujo Principal”- Recibe los parámetros del reporte (id del elemento, EAN del producto, etc.).
- Llama al servicio de logística inversa para registrar el reporte de producto de desecho.
- Devuelve el elemento actualizado con el reporte registrado.
Reglas de Negocio
Section titled “Reglas de Negocio”- 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.
Adaptadores/Puertos Implicados
Section titled “Adaptadores/Puertos Implicados”- Puerto de Entrada: Controlador HTTP que recibe la petición.
- Puerto de Salida:
ReverseLogisticServicepara registrar el reporte.
Excepciones
Section titled “Excepciones”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.