# MAI-004: Compras e Inventarios

**ID:** MAI-004
**Fase:** 1 - Alcance Inicial
**Presupuesto:** $35,000 MXN
**Story Points:** 48 SP
**Sprint:** Sprint 11-14 (Semanas 21-28)
**Prioridad:** P1
**Estado:** Documentado
**Reutilización Core ERP:** 80% (MAE-012, MAE-013)

---

## Resumen Ejecutivo

El módulo **MAI-004: Compras e Inventarios** gestiona el ciclo completo de adquisición y control de materiales en obras de construcción, desde la requisición hasta el consumo en campo. Especializado para la industria de la construcción, extiende los módulos core del ERP (MAE-012 Compras y MAE-013 Inventarios) con funcionalidades específicas como almacenes por obra, control presupuestal por partidas, y seguimiento de consumos en tiempo real.

### Problema que Resuelve

Las constructoras enfrentan desafíos críticos en la gestión de materiales:
- **Múltiples obras simultáneas** con almacenes independientes
- **Control presupuestal estricto** por partida presupuestal
- **Coordinación compleja** entre residentes, compras y almacenistas
- **Falta de visibilidad** del inventario en tiempo real
- **Mermas y desperdicios** no controlados
- **Paros de obra** por falta de materiales

**Sin este módulo:** Requisiciones en papel, Excel para control de inventarios, falta de trazabilidad, desperdicios no detectados, compras no planificadas.

**Con este módulo:** Requisiciones digitales con aprobación automática, inventarios en tiempo real por obra, alertas de existencias bajas, trazabilidad completa, control vs presupuesto.

---

## Objetivos

1. **Optimizar compras** mediante requisiciones digitales y flujos de aprobación eficientes
2. **Control en tiempo real** de inventarios por almacén y obra
3. **Trazabilidad completa** desde requisición hasta consumo final
4. **Integración presupuestal** para validar disponibilidad de recursos
5. **Movilidad** con app para almacenistas en campo (MOB-002)

---

## Alcance Funcional

### 1. Requisiciones de Material

- Creación de requisiciones vinculadas a obras y partidas presupuestales
- Flujo de aprobación multinivel (Residente → Superintendente → Compras)
- Validación automática contra presupuesto disponible
- Conversión de requisiciones aprobadas en órdenes de compra
- Estados: borrador, enviada, aprobada, rechazada, convertida
- Notificaciones automáticas por email y en app

### 2. Órdenes de Compra

- Generación automática desde requisiciones o manual
- Selección de proveedor con condiciones comerciales
- Gestión de precios, descuentos e impuestos
- Generación de PDF con formato profesional
- Control de estados: borrador, enviada, confirmada, recibida (parcial/total), cancelada
- Registro de recepciones parciales y totales
- Control de presupuesto comprometido

### 3. Almacenes por Obra

- Múltiples almacenes por obra de construcción
- Definición de ubicaciones y áreas dentro de cada almacén
- Asignación de responsable/almacenista
- Control de existencias por almacén y ubicación
- Niveles mínimos y máximos de inventario
- Alertas automáticas de existencias bajas
- Inventario cíclico y físico

### 4. Movimientos de Inventario

- **Entradas:** Desde órdenes de compra con registro de lote y ubicación
- **Salidas:** Consumo en obra vinculado a partidas presupuestales
- **Transferencias:** Entre almacenes de diferentes obras
- **Ajustes:** Mermas, devoluciones, correcciones con justificación
- Trazabilidad completa por material
- Cálculo automático de costos (PEPS, promedio ponderado)
- Validación de existencias antes de salidas

---

## Reutilización del Core ERP (80%)

### Módulos Core Base

| Módulo Core | Funcionalidad Reutilizada | Adaptación para Construcción |
|-------------|---------------------------|------------------------------|
| **MAE-012 Compras** | Sistema de requisiciones y OCs, gestión de proveedores, catálogo de materiales | Vinculación con partidas presupuestales, aprobaciones por obra, control de presupuesto comprometido |
| **MAE-013 Inventarios** | Control de almacenes, movimientos de inventario, kardex, valorización PEPS | Almacenes por obra, salidas vinculadas a partidas, transferencias entre obras, app móvil |

### Componentes Reutilizados

