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