AWRA OpsHub Search

A Budget That Warns and a Status That Refuses

This module will refuse to move a project from planning straight to completed. It will not refuse to spend twice its budget. One of those is enforced by a state machine and the other is a percentage on a screen.

Projects & Job Costing AWRA OpsHub Team 12 min read

Every system draws a line between what it prevents and what it merely records, and the line is almost never where a user expects. Finding it is more useful than any feature comparison.

What is enforced

The project lifecycle. There is a real state machine here with a defined set of permitted moves, and an attempt to make a move outside it is refused.

  1. Planning can become active, on hold, or cancelled

    What it cannot become is completed. A project cannot be finished without having been started, which is a small rule that prevents a surprisingly common data mess.

  2. Active can go on hold, complete, or be cancelled

    The ordinary path, and the only one most projects ever use.

  3. On hold can resume, complete, or be cancelled

    Completing from on-hold is permitted deliberately — work that stalled and was then finished elsewhere is a real situation.

  4. Completed can only reopen; cancelled can only revive to planning

    Both are one-way doors back to a specific state rather than a free-for-all. A cancelled project returns to planning, not to active, so reviving it means re-planning it.

That is a considered design. The transitions that are missing are missing on purpose, and the two recovery paths land somewhere sensible rather than wherever the project happened to be.

What is not

Anything to do with money.

A project can carry a budget, and there is a figure showing what percentage of it the actual cost has consumed. That figure is a number on a screen. Nothing refuses a purchase, an expense, a stock issue or a time entry because a budget is exhausted.

There are no percentage thresholds, no warning at seventy per cent, no escalation at ninety, and no hard stop at any figure. The availability check that exists elsewhere in the product is binary rather than tiered, and a budget overrun is a warning.

This product's own feature page once claimed otherwise — thresholds, an escalation ladder and hard stops — and that copy was corrected rather than the feature being built, because the honest answer was that none of it existed.

What the projects module prevents versus records

Action Refused Warned Recorded only
Moving planning straight to completed Yes No No
Editing a time entry already invoiced Yes No No
Editing a time entry already paid out Yes No No
Spending past the budget No Partly — configurable by you Yes
Logging time into a closed month No No Yes
Issuing more stock than the job needs No No Yes

Built and maintained Configurable by you, not maintained by us Not built

The top three are refusals in code. The bottom three are things you will find out about afterwards, from a report you have to open.

The state machine will stop you telling a lie about a project. Nothing will stop you spending its budget twice over.

Which is the right design

Both, arguably, and it is worth arguing rather than assuming.

A state transition is cheap to refuse because there is always a legitimate alternative — if you meant to complete a project, activate it first. Nobody is blocked from doing real work.

A budget refusal is different. The material has arrived, the hours have been worked, the invoice is on the desk. Refusing to record it does not un-spend the money; it produces an unrecorded cost, which is worse than a recorded overrun. The same argument appears elsewhere in this product about storage capacity, and the conclusion was the same: warn and measure rather than refuse.

What is missing is not the hard stop. It is the middle: a threshold that warns somebody at seventy per cent, while there is still a decision to make.

What we would build

The middle, not the hard stop

We would decline to build a refusal and say why. The useful thing is the warning that arrives while the overrun is still avoidable.

A budget threshold that notifies

A percentage per project, or a default across all of them, that raises an alert to the project owner when actual cost crosses it. The notification machinery already runs for six other things in this product; what is missing is the evaluation.

A required note above a stated percentage

Not a refusal — a prompt for a reason when a cost is booked against a project already over its budget, recorded on the transaction. It keeps the record true, which a hard stop does not, and it makes the overrun explicable afterwards.

How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. If you want an actual hard stop we will build it and note on the record that we advised against it.

Talk to us about budget controls

Project controls, precisely

What AWRA OpsHub does today

  • A project state machine with defined transitions, enforced — including no direct path from planning to completed.
  • Cancelled projects reviving to planning rather than to active, so a revived project is re-planned.
  • Time entries sealed once invoiced or paid out, with edits refused.
  • A budget consumption percentage against actual cost, returning nothing when no budget is set.
  • Actual cost assembled from logged labour, purchases, booked expenses and issued stock.

What it does not do

  • Any refusal, warning or escalation based on budget consumption. No thresholds exist at any percentage.
  • Any hard stop on spending against a project.
  • Any budget by category, phase or period — a project has one money budget.
  • The timesheet month lock on project time.
  • Any check that stock issued to a job is proportionate to it.

Not ours, by choice

  • A public feature page of ours once described budget thresholds, an escalation ladder and hard stops. None of it existed and the copy was corrected rather than the feature invented. We mention it because the same words appear on a lot of software.
  • Declining to build a hard stop is a position rather than a limitation, and it is the same reasoning applied elsewhere in this product: a control satisfied by not recording something is a net loss.
  • Nothing here is Mauritian, Seychellois or Malagasy. The Indian Ocean hub carries this because project work there frequently runs on fixed grants and fixed fees, where an overrun has nowhere to go.

Four questions about project controls

What will this system actually refuse to let me do?

A good answer sounds like

A short, specific list.

What it actually means

The best question in any evaluation. A long list is usually aspirational; a short one is usually true.

Does anything happen at 80% of budget?

A good answer sounds like

A notification.

What it actually means

Ours is nothing. "Warn at X, escalate at Y" is one of the most commonly claimed features that does not exist.

What happens when I book a cost over budget?

A good answer sounds like

It records, and warns.

What it actually means

If the answer is a refusal, ask what the user is expected to do with the invoice on their desk.

Can a project be completed without being started?

A good answer sounds like

No.

What it actually means

A small thing, and its presence tells you somebody thought about the lifecycle rather than shipping a status dropdown.

Our position

Treat the budget percentage as a report you open rather than a control that protects you, and put a standing review of projects over eighty per cent into somebody's week — that review is the control until a threshold exists. The state machine, by contrast, you can rely on: it refuses in code, and the transitions it forbids are forbidden for reasons.

Ask what it refuses

Not what it tracks, warns about or reports on. What it refuses. The list is always shorter than the brochure and it is the only part you can depend on.

Talk about project controls

Frequently asked questions

Can I set a budget per phase?

No — a project carries one money budget. Phases and milestones exist as structure but not as budget holders, so a phased budget is something you track alongside rather than inside.

Why does budget consumption return nothing sometimes?

Because no budget is set. A percentage of zero is not a meaningful number, so it deliberately returns nothing rather than a hundred per cent or an error — which is the right call and worth knowing when a tile looks blank.

Would a hard stop be safer?

Usually not. The cost has already been incurred by the time somebody is recording it, so a refusal produces an unrecorded cost rather than an avoided one. A prompt for a reason keeps the record true and still makes somebody stop and think.

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center