**Backend (NestJS):**
- Servicios base de compras y proveedores
- Servicios de inventarios y almacenes
- Sistema de aprobaciones workflow
- Cálculo de costos y valorización
- Generación de PDFs

**Frontend (React):**
- Componentes UI de formularios y tablas
- Sistema de notificaciones
- Dashboard de métricas
- Exportación de reportes

**Base de Datos:**
- Schemas: `purchasing_management`, `inventory_management`
- Triggers para actualización automática de stock
- Stored procedures para PEPS y costos
- Políticas RLS para multi-tenancy

### Extensiones Específicas para Construcción

- **Vinculación presupuestal:** Integración con MAI-002 (Presupuestos y Costos)
- **Control por partidas:** Salidas vinculadas a conceptos presupuestales
- **Almacenes por obra:** Múltiples almacenes independientes por proyecto
- **App móvil MOB-002:** Interfaz móvil para almacenistas en campo
- **Reportes especializados:** Consumo vs presupuesto, materiales por frente

---

## Requerimientos Funcionales

### RF-COMP-001: Requisiciones de Material
Gestión de solicitudes de material para obras de construcción con flujo de aprobación multinivel.

**Especificaciones clave:**
- Crear requisiciones vinculadas a obras y partidas presupuestales
- Definir cantidad, unidad de medida y fecha requerida
- Flujo de aprobación: Residente → Superintendente → Compras
- Conversión a órdenes de compra

[Ver detalle completo](./requerimientos/RF-PURCH-001-catalogo-proveedores.md)

### RF-COMP-002: Órdenes de Compra
Gestión completa de órdenes de compra a proveedores con control de recepciones.

**Especificaciones clave:**
- Creación manual o desde requisiciones
- Selección de proveedor y condiciones comerciales
- Generación de PDF y envío por email
- Control de recepciones parciales y totales

[Ver detalle completo](./requerimientos/RF-PURCH-002-requisiciones-ordenes-compra.md)

### RF-COMP-003: Almacenes por Obra
Gestión de almacenes y ubicaciones de inventario en cada obra.

**Especificaciones clave:**
- Múltiples almacenes por obra
- Ubicaciones y áreas dentro de almacenes
- Asignación de responsables
- Niveles de inventario y alertas

[Ver detalle completo](./requerimientos/RF-PURCH-003-almacenes-inventarios.md)

### RF-COMP-004: Movimientos de Inventario
Registro y control de entradas, salidas y transferencias de inventario.

**Especificaciones clave:**
- Entradas desde órdenes de compra
- Salidas para consumo en obra
- Transferencias entre almacenes
- Ajustes de inventario con trazabilidad

[Ver detalle completo](./requerimientos/RF-PURCH-004-kardex-alertas.md)

---

## Integración con App Móvil MOB-002 (Almacenista)

### Descripción General

**MOB-002: Almacenista** es una aplicación móvil especializada para el personal de almacén en obra, permitiendo gestión de inventario en tiempo real con capacidades offline.

### Funcionalidades Móviles

| Funcionalidad | Descripción | Prioridad |
|---------------|-------------|-----------|
| **Recepción de materiales** | Registro de entradas con escaneo de códigos y fotos | P0 |
| **Salida de materiales** | Procesamiento de entregas con firma digital | P0 |
| **Consulta de inventario** | Existencias en tiempo real por almacén | P0 |
| **Conteo físico** | Inventario cíclico con captura móvil | P1 |
| **Escaneo de códigos** | Barcode y QR scanner para trazabilidad | P1 |
| **Modo offline** | Trabajo sin conexión con sincronización automática | P0 |
| **Transferencias** | Envío/recepción de materiales entre obras | P2 |
| **Fotografías** | Evidencia fotográfica de materiales recibidos | P1 |

### Stack Tecnológico Móvil

```yaml
framework: React Native 0.73+
platform: Expo 50
language: TypeScript 5.3+
state_management: Zustand 4.x
navigation: React Navigation 6.x
offline_storage: WatermelonDB
sync: Background fetch + Queue
camera: expo-camera
barcode: expo-barcode-scanner
location: expo-location
push: Firebase Cloud Messaging
```

### User Stories Móviles

