erp-core/docs/05-user-stories/mgn-006/US-MGN-006-004-001-crear-devolucion-proveedor.md

3.1 KiB

US-MGN-006-004-001: Crear Devolución a Proveedor

RF Asociado: RF-MGN-006-004 Módulo: MGN-006 - Compras Básico Epic: Devoluciones a Proveedores Prioridad: P1 Story Points: 3 Sprint: Sprint 15 Estado: Ready for Development Fecha: 2025-11-24


User Story

Como usuario de compras, Quiero crear devoluciones de productos a proveedores, Para retornar mercancía defectuosa o incorrecta.


Descripción Detallada

Una devolución (return) crea un picking de tipo outgoing (inverso a recepción). Incluye:

  • Referencia a PO y recepción original
  • Productos y cantidades a devolver
  • Motivo de devolución
  • Se puede crear crédito nota automático

Criterios de Aceptación

Escenario 1: Crear devolución desde recepción (Camino Feliz)

Dado que tengo recepción validada con producto A qty=10, Cuando creo devolución de 3 unidades con motivo="Producto defectuoso", Entonces sistema crea picking return con línea producto A qty=3, motivo guardado.

Escenario 2: Validar cantidad a devolver

Dado que producto recibido fue 10 unidades, ya devolví 2, Cuando intento devolver 9 unidades, Entonces sistema retorna error "Cantidad excede lo recibido (disponible para devolución: 8)".

Escenario 3: Crear nota de crédito automática

Dado que valido devolución, Cuando marco opción "Crear nota de crédito", Entonces sistema genera credit note (vendor refund) con valores de líneas devueltas.


Reglas de Negocio

  • RN-1: Solo se pueden devolver productos recibidos.
  • RN-2: Cantidad devuelta ≤ cantidad recibida - devoluciones previas.
  • RN-3: Devolución genera picking outgoing.
  • RN-4: Opcionalmente genera nota de crédito.

Tareas Técnicas

Backend

  • Endpoint: POST /api/v1/purchase/returns
  • Service: PurchaseReturnService.create(dto)
  • Service: validateReturnQuantity(poLineId, qty)
  • DTO: CreateReturnDto, ReturnLineDto
  • Validar cantidades
  • Unit tests
  • Integration tests
  • Swagger docs

Frontend

  • Componente: CreateReturnForm.tsx
  • Selector de recepción origen
  • Tabla con cantidades disponibles para devolver
  • Campo motivo requerido
  • API client: purchaseReturnApi.create()
  • Component tests
  • E2E test

Database

  • Tabla: purchase.purchase_returns
  • Tabla: purchase.purchase_return_lines
  • Índices: idx_returns_po_id

Estimación Detallada

Tarea Horas
Backend 2
Frontend 2
Testing 1
Code Review 0.5
TOTAL 5.5 horas = 3 SP

Definition of Done

  • Código implementado según ET
  • Tests pasando (>80%)
  • Code review aprobado
  • Validaciones correctas
  • QA validado
  • PO aprobado

Referencias