# TEST PLAN - MGN-005: Inventario Básico

**Módulo:** MGN-005 - Inventario Básico
**Sprint:** Sprint 12-15 (Semanas 23-30)
**Story Points:** 66 SP
**User Stories:** 14 US
**Fecha:** 2025-11-24
**QA Owner:** TBD
**Estado:** Draft

---

## 1. RESUMEN DEL MÓDULO

### 1.1 Descripción

El módulo MGN-005 Inventario Básico gestiona productos, almacenes, ubicaciones, movimientos de stock, pickings (albaranes), trazabilidad con lotes/series, valoración de inventario (FIFO/Promedio) e inventarios físicos.

### 1.2 Funcionalidades Principales

1. **Productos:** CRUD de productos con variantes, BoM, proveedores
2. **Almacenes y Ubicaciones:** Gestión de warehouses con ubicaciones físicas
3. **Movimientos de Stock:** Registro de entradas, salidas, transferencias
4. **Pickings:** Albaranes de entrada y salida con confirmación
5. **Trazabilidad:** Lotes y números de serie para seguimiento
6. **Valoración de Inventario:** FIFO, promedio ponderado, costo estándar
7. **Inventario Físico:** Conteos y ajustes de stock

### 1.3 Dependencias

- MGN-001: Fundamentos
- MGN-002: Empresas
- MGN-003: Catálogos (UoM, categorías)

---

## 2. ALCANCE DEL TESTING

### 2.1 En Alcance

- ✅ CRUD de productos con variantes
- ✅ Gestión de almacenes y ubicaciones
- ✅ Movimientos de stock (entrada, salida, ajuste, transferencia)
- ✅ Pickings con workflow (draft -> confirmed -> done)
- ✅ Trazabilidad por lotes y números de serie
- ✅ Valoración FIFO y promedio ponderado
- ✅ Inventario físico y ajustes
- ✅ Niveles de stock (disponible, reservado, en tránsito)
- ✅ Reglas de reordenamiento (min/max stock)

### 2.2 Fuera de Alcance

- ❌ Dropshipping (Fase 2)
- ❌ Kitting/Desarmado (Fase 2)
- ❌ Cross-docking (Fase 2)

---

## 3. ESTRATEGIA DE TESTING

### 3.1 Tipos de Tests

#### Unit Tests: 84 tests
- ProductService: 20 tests
- StockMoveService: 25 tests
- PickingService: 15 tests
- ValuationService: 15 tests (FIFO, promedio)
- Frontend components: 9 tests

#### Integration Tests: 42 tests
- Products API: 12 tests
- Stock Moves API: 15 tests
- Pickings API: 10 tests
- Inventory Adjustments API: 5 tests

#### E2E Tests: 14 tests
1. Crear producto con variantes (color, talla)
2. Registrar entrada de stock (compra), validar stock disponible
3. Registrar salida de stock (venta), validar stock
4. Transferir stock entre ubicaciones
5. Crear picking de entrada, confirmar, validar movimientos
6. Valorar inventario con FIFO
7. Realizar inventario físico, ajustar diferencias
8. Trazabilidad: crear lote, rastrear movimientos
9. Stock negativo (debe ser prevenido)
10. Reserva de stock para orden de venta

---

## 4. TEST CASES (CRÍTICOS)

#### TC-MGN-005-001: Movimiento de Stock Actualiza Cantidad Disponible
**Prioridad:** P0

**Precondiciones:**
- Producto "Laptop" con stock inicial 0
- Ubicación "WH-01-A-001" existe

**Pasos:**
1. POST /api/v1/stock-moves (entrada de 10 unidades)
2. GET /api/v1/products/:id/stock

**Resultado Esperado:**
- Stock disponible: 10
- Movimiento registrado en stock_moves table
- Quant creado en stock_quants table

---

#### TC-MGN-005-002: Valoración FIFO Calcula Costo Correctamente
**Prioridad:** P0

**Precondiciones:**
- Producto "Laptop" con valoración FIFO

**Pasos:**
1. Entrada 10 unidades a $1000 c/u (costo total $10,000)
2. Entrada 5 unidades a $1200 c/u (costo total $6,000)
3. Salida 12 unidades
4. GET /api/v1/products/:id/valuation

**Resultado Esperado:**
- Costo de salida: (10 * $1000) + (2 * $1200) = $12,400
- Stock restante: 3 unidades a $1200
- Valor de inventario: 3 * $1200 = $3,600

---

#### TC-MGN-005-003: Stock Negativo es Prevenido
**Prioridad:** P0

**Precondiciones:**
- Producto "Laptop" con stock 5

**Pasos:**
1. POST /api/v1/stock-moves (salida de 10 unidades)

**Resultado Esperado:**
- Status code: 400 Bad Request
- Error: "Stock insuficiente. Disponible: 5, Requerido: 10"
- Movimiento no se crea

---

#### TC-MGN-005-004: Inventario Físico Ajusta Diferencias
**Prioridad:** P0

**Precondiciones:**
- Producto "Laptop" con stock teórico 100

**Pasos:**
1. Realizar conteo físico: 95 unidades
2. POST /api/v1/inventory-adjustments (diferencia: -5)

**Resultado Esperado:**
- Stock actualizado: 95
- Movimiento de ajuste registrado con motivo "Inventario físico"
- Valoración ajustada según diferencia

---

## 5. DATOS DE PRUEBA

**Productos (50):**
- 10 productos con variantes (laptop con variantes RAM/SSD)
- 20 productos simples
- 10 productos con trazabilidad (lote o serie)
- 10 productos con múltiples proveedores

**Almacenes (3):**
- WH-01 Buenos Aires (20 ubicaciones)
- WH-02 Córdoba (15 ubicaciones)
- WH-03 Rosario (10 ubicaciones)

**Movimientos de Stock (100):**
- 50 entradas (compras, ajustes)
- 40 salidas (ventas, ajustes)
- 10 transferencias entre ubicaciones

---

## 6. SCHEDULE

| Sprint | RF | Actividad | Duración |
|--------|-----|-----------|----------|
| Sprint 12-13 | RF-001, RF-002 | Productos, Almacenes | 4 sem |
| Sprint 14 | RF-003, RF-004 | Movimientos, Pickings | 2 sem |
| Sprint 15 | RF-005, RF-006, RF-007 | Trazabilidad, Valoración, Inventario | 2 sem |

---

## 7. RIESGOS ESPECÍFICOS

| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|--------------|---------|------------|
| **Stock negativo** | Alta | Crítico | Validación estricta. Constraint en BD. |
| **Valoración FIFO incorrecta** | Media | Alto | Unit tests exhaustivos. Casos de prueba con contadores. |
| **Concurrencia en movimientos** | Alta | Alto | Row locking. Transacciones. Retry logic. |

---

## 8. MÉTRICAS

**Total test cases:** 140
- Unit: 84
- Integration: 42
- E2E: 14

---

## 9. REFERENCIAS

- [User Stories MGN-005](../../03-user-stories/mgn-005/)
- [RF MGN-005](../../02-modelado/requerimientos-funcionales/mgn-005/)
- [Traceability MGN-005](../../02-modelado/trazabilidad/TRACEABILITY-MGN-005.yaml)
- [Master Test Plan](./MASTER-TEST-PLAN.md)

---

**Versión:** 1.0
**Última actualización:** 2025-11-24
**Estado:** Draft
