3.2 KiB
US-MGN-006-003-001: Crear 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 registrar recepciones de productos comprados, Para actualizar el stock al recibir mercancía de proveedores.
Descripción Detallada
Una recepción (picking de tipo receipt/incoming) se genera automáticamente al confirmar una PO. El usuario de almacén:
- Accede al picking pendiente
- Verifica productos recibidos
- Registra cantidades reales (pueden diferir de las ordenadas)
- Valida la recepción para actualizar stock
Estados: draft, assigned, done, cancelled
Criterios de Aceptación
Escenario 1: Crear recepción desde PO confirmada (Automático)
Dado que PO se confirma con líneas, Cuando sistema ejecuta confirm(), Entonces genera picking de tipo receipt con state=assigned, líneas copiadas.
Escenario 2: Registrar cantidades recibidas manualmente
Dado que tengo picking de recepción en assigned, Cuando registro qty_done=8 (de qty_expected=10), Entonces sistema guarda qty_done para validación.
Escenario 3: Validar cantidad parcial
Dado que picking tiene línea con qty_expected=10, qty_done=8, Cuando valido, Entonces sistema pregunta: ¿Crear backorder para las 2 unidades faltantes?
Reglas de Negocio
- RN-1: Recepciones se generan automáticamente desde PO confirmadas.
- RN-2: qty_done puede ser menor a qty_expected (recepción parcial).
- RN-3: Si qty_done < qty_expected, se puede crear backorder.
- RN-4: Validar recepción actualiza stock en ubicación de entrada.
Tareas Técnicas
Backend
- Endpoint: POST /api/v1/inventory/pickings (type=receipt)
- Endpoint: GET /api/v1/inventory/pickings?type=receipt
- Service: PickingService.createReceipt(purchaseOrderId)
- Service: PickingService.updateQuantitiesDone(pickingId, lines)
- Validar PO asociada
- Unit tests
- Integration tests
- Swagger docs
Frontend
- Componente: ReceiptsList.tsx
- Componente: ReceiptForm.tsx
- Tabla con qty_expected vs qty_done
- API client: pickingApi
- Component tests
- E2E test
Database
- Tabla: inventory.pickings (picking_type_id = receipt)
- Campo: inventory.picking_lines.qty_done
- Índices: idx_pickings_type_po
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 2.5 |
| Frontend | 3 |
| Testing | 2 |
| Code Review | 0.5 |
| TOTAL | 8 horas = 5 SP |
Definition of Done
- Código implementado según ET
- Tests pasando (>80%)
- Code review aprobado
- QA validado
- PO aprobado