Thinking / System design· Part 6 of 10 in The operating model
Should operations have a ledger?
Finance preserves movements and derives a position from them. Operations accumulates hours, cost, commitments, life consumption and risk across scattered systems — a ledger-like layer could record those movements and explain where an asset, shutdown or site stands and why.
- Operational Systems
- Forecasting
- System Design
11 August 2026
On this page
- Operational systems already contain ledger-like behaviour
- The difference between a transaction and a position
- Current-state fields can hide how we got there
- Budgeting is already close to a ledger problem
- Labour can have a position
- Production can have a position
- Asset life can also have a position
- Not every operational measure should behave like money
- There may be value in standard entry types
- The ledger should not replace transactional models
- This is closer to event sourcing, but not necessarily event sourcing
- Operational position could become a common concept
- Positions can roll upward
- But aggregation needs care
- Entity health should probably be multidimensional
- This could improve forecasting
- AI recommendations need explainable positions
- Scenario planning fits naturally
- Operational and financial ledgers should remain separate
- This may be particularly useful between systems
- The ledger could support different asset domains
- What this could mean for CPM and DSLCore
- Four layers may provide a useful architecture
- A working hypothesis
- Questions worth testing
This piece follows from maintenance budgets should describe the future, not just the past. If a budget is really a position that keeps moving, the natural question is whether operations needs a ledger to track those movements.
Financial systems use ledgers because they need to answer a simple but important question:
What changed, when did it change, and what is the current position?
Every transaction contributes to a larger financial state.
Operations has a similar problem.
Assets accumulate hours.
Components consume life.
Work creates cost.
Purchase orders create commitments.
Shutdown scope changes.
Production consumes capacity.
Condition findings change risk.
Resources become constrained.
Forecasts move.
Yet these changes are often stored in different systems, tables and reports.
That raises an interesting question:
Should operations have something similar to a ledger — not for statutory accounting, but for maintaining a traceable operational position?
The idea is not to reproduce a general ledger.
It is to create a structured record of operational changes that can explain where an asset, fleet, shutdown, plant or organisation stands now, how it got there, and where it appears to be heading.
Operational systems already contain ledger-like behaviour
Consider a haul truck.
During a month, the operation may record:
+ 420 operating hours
+ 185,000 tonnes hauled
+ $42,000 maintenance cost
+ 1 major component commitment
- 420 hours estimated component life
- 16 hours availability
+ 1 completed inspection
+ 1 condition warning
These are not all financial transactions.
But each one changes the operational position of the asset.
Likewise, a shutdown may accumulate:
+ 12 approved work packages
+ $480,000 committed cost
+ 1,800 labour hours
- 4 hours forecast schedule float
+ 2 readiness blockers
+ 1 scope change
A road program might accumulate:
+ 42 km graded
+ 1,800 tonnes gravel consumed
+ $110,000 actual cost
- 3 high-priority defects
+ 5 new defects identified
These records have something in common.
They are all movements in operational state.
The difference between a transaction and a position
This distinction is useful.
A transaction tells us:
What changed?
A position tells us:
Where are we now?
For example:
Transaction:
Truck 047 operated 10 hours today.
Position:
Truck 047 engine remaining-life estimate is now 2,430 hours.
Or:
Transaction:
Purchase order for engine exchange issued.
Position:
FY27 component budget now has $320,000 committed.
Or:
Transaction:
Shutdown package failed readiness review.
Position:
Shutdown readiness has fallen from 91% to 88%.
The operational ledger records the movement.
The position is derived from the accumulated movements and current state.
That separation can be powerful.
Current-state fields can hide how we got there
Many systems store only the current value.
For example:
remainingLife = 2430
That tells us the current estimate.
It does not necessarily explain why the estimate changed.
A ledger-like history might show:
Original expected life 15,000 h
Usage consumed -11,500 h
Duty-cycle adjustment -350 h
Oil-analysis adjustment -250 h
Inspection adjustment -220 h
Recent operating hours -250 h
--------------------------------------------
Current estimated remaining life 2,430 h
The current position becomes explainable.
That matters whenever forecasts, assumptions or recommendations are challenged.
Budgeting is already close to a ledger problem
Maintenance budgeting illustrates the idea clearly.
A budget report may show:
Budget $10.0m
Actual $5.8m
Variance $4.2m
But the operational position may really be:
Budget $10.0m
Actual $5.8m
Committed $2.6m
Known planned work $1.3m
Forecast reactive work $1.1m
-------------------------------------
Expected outturn $10.8m
The important operational movements include:
budget allocation
purchase commitment
work completion
scope change
forecast adjustment
cancellation
Each movement changes the expected position.
The same structure can apply to more than dollars.
Labour can have a position
Suppose annual fitter capacity is:
Available capacity 32,000 h
The system may record:
Budget demand 28,000 h
Scheduled demand 29,500 h
Committed contractors 3,000 h
Forecast demand 34,000 h
The operational position might therefore be:
Forecast capacity deficit 2,000 h
That is effectively a resource balance.
The movements behind it might be:
new shutdown scope +900 h
component brought forward +600 h
cancelled job -250 h
production increase +750 h
The system can now explain why labour demand moved.
Production can have a position
Production is normally treated as a separate planning domain.
But the same pattern applies.
For example:
Budget production 10.0 Mt
Current forecast 9.7 Mt
Actual to date 5.1 Mt
Remaining forecast 4.6 Mt
Changes might arise from:
asset downtime
production rate changes
weather
shutdown changes
fleet availability
operating constraints
Each event changes the expected production position.
This creates a common planning language across maintenance and operations.
Asset life can also have a position
Remaining life is particularly suited to this approach.
For a component:
Expected life 12,000 h
Actual consumed 9,000 h
Condition adjustment -500 h
Forecast remaining 2,500 h
The important point is that the remaining-life estimate is not necessarily static.
It may change because of:
- usage;
- duty;
- inspection findings;
- condition monitoring;
- repair;
- component replacement;
- engineering judgement.
Those changes could be retained as explicit adjustments rather than silently overwriting the current estimate.
Not every operational measure should behave like money
This is important.
A financial ledger has strict accounting rules.
Operational measures do not necessarily.
A tonne is not interchangeable with an hour.
A condition score does not behave like cash.
A risk finding cannot always be summed.
So the objective is not to force every operational measure into double-entry accounting.
Instead, the common idea is:
preserve significant movements, their source and their effect on the current operational position.
A generic operational entry might contain:
Entity
Metric
Date / Time
Entry Type
Quantity
Unit
Direction
Source
Scenario
Status
Confidence
Reason
For example:
Entity: Truck 047
Metric: Engine Remaining Life
Entry Type: Condition Adjustment
Quantity: -300
Unit: hours
Source: Oil Analysis OA-1842
Reason: Elevated wear metals
Or:
Entity: Shutdown SD-26-04
Metric: Labour Demand
Entry Type: Scope Change
Quantity: +480
Unit: hours
Source: Scope Change SC-017
The structure remains generic.
The meaning remains domain-specific.
There may be value in standard entry types
A common set of operational entry types could help.
For planning:
Budget
Plan
Forecast
Commitment
Actual
Adjustment
Cancellation
For lifecycle:
Consumption
Reset
Extension
Reduction
Replacement
Reassessment
For resources:
Capacity
Demand
Allocation
Consumption
Release
For risk:
Identification
Escalation
Mitigation
Closure
These would not necessarily use the same calculations.
But the common structure provides consistency.
The ledger should not replace transactional models
This is an important architectural boundary.
The system should still have normal operational entities such as:
WorkOrder
PurchaseOrder
Inspection
ConditionReading
ProductionShift
ComponentChange
Shutdown
Those objects describe what happened.
The operational ledger records the effect of significant events on positions.
For example:
Work Order completed
↓
Operational postings
↓
Maintenance actual +$4,800
Labour actual +22 h
Asset downtime +6 h
Component life reset
The work order remains authoritative for the work.
The operational ledger provides a common downstream interpretation.
This is closer to event sourcing, but not necessarily event sourcing
There is a resemblance to event-sourced architectures.
Event sourcing preserves changes and derives state from those changes.
That can be powerful.
It can also introduce substantial complexity.
CPM probably does not need to make every database object fully event-sourced.
A more practical architecture may be:
Transactional Models
+
Operational Events
↓
Operational Ledger
↓
Position Views
↓
Forecasts / Alerts / Analytics
This retains conventional relational data while preserving the significant movements that matter to future decisions.
Operational position could become a common concept
Once the ledger exists, the system can derive an operational position for any significant entity.
For a haul truck:
TRUCK 047
Availability 89%
Current condition AMBER
Engine remaining life 2,430 h
Maintenance forecast $410k
Committed work $285k
Next major intervention Q2 FY27
For a shutdown:
SHUTDOWN SD-26-04
Scope readiness 91%
Forecast duration 76 h
Baseline duration 72 h
Budget $4.2m
Forecast cost $4.6m
Blocked packages 4
Critical-path exposure HIGH
For a road network:
ROAD NETWORK
High-priority defects 34
Treatment backlog 182 km
Annual budget $3.2m
Forecast outturn $3.5m
Condition trend DECLINING
The structure changes by domain.
The idea of an operational position remains common.
Positions can roll upward
This is another advantage.
Operational entries may occur at a detailed level:
Component
↓
Asset
↓
System
↓
Plant
↓
Site
↓
Organisation
A component-life adjustment may affect an asset.
Several asset positions may affect fleet availability.
Fleet availability may affect site production.
Production may affect budget and business performance.
The system can therefore aggregate appropriate positions upward.
For example:
Component condition
↓
Asset health
↓
Fleet availability
↓
Production capacity
↓
Site position
That creates traceability from high-level management indicators back to operational evidence.
But aggregation needs care
Not every metric should simply be summed or averaged.
This is particularly important for:
- condition;
- risk;
- critical controls;
- readiness;
- availability.
For example, ten healthy assets and one critically unsafe asset do not necessarily produce:
Average Health = 91%
and therefore a healthy fleet.
A critical exception may dominate the management decision.
The ledger can provide traceability.
The position rules still need domain-specific logic.
Entity health should probably be multidimensional
An operational ledger naturally leads to the idea of entity health.
That can be useful.
But a single health score may hide too much.
For example:
SITE HEALTH = 82%
does not tell us whether the problem is:
- condition;
- production;
- maintenance backlog;
- cost;
- workforce;
- shutdown readiness;
- risk.
A better model may retain dimensions.
For example:
Production GREEN
Availability GREEN
Condition AMBER
Lifecycle RED
Maintenance Cost AMBER
Resources GREEN
Risk RED
The system may still derive an overall exception state for filtering.
But the underlying dimensions should remain visible.
This could improve forecasting
One of the biggest advantages of a ledger-like model is that forecasts become explainable.
Suppose the maintenance forecast changes from:
$9.8m
to:
$10.6m
Instead of simply storing the new value, the system could explain:
Production increase +$260k
Engine interventions moved +$220k
Parts escalation +$140k
New shutdown scope +$110k
Deferred work -$70k
Other +$140k
--------------------------------------
Forecast change +$800k
This is useful for management.
It is also important if AI-generated recommendations are introduced.
AI recommendations need explainable positions
Suppose an AI-assisted system recommends:
Bring forward the Truck 047 engine replacement.
That recommendation should be supported by evidence such as:
Current remaining-life estimate
Production forecast
Condition trend
Next shutdown opportunity
Parts availability
Failure consequence
Cost
A ledger-like architecture provides an audit trail for how those inputs changed.
Instead of an opaque recommendation, the user can inspect the operational movements that produced the current position.
That could become important for AI governance.
Scenario planning fits naturally
The ledger model can also support scenarios.
For example:
BASELINE
HIGH_PRODUCTION
DEFER_SHUTDOWN
ADD_WORKSHOP_SHIFT
REPLACE_TRUCK_047
Each scenario can maintain its own forecast movements without changing actual history.
For example:
BASELINE HIGH PROD
Production 10.0 Mt 11.5 Mt
Truck hours 68,000 78,000
Engine rebuilds 6 9
Maintenance cost $9.8m $11.2m
Availability 87% 84%
The scenario differences can be traced back to their assumptions.
This is more useful than maintaining isolated spreadsheet models.
Operational and financial ledgers should remain separate
This is a critical boundary.
The operational ledger should not become the official financial ledger.
The ERP or accounting system remains authoritative for:
- invoices;
- accounts;
- tax;
- accruals;
- financial periods;
- statutory reporting.
The operational system can instead record:
estimated cost
committed cost
operational quantity
resource consumption
production effect
life consumption
risk change
Where appropriate, financial actuals can later be reconciled with the ERP.
The purpose is different.
The financial ledger asks:
Where did the money go?
The operational ledger asks:
What changed in the operation, why did it change, and what does that mean for the future?
This may be particularly useful between systems
Many organisations already have multiple systems:
ERP
CMMS
Production system
Condition monitoring
Inventory
Planning tools
Spreadsheets
An operational ledger does not necessarily need to replace them.
It could provide a common interpretation layer.
For example:
CMMS Work Order
↓
Maintenance actual
ERP Purchase Order
↓
Commitment
Production System
↓
Usage actual
Condition System
↓
Life adjustment
All contribute to:
Operational Position
That could make CPM useful as an integration and decision layer rather than requiring every transactional system to be replaced.
The ledger could support different asset domains
The common mechanism can remain while the metrics change.
Mobile plant
SMU
Tonnes
Fuel
Component life
Downtime
Maintenance cost
Roads
Kilometres treated
Condition
Defects
Grader hours
Material quantities
Program cost
Structures
Inspection findings
Risk
Intervention status
Condition
Cost
Processing plant
Throughput
Availability
Shutdown scope
Wear
Condition
Production loss
Shutdowns
Scope
Readiness
Labour
Materials
Duration
Cost
Production impact
This reinforces the broader CPM principle:
common infrastructure, specialised operating models.
What this could mean for CPM and DSLCore
The operational ledger may be best treated as a platform capability rather than a maintenance-specific module.
DSLCore might allow domains to define:
Metrics
Units
Entry Types
Position Rules
Roll-up Rules
Thresholds
Forecast Rules
For example:
metric: fitter_hours
budget
planned
committed
actual
forecast
or:
metric: engine_remaining_life
baseline
consumption
condition_adjustment
reset
forecast
or:
metric: shutdown_duration
baseline
forecast
actual
variance
The engine can remain generic.
The semantics come from the domain model.
Four layers may provide a useful architecture
A clean conceptual structure might be:
1. TRANSACTION
What happened?
Work order
Inspection
Purchase order
Production shift
Component replacement
2. OPERATIONAL LEDGER
What changed?
+ cost
+ hours
- remaining life
+ commitment
- availability
3. POSITION
Where are we now?
Actual
Committed
Forecast
Remaining capacity
Remaining life
4. DECISION
What should we do?
Maintain
Purchase
Reschedule
Replace
Defer
Change production
Each layer answers a different question.
Together they create a much stronger operating model.
A working hypothesis
The proposition is not that operations should copy financial accounting.
The controls, mathematics and governance are different.
But finance has benefited for centuries from preserving movements and deriving positions from them.
There may be a useful lesson in that.
A maintenance or operations system that stores only current values and closed transactions can tell us a great deal about what has happened.
A ledger-like operational model may make it easier to explain:
what changed;
why it changed;
what the current position is;
how the forecast moved;
and what decisions should now be reconsidered.
A useful distinction may be:
Transactions describe operational events.
An operational ledger describes how those events change the position of the organisation.
Questions worth testing
Which operational measures genuinely benefit from ledger-like treatment?
Where should immutable history end and recalculated forecasts begin?
Should budget, commitment, forecast and actual use a common underlying structure?
Can remaining-life adjustments be represented transparently without creating unnecessary complexity?
How should operational positions roll from components to assets, fleets, plants and sites?
Which measures should aggregate, and which should remain exception-driven?
Could an operational ledger provide a useful integration layer between CMMS, ERP, production and condition-monitoring systems?
And perhaps the broader question:
If financial systems can explain how every transaction changed the financial position, should operational systems be able to explain how every significant event changed the operational position?
That may be a useful architectural direction for systems intended to support not just record-keeping, but forecasting, optimisation and decision-making.