# US-MMD004-004: Recibir Mercancia

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-MMD004-004 |
| **Epica** | EPIC-MMD-004 - Inventario y Refacciones |
| **Modulo** | inventario |
| **Prioridad** | P0 |
| **Story Points** | 5 |
| **Sprint** | Sprint 5 |
| **Estado** | Backlog |

---

## Historia de Usuario

**Como** almacenista,
**quiero** registrar la recepcion de mercancia,
**para** actualizar el inventario y verificar que coincide con el pedido.

## Descripcion Detallada

El proceso de recepcion debe validar cantidades contra la orden de compra, permitir reportar diferencias, y actualizar automaticamente el stock una vez confirmada la recepcion.

---

## Criterios de Aceptacion

**Escenario 1: Recibir orden de compra completa**
```gherkin
DADO que llega mercancia del proveedor
CUANDO selecciono la orden de compra OC-2025-001
ENTONCES veo items esperados:
  | Refaccion | Pedido | Recibido |
  | Filtro aceite | 10 | [input] |
  | Inyector reman | 4 | [input] |
Y puedo ingresar cantidades recibidas
```

**Escenario 2: Recepcion parcial**
```gherkin
DADO que pedimos 10 filtros
CUANDO recibimos solo 6
ENTONCES registro recepcion parcial
Y el sistema marca OC como "Parcialmente recibida"
Y mantiene pendiente 4 unidades
```

**Escenario 3: Diferencia en recepcion**
```gherkin
DADO que recibo menos de lo facturado
CUANDO hay diferencia
ENTONCES puedo reportar incidencia:
  | Tipo | Faltante |
  | Cantidad | 4 unidades |
  | Notas | Proveedor avisado |
Y se notifica a compras
```

**Escenario 4: Asignar ubicacion**
```gherkin
DADO que recibo mercancia
CUANDO confirmo recepcion
ENTONCES asigno ubicacion de almacen:
  | Refaccion | Ubicacion |
  | Filtro aceite | A-01-03 |
Y se actualiza el stock
```

**Escenario 5: Recepcion sin orden**
```gherkin
DADO que llega mercancia sin orden previa
CUANDO registro entrada directa
ENTONCES capturo:
  - Proveedor
  - Factura
  - Items y cantidades
  - Costos
Y se genera entrada de almacen
```

---

## Tareas Tecnicas

**Database:**
- [ ] DB-082: Crear tabla `warehouse_receipts`
- [ ] DB-083: Crear tabla `receipt_items`

**Backend:**
- [ ] BE-166: Endpoint POST /api/warehouse/receipts
- [ ] BE-167: Validar contra orden de compra
- [ ] BE-168: Actualizar stock en recepcion
- [ ] BE-169: Registrar incidencias

**Frontend:**
- [ ] FE-166: Crear ReceiveGoodsPage
- [ ] FE-167: Crear ReceiptForm
- [ ] FE-168: Crear IncidenceModal

---

## Definition of Done (DoD)

- [ ] Recibir mercancia contra OC
- [ ] Recepcion parcial
- [ ] Reportar diferencias
- [ ] Asignar ubicacion
- [ ] Actualizar stock automatico
- [ ] Tests pasando

---

**Creada por:** Requirements-Analyst
**Fecha:** 2025-12-06
