# _MAP: MAE-015 - Activos, Maquinaria y Mantenimiento **Épica:** MAE-015 **Nombre:** Activos, Maquinaria y Mantenimiento **Fase:** 2 - Enterprise Básico **Presupuesto:** $40,000 MXN **Story Points:** 70 SP **Estado:** 📝 A crear **Sprint:** Sprint 8-9 (Semanas 15-18) **Última actualización:** 2025-11-17 **Prioridad:** P1 --- ## 📋 Propósito Gestión completa de activos fijos, maquinaria pesada, equipo y vehículos con control de mantenimiento: - Catálogo de activos (maquinaria pesada, equipo, vehículos) - Control de ubicación y asignación por obra - Mantenimiento preventivo y correctivo programado - Órdenes de trabajo de mantenimiento - Costeo TCO (Total Cost of Ownership) - Localización GPS en tiempo real (IoT opcional) **Integración clave:** Se vincula con Proyectos (MAI-002), Finanzas (MAE-014), Compras (MAI-004) y RRHH (MAI-007). --- ## 📁 Contenido ### Requerimientos Funcionales (Estimados: 6) | ID | Título | Estado | |----|--------|--------| | RF-AST-001 | Catálogo de activos y registro | 📝 A crear | | RF-AST-002 | Control de ubicación y asignación a obras | 📝 A crear | | RF-AST-003 | Mantenimiento preventivo programado | 📝 A crear | | RF-AST-004 | Órdenes de trabajo de mantenimiento correctivo | 📝 A crear | | RF-AST-005 | Costeo por hora y TCO | 📝 A crear | | RF-AST-006 | Rastreo GPS y telemetría (IoT) | 📝 A crear | ### Especificaciones Técnicas (Estimadas: 6) | ID | Título | RF | Estado | |----|--------|----|--------| | ET-AST-001 | Modelo de datos de activos y deprecación | RF-AST-001 | 📝 A crear | | ET-AST-002 | Sistema de transferencias y asignaciones | RF-AST-002 | 📝 A crear | | ET-AST-003 | Motor de programación de mantenimientos | RF-AST-003 | 📝 A crear | | ET-AST-004 | Sistema de órdenes de trabajo | RF-AST-004 | 📝 A crear | | ET-AST-005 | Cálculo de TCO y costeo | RF-AST-005 | 📝 A crear | | ET-AST-006 | Integración con dispositivos GPS/IoT | RF-AST-006 | 📝 A crear | ### Historias de Usuario (Estimadas: 14) | ID | Título | SP | Estado | |----|--------|----|--------| | US-AST-001 | Registrar activo nuevo (maquinaria/vehículo) | 5 | 📝 A crear | | US-AST-002 | Asignar activo a obra | 5 | 📝 A crear | | US-AST-003 | Transferir activo entre obras | 5 | 📝 A crear | | US-AST-004 | Configurar plan de mantenimiento preventivo | 5 | 📝 A crear | | US-AST-005 | Generar orden de mantenimiento automática | 5 | 📝 A crear | | US-AST-006 | Crear orden de trabajo correctivo | 5 | 📝 A crear | | US-AST-007 | Ejecutar checklist de mantenimiento | 5 | 📝 A crear | | US-AST-008 | Registrar costo de mantenimiento | 5 | 📝 A crear | | US-AST-009 | Calcular costo por hora de uso | 5 | 📝 A crear | | US-AST-010 | Calcular TCO de activo | 5 | 📝 A crear | | US-AST-011 | Rastrear ubicación GPS de activo | 5 | 📝 A crear | | US-AST-012 | Dashboard de activos y disponibilidad | 5 | 📝 A crear | | US-AST-013 | Reporte de utilización de activos | 5 | 📝 A crear | | US-AST-014 | Alertas de mantenimiento vencido | 5 | 📝 A crear | **Total Story Points:** 70 SP ### Implementación 📊 **Inventarios de trazabilidad:** - [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz completa de trazabilidad - [DATABASE.yml](./implementacion/DATABASE.yml) - Objetos de base de datos - [BACKEND.yml](./implementacion/BACKEND.yml) - Módulos backend - [FRONTEND.yml](./implementacion/FRONTEND.yml) - Componentes frontend ### Pruebas 📋 Documentación de testing: - [TEST-PLAN.md](./pruebas/TEST-PLAN.md) - Plan de pruebas - [TEST-CASES.md](./pruebas/TEST-CASES.md) - Casos de prueba --- ## 🔗 Referencias - **README:** [README.md](./README.md) - Descripción detallada de la épica - **Fase 2:** [../README.md](../README.md) - Información de la fase completa - **Módulo relacionado MVP:** Módulo 15 - Activos y Maquinaria (MVP-APP.md) --- ## 📊 Métricas | Métrica | Valor | |---------|-------| | **Presupuesto estimado** | $40,000 MXN | | **Story Points estimados** | 70 SP | | **Duración estimada** | 14 días | | **Reutilización GAMILIT** | 10% (funcionalidad nueva) | | **RF a implementar** | 6/6 | | **ET a implementar** | 6/6 | | **US a completar** | 14/14 | --- ## 🎯 Módulos Afectados ### Base de Datos - **Schema:** `assets` - **Tablas principales:** * `assets` - Catálogo de activos * `asset_assignments` - Asignaciones a obras * `maintenance_plans` - Planes de mantenimiento * `maintenance_schedules` - Programación de mantenimientos * `work_orders` - Órdenes de trabajo * `maintenance_history` - Historial de mantenimientos * `asset_costs` - Costos de operación y mantenimiento * `asset_locations` - Ubicaciones GPS (histórico) - **ENUMs:** * `asset_type` (heavy_machinery, light_equipment, vehicle, tool) * `asset_status` (active, in_maintenance, inactive, retired) * `maintenance_type` (preventive, corrective, predictive) * `work_order_status` (scheduled, in_progress, completed, cancelled) ### Backend - **Módulo:** `assets` - **Path:** `apps/backend/src/modules/assets/` - **Services:** AssetService, MaintenanceService, WorkOrderService, CostingService, GPSTrackingService - **Controllers:** AssetController, MaintenanceController, WorkOrderController - **Middlewares:** AssetAccessGuard, MaintenanceSchedulerJob ### Frontend - **Features:** `assets`, `maintenance` - **Path:** `apps/frontend/src/features/assets/` - **Componentes:** * AssetCatalog * AssetForm * AssetDetail * AssignmentManager * MaintenancePlanConfig * WorkOrderList * WorkOrderForm * MaintenanceChecklistExecutor * TCOCalculator * AssetLocationMap * AssetDashboard * UtilizationReport - **Stores:** assetStore, maintenanceStore, workOrderStore --- ## 🚜 Tipos de Activos | Categoría | Ejemplos | Costo típico | Vida útil | Mantenimiento | |-----------|----------|--------------|-----------|---------------| | **Maquinaria pesada** | Excavadoras, retroexcavadoras, grúas, revolvedoras | $500K-$2M | 10-15 años | Intensivo | | **Equipo ligero** | Vibradores, cortadoras, compactadoras, andamios | $10K-$100K | 5-8 años | Moderado | | **Vehículos** | Camiones, camionetas, pick-ups | $300K-$800K | 8-10 años | Regular | | **Herramienta especializada** | Equipo topográfico, equipos eléctricos | $5K-$50K | 3-5 años | Bajo | --- ## 📋 Ficha de Activo ```yaml asset: id: "AST-001" code: "EXC-001" name: "Excavadora Caterpillar 320D" type: "heavy_machinery" category: "Excavadoras" status: "active" acquisition: purchase_date: "2023-05-15" purchase_price: 1500000.00 # $1.5M MXN supplier: "Maquinaria del Bajío SA" invoice: "FAC-2023-5678" financing: "own" # own, leased, rented specifications: brand: "Caterpillar" model: "320D" year: 2023 serial_number: "CAT320D2023001234" engine: "Diesel C6.6" capacity: "20 toneladas" hours_rated: 10000 # Horas útiles estimadas accounting: asset_account: "1201-001" # Cuenta contable depreciation_method: "straight_line" # Línea recta useful_life_years: 10 salvage_value: 300000.00 # Valor de rescate accumulated_depreciation: 225000.00 # $225K (18 meses) book_value: 1275000.00 # $1.275M current_assignment: project_id: "PROJ-001" location: "Fraccionamiento Los Pinos - Etapa 1" assigned_date: "2025-10-01" assigned_to_operator: "OP-045" # Operador usage: hours_worked: 1800 # Horas acumuladas last_usage_date: "2025-11-17" avg_hours_per_month: 100 maintenance: last_preventive: "2025-10-15" next_preventive: "2025-12-15" # Cada 200 horas maintenance_plan_id: "PLAN-EXC-001" hours_since_maintenance: 180 ``` --- ## 🔧 Mantenimiento Preventivo ### Plan de Mantenimiento **Activo:** Excavadora CAT 320D **Código:** PLAN-EXC-001 | Actividad | Frecuencia | Última | Próxima | Responsable | |-----------|------------|--------|---------|-------------| | **Cambio de aceite motor** | 250 hrs | 1750 hrs | 2000 hrs | Mecánico | | **Cambio de filtros** | 250 hrs | 1750 hrs | 2000 hrs | Mecánico | | **Revisión de orugas** | 500 hrs | 1500 hrs | 2000 hrs | Mecánico | | **Lubricación general** | 100 hrs | 1700 hrs | 1800 hrs | 🔴 Vencido | Operador | | **Inspección hidráulica** | 1000 hrs | 1000 hrs | 2000 hrs | Mecánico | **Alertas:** - 🔴 Lubricación general vencida (1800 hrs alcanzadas) - 🟡 Cambio de aceite próximo (faltan 20 horas) --- ### Checklist de Mantenimiento **Orden de trabajo:** WO-2025-123 **Actividad:** Mantenimiento preventivo 2000 horas **Activo:** EXC-001 - Excavadora CAT 320D **Fecha:** 2025-11-20 ```yaml checklist: - task: "Drenar aceite de motor" completed: true technician: "Juan Pérez" time: "09:00" - task: "Reemplazar filtro de aceite" completed: true part_used: "Filtro CAT 1R-0750" quantity: 1 - task: "Llenar con aceite nuevo (25 litros)" completed: true part_used: "Aceite CAT 15W-40" quantity: 25 - task: "Cambiar filtro de combustible" completed: true part_used: "Filtro CAT 1R-0749" - task: "Cambiar filtro de aire" completed: true part_used: "Filtro CAT 6I-2503" - task: "Lubricación de pivotes" completed: true notes: "Aplicados 10 puntos de grasa" - task: "Inspección de orugas (tensión, desgaste)" completed: true notes: "Tensión OK, desgaste 40%, reemplazar en 3000 hrs" - task: "Revisión de mangueras hidráulicas" completed: true notes: "Todas en buen estado" - task: "Prueba de funcionamiento" completed: true notes: "Operación normal, sin ruidos anormales" totals: hours_worked: 3.5 parts_cost: 4500.00 # MXN labor_cost: 1200.00 # MXN total_cost: 5700.00 # MXN ``` --- ## 💵 Costeo de Activos ### Costo por Hora de Uso **Fórmula:** ``` Costo/hora = (Depreciación + Mantenimiento + Combustible + Operador + Seguro) / Horas trabajadas ``` **Ejemplo: Excavadora CAT 320D** | Concepto | Costo anual | Horas/año | Costo/hora | |----------|-------------|-----------|------------| | **Depreciación** | $120,000 | 1,200 | $100.00 | | **Mantenimiento** | $36,000 | 1,200 | $30.00 | | **Combustible** | $60,000 | 1,200 | $50.00 | | **Operador** | $180,000 | 1,200 | $150.00 | | **Seguro** | $24,000 | 1,200 | $20.00 | | **TOTAL** | **$420,000** | **1,200** | **$350.00/hr** | **Imputación a proyecto:** ```yaml usage_record: asset_id: "AST-001" project_id: "PROJ-001" date: "2025-11-17" hours_worked: 8 cost_per_hour: 350.00 total_cost: 2800.00 # 8 hrs × $350 charged_to_account: "5104-001" # Maquinaria y equipo cost_center: "Obra A - Excavación" ``` --- ### TCO (Total Cost of Ownership) **Análisis de TCO - 5 años** **Activo:** Excavadora CAT 320D | Año | Depreciación | Mantenimiento | Combustible | Operador | Seguro | **Total** | |-----|--------------|---------------|-------------|----------|--------|-----------| | 1 | $120,000 | $24,000 | $60,000 | $180,000 | $24,000 | $408,000 | | 2 | $120,000 | $30,000 | $60,000 | $180,000 | $24,000 | $414,000 | | 3 | $120,000 | $36,000 | $60,000 | $180,000 | $24,000 | $420,000 | | 4 | $120,000 | $45,000 | $60,000 | $180,000 | $24,000 | $429,000 | | 5 | $120,000 | $60,000 | $60,000 | $180,000 | $24,000 | $444,000 | | **Total 5 años** | **$600,000** | **$195,000** | **$300,000** | **$900,000** | **$120,000** | **$2,115,000** | **Análisis:** - Costo inicial: $1,500,000 - TCO 5 años: $2,115,000 - **TCO total:** $3,615,000 (2.4× costo inicial) - Horas trabajadas: 6,000 hrs - **Costo promedio/hora:** $602.50 **Decisión:** - ¿Comprar vs rentar? Si renta = $400/hr → Costo 5 años = $2.4M (más económico) - ¿Mantener vs vender? Si valor de reventa año 5 = $600K → TCO neto = $3.015M --- ## 📍 Rastreo GPS y Telemetría ### Datos de Localización ```yaml gps_tracking: asset_id: "AST-001" timestamp: "2025-11-17T14:30:00Z" location: latitude: 20.588818 longitude: -100.389880 address: "Fraccionamiento Los Pinos, Querétaro" project: "PROJ-001" geofence_status: "inside" # inside, outside, near telemetry: engine_status: "running" rpm: 1800 fuel_level: 75 # % engine_hours: 1850 oil_pressure: 45 # PSI coolant_temp: 85 # °C battery_voltage: 24.5 # V alerts: - type: "geofence_exit" timestamp: "2025-11-17T08:15:00Z" message: "Activo salió de geofence de proyecto" acknowledged: true - type: "idle_time" timestamp: "2025-11-17T12:00:00Z" message: "Motor encendido sin uso por 30 minutos" acknowledged: false ``` --- ### Dashboard de Activos **Indicadores en tiempo real:** | Activo | Ubicación | Estado | Operador | Horas hoy | Combustible | Alertas | |--------|-----------|--------|----------|-----------|-------------|---------| | EXC-001 | Obra A | 🟢 Operando | Juan P. | 6.5 hrs | 75% | - | | RET-002 | Obra A | 🟢 Operando | Pedro M. | 5.0 hrs | 60% | ⚠️ Mtto próximo | | CAM-003 | En tránsito | 🟡 Moviendo | Carlos R. | 3.0 hrs | 40% | - | | VIB-004 | Obra B | 🔴 Parado | - | 0 hrs | N/A | 🔴 Mtto vencido | --- ## 📊 Reportes de Utilización ### Reporte Mensual - Octubre 2025 | Activo | Tipo | Hrs disponibles | Hrs trabajadas | Utilización | Costo/hora | Costo total | |--------|------|-----------------|----------------|-------------|------------|-------------| | EXC-001 | Excavadora | 200 | 180 | 90% | $350 | $63,000 | | RET-002 | Retroexcavadora | 200 | 150 | 75% | $300 | $45,000 | | GRU-003 | Grúa | 200 | 80 | 40% | $450 | $36,000 | | CAM-004 | Camión volteo | 200 | 160 | 80% | $200 | $32,000 | | **TOTAL** | - | **800** | **570** | **71.3%** | - | **$176,000** | **Análisis:** - ✅ Excavadora: Alta utilización (90%) - ⚠️ Grúa: Baja utilización (40%) → Evaluar renta vs propiedad - ✅ Promedio general: 71% (meta: >70%) --- ## 🚨 Puntos Críticos 1. **Mantenimiento preventivo:** No omitir para evitar fallas costosas 2. **Registro de horas:** Captura diaria para costeo preciso 3. **Asignación clara:** Siempre debe haber responsable del activo 4. **Alertas de mantenimiento:** Atender a tiempo para evitar tiempos muertos 5. **Rastreo GPS:** Prevenir robo y uso no autorizado 6. **Análisis TCO:** Decisiones de compra vs renta basadas en datos 7. **Depreciación correcta:** Impacto en estados financieros --- ## 🎯 Siguiente Paso Crear documentación de requerimientos y especificaciones técnicas del módulo. --- **Generado:** 2025-11-17 **Mantenedores:** @tech-lead @backend-team @frontend-team @maintenance-team **Estado:** 📝 A crear