# US-MGN-006-003-003: Gestionar Recepciones Parciales con Backorder

**RF Asociado:** [RF-MGN-006-004](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-004-recepciones-de-compras.md)
**Módulo:** MGN-006 - Compras Básico
**Epic:** Recepciones de Compras
**Prioridad:** P1
**Story Points:** 3
**Sprint:** Sprint 14
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** usuario de almacén,
**Quiero** gestionar recepciones parciales con backorders,
**Para** recibir productos en múltiples entregas del proveedor.

---

## Descripción Detallada
Cuando qty_done < qty_expected, el sistema puede crear un backorder (nuevo picking) para las cantidades pendientes. El backorder:
- Tiene las líneas con qty pendiente
- Mantiene referencia al picking original
- Puede validarse cuando llegue el resto

---

## Criterios de Aceptación

### Escenario 1: Crear backorder automático (Camino Feliz)
**Dado que** valido picking con línea qty_expected=10, qty_done=7, y acepto backorder,
**Cuando** sistema procesa,
**Entonces** crea nuevo picking backorder con qty_expected=3, mantiene referencia al original.

### Escenario 2: Validar backorder posteriormente
**Dado que** backorder tiene qty_expected=3,
**Cuando** registra qty_done=3 y valido,
**Entonces** sistema actualiza stock, marca PO como done si todas las líneas completas.

### Escenario 3: Múltiples backorders
**Dado que** valido backorder con qty_done=2 de qty_expected=3,
**Cuando** acepto crear otro backorder,
**Entonces** sistema crea segundo backorder para 1 unidad pendiente.

---

## Reglas de Negocio
- **RN-1:** Backorder se crea para qty_expected - qty_done.
- **RN-2:** Backorder mantiene backorder_of_id al picking original.
- **RN-3:** PO solo pasa a done cuando todos los backorders están validados.

---

## Tareas Técnicas

### Backend
- [ ] Service: PickingService.createBackorder(originalPicking, pendingQty)
- [ ] Calcular cantidades pendientes por línea
- [ ] Mantener trazabilidad (backorder_of_id)
- [ ] Validar PO status con backorders
- [ ] Unit tests
- [ ] Integration tests

### Frontend
- [ ] Modal confirmación backorder
- [ ] Vista de backorders asociados
- [ ] Indicador visual de picking con backorders
- [ ] Component tests
- [ ] E2E test

### Database
- [ ] Campo: inventory.pickings.backorder_of_id
- [ ] Índice: idx_pickings_backorder_of

---

## Estimación Detallada
| Tarea | Horas |
|-------|-------|
| Backend | 2 |
| Frontend | 1.5 |
| Testing | 1 |
| Code Review | 0.5 |
| **TOTAL** | **5 horas = 3 SP** |

---

## Definition of Done
- [ ] Código implementado según ET
- [ ] Tests pasando (>80%)
- [ ] Code review aprobado
- [ ] Backorders correctos
- [ ] QA validado
- [ ] PO aprobado

---

## Referencias
- [RF-MGN-006-004](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-004-recepciones-de-compras.md)
- [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-006.yaml)
