3.4 KiB
US-MGN-005-005-002: Validar Ajuste de Inventario
RF Asociado: RF-MGN-005-007 Módulo: MGN-005 - Inventario Básico Epic: Ajustes de Inventario Prioridad: P0 Story Points: 4 Sprint: Sprint 11 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como usuario de inventario, Quiero validar ajustes de inventario, Para aplicar las correcciones al stock y generar movimientos automáticos.
Descripción Detallada
Validar un ajuste:
- Cambia estado draft → done
- Genera movimientos de stock por cada línea:
- Diferencia positiva: movimiento de ubicación virtual → ubicación física (incremento)
- Diferencia negativa: movimiento de ubicación física → ubicación virtual (decremento)
- Actualiza stock_quants
- Genera asiento contable de valoración (opcional, según configuración)
Criterios de Aceptación
Escenario 1: Validar ajuste con diferencias (Camino Feliz)
Dado que ajuste tiene línea: Producto A en Zona A (diff=+2), Cuando valido el ajuste, Entonces el sistema genera movimiento de stock: Virtual Location → Zona A, qty=2, actualiza stock.
Escenario 2: Validar ajuste con diferencia negativa
Dado que ajuste tiene línea: Producto B en Zona A (diff=-3), Cuando valido, Entonces el sistema genera movimiento: Zona A → Virtual Location, qty=3.
Escenario 3: Error al validar ajuste ya validado
Dado que ajuste está en state=done, Cuando intento validar nuevamente, Entonces el sistema retorna error 400 "Ajuste ya fue validado".
Reglas de Negocio
- RN-1: Solo ajustes en draft pueden validarse.
- RN-2: Validar genera movimientos de stock automáticamente.
- RN-3: Diferencias positivas: entrada desde ubicación virtual.
- RN-4: Diferencias negativas: salida hacia ubicación virtual.
- RN-5: Movimientos generados actualizan stock_quants.
Tareas Técnicas
Backend
- Endpoint: POST /api/v1/inventory/adjustments/:id/validate
- Service: InventoryAdjustmentService.validate(id)
- Service: generateStockMoves(adjustment)
- Transaction para atomicidad
- Unit tests (>80%)
- Integration tests
- Swagger docs
Frontend
- Botón Validar con confirmación
- Modal mostrando movimientos a generar
- API client: adjustmentApi.validate(id)
- Component tests
- E2E test
Database
- Transaction isolation: READ COMMITTED
- Lock: SELECT FOR UPDATE
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 2.5 |
| Frontend | 2 |
| Testing | 1.5 |
| Code Review | 0.5 |
| TOTAL | 6.5 horas = 4 SP |
Definition of Done
- Código implementado según ET
- Tests pasando (>80%)
- Code review aprobado
- Transaction implementada
- QA validado
- PO aprobado