On earthworks, piling and bulk excavation, plant is not a side line — it can be 20% to 40% of project cost. Yet it is usually the last branch to reach the cost report, and often never reaches it at all: fuel goes into a litres book, maintenance into a general invoice, and the machine itself into an asset list with no connection to the job it is standing on. The result is a project that looks financially disciplined while a third of its budget has already been spent on its own ground. This guide is about the gap between recording plant and charging it.
Key takeaways
- A fuel log that books no cost entry is invisible to every cost surface at once: the budget, the expense report and earned value.
- Plant reaches a project through the site it is assigned to, exactly as a purchase order does — an unassigned machine has no project to charge.
- Two fills should be refused: plant with no site, and a fill in a currency other than the project’s — and the refusal has to be announced, not silent.
- Every automatically booked cost needs an automatic reversal, or one typo sits in project cost for the life of the job.
- Tool custody is not inventory: an item is issued to a named person and comes back, so the useful balance is "what is still out", not "how many we own".
Plant is a third of the cost and the last thing measured
A 30-tonne excavator in production digging burns roughly 25 litres an hour. Over a nine-hour shift that is 225 litres a day, and at the current diesel price of SAR 1.79 a litre the machine costs about SAR 403 a day in diesel alone — before maintenance, before the operator, before mobilisation.
| Item | Value |
|---|---|
| Daily consumption | 225 litres (25 L/hour × 9 hours) |
| Daily cost | SAR 402.75 (225 litres × SAR 1.79) |
| 60 working days | SAR 24,165 for one machine |
| A fleet of six | SAR 144,990 of fuel in a single quarter |
That figure is either inside the project’s actual cost or outside it. There is no third state. And when it is outside, the project does not merely look cheaper than it is — it looks better run: earned value divides work completed by an actual cost that is missing a whole branch of spend, and returns a cost performance index that is optimistic for no reason.
The asset register is the spine
Before any talk of cost, every asset needs one row that identifies it: an asset code, a name, a type (vehicle, machine, tool, generator), a plate number where it applies, a status, and the site it is currently assigned to. That row is what turns "the yellow excavator" into something a cost can be charged to and a utilisation figure can be asked about.
The most important field in that row is not the code or the plate — it is the site. Plant reaches a project through its site, exactly as a purchase order reaches a project through its delivery site. If the site field is empty there is no project to charge, and guessing one from the machine’s name or from habit is charging a random job for someone else’s diesel.
| Status | Meaning | What it prevents |
|---|---|---|
| Available | In the yard, not issued to anyone | — |
| In use | Issued to a person or working on a site | Being issued a second time |
| Maintenance | In the workshop | Being issued until it comes back out |
| Retired | Permanently out of service | Being issued, and any move back to another status |
A litre of diesel is project cost, not a statistic
Most systems treat a fill as an operational record: date, litres, hour-meter or odometer reading, maybe a cost. The total shows up on an equipment screen and that is the end of it. The problem is that the equipment screen aggregates across the whole company, so the number is correct and cannot be charged to any particular job.
The cost surfaces — the budget by category, the financial report, and actual cost inside earned value — all read expense entries. So unless a fill writes a real expense against the project, it does not exist for every one of those screens simultaneously. The rule is blunt: if a flow spends project money, it books an expense, or it is invisible to every cost surface at once.
The fill is recorded
Date, litres, cost, currency, meter reading and who recorded it — against a specific machine, never against "the fleet".
The project is resolved from the site
The project is not typed into the fuel form; it is resolved from the site the machine is assigned to, so a fill cannot be charged to a job the machine is not standing on.
The cost is booked in the same transaction
An approved expense under the equipment category, written in the same transaction as the log — so there is never a fill the cost screens cannot see, nor a cost with no fill behind it.
One cost per fill
The link between a fill and its cost is unique at the database level, so no later path — a sync, a correction, an import — can charge the same fill twice.
Two fills that should not be charged to a job
Not every litre of fuel is project cost, and forcing a system to charge every fill to the nearest project corrupts more than it fixes. There are two cases where refusing is the correct behaviour — provided the refusal is announced at the moment it happens.
- Plant with no site assignment: a generator in the yard or an admin vehicle has no route to a project, so its cost stays a company-level cost rather than landing on some job’s budget.
- A fill in a currency other than the project’s: nothing converts, and the cost dashboard adds expenses to budget figures as if they shared a unit — so a dinar fill on a riyal project quietly corrupts every cost report on that job.
What separates a correct refusal from a hole is the announcement. When a fill is recorded and its cost does not reach a project, the screen has to say so explicitly and give the reason: "not charged — the machine is not assigned to a site", or "not charged — the currency differs from the project’s". Silence at exactly that point is what kept the whole plant branch outside cost measurement for so long.
Anything that moves money has to be reversible
The moment a fill becomes project cost, a typing error in it becomes a financial problem rather than a bookkeeping one. A figure entered as 87,500 instead of 875 lands in the budget, in the financial report and in earned value’s actual cost, and depresses the cost performance index for the rest of the job.
Because the fuel expense is written approved, it cannot be cleaned up through a "reject expense" path — that path only accepts pending entries. So there has to be an explicit delete that removes the fill and its cost together, in one transaction, and in a deliberate order: the cost first, then the log. Reverse that order and the link is gone the instant the log disappears, leaving a cost nothing can find.
An automatic booking with no automatic reversal is not automation — it is a permanent error waiting to be discovered.
Tool custody is not inventory
Hand tools and small plant are not consumed the way materials are; they are issued and returned. The useful question about them is not "how many do we have?" but "what is still out, and with whom?". The distinction matters: stock is deducted when it leaves, while a tool stays a company asset in a named person’s hands with an expected return date.
- The tool is issued to a person by name — not to "the site" and not to "the crew".
- The asset’s status moves to in-use automatically, so the same item cannot be issued to a second person.
- An expected return date is recorded, which is what turns the custody list into a follow-up list instead of an archive.
- On return the status goes back to available and the return time is stamped, leaving a complete record of who held it and when.
The part usually left out is preventing a double issue. If the system reads the status and then writes it in two separate steps, two simultaneous requests both pass and one item ends up in two people’s custody. The block has to sit on the atomic write: exactly one request succeeds and the other is told the item is already out.
Utilisation is a status discipline before it is a report
A utilisation report can never be more accurate than the discipline of updating status in the field. A machine still marked in-use two weeks after it finished makes every utilisation percentage higher than the truth, and the decision that rests on it — hire another machine or don’t — rests on a manufactured number.
The snapshot an owner actually needs is simple: how many assets in each status, how many of each type, how many litres burnt, and how many tools are still out. The detail that gets forgotten in that snapshot is currency. Summing riyal fills with dinar fills into one figure produces a total that means nothing. Litres are one unit and add up; money does not, so it is reported per currency.
How this works in muqawil
The asset register in muqawil carries the code, type, status, plate number and current site assignment, and the storekeeper owns it. When a fuel fill is recorded against a machine assigned to a site, an approved expense is booked under the equipment category against that site’s project, inside the same transaction, defaulting to the project’s own currency — so the cost appears immediately in the budget, the financial report and earned value’s actual cost.
When the cost is not booked, the screen says so and gives the reason instead of staying quiet. Deleting a fill removes its cost with it in one transaction, so a mistake leaves cost the same way it entered. Tools are issued to a named person and returned, with double-issue blocked at the write and a live list of what is still out.
Frequently asked questions
Why does fuel cost not show up in the project budget at all?
Because the cost surfaces — budget by category, the financial report and earned value’s actual cost — all read expense entries. If recording a fill writes only a fuel log and no expense against the project, the spend stays visible on a company-wide equipment screen and invisible at project level.
How does the system know which project a fuel fill belongs to?
Through the site the machine is assigned to. There is no direct link between an asset and a project; the route runs through the site, exactly as a purchase order reaches its project through the delivery site. If the machine is not assigned to a site, there is no project to charge.
What happens if the wrong amount is entered on a fill?
Delete the fill — its cost entry is removed with it in the same transaction — then record it again with the right figure. The reject-expense path does not help here because it only accepts pending entries, while a fuel cost is written approved: recording the fill is the approval.
Is yard plant with no site assignment charged to a project?
No. A generator in the yard or an admin vehicle has no route to a project, so the cost stays at company level. Charging it to the nearest job would put spend on that project’s budget that never happened on its ground.
What is the difference between tool tracking and inventory management?
Stock is deducted when it leaves and does not come back; a tool stays a company asset in a named person’s hands with an expected return date. So the useful balance for tools is "what is still out and with whom", while the inventory balance is "how much is left".
How does equipment cost affect the cost performance index?
CPI divides earned value by actual cost, and actual cost is aggregated from expense entries. So every unbooked riyal of plant spend lifts the index above the truth and makes a project that is over budget look like it is comfortably inside it.
Charge plant cost to the job it is standing on
An asset register with meaningful statuses, fuel fills that book their cost against the site’s project in the project’s currency, a delete that reverses the booking with it, and tools issued by name and returned on the record.