Billing

Billing works in collections. A collection is one charge — "2026 Maintenance Fee" — applied to every house at the same amount. Creating it generates one invoice per house; publishing it makes those invoices visible and payable.

Before you can bill

Billing needs Billplz credentials. Until they're saved, Admin → Billing shows a red notice and no New collection button.

Get a Billplz account, then Admin → Settings → enter your secret key and X-Signature key. See Site settings.

Creating a collection

Admin → Billing → New collection:

  • Title — what residents see. "2026 Maintenance Fee".
  • Description — optional note shown alongside it.
  • Amount per house (RM) — the same for every house.
  • Due from — optional. The day the invoices start being owed. Leave it empty and they're due the moment you publish; set it and they show as Issued until then — visible and payable, but not counted as outstanding and never chased. This is how you bill a period before it starts.
  • Due date.

Tap Create. This generates a draft invoice for every eligible house. Nothing has been sent yet.

Set your main contacts first

Check every house has a main contact before you create a collection. A house with no main contact has nobody to invoice, so it is silently left out — you'll see a yellow notice saying "N houses skipped — no registered contact", but only a count, not which ones.

This matters more than it looks, because a collection can't be deleted or edited once created. There is no way to add the skipped houses to it afterwards, and no way to throw it away and start over — a draft you regret sits in your billing list permanently. Your only options are to publish it as-is, or cancel its invoices one at a time.

So: fix contacts first (Houses and residents), then create the collection. If you've already created one with houses missing, publish it, then create a second collection for the stragglers and cancel the duplicate invoices it generates for everyone else.

Publishing

Review the invoice list. Each row shows the invoice number, the main contact's name, the house address, and the amount.

When it looks right, tap Publish. You'll be asked to confirm the count. After that:

  • The collection flips from Draft to Published.
  • Every invoice goes from draft to sent.
  • Residents see the bill under Invoices and can pay it.

Publishing is not reversible. To undo it you'd have to cancel each invoice individually — so read the list before you tap it.

Telling residents

Teras does not send the bill out. Publishing makes it visible in the app; announcing it is up to you, through whatever channel you already use.

Use Copy link on any invoice row to get that household's payment link — useful for chasing one specific house over WhatsApp. The link works without signing in, so the resident can forward it to whoever actually pays.

Tracking payment

The collection screen shows Paid (a count of houses) and Collected (an amount against the total). Both update on their own — when a resident pays, the gateway tells Teras and the invoice flips to paid without you doing anything.

Individual rows show draft, sent, paid, or cancelled, and paid rows carry the date.

Cancelling an invoice

Cancel on a row stops that household being able to pay it. Use it for a house billed in error, or one that has settled outside the app.

A paid invoice can't be cancelled. A cancelled invoice can't be reinstated — issue a new collection instead.

What Teras doesn't do

  • No reminders. Nothing chases residents automatically. Overdue bills are marked as such in the resident's app, but following up is manual.
  • No refunds. Handle those directly with Billplz.
  • No per-house amounts. One collection is one amount for everyone. Bill a different figure by creating a separate collection — though it will still generate an invoice for every house, so cancel the ones you don't want.
  • No offline payment tracking yet. If you collect by bank transfer, there's no way to mark an invoice paid by hand.