Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/sajaldi/energy/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Energy CMMS provides comprehensive budget planning, tracking, and material requisition workflows integrated with maintenance operations.

Budget Structure

Budgets are organized hierarchically:

Budget Components

Budget Lines

Major categories (disciplines) like Electrical, Mechanical, Civil

Items

Specific expense concepts within each line

Monthly Details

Projected spending distribution across months

Creating Annual Budgets

1

Navigate to Budgets

Go to Budgets > Annual Budgets
2

Create Budget

Click “Add Annual Budget”:
  • Year: Fiscal year
  • Name: Descriptive name (e.g., “2024 Maintenance Budget”)
  • Currency: Default currency
3

Add Budget Lines

Create lines by discipline:
  • Link to Discipline (auto-creates from Asset Categories)
  • Or use Description for custom lines
  • Set Projected Amount (optional, calculated from items)
4

Define Items

Within each line, create specific expense items:
  • Concept: What you’re budgeting for
  • Frequency: How often this expense occurs
  • Is Recurring: Auto-distribute across months
5

Distribute Across Months

For each item, set monthly projections:
  • Manual entry per month
  • Or use recurring patterns
  • Total validates against yearly amount

Budget Item Configuration

# Example: Creating recurring monthly expense
item = ItemPresupuesto.objects.create(
    partida=partida,
    concepto="Electrical Spare Parts",
    frecuencia='MENSUAL',
    es_recurrente=True
)

# Distribute equally across 12 months
for mes in range(1, 13):
    DetallePeriodico.objects.create(
        item=item,
        mes=mes,
        monto=1000.00  # $1,000 per month
    )

Budget Cronogram View

Visualize budget execution over time:
View one budget’s performance:
  • Monthly projected vs actual
  • By discipline breakdown
  • Item-level detail
  • Cumulative spending curves

Key Features

Edit projections directly in the cronogram:
  • Click any cell to modify
  • Real-time total recalculation
  • Instant validation
Color-coded status:
  • 🟢 Under budget
  • 🟡 On target
  • 🟠 Approaching limit
  • 🔴 Over budget
Click any value to see:
  • Contributing expenses
  • Related work orders
  • Material consumptions
  • Invoice details

Executing Against Budget

Record actual expenses:
1

Link to Budget Line

When creating expense, select:
  • Budget year
  • Budget line (discipline)
  • Specific item (if applicable)
2

Record Expense

GastoEjecutado model captures:
  • Date of expense
  • Amount
  • Description
  • Supporting documents
3

Automatic Tracking

System updates:
  • Monthly execution totals
  • Budget vs actual variance
  • Remaining balance
  • Alerts if over budget

Expense Recording

# Record an executed expense
gasto = GastoEjecutado.objects.create(
    partida=partida,
    fecha=date.today(),
    monto=850.50,
    descripcion="Motor repair parts",
    orden_trabajo=orden  # Optional link to work order
)
Expenses can be linked to work orders, material movements, or purchase orders for full traceability.

Material Requisitions

Request materials needed for maintenance:

Requisition Workflow

Creating Requisitions

1

Initiate Request

From work order or standalone:
  • Requestor
  • Delivery location
  • Required date
  • Priority level
2

Add Items

For each material:
  • Material/part number
  • Quantity required
  • Purpose/work order
  • Alternative options
3

Submit for Approval

Routing based on value:
  • Low value: Automatic approval
  • Medium: Supervisor approval
  • High: Manager approval
4

Warehouse Fulfillment

Once approved:
  • Generate pick list
  • Reserve stock
  • Prepare items
  • Schedule delivery
5

Receive & Consume

At delivery:
  • Technician confirms receipt
  • System records consumption
  • Updates work order costs
  • Reduces inventory

Requisition States

Being prepared:
  • Can add/remove items
  • Not yet submitted
  • No approvals started

Integration with Work Orders

Automatic material requisitions:
# Work order triggers requisition
orden = OrdenTrabajo.objects.get(id=123)

# System checks routine for required materials
if orden.rutina:
    materiales_necesarios = orden.rutina.materiales_requeridos.all()
    
    # Create requisition automatically
    requisicion = MaterialRequisition.objects.create(
        orden_trabajo=orden,
        solicitante=orden.tecnico,
        ubicacion_entrega=orden.ubicacion
    )
    
    # Add materials
    for item in materiales_necesarios:
        requisicion.items.create(
            material=item.material,
            cantidad=item.cantidad * orden.activos.count()
        )
Configure routine templates with standard materials to automatically generate requisitions when work orders are created.

Budget Reports

Standard Reports

Monthly Summary

Month-by-month analysis:
  • Projected vs actual
  • Variance analysis
  • Trending indicators

Discipline Breakdown

