# US-MGN-005-006-001: Valoración de Inventario FIFO

**RF Asociado:** [RF-MGN-005-006](../../02-modelado/requerimientos-funcionales/mgn-005/RF-MGN-005-006-valoración-de-inventario-fifo,-promedio.md)
**Módulo:** MGN-005 - Inventario Básico
**Epic:** Valoración de Inventario
**Prioridad:** P0
**Story Points:** 8
**Sprint:** Sprint 11
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** usuario financiero,
**Quiero** que el sistema calcule la valoración de inventario usando método FIFO (First In, First Out),
**Para** cumplir con normas contables y conocer el valor del stock.

---

## Descripción Detallada
El método FIFO valora el inventario asumiendo que las primeras unidades que entraron son las primeras en salir.

El sistema mantiene capas de valoración (stock_valuation_layers) con:
- Fecha de entrada
- Cantidad
- Costo unitario
- Valor total

Al consumir stock, se descuentan las capas más antiguas primero. El valor del stock final es la suma de las capas restantes.

---

## Criterios de Aceptación

### Escenario 1: Crear capa de valoración en entrada (Camino Feliz)
**Dado que** recibo 10 unidades de Producto A a $100 c/u,
**Cuando** valido el movimiento de entrada,
**Entonces** el sistema crea capa: qty=10, unit_cost=100, value=1000, date=hoy.

### Escenario 2: Consumir stock FIFO
**Dado que** tengo capas: [Capa1: qty=10, cost=100, date=2024-01-01], [Capa2: qty=5, cost=110, date=2024-01-05],
**Cuando** consumo 12 unidades,
**Entonces** el sistema consume: 10 de Capa1 (costo=1000), 2 de Capa2 (costo=220), costo total=1220.

### Escenario 3: Calcular valor de inventario
**Dado que** tras consumir quedan: [Capa2: qty=3, cost=110],
**Cuando** consulto valoración,
**Entonces** el sistema retorna valor_inventario=330 (3×110).

---

## Reglas de Negocio
- **RN-1:** FIFO consume capas más antiguas primero.
- **RN-2:** Cada movimiento de entrada crea una nueva capa.
- **RN-3:** Cada movimiento de salida consume capas existentes.
- **RN-4:** Capas vacías (qty=0) se marcan como consumed.

---

## Tareas Técnicas

### Backend
- [ ] Service: ValuationService.createLayer(stockMove)
- [ ] Service: ValuationService.consumeLayers(stockMove)
- [ ] Service: ValuationService.calculateFIFOCost(product, quantity)
- [ ] Service: ValuationService.getInventoryValue(productId)
- [ ] Algoritmo FIFO consumption
- [ ] Unit tests (>80%)
- [ ] Integration tests
- [ ] Swagger docs

### Frontend
- [ ] Componente: ValuationReport.tsx
- [ ] Tabla de capas de valoración
- [ ] Gráfico evolución de valor
- [ ] API client: valuationApi
- [ ] Component tests
- [ ] E2E test

### Database
- [ ] Tabla: inventory.stock_valuation_layers
- [ ] Índices: idx_valuation_layers_product_date
- [ ] RLS policy: company_isolation

---

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

---

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

---

## Referencias
- [RF-MGN-005-006](../../02-modelado/requerimientos-funcionales/mgn-005/RF-MGN-005-006-valoración-de-inventario-fifo,-promedio.md)
- [ET Backend](../../02-modelado/especificaciones-tecnicas/backend/mgn-005/ET-BACKEND-MGN-005-006-valoración-de-inventario-fifo-promedio.md)
- [ET Frontend](../../02-modelado/especificaciones-tecnicas/frontend/mgn-005/ET-FRONTEND-MGN-005-006-valoración-de-inventario-fifo-promedio.md)
- [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-005.yaml)
- [Schema](../../02-modelado/database-design/schemas/inventory-schema-ddl.sql)
