Water Utility Reference Public

FAQ & Troubleshooting

Answers to the questions Water Utility operators actually ask: why a screen or button is missing, why a bill will not compute or post, why a senior discount did not apply, how to fix a wrong reading or a wrong receipt, plus a glossary of the module's vocabulary.

Guide version: r1 Module version: 2.0.0 Updated: 2026-08-23 Estimated time: 11 min 8 views 0% helpful
Reference

FAQ & Troubleshooting

The questions that actually come in — missing buttons, blocked workflows, numbers that look wrong — with the reason behind each one. Most "bugs" on this page are controls working as designed; the answer tells you which.

Access and visibility

The Water Utility menu is missing entirely

Two possible causes, in this order:

  1. The module is off. Settings → Manage Modules → enable Water Utility.
  2. Your role has none of its permissions. The group needs at least Billing Accounts to appear at all.
Some sub-screens are missing but others are there

That is permissions, and it is intended. Each child screen is gated on its own permission — Reading needs Reading Cycles & Capture, Billing needs Bill Runs & Bills, Collections needs Cashiering & Collections, and so on. There is no per-feature settings switch to look for; the whole module has exactly one on/off setting and everything below it is a permission decision.

I can see a screen but the Add / Edit buttons are gone

You have the base permission but not its create / update child. Ask an administrator to grant it in the Roles editor — the children sit grouped under their parent permission.

Nobody can approve a tariff version

Expected on a fresh install. Approve Tariff Versions is a separate permission and starts out granted to no role at all, so that appointing a checker is a deliberate act. Grant it to a supervisor role. Note that even then, the person who drafted a version cannot approve their own — that check is on top of the permission, not instead of it.

Our billing clerk cannot post the run

Also expected. Computing and approving/posting are separate permissions on purpose, so the month's money gets a second pair of eyes. If your district really wants one person to do both, an administrator can grant both keys — but understand what you are giving up.

Reading and validation

The reader cannot enter a reading

Check, in order: the cycle is in the reading state (not still draft, not already closed); the account's connection is in the cycle's zone; the account is active; and there is an installed meter on the connection. A tap with no meter installation has nothing to read.

A reading was flagged as an exception — is it wrong?

Not necessarily. An exception means "this deserves a human look", not "this is wrong". Most resolve as correct with an explanation — a tank refill, a leak since repaired, an empty house. Record the explanation in the resolution note: that note is what you show the customer when they query the bill.

A reading was entered wrong. How do I fix it?

Before billing: a validator can correct the value or request a re-read. The original value and the correction are both retained.

After billing: the reading is consumed and final. Correct the money instead — cancel the bill, or raise a signed adjustment against it. The next actual read then absorbs the difference naturally, because consumption is always the delta between two register values.

The cycle will not close

The close screen lists what is blocking it — typically reads still awaiting validation, or exceptions still open. Clear them; do not look for a way to close around them. An unclosed cycle cannot be billed, which is the safety this gives you.

A customer says the meter was replaced mid-month

That is handled. Pull the old meter (recording its removal reading) and install the new one (recording its installation reading). The bill computes each installation's span separately, on its own digit count and multiplier, and adds them — and it names both installations in the bill's snapshot, so the arithmetic is explainable.

Billing

A senior citizen's bill has no discount line

The most-asked question, and it is a configuration gap rather than a fault.

The module ships the discount enabled but with no rate configured — because the statutory percentage and consumption ceiling under RA 9994 have to be verified per district against the current implementing rules, and inventing a number that prices real bills would be worse than showing none.

Open the bill's snapshot and you will see the exact refusal reason recorded against it. Put the rate and ceiling into your tariff configuration and the line appears on the next run.

A tariff version will not approve — the validator rejects it

The validator checks each meter size independently. The usual causes:

  • Does not start at zero — the first block for that size must begin at 0. If you have a size-specific minimum, remember the fallback set for sizes with no rows of their own also needs a minimum.
  • Gap — one block ends at 20 and the next starts at 25; the 5 cu.m between them would be unbilled.
  • Overlap — two blocks both claim the same cubic metre.
  • No open-ended top block — consumption above the last bound would have no rate.
  • Open-ended block is not last, or there is more than one.
  • More than one minimum for a size.

The database cannot express these rules, so this check is genuinely the only thing standing between a mis-keyed tier and a month of wrong bills. Fix the tiers rather than working around it.

An approved tariff has a wrong rate. Can I edit it?

No — and there is no hidden way to. Create a new version with a later effective date, which is what a board resolution does in reality. Bills already issued under the old version stay reproducible, which is the whole point.

If the wrong version has already priced bills, correct those bills with adjustments or cancellations; do not attempt to rewrite history.

The bill run will not compute

Usual blockers: the cycle is not closed; some reads are still unvalidated; no approved tariff version is effective on the billing date for a customer class present in the run; or an account has no installed meter. The compute screen names the blocker.

A bill total looks wrong. How do I prove what happened?

Every posted bill freezes a snapshot at the moment it was computed. It records the tariff version and the tier set as applied, the meter size, digits and multiplier, both register values and the branch taken (normal, rollover or meter replacement), the senior-discount decision and why, the arrears composition bill by bill, the rounding rule, and the calculator version that produced it.

