32 KiB
_MAP: MAI-004 - Compras e Inventarios
Epica: MAI-004 Nombre: Compras e Inventarios Fase: 1 - Alcance Inicial Presupuesto: $22,000 MXN Story Points: 48 SP Estado: Documentado Sprints: Sprint 11-14 (Semanas 16.5-22) Prioridad: P1 - Alta Ultima actualizacion: 2025-12-06
Proposito
Implementar sistema completo de gestion de compras e inventarios para construccion con:
- Catalogo de proveedores con calificacion automatica
- Cotizaciones (RFQ) multi-proveedor con comparativo
- Requisiciones y ordenes de compra con flujos de aprobacion
- Inventarios multi-almacen con valorizacion PEPS
- Kardex y analisis de consumo vs presupuesto
- Integracion con app movil MOB-002 (Almacenista)
Justificacion: Control eficiente de compras e inventarios es critico para optimizar costos, prevenir paros de obra y mantener exactitud en stock desde el inicio de cualquier proyecto.
Reutilizacion Core: 80% (concepto de gestion de inventarios adaptado)
Contenido
Requerimientos Funcionales (4)
| ID | Archivo | Titulo | Estado |
|---|---|---|---|
| RF-PURCH-001 | RF-PURCH-001-catalogo-proveedores.md | Catalogo de Proveedores y Cotizaciones | Documentado |
| RF-PURCH-002 | RF-PURCH-002-requisiciones-ordenes-compra.md | Requisiciones y Ordenes de Compra | Documentado |
| RF-PURCH-003 | RF-PURCH-003-almacenes-inventarios.md | Almacenes y Control de Inventarios | Documentado |
| RF-PURCH-004 | RF-PURCH-004-kardex-alertas.md | Kardex y Alertas de Stock | Documentado |
Especificaciones Tecnicas (4)
| ID | Archivo | Titulo | RF | Estado |
|---|---|---|---|---|
| ET-PURCH-001 | ET-PURCH-001-implementacion-proveedores.md | Implementacion de Proveedores | RF-PURCH-001 | Documentado |
| ET-PURCH-002 | ET-PURCH-002-implementacion-requisiciones-ordenes.md | Implementacion de Requisiciones y OCs | RF-PURCH-002 | Documentado |
| ET-PURCH-003 | ET-PURCH-003-implementacion-almacenes.md | Implementacion de Almacenes | RF-PURCH-003 | Documentado |
| ET-PURCH-004 | ET-PURCH-004-implementacion-kardex-alertas.md | Implementacion de Kardex y Alertas | RF-PURCH-004 | Documentado |
Historias de Usuario (8)
| ID | Archivo | Titulo | SP | Sprint | Estado |
|---|---|---|---|---|---|
| US-PURCH-001 | US-PURCH-001-registro-proveedor.md | Registro de Proveedor | 5 | 11 | Documentado |
| US-PURCH-002 | US-PURCH-002-solicitud-cotizaciones.md | Solicitar Cotizaciones (RFQ) | 8 | 11 | Documentado |
| US-PURCH-003 | US-PURCH-003-crear-requisicion-obra.md | Crear Requisicion desde Obra | 5 | 12 | Documentado |
| US-PURCH-004 | US-PURCH-004-aprobar-generar-orden-compra.md | Aprobar y Generar Orden de Compra | 8 | 12 | Documentado |
| US-PURCH-005 | US-PURCH-005-recibir-material-almacen.md | Recibir Material en Almacen | 5 | 12 | Documentado |
| US-PURCH-006 | US-PURCH-006-control-almacenes-movimientos.md | Control de Almacenes y Movimientos | 7 | 13 | Documentado |
| US-PURCH-007 | US-PURCH-007-kardex-analisis-consumo.md | Kardex y Analisis de Consumo | 5 | 13 | Documentado |
| US-PURCH-008 | US-PURCH-008-dashboard-inventarios-alertas.md | Dashboard de Inventarios y Alertas | 5 | 14 | Documentado |
Total Story Points: 48 SP
Distribucion por Sprint:
- Sprint 11 (13 SP): Proveedores + RFQ + Comparativo
- Sprint 12 (18 SP): Requisiciones + OC + Recepcion
- Sprint 13 (12 SP): Almacenes + Kardex
- Sprint 14 (5 SP): Dashboard + Alertas
Implementacion
Inventarios de trazabilidad:
- TRACEABILITY.yml - Matriz completa de trazabilidad
- DATABASE.yml - Objetos de base de datos
- BACKEND.yml - Modulos backend
- FRONTEND.yml - Componentes frontend
- MOBILE.yml - Especificaciones de app movil MOB-002
Pruebas
Documentacion de testing:
- TEST-PLAN.md - Plan de pruebas
- TEST-CASES.md - Casos de prueba
- INTEGRATION-TESTS.md - Tests de integracion
Referencias
- README: README.md - Descripcion detallada de la epica
- Resumen: RESUMEN-EPICA-MAI-004.md - Resumen ejecutivo completo
- Fase 1: ../README.md - Informacion de la fase completa
- Roadmap: ../ROADMAP-DETALLADO.md - Sprints 11-14
Metricas
| Metrica | Valor |
|---|---|
| Presupuesto estimado | $22,000 MXN |
| Presupuesto target | $22,000 MXN ±5% |
| Story Points estimados | 48 SP |
| Duracion estimada | 4 sprints (8 semanas) |
| Reutilizacion Core | 80% |
| Integraciones externas | 0 (internas: 4) |
| RF a implementar | 4/4 |
| ET a implementar | 4/4 |
| US a completar | 8/8 |
Modulos Afectados
Base de Datos
Schemas: purchasing_management, inventory_management
Tablas principales (19 tablas):
purchasing_management:
suppliers- Catalogo de proveedoressupplier_ratings- Calificaciones de proveedoresrfqs- Solicitudes de cotizacionquotes- Cotizaciones recibidasrequisitions- Requisiciones de materialrequisition_items- Detalle de requisicionesrequisition_approvals- Flujo de aprobacionespurchase_orders- Ordenes de comprapurchase_order_items- Detalle de OCspurchase_order_receipts- Recepciones de materialinvoices- Facturas de proveedores
inventory_management:
warehouses- Almacenes por obrawarehouse_locations- Ubicaciones en almaceninventory_stock- Existencias actualesinventory_lots- Lotes para PEPSinventory_movements- Movimientos de inventariostock_alerts- Alertas de inventarioconsumption_analysis- Analisis de consumomaterial_stock_config- Configuracion de umbrales
Funciones y Triggers:
- Calculo de scoring de proveedores (0-100)
- Valorizacion PEPS automatica
- Actualizacion de stock en movimientos
- Generacion automatica de alertas
- Calculo de consumo vs presupuesto
ENUMs:
supplier_status(active, suspended, blacklisted)rfq_status(draft, sent, closed)requisition_status(draft, sent, approved, rejected, converted)purchase_order_status(draft, sent, confirmed, received_partial, received_total, cancelled)movement_type(entry, exit, transfer, adjustment)alert_type(stock_min, reorder_point, overconsumption, no_movement, stock_max)
Backend
Modulo: purchases + inventory
Path: apps/backend/src/modules/
Services:
purchases:
SupplierService- CRUD y calificacion de proveedoresRFQService- Gestion de cotizacionesQuoteService- Comparacion y scoringRequisitionService- Requisiciones con aprobacionesPurchaseOrderService- Ordenes de compra y recepcionesInvoiceService- Registro de facturas
inventory:
WarehouseService- Gestion de almacenesInventoryService- Control de stockMovementService- Entradas, salidas, traspasosKardexService- Trazabilidad de movimientosAlertService- Alertas inteligentesAnalysisService- Consumo vs presupuesto
CRON Jobs:
- Analisis diario de consumo
- Generacion de alertas automaticas
- Actualizacion de calificaciones de proveedores
- Deteccion de materiales sin movimiento
Frontend Web
Features: purchases, inventory
Path: apps/frontend/src/features/
Componentes principales:
Proveedores y Cotizaciones:
SuppliersListView- Lista de proveedoresSupplierFormModal- Alta/edicion de proveedorSupplierDetailView- Detalle con historialRFQFormModal- Crear solicitud de cotizacionQuoteComparisonView- Comparativo visual de cotizacionesSupplierRatingWidget- Calificacion 0-100
Requisiciones y OCs:
RequisitionsListView- Lista de requisicionesRequisitionFormModal- Crear requisicionRequisitionApprovalPanel- Panel de aprobacionesPurchaseOrdersListView- Lista de ordenesPurchaseOrderFormModal- Generar OCPurchaseOrderPDFPreview- Vista previa de PDFReceiptModal- Registro de recepciones
Inventarios:
WarehousesListView- Lista de almacenesWarehouseDetailView- Detalle con ubicacionesInventoryStockTable- Existencias actualesMovementFormModal- Registro de movimientosKardexView- Trazabilidad por materialStockAlertsPanel- Panel de alertasConsumptionAnalysisView- Analisis vs presupuestoInventoryDashboard- Dashboard ejecutivo
Guards: AuthGuard, RoleGuard (permisos especificos)
App Movil (React Native)
App: MOB-002 - Almacenista Plataformas: Android, iOS Framework: React Native + Expo
Features: warehouse-operations
Path: apps/mobile/almacen/src/features/
Pantallas principales:
-
Login
- Autenticacion con credenciales ERP
- Modo offline con cache de credenciales
-
Selector de Obra/Almacen
- Lista de obras asignadas al almacenista
- Seleccion de almacen activo
-
Dashboard de Almacen
- Resumen de existencias
- Solicitudes de salida pendientes
- Alertas de stock bajo
- Recepciones programadas
-
Recepcion de Material
- Busqueda de orden de compra
- Escaneo de codigo de barras/QR
- Registro de cantidad recibida
- Captura de foto de evidencia
- Asignacion de ubicacion
- Firma digital del proveedor
-
Salida de Material
- Lista de solicitudes pendientes
- Verificacion de existencias
- Registro de cantidad entregada
- Firma digital del receptor
- Vinculacion con partida presupuestal
-
Consulta de Inventario
- Busqueda de materiales
- Existencias en tiempo real
- Ubicacion en almacen
- Movimientos recientes
-
Inventario Fisico
- Modo de conteo ciclico
- Escaneo de materiales
- Registro de cantidades contadas
- Generacion de diferencias
-
Transferencias
- Transferencias entre almacenes
- Seleccion de destino
- Registro de salida/entrada
- Tracking de transferencias en transito
-
Historial de Movimientos
- Listado de movimientos del dia
- Filtros por tipo de movimiento
- Estado de sincronizacion
- Reenvio de movimientos fallidos
Funcionalidades especiales:
- Modo Offline: SQLite local con cola de sincronizacion
- Escaner: Codigos de barras y QR (react-native-camera)
- Firma Digital: Canvas para captura de firmas
- Geolocalizacion: GPS en movimientos
- Fotos: Captura de evidencia fotografica
- Push Notifications: Alertas de solicitudes pendientes
- Sincronizacion: Background sync automatica
Tecnologias:
- React Native 0.73+
- Expo 50
- WatermelonDB (offline storage)
- Zustand (state management)
- Axios (API sync)
- expo-camera (escaneo)
- expo-location (GPS)
- Firebase Cloud Messaging (push)
Validaciones en App:
| Validacion | Descripcion | Accion si falla |
|---|---|---|
| Existencias | Verificar stock disponible antes de salida | Bloquear salida, mostrar disponible |
| Orden de compra | Validar OC activa en recepciones | Advertencia, permitir recepcion manual |
| Ubicacion | Material debe tener ubicacion asignada | Solicitar ubicacion antes de guardar |
| Cantidades | No permitir cantidades negativas | Validacion en formulario |
| Firma digital | Requerir firma en entregas | Bloquear guardado sin firma |
Modo Offline:
Capacidades:
- Almacenar hasta 1000 movimientos en cola
- Cache de inventario actualizado diariamente
- Cache de ordenes de compra pendientes
- Indicador visual de movimientos pendientes de sincronizacion
Sincronizacion:
- Automatica al detectar conexion
- Manual por boton "Sincronizar ahora"
- Resolucion de conflictos (ultimo gana)
- Retry automatico con backoff exponencial
Flujo de Documentacion RF → ET → US → Codigo
Ejemplo: Requisiciones de Material
RF-PURCH-002: Requisiciones y Ordenes de Compra
↓
ET-PURCH-002: Implementacion de Requisiciones y OCs
├─ Schemas SQL (requisitions, requisition_items, requisition_approvals)
├─ TypeORM Entities (Requisition, RequisitionItem, RequisitionApproval)
├─ Services (RequisitionService con logica de aprobaciones)
├─ Controllers (RequisitionController con endpoints REST)
└─ React Components (RequisitionFormModal, RequisitionApprovalPanel)
↓
US-PURCH-003: Crear Requisicion desde Obra (5 SP)
├─ Frontend: RequisitionFormModal con selector de materiales
├─ Backend: POST /api/v1/requisiciones
├─ Database: INSERT en requisitions + requisition_items
└─ Notificacion: Email al aprobador nivel 1
↓
US-PURCH-004: Aprobar y Generar Orden de Compra (8 SP)
├─ Frontend: RequisitionApprovalPanel + PurchaseOrderFormModal
├─ Backend: POST /api/v1/requisiciones/:id/aprobar
├─ Backend: POST /api/v1/ordenes-compra (conversion automatica)
├─ Database: UPDATE requisition_status, INSERT purchase_orders
└─ PDF: Generacion de OC para proveedor
↓
Codigo Implementado:
├─ apps/backend/src/modules/purchases/
│ ├─ entities/requisition.entity.ts
│ ├─ services/requisition.service.ts
│ ├─ controllers/requisition.controller.ts
│ └─ dto/create-requisition.dto.ts
├─ apps/frontend/src/features/purchases/
│ ├─ components/RequisitionFormModal.tsx
│ ├─ components/RequisitionApprovalPanel.tsx
│ └─ hooks/useRequisitions.ts
└─ apps/database/migrations/
└─ 003_create_requisitions_schema.sql
Ejemplo: Movimientos de Inventario (App Movil)
RF-PURCH-003: Almacenes y Control de Inventarios
+
RF-PURCH-004: Kardex y Alertas de Stock
↓
ET-PURCH-003: Implementacion de Almacenes
+
ET-PURCH-004: Implementacion de Kardex y Alertas
├─ Schemas SQL (warehouses, inventory_stock, inventory_movements, inventory_lots)
├─ TypeORM Entities (Warehouse, InventoryStock, InventoryMovement)
├─ Services (InventoryService, MovementService, AlertService)
├─ Triggers (actualizacion automatica de stock con PEPS)
└─ API Endpoints para app movil
↓
US-PURCH-005: Recibir Material en Almacen (5 SP)
├─ App Movil: ReceptionScreen con escaneo QR
├─ Backend: POST /api/v1/inventario/entradas
├─ Database: INSERT inventory_movements + UPDATE inventory_stock
├─ PEPS: Creacion de nuevo lote (inventory_lots)
└─ Notificacion: Push al residente de obra
↓
US-PURCH-006: Control de Almacenes y Movimientos (7 SP)
├─ App Movil: MovementsScreen con tipos (entrada/salida/traspaso)
├─ Frontend Web: InventoryStockTable + MovementFormModal
├─ Backend: API completa de movimientos
├─ Database: Triggers para stock automatico
└─ Alertas: Generacion de stock_alerts si < umbral
↓
Codigo Implementado:
├─ apps/backend/src/modules/inventory/
│ ├─ entities/warehouse.entity.ts
│ ├─ entities/inventory-movement.entity.ts
│ ├─ services/inventory.service.ts
│ ├─ services/movement.service.ts
│ └─ services/alert.service.ts
├─ apps/frontend/src/features/inventory/
│ ├─ components/InventoryStockTable.tsx
│ ├─ components/MovementFormModal.tsx
│ └─ components/StockAlertsPanel.tsx
└─ apps/mobile/almacen/src/features/warehouse/
├─ screens/ReceptionScreen.tsx
├─ screens/MovementsScreen.tsx
├─ screens/InventoryScreen.tsx
└─ services/offline-sync.service.ts
Integracion con App Movil MOB-002 (Almacenista)
Arquitectura de Integracion
┌──────────────────────────────────────────────────────────────┐
│ Backend (NestJS) │
│ │
│ ┌────────────────────┐ ┌─────────────────────┐ │
│ │ PurchaseController │ │ InventoryController │ │
│ └────────┬───────────┘ └──────────┬──────────┘ │
│ │ │ │
│ ┌────────▼───────────┐ ┌─────────▼──────────┐ │
│ │ PurchaseOrderService│ │ InventoryService │ │
│ └────────┬───────────┘ └──────────┬─────────┘ │
│ │ │ │
│ ┌────────▼──────────────────────────────▼─────────┐ │
│ │ PostgreSQL Database │ │
│ │ - purchasing_management schema │ │
│ │ - inventory_management schema │ │
│ └─────────────────────────────────────────────────┘ │
└──────────────────────────┬───────────────────────────────────┘
│
│ REST API
│ WebSocket (notificaciones)
│
┌──────────────────────────▼───────────────────────────────────┐
│ App Movil MOB-002 (React Native) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Reception │ │ Exit │ │ Inventory │ │
│ │ Screen │ │ Screen │ │ Screen │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ ┌──────▼─────────────────▼─────────────────▼───────┐ │
│ │ Movement Service (React Native) │ │
│ │ - API calls con retry │ │
│ │ - Offline queue management │ │
│ └──────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────────────────▼───────────────────────────┐ │
│ │ WatermelonDB (SQLite - Offline Storage) │ │
│ │ - movements_queue (pendientes sincronizacion) │ │
│ │ - inventory_cache (datos offline) │ │
│ │ - purchase_orders_cache │ │
│ └──────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
API Endpoints para App Movil
Autenticacion:
POST /api/v1/auth/login
POST /api/v1/auth/refresh-token
Recepciones de Material:
GET /api/v1/ordenes-compra/pendientes-recepcion
GET /api/v1/ordenes-compra/:id
POST /api/v1/inventario/entradas
POST /api/v1/inventario/entradas/:id/upload-photo
Salidas de Material:
GET /api/v1/inventario/solicitudes-salida
POST /api/v1/inventario/salidas
POST /api/v1/inventario/solicitudes-salida/:id/aprobar
POST /api/v1/inventario/solicitudes-salida/:id/rechazar
Consulta de Inventario:
GET /api/v1/inventario/existencias?almacen_id=:id
GET /api/v1/inventario/buscar?q=:query
GET /api/v1/inventario/ubicacion/:material_id
Transferencias:
POST /api/v1/inventario/transferencias
GET /api/v1/inventario/transferencias/pendientes
POST /api/v1/inventario/transferencias/:id/confirmar-recepcion
Inventario Fisico:
POST /api/v1/inventario/conteo-fisico
POST /api/v1/inventario/conteo-fisico/:id/ajustar
GET /api/v1/inventario/diferencias
Sincronizacion:
POST /api/v1/sync/movements/batch
GET /api/v1/sync/inventory/delta?last_sync=:timestamp
Flujo de Sincronizacion Offline
sequenceDiagram
participant App as App Movil
participant Queue as Cola Local
participant API as Backend API
participant DB as PostgreSQL
Note over App: Sin conexion a internet
App->>Queue: Guardar movimiento localmente
Queue-->>App: Confirmacion local
Note over App: Conexion restaurada
App->>App: Detectar conexion
App->>Queue: Obtener movimientos pendientes
Queue-->>App: Lista de movimientos
loop Por cada movimiento
App->>API: POST /api/v1/sync/movements/batch
API->>DB: Guardar movimiento
DB-->>API: Confirmacion
API-->>App: Success (movement_id)
App->>Queue: Marcar como sincronizado
end
App->>API: GET /api/v1/sync/inventory/delta
API->>DB: Obtener cambios desde last_sync
DB-->>API: Delta de inventario
API-->>App: Inventario actualizado
App->>App: Actualizar cache local
Resolucion de Conflictos
| Escenario | Estrategia | Accion |
|---|---|---|
| Mismo movimiento duplicado | Detectar por UUID generado en app | Rechazar duplicado, notificar en app |
| Stock insuficiente en salida | Validar en servidor | Rechazar movimiento, actualizar cache |
| Material eliminado | Validar existencia en servidor | Rechazar movimiento, sincronizar catalogo |
| Orden de compra cancelada | Validar estado en servidor | Rechazar recepcion, notificar en app |
| Cambios concurrentes de stock | Ultimo movimiento gana | Aplicar movimiento, recalcular stock |
Alertas Inteligentes
Tipos de Alertas
-
Stock Minimo (alert_type:
stock_min)- Trigger:
stock_actual < umbral_minimo - Severidad: Alta
- Accion: Notificar a almacenista + compras
- Trigger:
-
Punto de Reorden (alert_type:
reorder_point)- Trigger:
stock_actual <= punto_reorden - Severidad: Media
- Accion: Sugerir crear requisicion
- Trigger:
-
Sobreconsumo (alert_type:
overconsumption)- Trigger:
consumo_real > presupuesto * 1.05 - Severidad: Alta
- Accion: Notificar a residente + jefe de proyecto
- Trigger:
-
Sin Movimiento (alert_type:
no_movement)- Trigger: Materiales sin movimiento en 90 dias
- Severidad: Baja
- Accion: Sugerir transferencia o venta
-
Stock Maximo (alert_type:
stock_max)- Trigger:
stock_actual > umbral_maximo - Severidad: Media
- Accion: Alertar de exceso de inventario
- Trigger:
Configuracion de Umbrales
Por defecto:
- Stock minimo: 10% del presupuestado
- Punto de reorden: 20% del presupuestado
- Stock maximo: 150% del presupuestado
Configurable por:
- Material especifico
- Almacen
- Obra
Testing
Unit Tests (Backend)
describe('InventoryService', () => {
it('should calculate PEPS cost correctly')
it('should prevent negative stock exits')
it('should generate stock alerts when below threshold')
it('should update stock automatically on movements')
})
describe('RequisitionService', () => {
it('should validate budget availability')
it('should handle approval workflow correctly')
it('should convert requisition to purchase order')
})
describe('PurchaseOrderService', () => {
it('should calculate totals with taxes')
it('should generate PDF correctly')
it('should track partial receptions')
})
E2E Tests (App Movil)
describe('Warehouse Operations E2E', () => {
it('should complete material reception flow')
it('should process material exit request')
it('should handle offline mode correctly')
it('should sync pending movements when online')
it('should scan QR code and fetch material')
})
Integration Tests
describe('Purchase to Inventory Integration', () => {
it('should create inventory entry from PO reception')
it('should update stock with PEPS valuation')
it('should link exit to budget item')
it('should generate alerts on low stock')
})
Riesgos Especificos
| Riesgo | Probabilidad | Impacto | Mitigacion |
|---|---|---|---|
| Complejidad de PEPS | Media | Alto | Triggers bien probados, stored procedures |
| Performance con miles de movimientos | Media | Medio | Indices apropiados, paginacion, archivado |
| Sincronizacion offline falla | Media | Alto | Cola persistente, retry automatico, logs detallados |
| Conflictos de stock concurrente | Alta | Medio | Validaciones en servidor, locks transaccionales |
| Adopcion de app movil por almacenistas | Media | Alto | UI simple, capacitacion, modo offline robusto |
Checklist de Implementacion
Backend
- Schemas SQL completos (purchasing_management, inventory_management)
- TypeORM entities con relaciones
- Services con logica de negocio
- Triggers para PEPS y stock automatico
- API REST completa
- Generacion de PDFs (ordenes de compra)
- Sistema de notificaciones (email + in-app)
- CRON jobs para analisis y alertas
- Tests unitarios >80% coverage
Frontend Web
- Gestion de proveedores y calificaciones
- RFQ y comparativo de cotizaciones
- Requisiciones con flujo de aprobacion
- Ordenes de compra con PDFs
- Gestion de almacenes y ubicaciones
- Control de movimientos de inventario
- Kardex detallado por material
- Dashboard de inventarios con graficas
- Panel de alertas
- Analisis de consumo vs presupuesto
App Movil MOB-002
- Login y autenticacion
- Selector de obra/almacen
- Recepcion de material con escaneo QR
- Procesamiento de solicitudes de salida
- Consulta de inventario en tiempo real
- Inventario fisico/conteo ciclico
- Transferencias entre almacenes
- Captura de firma digital
- Modo offline con WatermelonDB
- Cola de sincronizacion automatica
- Push notifications
- UI optimizada para campo
Database
- Schemas y tablas creadas
- Funciones de scoring y PEPS
- Triggers de stock automatico
- Triggers de alertas
- Indices optimizados
- Politicas RLS para multi-tenancy
Testing
- Unit tests backend >80%
- E2E tests de app movil
- Integration tests flujo completo
- Tests de sincronizacion offline
- Tests de PEPS con multiples lotes
- Performance tests con volumen alto
Despliegue
- Variables de entorno configuradas
- Deploy de app a stores (TestFlight, Play Store)
- Configuracion de push notifications
- Monitoreo de sincronizacion
- Logs de errores (Sentry)
- Documentacion de API
- Manual de usuario de app movil
Quick Links
Documentacion Tecnica
- Matriz de trazabilidad: TRACEABILITY.yml
- Modelo de datos: DATABASE.yml
- Especificaciones backend: BACKEND.yml
- Especificaciones app movil: MOBILE.yml
Historias de Usuario por Funcionalidad
Proveedores y Cotizaciones:
- US-PURCH-001 - Registro de Proveedor
- US-PURCH-002 - Solicitar Cotizaciones (RFQ)
Requisiciones y Ordenes de Compra:
- US-PURCH-003 - Crear Requisicion desde Obra
- US-PURCH-004 - Aprobar y Generar Orden de Compra
- US-PURCH-005 - Recibir Material en Almacen
Almacenes e Inventarios:
- US-PURCH-006 - Control de Almacenes y Movimientos
- US-PURCH-007 - Kardex y Analisis de Consumo
- US-PURCH-008 - Dashboard de Inventarios y Alertas
Requerimientos Funcionales por Subsistema
Compras:
- RF-PURCH-001 - Catalogo de Proveedores y Cotizaciones
- RF-PURCH-002 - Requisiciones y Ordenes de Compra
Inventarios:
- RF-PURCH-003 - Almacenes y Control de Inventarios
- RF-PURCH-004 - Kardex y Alertas de Stock
Especificaciones Tecnicas
- ET-PURCH-001 - Implementacion de Proveedores
- ET-PURCH-002 - Implementacion de Requisiciones y OCs
- ET-PURCH-003 - Implementacion de Almacenes
- ET-PURCH-004 - Implementacion de Kardex y Alertas
Lessons Learned (a documentar post-implementacion)
- PEPS requiere triggers robustos: La valorizacion automatica es compleja, requiere testing exhaustivo
- Modo offline es critico: Obras no siempre tienen conexion, cola de sincronizacion debe ser solida
- UX simple en app movil: Almacenistas necesitan flujos rapidos y directos
- Alertas deben ser accionables: No solo notificar, sino sugerir acciones concretas
- Integracion con presupuestos clave: Vinculacion temprana con MAI-002 evita retrabajo
Siguiente Paso
Iniciar implementacion comenzando por:
- Setup de schemas de base de datos
- Backend de proveedores y cotizaciones (Sprint 11)
- Frontend de requisiciones y ordenes de compra (Sprint 12)
- App movil MOB-002 en paralelo con inventarios (Sprint 13-14)
Generado: 2025-12-06 Mantenedores: @tech-lead @backend-team @mobile-team @inventory-team Estado: Documentado Prioridad: P1 - Alta para control de costos y prevencion de paros