By category performance:
  • Each budget line
  • Item-level detail
  • Top expense drivers

Efficiency Metrics

Budget utilization:
  • % spent to date
  • Burn rate
  • Projected year-end

Variance Report

Over/under analysis:
  • Significant deviations
  • Root cause tracking
  • Corrective actions

Export Options

# Standard cronogram export
response = exportar_cronograma_excel(request, pk=budget_id)
Contains:
  • Disciplines as rows
  • Months as columns
  • Projected and actual values
  • Visual formatting

Budget Grouping

Consolidate multiple budgets:
1

Create Budget Group

Go to Budgets > Grouped Budgets:
  • Name (e.g., “All Sites 2024”)
  • Description
2

Add Budgets

Select individual budgets to include:
  • Different locations
  • Different departments
  • Different years (for comparison)
3

View Consolidated Analysis

Group view shows:
  • Total across all budgets
  • Per-budget breakdown
  • Comparative metrics
  • Drill-down capability

Group Analysis Features

# Consolidated monthly totals
data = _get_cronograma_data(presupuestos_list)

# Returns aggregated structure:
{
    'presupuestos_data': [...]  # Individual budget details
    'global_proyectado_mes': [...]  # Sum of all projected by month
    'global_ejecutado_mes': [...]  # Sum of all executed by month
    'total_general_proyectado': X  # Grand total projected
    'total_general_ejecutado': Y  # Grand total executed
}

Real-Time Budget Updates

Automatic updates from various sources:
When closing work order:
  • Labor hours recorded
  • Materials consumed
  • External services invoiced
  • All costs hit budget automatically
Material withdrawals:
  • Warehouse issues materials
  • Costed at average or FIFO
  • Charged to requisition’s budget line
When PO is received:
  • Accrual against budget
  • Final cost on invoice
  • Variance tracking
Direct expense recording:
  • Admin records cost
  • Links to budget line
  • Includes supporting docs

Forecasting and Projections

Automated Projections

# Extend current spending trends
from django.db.models import Sum
from datetime import date

# Calculate burn rate
meses_transcurridos = date.today().month
total_gastado = partida.gastos.aggregate(
    total=Sum('monto')
)['total'] or 0

burn_rate = total_gastado / meses_transcurridos
proyeccion_anual = burn_rate * 12

# Compare to budget
if proyeccion_anual > partida.monto_proyectado:
    alert_over_budget()

Scenario Planning

Create multiple budget versions to model different scenarios: conservative, expected, and optimistic.

Budget Alerts and Notifications

Automated monitoring:

Alert Types

Threshold Alerts

Notify when:
  • 75% of budget consumed
  • 90% of budget consumed
  • Budget exceeded

Variance Alerts

Significant deviations:
  • 20% over in any month
  • Unusual spending pattern
  • Large single transactions

Approval Alerts

Workflow notifications:
  • Pending approvals
  • Rejected requisitions
  • Awaiting documents

Forecasting Alerts

Projected issues:
  • Will exceed budget by year-end
  • Underspending (unexecuted work)
  • Reallocation opportunities

Budget vs Actual Analysis

Key performance indicators:
# Calculate variance metrics
from django.db.models import Sum, F

analysis = PartidaPresupuestaria.objects.annotate(
    ejecutado=Sum('gastos__monto'),
    varianza=F('monto_proyectado') - F('ejecutado'),
    pct_usado=F('ejecutado') * 100.0 / F('monto_proyectado')
).filter(
    presupuesto_anual__anio=2024
)

Visualization

Line chart showing:
  • Projected (dotted line)
  • Actual (solid line)
  • Cumulative curves
  • Variance shading

Best Practices

Monthly closeout process:
  • Review all expenses
  • Verify coding
  • Identify discrepancies
  • Accrue pending invoices
Granular tracking:
  • Don’t lump everything into one item
  • Separate predictable costs
  • Track by work type
  • Enable meaningful analysis
Year-over-year analysis:
  • Compare to previous years
  • Identify trends
  • Justify budget increases
  • Benchmark performance

CAPEX vs OPEX

Distinguish capital from operational expenses:
Recurring maintenance costs:
  • Routine maintenance
  • Consumables
  • Labor
  • Utilities
Expensed immediately, hits budget.
Configure budget lines with tipo field to distinguish CAPEX vs OPEX for proper financial reporting.

Integration Points

With Inventory

  • Material costs flow automatically
  • Requisition approval workflows
  • Stock valuation methods (FIFO, Average)

With Purchasing

  • Purchase order accruals
  • Vendor invoice matching
  • Three-way matching (PO, Receipt, Invoice)

With Maintenance

  • Work order cost accumulation
  • Labor hour costing
  • Equipment downtime costs

Next Steps:

Build docs developers (and LLMs) love