**US-MOB002-001: Recibir materiales**
- Escanear código o buscar material
- Ingresar cantidad recibida
- Tomar foto de evidencia
- Asociar a orden de compra
- Registrar con ubicación GPS

**US-MOB002-002: Entregar materiales a obra**
- Seleccionar material del inventario
- Ingresar cantidad a entregar
- Seleccionar destino (frente/cuadrilla)
- Registrar quien recibe con firma digital
- Actualizar inventario automáticamente

**US-MOB002-003: Realizar conteo físico**
- Iniciar conteo de almacén
- Escanear o buscar items
- Registrar cantidades físicas
- Generar diferencias automáticamente
- Crear ajustes de inventario

**US-MOB002-004: Consultar existencias**
- Buscar material por nombre o código
- Ver existencia actual y ubicación
- Consultar movimientos recientes
- Verificar materiales en tránsito

### Sincronización Offline

La app MOB-002 implementa una arquitectura robusta para trabajo offline:

1. **Almacenamiento local:** WatermelonDB para datos relacionales
2. **Queue de cambios:** Registro de operaciones pendientes
3. **Sincronización automática:** Al recuperar conectividad
4. **Resolución de conflictos:** Estrategia configurable (server-wins, client-wins, manual)
5. **Notificaciones:** Push cuando hay datos nuevos

[Ver especificación completa en EPIC-MAI-019](../../08-epicas/EPIC-MAI-019-mobile-apps.md)

---

## Dependencias con Otros Módulos

### Dependencias Directas

| Módulo | Relación | Datos Compartidos |
|--------|----------|-------------------|
| **MGN-001** Usuarios | Asignación de almacenistas y responsables | Usuarios, roles, permisos |
| **MGN-002** RBAC | Control de permisos por rol | Políticas de acceso |
| **MGN-003** Multi-tenancy | Separación por constructora | Tenant ID, RLS |
| **MGN-005** Catálogos | Catálogo de materiales y proveedores | Materiales, unidades, proveedores |
| **MAI-001** Proyectos | Vinculación con obras | Obras, ubicaciones |
| **MAI-002** Presupuestos | Control presupuestal y partidas | Partidas, presupuesto disponible |

### Integraciones Futuras

| Módulo | Integración | Datos Compartidos |
|--------|-------------|-------------------|
| **MAI-005** Control de Obra | Consumos en avances de obra | Salidas por frente, partidas |
| **MAI-008** Estimaciones | Validación de materiales en obra | Materiales aplicados |
| **MAE-014** Finanzas | Cuentas por pagar a proveedores | Órdenes autorizadas, pagos |
| **MAI-012** Contratos | Subcontratos con materiales | Materiales contratados |

---

## Arquitectura del Módulo

### Diagrama de Arquitectura

