Bill Management
Overview
The Bill Management module provides a tabbed bill list with 7 status categories, detailed bill views, multi-bill selection and payment, and a Pay for Others flow for cross-user bill payment.
Navigate to: Sidebar → Bill or /bill
Bill List

| Element | Description |
|---|---|
| Search bar | Search by bill number, property, or reference |
| Filter tabs | 7 tabs: All (N), Overdue (N), Cancelled (N), Adjusted (N), Paid (N), Partial (N), Pending (N) — each shows a live count |
| Bill cards | List of bills matching the active filter |
Bill Card
| Field | Description |
|---|---|
| Bill Number | Unique identifier, e.g. #2026000000000022 |
| Property | Property ID or name |
| Amount | Outstanding amount in GH₵ |
| Total Bill | Full bill amount |
| Due Date | Payment deadline |
| Status badge | Paid, Unpaid, Partial, Overdue, Cancelled, Adjusted, Pending |
| Overdue flag | Red indicator with clock icon when past due date |
Multi-Bill Selection
Checkboxes on bill cards allow selecting multiple bills for batch payment. A sticky bar at the bottom tracks:
| Element | Description |
|---|---|
| Selected count | Number of bills selected |
| Total amount | Sum of selected bills' outstanding amounts |
| Pay Now button | Proceeds to payment for all selected bills |
!!! tip "Things to check"
- Filter tab counts match the actual number of bills in each category
- Overdue flag only appears when the due date has actually passed
- Search correctly matches by bill number, property, or reference
- Selecting/deselecting a bill updates the count and total immediately
- Pay Now is disabled when no bills are selected
- Bills with status Paid or Cancelled cannot be selected for payment
Bill Details
Opened by tapping a bill card.

Bill Information
| Field | Description |
|---|---|
| Bill No | Unique bill identifier |
| Ratepayer | Name of the rate payer |
| Property | Property ID |
| Year | Billing year |
| Issue Date | Date the bill was issued |
| Due Date | Payment deadline |
| Status | e.g. UNPAID (red), PAID (green) |
Bill Breakdown
| Field | Description |
|---|---|
| Property Rate for property#... | Base rate amount |
| Penalties | Late payment penalties |
| Discounts / Waivers | Applied discounts or waivers |
| Other Fees | Additional fees |
| Total Bill | Sum of rate + penalties + fees, less discounts |
| Paid | Amount already paid to date |
| Outstanding Amount | Total Bill − Paid |
Actions
| Action | Description |
|---|---|
| Pay Now | Opens the payment modal for this bill |
| View / Print Bill | Opens or downloads the bill document |
!!! tip "Things to check"
- Total Bill = Property Rate + Penalties + Other Fees − Discounts/Waivers
- Outstanding Amount = Total Bill − Paid — confirm the math holds
- Status badge color matches the bill state
- Pay Now is disabled for bills with status Paid or Cancelled
- View / Print Bill produces the correct bill for the correct property
Payment Modal
Opened via Pay Now from the bill details or from multi-bill selection.

| Element | Description |
|---|---|
| Amount to Pay | Editable amount field, starts at GH₵0.00 |
| Outstanding | Read-only reference of the remaining balance |
| Quick-select buttons | 25%, 50%, 75%, 100% — auto-fill Amount to Pay as a percentage of Outstanding |
| Enter custom amount | Manual input, overrides the quick-select buttons |
| Pay GH₵[amount] button | Submits the payment — label updates live as the amount changes |
| Contact support link | Help link for payment issues |
A note confirms payments are secured and encrypted.
!!! tip "Things to check"
- Quick-select percentage buttons calculate correctly against Outstanding, not the full Total Bill
- The Pay button label updates live as the amount changes, and is disabled at GH₵0.00
- Overpaying (amount greater than Outstanding) is either blocked or handled sensibly
- Paying via each available method completes successfully
- After payment, the bill status updates correctly in the bill list
Multi-Bill Payment
When multiple bills are selected from the bill list, Pay Now opens a consolidated payment summary before the actual payment.

| Field | Description |
|---|---|
| Bills Selected | Count of selected bills |
| Total Outstanding | Sum of outstanding amounts across all selected bills |
| Paying Now | Sum of amounts actually being paid (may be less if any are partial) |
Each selected bill is listed individually with its own Outstanding and Paying Now amounts.
!!! tip "Things to check"
- Paying Now at the top equals the sum of every bill's individual Paying Now amount
- Each bill's amount is itemized correctly and none get dropped or duplicated
- The final Pay button amount matches Paying Now, not Total Outstanding
- Partial payment amounts persist correctly when deselecting and re-selecting bills
Payment Success
Shown immediately after a successful payment.

| Field | Description |
|---|---|
| Amount paid | Total amount paid in this transaction |
| Bill Number | Bill identifier(s) |
| Reference No | Unique transaction reference |
| Ratepayer | Rate payer name |
| Payment Method | e.g. card |
| Paid On | Timestamp |
| Description | e.g. Property Rate for property#... |
Actions: View / Print Receipt, Share Link, Browser (opens the receipt in-browser).
The receipt includes a QR code for verification and can be accessed publicly
via /receipt/:id.
!!! tip "Things to check" - The paid amount, bill, and outstanding balance update correctly in the bill list after payment - Reference No is unique per transaction, never reused - Share Link produces a link that opens the receipt without requiring login - View / Print Receipt produces a formal, printable receipt with QR code
Pay for Others
Navigate to: /bill/payother
Lets a rate payer pay a bill on behalf of another rate payer, by looking up that person's bills via their phone number and an OTP verification step.

Step 1: Enter Phone Number
| Field | Required | Description |
|---|---|---|
| Rate Payer's Phone Number | Yes | Country code selector (defaults +233 Ghana) + number |
Verify & Search Bill button starts OTP verification.
The flow is documented on-screen:
- Enter the registered phone number of the rate payer.
- iDARMS securely verifies ownership using an OTP sent to that number.
- All outstanding property bills linked to this number are displayed.
- Select one or multiple bills and pay fully or partially.
- A payment receipt is generated instantly after success.
!!! tip "Things to check" - A phone number not registered in the system shows a clear error - The payer cannot pay for their own number here — or if they can, confirm that's intentional
Step 2: Verify OTP

| Element | Description |
|---|---|
| OTP Sent Successfully notice | Confirms the OTP was sent to the rate payer's registered email and mobile |
| 6-digit code input | One digit per box |
| Countdown timer | e.g. Valid for 04:45 |
| Cancel / Verify | Verify stays disabled until all 6 digits are entered |
!!! info "Whose OTP is this?" The OTP goes to the rate payer being paid for, not the person paying. This only works if the payer can access the rate payer's phone or email.
Step 3: Bill Search Results
Once verified, matching bills for that phone number are displayed. Each result card shows the same fields as a bill card on the main bill list.
A Search Another button appears to look up a different number.
Step 4: Bill Details & Payment
Tapping a result opens a Bill Details sheet with full information and a Pay Now button. The flow then matches the standard payment flow.
!!! tip "Things to check" - If the rate payer has no outstanding bills, this is stated clearly - Search Another clears the previous result and returns to phone number entry - The receipt's Ratepayer field shows the bill owner, not the person paying - After payment, the bill status updates for both the payer and the actual rate payer - This payment appears in the payer's Payment History, attributed to the correct property