3.2 KiB
US-MGN-006-003-002: Validar Recepción de Compra
RF Asociado: RF-MGN-006-004 Módulo: MGN-006 - Compras Básico Epic: Recepciones de Compras Prioridad: P0 Story Points: 5 Sprint: Sprint 14 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como usuario de almacén, Quiero validar recepciones de compra, Para actualizar el stock y generar movimientos de inventario.
Descripción Detallada
Validar una recepción:
- Verifica qty_done de cada línea
- Genera movimientos de stock (supplier location → input location → stock location)
- Actualiza stock_quants
- Cambia estado picking → done
- Actualiza estado de PO (si todo recibido → done)
- Opcionalmente crea backorder para cantidades pendientes
Criterios de Aceptación
Escenario 1: Validar recepción completa (Camino Feliz)
Dado que picking tiene todas las líneas con qty_done=qty_expected, Cuando valido, Entonces sistema genera movimientos, actualiza stock, cambia picking state=done, PO state=done.
Escenario 2: Validar recepción parcial con backorder
Dado que línea tiene qty_expected=10, qty_done=7, Cuando valido y acepto crear backorder, Entonces sistema valida 7 unidades, crea picking backorder para 3 unidades.
Escenario 3: Validar sin backorder (cerrar línea)
Dado que línea tiene qty_expected=10, qty_done=7, Cuando valido sin backorder, Entonces sistema valida 7 unidades, cierra línea PO (qty_received=7).
Reglas de Negocio
- RN-1: Validar genera movimientos de stock automáticamente.
- RN-2: Stock se actualiza en ubicación de entrada (Input Location).
- RN-3: Si qty_done < qty_expected, preguntar por backorder.
- RN-4: PO pasa a done cuando todas las líneas están recibidas.
Tareas Técnicas
Backend
- Endpoint: POST /api/v1/inventory/pickings/:id/validate
- Service: PickingService.validate(pickingId, createBackorder)
- Service: StockMoveService.generateFromPicking(picking)
- Service: PurchaseOrderService.updateReceiptStatus(poId)
- Crear backorder si aplica
- Transaction atomicidad
- Unit tests
- Integration tests
- Swagger docs
Frontend
- Botón Validar con confirmación
- Modal para backorder (si qty_done < expected)
- API client: pickingApi.validate()
- Component tests
- E2E test
Database
- Transaction isolation
- Lock: SELECT FOR UPDATE en pickings
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 3 |
| Frontend | 2 |
| Testing | 2 |
| Code Review | 1 |
| TOTAL | 8 horas = 5 SP |
Definition of Done
- Código implementado según ET
- Tests pasando (>80%)
- Code review aprobado
- Stock actualizado correctamente
- Backorder funciona
- Transaction implementada
- QA validado
- PO aprobado