```
┌─────────────────────────────────────────────────────────────────┐
│                     CAPA DE PRESENTACIÓN                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌──────────────────┐    ┌──────────────────┐                 │
│  │  Web App (React) │    │  Mobile (RN)     │                 │
│  │                  │    │                  │                 │
│  │  - Requisiciones │    │  - Recepciones   │                 │
│  │  - Órdenes       │    │  - Salidas       │                 │
│  │  - Almacenes     │    │  - Inventario    │                 │
│  │  - Movimientos   │    │  - Conteos       │                 │
│  │  - Reportes      │    │  - Transferencias│                 │
│  └──────────────────┘    └──────────────────┘                 │
│           │                       │                             │
│           │        REST API       │                             │
│           └───────────┬───────────┘                             │
└───────────────────────┼─────────────────────────────────────────┘
                        │
┌───────────────────────┼─────────────────────────────────────────┐
│                       │      CAPA DE NEGOCIO                    │
├───────────────────────┼─────────────────────────────────────────┤
│                       ▼                                         │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │              NestJS Backend Services                     │  │
│  │                                                          │  │
│  │  ┌──────────────────┐    ┌──────────────────┐          │  │
│  │  │ Purchasing       │    │ Inventory        │          │  │
│  │  │ Module           │    │ Module           │          │  │
│  │  │                  │    │                  │          │  │
│  │  │ - Requisitions   │    │ - Warehouses     │          │  │
│  │  │ - Purchase Orders│    │ - Stock          │          │  │
│  │  │ - Suppliers      │    │ - Movements      │          │  │
│  │  │ - Approvals      │    │ - Kardex         │          │  │
│  │  └──────────────────┘    └──────────────────┘          │  │
│  │           │                       │                      │  │
│  │           └───────────┬───────────┘                      │  │
│  └───────────────────────┼──────────────────────────────────┘  │
│                          │                                     │
│  ┌───────────────────────┼──────────────────────────────────┐ │
│  │   Shared Services     ▼                                  │ │
│  │                                                           │ │
│  │  - Budget Validation  - Notification Service            │ │
│  │  - Workflow Engine    - File Upload                      │ │
│  │  - PDF Generator      - Audit Logging                    │ │
│  └───────────────────────────────────────────────────────────┘ │
└───────────────────────────┼─────────────────────────────────────┘
                            │
┌───────────────────────────┼─────────────────────────────────────┐
│                           ▼      CAPA DE DATOS                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌────────────────────────────────────────────────────────┐   │
│  │              PostgreSQL 15+                             │   │
│  │                                                         │   │
│  │  ┌───────────────────┐    ┌──────────────────┐        │   │
│  │  │ purchasing_       │    │ inventory_       │        │   │
│  │  │ management        │    │ management       │        │   │
│  │  │                   │    │                  │        │   │
│  │  │ - requisiciones   │    │ - almacenes      │        │   │
│  │  │ - ordenes_compra  │    │ - inventario     │        │   │
│  │  │ - recepciones     │    │ - movimientos    │        │   │
│  │  │ - aprobaciones    │    │ - kardex         │        │   │
│  │  └───────────────────┘    └──────────────────┘        │   │
│  │                                                         │   │
│  │  Features:                                              │   │
│  │  - Row Level Security (RLS)                            │   │
│  │  - Triggers para stock automático                      │   │
│  │  - Stored procedures PEPS                              │   │
│  │  - Funciones de cálculo de costos                      │   │
│  │  - Auditoría automática                                │   │
│  └────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                    SERVICIOS EXTERNOS                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐         │
│  │ Email/SMS    │  │ File Storage │  │ Push         │         │
│  │ (SendGrid)   │  │ (S3/MinIO)   │  │ (FCM)        │         │
│  └──────────────┘  └──────────────┘  └──────────────┘         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
```

### Schema de Base de Datos

**Schema: `purchasing_management`**

Tablas principales:
- `requisiciones` - Cabecera de requisiciones
- `requisiciones_detalle` - Items de requisiciones
- `requisiciones_aprobaciones` - Flujo de aprobación
- `requisiciones_partidas` - Vinculación presupuestal
- `ordenes_compra` - Cabecera de órdenes
- `ordenes_compra_detalle` - Items de órdenes
- `ordenes_compra_recepciones` - Registro de recepciones
- `ordenes_compra_documentos` - Archivos adjuntos

**Schema: `inventory_management`**

Tablas principales:
- `almacenes` - Almacenes por obra
- `almacenes_ubicaciones` - Zonas y ubicaciones
- `inventario_por_almacen` - Stock actual
- `niveles_inventario` - Min/max por material
- `movimientos_inventario` - Registro de movimientos
- `entradas_inventario` - Detalle de entradas
- `salidas_inventario` - Detalle de salidas
- `transferencias_inventario` - Traspasos entre almacenes
- `ajustes_inventario` - Ajustes y correcciones
- `kardex` - Historial de movimientos

### Backend: NestJS

**Módulos principales:**

```typescript
// Purchasing Module
@Module({
  imports: [
    TypeOrmModule.forFeature([
      Requisicion,
      RequisicionDetalle,
      OrdenCompra,
      OrdenCompraDetalle,
      Recepcion
    ])
  ],
  providers: [
    RequisicionService,
    OrdenCompraService,
    RecepcionService,
    ApprovalWorkflowService,
    BudgetValidationService
  ],
  controllers: [
    RequisicionController,
    OrdenCompraController,
    RecepcionController
  ]
})
export class PurchasingModule {}

// Inventory Module
@Module({
  imports: [
    TypeOrmModule.forFeature([
      Almacen,
      Stock,
      Movimiento,
      Entrada,
      Salida,
      Transferencia,
      Kardex
    ])
  ],
  providers: [
    AlmacenService,
    StockService,
    MovimientoService,
    KardexService,
    AlertService,
    CostCalculationService
  ],
  controllers: [
    AlmacenController,
    MovimientoController,
    KardexController
  ]
})
export class InventoryModule {}
```

