# US-MGN-007-005-002: Validar Devolución y Ajustar Stock **RF Asociado:** [RF-MGN-007-004](../../02-modelado/requerimientos-funcionales/mgn-007/RF-MGN-007-004-entregas-de-ventas.md) **Módulo:** MGN-007 - Ventas Básico **Epic:** Devoluciones de Ventas **Prioridad:** P1 **Story Points:** 2 **Sprint:** Sprint 17 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** usuario de almacén, **Quiero** validar devoluciones recibidas físicamente, **Para** incrementar el stock y registrar el ingreso de productos devueltos. --- ## Descripción Detallada Validar una return significa: - Cambiar estado draft → done - Crear stock_moves: ubicación_cliente → almacén - Actualizar stock_quants sumando al almacén - Registrar date_done - Crear mensaje en chatter - Opcional: Notificar a ventas para gestionar reemplazo/reembolso --- ## Criterios de Aceptación ### Escenario 1: Validar return exitosamente (Camino Feliz) **Dado que** return id=1 en draft con product_id=1, qty=10, **Cuando** valido return, **Entonces** estado=done, crea stock_move (cliente → almacén), suma +10 en quants, registra date_done. ### Escenario 2: Validar que return está en draft **Dado que** return ya está en done, **Cuando** intento validar, **Entonces** sistema retorna error 400 "La devolución ya está validada". ### Escenario 3: Actualizar qty_returned en delivery origen **Dado que** return proviene de delivery id=1, **Cuando** valido return de 10 unidades, **Entonces** delivery.qty_returned += 10. ### Escenario 4: Registrar fecha de validación **Dado que** valido return exitosamente, **Cuando** se completa, **Entonces** date_done registra timestamp actual. --- ## Reglas de Negocio - **RN-1:** Solo returns en draft pueden validarse. - **RN-2:** Crea stock_moves (location_from=cliente → location_to=almacén). - **RN-3:** Actualiza stock_quants sumando cantidades. - **RN-4:** Si tiene delivery origen, actualiza delivery.qty_returned. - **RN-5:** date_done registra timestamp de validación. - **RN-6:** Permisos: stock_user. --- ## Tareas Técnicas ### Backend - [ ] Endpoint: `POST /api/v1/sales/returns/:id/validate` - [ ] Service: `ReturnService.validate(id)` - [ ] Validar estado draft - [ ] Crear stock_moves (cliente → almacén) - [ ] Actualizar stock_quants (+qty) - [ ] Actualizar delivery.qty_returned si aplica - [ ] Actualizar state=done, date_done=now() - [ ] Crear mensaje en chatter - [ ] Unit tests (>80%) - [ ] Integration tests - [ ] Swagger docs ### Frontend - [ ] Botón: "Validate" en vista de return draft - [ ] Confirmación modal antes de validar - [ ] API client: `returnApi.validate(id)` - [ ] Notificación toast de éxito - [ ] Component tests - [ ] E2E test: "should validate return and adjust stock" ### Database - [ ] Columna: `sales.returns.date_done` (timestamp) - [ ] Columna: `inventory.deliveries.qty_returned` (numeric) --- ## Mockups / Wireframes **Vista Return con validación:** ``` ┌─────────────────────────────────────────────┐ │ Return RET/2024/0001 [draft] │ ├─────────────────────────────────────────────┤ │ Cliente: ABC Corp │ │ Motivo: Producto defectuoso │ │ │ │ Productos: │ │ • Laptop HP: 10 unidades │ │ │ │ [Validate Return] [Cancel] │ └─────────────────────────────────────────────┘ ``` --- ## Casos de Prueba ### Funcionales 1. **TC-001:** Validar return exitosamente 2. **TC-002:** Error si return ya validado 3. **TC-003:** Stock_moves creados correctamente 4. **TC-004:** Stock_quants actualizado (+qty) 5. **TC-005:** delivery.qty_returned actualizado 6. **TC-006:** date_done registrado correctamente ### No Funcionales 1. **Performance:** < 500ms para validar return 2. **Seguridad:** JWT + permiso stock_user --- ## Dependencias - **US bloqueantes:** - US-MGN-007-005-001 (Crear Devolución) - US-MGN-005-003-002 (Validar Movimiento Stock) --- ## Notas de Implementación - Usar transacción para atomicidad (stock_moves + quants + delivery) - Considerar inspección de calidad antes de validar (estado intermedio: received) - Frontend: Permitir agregar notas de inspección --- ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 1 | | Frontend | 0.5 | | Testing | 0.5 | | Code Review | 0.5 | | **TOTAL** | **2.5 horas = 2 SP** | --- ## Definition of Done - [ ] Código implementado según ET - [ ] Tests pasando (>80%) - [ ] Code review aprobado - [ ] Validación funciona correctamente - [ ] Stock actualizado correctamente - [ ] delivery.qty_returned actualizado - [ ] date_done registrado - [ ] Mensaje en chatter creado - [ ] Swagger docs actualizado - [ ] QA validado - [ ] PO aprobado --- ## Referencias - [RF-MGN-007-004](../../02-modelado/requerimientos-funcionales/mgn-007/RF-MGN-007-004-entregas-de-ventas.md) - [ET Backend](../../02-modelado/especificaciones-tecnicas/backend/mgn-007/ET-BACKEND-MGN-007-004-entregas.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-007.yaml) - [Schema](../../02-modelado/database-design/schemas/sales-schema-ddl.sql)