# US-MGN-005-005-001: Crear Ajuste de Inventario

**RF Asociado:** [RF-MGN-005-007](../../02-modelado/requerimientos-funcionales/mgn-005/RF-MGN-005-007-inventario-físico-y-ajustes.md)
**Módulo:** MGN-005 - Inventario Básico
**Epic:** Ajustes de Inventario
**Prioridad:** P0
**Story Points:** 4
**Sprint:** Sprint 11
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** usuario de inventario,
**Quiero** crear ajustes de inventario para corregir diferencias entre stock físico y sistema,
**Para** mantener la precisión del inventario tras conteos físicos.

---

## Descripción Detallada
Los ajustes de inventario se usan cuando el conteo físico no coincide con el sistema. Tienen líneas con:
- Producto y ubicación
- Cantidad teórica (sistema)
- Cantidad contada (física)
- Diferencia (contada - teórica)

Al validar, se generan movimientos de stock automáticamente para ajustar a la cantidad real.

---

## Criterios de Aceptación

### Escenario 1: Crear ajuste con diferencias positivas y negativas (Camino Feliz)
**Dado que** creo ajuste con líneas: Producto A (teórica=10, contada=12, diff=+2), Producto B (teórica=5, contada=3, diff=-2),
**Cuando** guardo el ajuste,
**Entonces** el sistema crea ajuste en estado draft con las líneas.

### Escenario 2: Calcular diferencia automáticamente
**Dado que** ingreso cantidad teórica=10 y contada=8,
**Cuando** guardo la línea,
**Entonces** el sistema calcula diferencia=-2 automáticamente.

### Escenario 3: Validar producto y ubicación existen
**Dado que** ingreso product_id=999 (no existe),
**Cuando** intento guardar,
**Entonces** el sistema retorna error 404 "Producto no encontrado".

---

## Reglas de Negocio
- **RN-1:** Ajustes se crean en estado draft.
- **RN-2:** Diferencia = cantidad_contada - cantidad_teórica.
- **RN-3:** Ajustes pueden tener líneas positivas y negativas.
- **RN-4:** Al validar se generan movimientos de stock automáticamente.

---

## Tareas Técnicas

### Backend
- [ ] Endpoint: POST /api/v1/inventory/adjustments
- [ ] Service: InventoryAdjustmentService.create(dto)
- [ ] DTO: CreateAdjustmentDto, AdjustmentLineDto
- [ ] Unit tests (>80%)
- [ ] Integration tests
- [ ] Swagger docs

### Frontend
- [ ] Componente: CreateAdjustmentForm.tsx
- [ ] Tabla editable de líneas
- [ ] Cálculo automático de diferencias
- [ ] Component tests
- [ ] E2E test

### Database
- [ ] Tabla: inventory.inventory_adjustments
- [ ] Tabla: inventory.inventory_adjustment_lines
- [ ] RLS policy: company_isolation

---

## Estimación Detallada
| Tarea | Horas |
|-------|-------|
| Backend | 2 |
| Frontend | 2.5 |
| Testing | 1.5 |
| Code Review | 0.5 |
| **TOTAL** | **6.5 horas = 4 SP** |

---

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

---

## Referencias
- [RF-MGN-005-007](../../02-modelado/requerimientos-funcionales/mgn-005/RF-MGN-005-007-inventario-físico-y-ajustes.md)
- [ET Backend](../../02-modelado/especificaciones-tecnicas/backend/mgn-005/ET-BACKEND-MGN-005-007-inventario-físico-y-ajustes.md)
- [ET Frontend](../../02-modelado/especificaciones-tecnicas/frontend/mgn-005/ET-FRONTEND-MGN-005-007-inventario-físico-y-ajustes.md)
- [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-005.yaml)
- [Schema](../../02-modelado/database-design/schemas/inventory-schema-ddl.sql)