### Frontend: React + TypeScript

**Componentes principales:**

```typescript
// Requisiciones
- RequisicionesListView
- RequisicionFormModal
- RequisicionDetailView
- RequisicionApprovalPanel
- RequisicionItemsTable
- RequisicionWorkflowTimeline

// Órdenes de Compra
- OrdenesCompraListView
- OrdenCompraFormModal
- OrdenCompraDetailView
- OrdenCompraItemsTable
- OrdenCompraRecepcionModal
- OrdenCompraPDFPreview
- OrdenCompraStatusBadge

// Almacenes
- AlmacenesListView
- AlmacenFormModal
- AlmacenDetailView
- UbicacionesTreeView
- InventarioAlmacenTable
- ExistenciasBajasAlert
- AlmacenResponsableSelector

// Movimientos
- MovimientosInventarioListView
- EntradaInventarioFormModal
- SalidaInventarioFormModal
- TransferenciaInventarioFormModal
- AjusteInventarioFormModal
- KardexMaterialView
- SolicitudesSalidaPanel
- ValuacionInventarioReport
- MovimientoDetailView
```

---

## Stack Tecnológico

### Backend

```yaml
framework: NestJS 10+
language: TypeScript 5.3+
database: PostgreSQL 15+
orm: TypeORM 0.3+
validation: class-validator + class-transformer
authentication: Passport + JWT
authorization: CASL (RBAC)
notifications: EventEmitter2 + SendGrid/AWS SES
files: Multer + S3/MinIO
pdf: PDFKit / Puppeteer
scheduling: @nestjs/schedule (CRON)
testing: Jest + Supertest
```

### Frontend Web

```yaml
framework: React 18+
language: TypeScript 5.3+
build: Vite 5+
state: Zustand 4.x
forms: React Hook Form + Zod
tables: TanStack Table v8
charts: Chart.js / Recharts
ui: Tailwind CSS + shadcn/ui
api: Axios + React Query
routing: React Router 6
pdf: jsPDF / react-pdf
excel: xlsx
testing: Vitest + Testing Library
```

### Mobile (MOB-002)

```yaml
framework: React Native 0.73+
platform: Expo 50
language: TypeScript 5.3+
state: Zustand 4.x
navigation: React Navigation 6.x
offline: WatermelonDB
sync: Background fetch + Queue
camera: expo-camera
barcode: expo-barcode-scanner
location: expo-location
signature: react-native-signature-canvas
push: Firebase Cloud Messaging
storage: AsyncStorage + SecureStore
```

### Base de Datos

```yaml
database: PostgreSQL 15+
schemas:
  - purchasing_management
  - inventory_management
features:
  - Row Level Security (RLS)
  - Triggers automáticos
  - Stored procedures
  - Functions para cálculos
  - JSONB para flexibilidad
  - Full-text search
  - Particionamiento (futuro)
```

---

## Flujos de Trabajo Clave

### Flujo 1: Requisición a Orden de Compra

```
1. [Residente] Crea requisición de materiales
   - Selecciona obra y partida presupuestal
   - Agrega materiales del catálogo
   - Especifica cantidades y fecha requerida
   - Envía a aprobación

2. [Sistema] Valida presupuesto disponible
   - Verifica saldo en partida presupuestal
   - Rechaza automáticamente si no hay presupuesto
   - Notifica al residente

3. [Superintendente] Revisa y aprueba
   - Recibe notificación de requisición pendiente
   - Revisa justificación y cantidades
   - Aprueba o rechaza con comentarios
   - Notifica al solicitante

4. [Jefe de Compras] Convierte a OC
   - Selecciona proveedor
   - Define condiciones comerciales
   - Genera orden de compra
   - Envía PDF por email al proveedor
   - Marca requisición como convertida

5. [Sistema] Compromete presupuesto
   - Registra monto comprometido en partida
   - Actualiza saldo disponible
   - Genera notificación a residente y finanzas
```

