# US-MGN-007-003-003: Entrega Parcial con Backorder **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:** 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 1. **TC-001:** Backorder creado si qty_done < qty_ordered 2. **TC-002:** No backorder si qty_done = qty_ordered 3. **TC-003:** Backorder hereda datos correctamente 4. **TC-004:** backorder_of_id vinculado correctamente 5. **TC-005:** Solo líneas pendientes en backorder 6. **TC-006:** Backorder en estado draft 7. **TC-007:** Número secuencial generado 8. **TC-008:** Mensaje creado en chatter ### No Funcionales 1. **Performance:** < 200ms para crear backorder 2. **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 --- ## 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) - [ET Frontend](../../02-modelado/especificaciones-tecnicas/frontend/mgn-007/ET-FRONTEND-MGN-007-004-entregas.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-007.yaml) - [Schema](../../02-modelado/database-design/schemas/inventory-schema-ddl.sql)