That is deliberately enough to re-derive the bill years later without relying on tables that have since been superseded several times.

Why is there no penalty line on an overdue bill?

A penalty is derived for the aging report and for notices, but it is only ever written once — as a line on the next bill. Nothing accrues it daily. That single-writer arrangement is what stops the same penalty being charged twice from two different places.

A customer used no water. Why is there still a bill?

The minimum charge is a standing charge for having a connection, so a zero-consumption month still bills the minimum for that meter size. That is the LWUA shape, not a fault.

Cashiering and collections

The system will not generate an OR number

Correct — it ships in manual receipt mode, where the teller types the number from the printed booklet and the system only checks it is not already used. Switching to system mode is an administrator decision that should involve whoever answers to COA for your accountable forms.

A receipt was posted for the wrong amount or the wrong account

Void it and re-issue. Voiding needs the separate Void Official Receipts permission and a mandatory reason. The voided receipt keeps its number — a number is never reissued or reused. Its allocations release, so the bills it had settled become outstanding again immediately.

The payment went to the wrong bill

Allocation is oldest bill first by design, so this is usually the system being right and the expectation being different. Check the allocation preview before posting next time. If the allocation genuinely must change, void the receipt and re-issue.

The batch total does not match my cash

Open the batch detail and compare receipt by receipt. Look for a receipt posted to the wrong batch, or one voided after you counted. A supervisor can reopen a closed batch to correct it — and the reopening is itself recorded.

A customer overpaid. Where does the excess go?

It stays as unallocated credit on the account and is applied to the next bill. The allocation preview shows the unallocated amount before you post, so you can tell the customer what will happen.

Enforcement

An overdue account is not appearing as a disconnection candidate

Check: is it still inside the grace period? Does it have an active promise to pay holding it? Is the account actually active (rather than already disconnected or closed)? And has the nightly servicing job run — if no cron runtime is ticking, the candidate list is stale.

A promise to pay lapsed but the account is still held

Promises are broken by the nightly job once their date passes. If nothing has changed, confirm the job is scheduled and the cron runtime is running. You can also cancel the promise by hand.

The customer paid but reconnection is refused

The reconnection threshold setting decides this. At its shipped value the balance must be settled in full before reconnection. An administrator can allow reconnection at a residual balance instead — that is a district policy decision, not a technical one.

Demo data

How do I get rid of the demo data?

php erpat db:seed WaterUtilityDemo --remove, or the Remove button in Settings → Maintenance → Seeders. It soft-deletes — the rows are marked deleted, never destroyed — and only claims rows it can still identify by their WU-DEMO- code. Rows you renamed are deliberately left alone.

Is it safe to run the demo seeder twice?

Yes. A second run changes nothing at all: it reports every row as already current, and a row-by-row comparison comes back identical. Running it after a removal restores the same demo rather than creating a second copy.

Can I load the demo into our live district?

Strongly discouraged. It creates six customers in your real customer registry, six accounts, four bills and two receipts. It is designed for training and evaluation databases. Use --dry-run first to see exactly what it would touch.

Can I bill customers using the demo tariffs?

No. Those rates are invented to demonstrate the tier shape. Create your own tariff from your board-approved schedule, with the real resolution reference, and approve that.

Glossary

TermMeans
ZoneA billing and reading area. Cycles, route books and advisories are all scoped to one.
Service connectionThe physical tap at an address. The stable entity — people move, the tap does not.
Billing accountOne customer's tenure on one connection. Closing and reopening is how ownership transfers.
Meter installationOne meter's period of service on one connection. Readings attach here.
Reading cycleOne zone, one billing period, one reading window.
Route bookA reader's walk order through a zone.
ExceptionA flag that a read needs a human look before it becomes a bill.
Tariff versionAn effective-dated, board-backed rate schedule. Immutable once approved.
TierA minimum charge or a consumption block within a version.
Bill runOne pricing pass over one closed cycle: computed, approved, posted.
SnapshotThe frozen record of everything used to price a bill — the dispute-resolution artefact.
ArrearsPrior unpaid balance carried onto the current bill, itemised bill by bill.
OROfficial receipt. Numbers are never reissued; a void keeps its number.
AllocationApplying a receipt across outstanding bills, oldest first.
Collection batchA teller's shift of receipts: open → closed → remitted.
AgingOutstanding balances banded by how long they have been overdue.
Promise to payA dated commitment that holds an account off the disconnection ladder.
Service orderA field job: connect, disconnect, reconnect, change meter, investigate a leak, re-read.
AdvisoryA zone-targeted public notice — interruption, quality or general.
cu.mCubic metre, the billing unit. Register values and consumption carry three decimal places.

Still stuck?

Before escalating, gather these — they answer most of the first round of questions:

  • The exact account number, bill number or OR number involved.
  • What you expected, and what happened instead.
  • Your role, and which Water Utility permissions it holds.
  • For a disputed bill: its snapshot, which explains the arithmetic on its own.
  • For a workflow that will not advance: the blocker message the screen showed you.
  • The relevant audit log entries — who did what, and when.

Module support contact: ERPat Team.

Next steps

Was this guide helpful?

Report a content problem