### Flujo 2: Recepción de Material (App Móvil)

```
1. [Almacenista] Recibe notificación de material en tránsito
   - App móvil muestra órdenes pendientes
   - Selecciona orden a recibir

2. [Almacenista] Escanea o busca material
   - Usa cámara para escanear código de barras/QR
   - O busca manualmente en catálogo
   - Verifica coincidencia con orden

3. [Almacenista] Registra recepción
   - Ingresa cantidad recibida
   - Toma foto de evidencia
   - Registra lote y ubicación en almacén
   - Captura firma del proveedor (si aplica)
   - Documenta diferencias o daños

4. [App Móvil] Sincroniza con servidor
   - Guarda datos localmente (offline)
   - Sincroniza cuando hay conectividad
   - Actualiza estado de orden

5. [Sistema] Genera entrada de almacén
   - Crea movimiento de entrada
   - Actualiza stock en almacén
   - Calcula costo según PEPS
   - Actualiza kardex
   - Notifica a residente y compras
```

### Flujo 3: Salida de Material a Obra

```
1. [Residente] Solicita material desde web
   - Selecciona partida/frente de obra
   - Especifica materiales y cantidades
   - Envía solicitud a almacenista

2. [Almacenista] Recibe solicitud en app móvil
   - Notificación push
   - Verifica existencias disponibles
   - Aprueba o rechaza solicitud

3. [Almacenista] Prepara material
   - Ubica material en almacén
   - Prepara cantidad solicitada
   - Registra salida en app móvil

4. [Almacenista] Entrega material
   - Selecciona quien recibe
   - Captura firma digital
   - Toma foto de evidencia
   - Confirma salida

5. [Sistema] Registra consumo
   - Genera movimiento de salida
   - Actualiza stock de almacén
   - Vincula con partida presupuestal
   - Actualiza consumo vs presupuesto
   - Actualiza kardex
   - Notifica a residente
```

---

## Indicadores Clave (KPIs)

### KPIs Operativos

| Métrica | Descripción | Objetivo | Fórmula |
|---------|-------------|----------|---------|
| **Tiempo aprobación requisiciones** | Tiempo promedio de aprobación | < 24 horas | AVG(fecha_aprobacion - fecha_solicitud) |
| **Tasa rechazo requisiciones** | Porcentaje de requisiciones rechazadas | < 10% | (rechazadas / total) × 100 |
| **Cumplimiento entregas** | Órdenes entregadas a tiempo | > 90% | (entregadas_a_tiempo / total) × 100 |
| **Exactitud inventario** | Diferencia físico vs sistema | > 95% | (1 - ABS(diferencia) / stock_sistema) × 100 |
| **Rotación inventario** | Veces que rota el inventario | > 2 veces/mes | costo_ventas / inventario_promedio |
| **Valor inmovilizado** | Material sin movimiento > 90 días | < 5% del total | valor_sin_movimiento / valor_total × 100 |

### KPIs Financieros

| Métrica | Descripción | Objetivo |
|---------|-------------|----------|
| **Presupuesto comprometido** | Monto en órdenes pendientes | Visibilidad 100% |
| **Desviación vs presupuesto** | Diferencia consumo real vs presupuestado | ± 5% |
| **Ahorro en compras** | Por comparación de cotizaciones | > 5% |
| **Costo de mermas** | Valor de desperdicios y ajustes | < 2% |

---

## Documentos Relacionados

### Requerimientos Funcionales
- [RF-COMP-001: Requisiciones de Material](./requerimientos/RF-PURCH-001-catalogo-proveedores.md)
- [RF-COMP-002: Órdenes de Compra](./requerimientos/RF-PURCH-002-requisiciones-ordenes-compra.md)
- [RF-COMP-003: Almacenes por Obra](./requerimientos/RF-PURCH-003-almacenes-inventarios.md)
- [RF-COMP-004: Movimientos de Inventario](./requerimientos/RF-PURCH-004-kardex-alertas.md)

