Skip to main content

Overview

Energy CMMS provides a comprehensive maintenance management system covering preventive, corrective, and predictive maintenance workflows.

Maintenance Types

Preventive

Scheduled maintenance based on time or usage intervals

Corrective

Repairs triggered by notifications or failures

Predictive

Condition-based interventions using monitoring data

Core Workflow

Creating Maintenance Routines

Routines define what maintenance should be performed:
1

Navigate to Routines

Go to Maintenance > Routines
2

Add New Routine

Click “Add Routine” button
3

Set Basic Information

  • Name: Descriptive name (e.g., “Monthly Transformer Inspection”)
  • Code: Unique identifier (optional, auto-generated if blank)
  • Category: Type of equipment (Electrical, Mechanical, etc.)
  • Frequency: How often to perform (Monthly, Quarterly, etc.)
4

Define Scope

  • Estimated Time: Duration in HH:MM:SS format
  • Technician Count: Number of people required
  • Job Position: Required skill level
  • Description: Detailed instructions
5

Add Procedures

Create step-by-step checklists:
  • Inspection points
  • Measurements to take
  • Tools required
  • Safety precautions
Routines are templates. Scheduling creates the actual work order instances.

Routine Categories

Categories link maintenance routines to asset types:
# Category hierarchy automatically applies routines
electrical = Tipo.objects.get(nombre="Electrical")
transformers = Tipo.objects.create(
    nombre="Transformers",
    padre=electrical,
    categoria_activo=transformer_category
)

# Routine assigned to "Electrical" applies to all transformers

Category Inheritance

Routines assigned to parent categories automatically apply to all child categories and their assets.
Example hierarchy:
  • Electrical ← General electrical inspection
    • Transformers ← Transformer-specific tests
      • Dry Type ← Temperature monitoring
    • Switchgear ← Arc flash inspection

Scheduling Maintenance

The Visual Scheduler wizard creates programmed maintenance:
1

Open Scheduler

Go to Maintenance > Scheduling > Visual Scheduler
2

Select Routine

Choose the maintenance routine to schedule
3

Define Schedule Pattern

  • Frequency: Daily, Weekly, Monthly, Quarterly, Yearly
  • Start Date: When to begin
  • End Date: When to stop (optional, leave blank for indefinite)
  • Working Hours: Time window for execution
4

Select Assets

Choose which assets this applies to:
  • By Location (all equipment in area)
  • By Category (all motors, all pumps, etc.)
  • Individual Assets (specific equipment)
5

Preview & Generate

  • Review projected work orders
  • Adjust if needed
  • Click “Generate Orders”

Schedule Configuration

# Example: Monthly transformer inspection
programacion = Programacion.objects.create(
    rutina=rutina,
    horario=horario,  # Working hours pattern
    fecha_inicio=date(2024, 1, 1),
    fecha_fin=date(2024, 12, 31)
)

# Apply to specific areas
programacion.areas.add(substation_a, substation_b)

# Or specific assets
programacion.activos.add(transformer_1, transformer_2)

# Generate work orders
count = programacion.generar_ordenes()

Work Order Management

Work Order Lifecycle

Work Order States

Initial state after generation:
  • Awaiting assignment
  • Can be rescheduled
  • Can modify scope

Bulk Operations

The system supports efficient bulk actions:
# Bulk date changes
api_bulk_update_ot_dates(ot_ids=[1,2,3], nueva_fecha='2024-03-15')

# Merge multiple work orders
api_merge_ots(ot_ids=[10, 11, 12])  # Combines into single OT

# Split multi-asset work order
api_split_ot_asset(ot_id=5, asset_id=101)  # Separates one asset
Merging work orders is irreversible. Ensure orders have compatible routines before merging.

Cronogram View

Visualize maintenance schedule in calendar format:

Features

  • Drag-and-drop rescheduling: Move work orders between dates
  • Multi-technician view: See workload distribution
  • Projection mode: View future scheduled maintenance
  • Conflict detection: Identify resource overlaps

Filtering

# Filter work orders by multiple criteria
ots = OrdenTrabajo.objects.filter(
    inicio_programado__date__range=(start_date, end_date),
    estado__in=['PROGRAMADA', 'EJECUCION'],
    ubicacion__in=selected_locations
).select_related('rutina', 'tecnico', 'ubicacion')

Notifications System

Notifications trigger corrective maintenance:
1

Submit Notification

Anyone can report an issue:
  • Mobile app or web interface
  • Describe problem
  • Select affected asset
  • Indicate priority
2

Review & Prioritize

Maintenance coordinator reviews:
  • Assigns priority (LOW, MEDIUM, HIGH, CRITICAL)
  • Categorizes issue
  • Estimates urgency
3

Generate Work Order

System or coordinator creates corrective OT:
  • Links to notification
  • Assigns technician
  • Schedules intervention
4

Execute & Close

Technician resolves issue:
  • Records actions taken
  • Notes parts used
  • Updates asset status
  • Closes notification

