783 lines
32 KiB
Markdown
783 lines
32 KiB
Markdown
# 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
|