### Especificaciones Técnicas
- [ET-PURCH-001: Implementación de Proveedores](./especificaciones/ET-PURCH-001-implementacion-proveedores.md)
- [ET-PURCH-002: Implementación de Requisiciones y OCs](./especificaciones/ET-PURCH-002-implementacion-requisiciones.md)
- [ET-PURCH-003: Implementación de Almacenes](./especificaciones/ET-PURCH-003-implementacion-almacenes.md)
- [ET-PURCH-004: Implementación de Kárdex y Alertas](./especificaciones/ET-PURCH-004-implementacion-kardex-alertas.md)

### Historias de Usuario
- [US-PURCH-001: Registro de Proveedor](./historias-usuario/US-PURCH-001-registro-proveedor.md)
- [US-PURCH-002: Solicitar Cotizaciones (RFQ)](./historias-usuario/US-PURCH-002-solicitud-cotizaciones.md)
- [US-PURCH-003: Crear Requisición desde Obra](./historias-usuario/US-PURCH-003-crear-requisicion-obra.md)
- [US-PURCH-004: Aprobar y Generar Orden de Compra](./historias-usuario/US-PURCH-004-aprobar-generar-orden-compra.md)
- [US-PURCH-005: Recibir Material en Almacén](./historias-usuario/US-PURCH-005-recibir-material-almacen.md)
- [US-PURCH-006: Control de Almacenes y Movimientos](./historias-usuario/US-PURCH-006-control-almacenes-movimientos.md)
- [US-PURCH-007: Kárdex y Análisis de Consumo](./historias-usuario/US-PURCH-007-kardex-analisis-consumo.md)
- [US-PURCH-008: Dashboard de Inventarios y Alertas](./historias-usuario/US-PURCH-008-dashboard-inventarios-alertas.md)

### Otros Documentos
- [RESUMEN-EPICA-MAI-004.md](./RESUMEN-EPICA-MAI-004.md) - Resumen ejecutivo completo
- [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz de trazabilidad
- [EPIC-MAI-019: Apps Móviles](../../08-epicas/EPIC-MAI-019-mobile-apps.md) - Detalle de MOB-002

---

## Puntos Críticos

1. **Sincronización offline-online (App Móvil)** → Pérdida de datos si falla sincronización
2. **Validación presupuestal** → Requisiciones sin presupuesto generan paros de obra
3. **Exactitud de inventarios** → Diferencias afectan decisiones de compra
4. **Cálculo de costos PEPS** → Errores impactan valuación contable
5. **Control de aprobaciones** → Flujo roto puede generar compras no autorizadas
6. **Alertas de stock mínimo** → Fallas en alertas causan faltantes de material

---

## Roadmap de Implementación

### Sprint 11 (13 SP) - Proveedores y Cotizaciones
- US-PURCH-001: Registro de Proveedor (5 SP)
- US-PURCH-002: Solicitar Cotizaciones RFQ (8 SP)

### Sprint 12 (18 SP) - Requisiciones y OCs
- US-PURCH-003: Crear Requisición desde Obra (5 SP)
- US-PURCH-004: Aprobar y Generar Orden de Compra (8 SP)
- US-PURCH-005: Recibir Material en Almacén (5 SP)

### Sprint 13 (12 SP) - Almacenes y Kárdex
- US-PURCH-006: Control de Almacenes y Movimientos (7 SP)
- US-PURCH-007: Kárdex y Análisis de Consumo (5 SP)

### Sprint 14 (5 SP) - Dashboard y Alertas
- US-PURCH-008: Dashboard de Inventarios y Alertas (5 SP)

**Total:** 48 Story Points | 8 semanas | 4 sprints

---

## Roles y Permisos

| Rol | Permisos |
|-----|----------|
| **Residente de Obra** | Crear requisiciones, solicitar salidas, consultar inventario |
| **Superintendente** | Aprobar requisiciones, consultar órdenes, ver reportes |
| **Jefe de Compras** | Crear/editar órdenes, gestionar proveedores, aprobar requisiciones |
| **Almacenista** | Gestionar almacén, registrar entradas/salidas, conteos físicos |
| **Jefe de Almacén** | Todos los permisos de almacenista + transferencias + ajustes |
| **Contador** | Consultar valuación, kardex, reportes financieros |
| **Director** | Vista ejecutiva, aprobación de ajustes mayores, todos los reportes |

---

**Generado:** 2025-12-06
**Estado:** Completo
**Mantenedores:** @tech-lead @backend-team @frontend-team @mobile-team
