7.3 KiB
US-MGN-007-003-003: Entrega Parcial con Backorder
RF Asociado: RF-MGN-007-004 Módulo: MGN-007 - Ventas Básico Epic: Entregas de Ventas Prioridad: P1 Story Points: 3 Sprint: Sprint 17 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como usuario de almacén, Quiero que el sistema genere automáticamente backorders para cantidades pendientes, Para gestionar entregas parciales sin perder trazabilidad de lo que falta entregar.
Descripción Detallada
Un backorder es una nueva delivery que se crea automáticamente cuando se valida una entrega parcial (qty_done < qty_ordered).
Ejemplo:
- Delivery DO/2024/0001: qty_ordered=100, qty_done=60
- Al validar, sistema crea backorder DO/2024/0002 con qty_ordered=40 en draft
- Backorder hereda: cliente, productos, ubicaciones
- Backorder tiene referencia al delivery origen: backorder_of_id
Criterios de Aceptación
Escenario 1: Crear backorder automáticamente (Camino Feliz)
Dado que delivery tiene línea: qty_ordered=100, qty_done=60, Cuando valido delivery, Entonces sistema crea backorder con qty_ordered=40, vincula backorder_of_id al delivery original.
Escenario 2: No crear backorder si entrega completa
Dado que delivery tiene qty_ordered=100, qty_done=100, Cuando valido delivery, Entonces sistema NO crea backorder.
Escenario 3: Backorder hereda datos del original
Dado que se crea backorder, Cuando se genera, Entonces copia: customer_id, location_from_id, location_to_id, order_id, reference.
Escenario 4: Backorder en estado draft editable
Dado que se crea backorder, Cuando se completa creación, Entonces backorder está en estado draft (puede editarse antes de validar).
Escenario 5: Notificar creación de backorder
Dado que se crea backorder, Cuando se completa, Entonces sistema crea mensaje en chatter: "Backorder DO/2024/0002 creado para 40 unidades".
Escenario 6: Backorder múltiples líneas
Dado que delivery tiene 3 líneas, 2 parciales y 1 completa, Cuando valido, Entonces backorder solo incluye las 2 líneas con cantidades pendientes.
Reglas de Negocio
- RN-1: Backorder se crea solo si existe qty_pending > 0 en alguna línea.
- RN-2: Backorder se genera en estado draft.
- RN-3: Backorder hereda todos los datos del delivery original.
- RN-4: backorder_of_id vincula al delivery origen.
- RN-5: Solo líneas con qty_pending > 0 se copian al backorder.
- RN-6: Número secuencial: Siguiente en secuencia DO/{year}/{seq}.
- RN-7: Se notifica en chatter del delivery original y de la SO.
Tareas Técnicas
Backend
- Service:
DeliveryService.createBackorder(originalDelivery, pendingLines) - Calcular qty_pending por línea: qty_ordered - qty_done
- Filtrar líneas con qty_pending > 0
- Copiar header del delivery original
- Generar número secuencial para backorder
- Vincular backorder_of_id
- Crear backorder en estado draft
- Crear mensaje en chatter (delivery original + SO)
- Unit tests (>80%)
- Integration tests
Frontend
- Badge: Mostrar "Backorder creado" en delivery validada
- Link: Enlace a backorder desde delivery original
- Tabla: Mostrar backorders en vista de SO
- Indicador visual: qty parcial vs total en líneas
- Component tests
- E2E test: "should create backorder for partial delivery"
Database
- Columna:
inventory.deliveries.backorder_of_id(FK → deliveries.id) - Índice:
idx_deliveries_backorder_of_id
Mockups / Wireframes
Notificación después de validar entrega parcial:
┌─────────────────────────────────────────────┐
│ ✓ Delivery DO/2024/0001 validada │
├─────────────────────────────────────────────┤
│ Entregado: 60 unidades │
│ │
│ ⚠ Backorder creado: │
│ DO/2024/0002 (40 unidades pendientes) │
│ [Ver Backorder] │
│ │
│ [OK] │
└─────────────────────────────────────────────┘
Vista SO mostrando backorders:
┌─────────────────────────────────────────────┐
│ Sales Order SO/2024/0001 │
├─────────────────────────────────────────────┤
│ Entregas: │
│ • DO/2024/0001 [done] - 60 unid. (parcial) │
│ └─ Backorder: DO/2024/0002 [draft] - 40 │
│ │
│ Progreso: 60/100 (60%) ▓▓▓▓▓▓░░░░ │
└─────────────────────────────────────────────┘
Casos de Prueba
Funcionales
- TC-001: Backorder creado si qty_done < qty_ordered
- TC-002: No backorder si qty_done = qty_ordered
- TC-003: Backorder hereda datos correctamente
- TC-004: backorder_of_id vinculado correctamente
- TC-005: Solo líneas pendientes en backorder
- TC-006: Backorder en estado draft
- TC-007: Número secuencial generado
- TC-008: Mensaje creado en chatter
No Funcionales
- Performance: < 200ms para crear backorder
- Seguridad: Mismos permisos que delivery original
Dependencias
- US bloqueantes:
- US-MGN-007-003-002 (Validar Entrega)
- Módulos requeridos: MGN-005 (Inventario)
Notas de Implementación
- Backorder se crea dentro de la misma transacción que la validación
- Frontend: Mostrar claramente la relación entre delivery original y backorder
- Considerar límite de backorders encadenados para evitar loops infinitos
- Validar que las cantidades del backorder suman correctamente
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 1.5 |
| Frontend | 1 |
| Testing | 1 |
| Code Review | 0.5 |
| TOTAL | 4 horas = 3 SP |
Definition of Done
- Código implementado según ET
- Tests pasando (>80%)
- Code review aprobado
- Backorder se crea automáticamente
- Solo líneas pendientes incluidas
- Vinculación correcta
- Estado draft correcto
- Mensaje en chatter creado
- QA validado
- PO aprobado