Notification Priority

  • Immediate safety hazard
  • Production stoppage
  • Response within 2 hours
  • Automatic escalation
  • Major functionality impaired
  • Backup systems failing
  • Response within 24 hours
  • Minor degradation
  • Scheduled within week
  • Can defer if needed
  • Cosmetic issues
  • Non-critical improvements
  • Batched with routine work

Procedures and Checklists

Creating Procedures

Structured step-by-step instructions:
procedimiento = Procedimiento.objects.create(
    nombre="Transformer Oil Analysis",
    rutina=rutina
)

# Add steps
PasoProcedimiento.objects.create(
    procedimiento=procedimiento,
    orden=1,
    descripcion="Ensure transformer is de-energized",
    es_critico=True
)

PasoProcedimiento.objects.create(
    procedimiento=procedimiento,
    orden=2,
    descripcion="Extract oil sample from bottom valve",
    requiere_foto=True
)

Mobile Execution

Technicians use mobile interface to:
  • View assigned work orders
  • Access procedures
  • Check off completed steps
  • Record measurements
  • Upload photos
  • Scan asset QR codes

Measurement Points

Track equipment condition over time:
1

Define Measurement Point

Create monitoring point on asset:
  • Temperature sensor
  • Vibration monitor
  • Pressure gauge
  • Hour meter
2

Set Thresholds

Define acceptable ranges:
  • Minimum value
  • Maximum value
  • Alert conditions
3

Record Readings

During work order execution:
  • Technician records value
  • System checks against thresholds
  • Automatic alerts if out of range
4

Trend Analysis

Historical data enables:
  • Condition monitoring
  • Predictive analytics
  • Performance degradation detection

Import/Export

Exporting Routines

id,codigo_rutina,nombre,categoria_nombre,categoria_ruta,frecuencia_nombre,tiempo_estimado,cantidad_tecnicos,descripcion
1,RT-001,"Monthly Transformer Inspection","Transformers","Electrical → Transformers","Monthly","01:30:00",2,"Visual inspection and temperature check"
2,RT-002,"Quarterly Oil Analysis","Transformers","Electrical → Transformers","Quarterly","00:45:00",1,"Extract and test oil sample"

Importing Routines

Categories and frequencies must exist before importing. Create them first or they will be skipped.
Required columns:
  • nombre: Routine name
  • categoria_nombre: Must match existing category
  • frecuencia_nombre: Must match existing frequency
Optional columns:
  • codigo_rutina: Auto-generated if blank
  • tiempo_estimado: Format HH:MM:SS (e.g., “01:30:00”)
  • cantidad_tecnicos: Integer, defaults to 1
  • descripcion: Detailed instructions
nombre,categoria_nombre,frecuencia_nombre,tiempo_estimado,cantidad_tecnicos,descripcion
"Weekly Motor Inspection","Motors","Weekly","00:30:00",1,"Visual and thermal check"
"Annual Load Test","Generators","Yearly","04:00:00",3,"Full load performance test"

Background Import Process

For large imports (1000+ routines), use background processing:
1

Upload File

Go to Maintenance > Routines > Import (Background)
2

Verification Mode

Check “Verify Only” to validate:
  • Which routines already exist
  • Which will be created
  • Any errors in data
3

Review Report

System shows:
  • Total rows
  • Found (will update)
  • Not found (will create)
  • Duplicates in file
4

Execute Import

Uncheck verification, upload again:
  • Progress bar shows status
  • Real-time error reporting
  • Transaction rollback on failure

Work Order Reporting

Key Metrics

Completion Rate

% of scheduled work orders completed on time

Mean Time to Repair

Average time from notification to resolution

Backlog

Number of pending work orders

Compliance

% of preventive maintenance performed as scheduled

Custom Reports

# Work order summary by location
from django.db.models import Count, Q

resumen = OrdenTrabajo.objects.filter(
    inicio_programado__year=2024
).values(
    'ubicacion__nombre'
).annotate(
    total=Count('id'),
    completadas=Count('id', filter=Q(estado='CERRADA')),
    pendientes=Count('id', filter=Q(estado__in=['PROGRAMADA', 'EJECUCION']))
).order_by('-total')

Best Practices

Use consistent naming:
  • Start with frequency: “Monthly”, “Quarterly”
  • Include equipment type: “Transformer”, “Motor”
  • End with action: “Inspection”, “Test”, “Calibration”
Example: “Monthly Transformer Inspection”
Accurate time estimates improve:
  • Work scheduling efficiency
  • Resource allocation
  • Workload balancing
Review and adjust based on actual completion times.
Create detailed checklists:
  • Ensures nothing is missed
  • Standardizes execution
  • Facilitates training
  • Improves safety

Integration Points

With Inventory

  • Material requisitions from work orders
  • Automatic stock consumption
  • Spare parts recommendations

With Budgets

  • Maintenance cost tracking
  • Budget vs actual analysis
  • Forecasting future costs

With Safety

  • Work permit requirements
  • JSA/Risk analysis linkage
  • Safety checklist compliance

Next Steps:

Build docs developers (and LLMs) love