Skip to content

Ledger and invoices

Record the money once the job is done. Clean books are what keep repeat customers coming back — and what lets you settle up with helpers without arguing.

Open app.huanhuan.com.au. The Ledger tab at the bottom and Me → 📊 Reports are the two pages this chapter is about.

Three ways money gets recorded

Where the job came from Where you record it Button
A job on your schedule That job's card 💰 Bill
A deal that never went through Schedule (sold or served on the spot) Record a deal ✓ Record this deal
A cleaning job / repair ticket The ticket detail page 💰 Done & collect · record / 💰 Collect balance & book

Passing a self-order with ✓ Pass · record + schedule also books a deal — that path is covered in Taking and reviewing orders.

💰 Bill (a job on your schedule)

Open a job card and tap 💰 Bill. A small panel opens with three fields and nothing else:

  • Amount
  • Deposit (optional)
  • Payment method — Cash / Bank transfer / Card / Other

Tap Confirm billing and you get "Recorded ✓".

Billing does more than record money

The note under the panel reads: "This job is marked done and creates a sale (into the ledger) + a review link." So billing also marks the job done, and a done job locks — ✏️ Edit and Cancel disappear from the card, and you have to tap ↩ Reopen before you can change anything.

Once billed, the 💰 Bill button is replaced by a chip Recorded #{id}. Tap it for the "Deal recorded" page: the deal's line items, your numbers (Net today / Total operating / Deposits held), and the 📣 Ask the customer to review this deal link.

⏱ Hourly / 💵 Flat is not a billing choice

The app does have a Pricing: ⏱ Hourly / 💵 Flat switch, but it lives in the add-a-job / edit-a-job form (the card then shows "💵 Flat $xxx") — it labels the job. The other place is helper pay when you subcontract. The billing panel has neither; it just asks for an Amount.

Record a deal (anything off-schedule)

Three steps: ① Customer → ② Items → ③ Money · confirm. Step three asks for Payment method / Deposit (0 if none) / Due-back date (for rentals), shows Net on this deal live at the bottom, and finishes with ✓ Record this deal.

  • Empty deals will not save. You need at least one line item or a deposit, otherwise the page says: "Nothing to save yet: add at least one line item, or take a deposit".
  • Too busy to finish? Tap Save for later, driving now and it goes to Drafts ("Quick-saved on the go — tidy them up here later"). Come back and finish it.

Deposits sit in their own bucket

A deposit is not revenue. The Reports line spells it out: Deposits held (liability, not income) =. When you take one the hint reads "Take a booking deposit to lock the slot (booked as liability, deducted on completion)."

A deposit only ever ends up one of three ways: Applied / Refunded / Forfeited to income.

  • Closing a cleaning job with 💰 Done & collect · record asks "Mark done and record it? Deposit is auto-deducted."
  • Handing back a repair with 💰 Collect balance & book asks "Confirm handover and book it? Deposit is auto-deducted."
  • A rental comes back via ↩ Mark returned (refund deposit), which lands in the ledger as a Refund entry.

Which day does the money land on?

Every entry is a timestamped ledger record, and the timestamp is not yours to change. The Reports subtitle says so: "Daily / weekly / monthly at a glance. All figures come from timestamped ledger entries — they can't be changed." The Ledger page also carries a 📜 Audit trail (uneditable) block at the bottom.

Neither the billing panel nor Record a deal lets you choose which day an entry counts towards. So if you want your monthly numbers to match what actually happened, record it the day you finish the job. Billing is three fields; recording a deal is three short steps.

Deleting a deal deletes its ledger entries too

A deal can be deleted outright, and the confirmation is blunt: "Deleting removes this deal's ledger, lines and review invites for good. Delete?" Think before you tap.

Ledger and Reports

Ledger · Records (the Ledger tab):

  • Three figures on top: Net today / Operating total / Deposits held
  • Four filters: All · Income · Expense · Deposit, plus search by customer / note / date / #order
  • Entry kinds: Rent · Sale · Service · Buy-in · Stock use · Deposit · Refund · Expense · Repair · Delivery · Fee
  • ⬇ Export CSV (Excel), and All deals (by deal) › if you would rather browse deal by deal

📊 Report (Me → 📊 Reports): Today · N orders / This week · N orders / This month · N orders, plus This month breakdown, Last 14 days (daily), Last 8 weeks (weekly) and Last 6 months (monthly). Two exports: Download deals CSV and Download ledger CSV ("CSV, opens straight in Excel / Numbers (incl. Chinese). Good for your accountant or reconciliation.").

Don't misread 🤝 Helper income — that's money you earned elsewhere

"Helper earned / Helper paid / Helper committed" on the Ledger page and 🤝 Helper income (working for other stores) on Reports both count what you earn as a helper on someone else's jobs. They are not what you pay your own helpers. That money is in the next section.

How subcontract money moves

Once you subcontract a job, the money splits across two sides. The full flow is in Private dispatch (your own helpers); here is just the money.

1. Set the pay when you dispatch. Two ways: Fixed price (one agreed total per person) or ⏱ Hourly — the live wording is "Pay per helper = base + rate × hours. Quoted on the estimate; settled on actual hours at completion."

2. The helper taps ✓ Mark done. For a fixed price that is a single confirmation. For hourly it opens ✓ Mark done · settle hours, where they enter Actual hours and see the settled figure computed on the spot as base + rate × actual hours.

3. You read the job's books. The subcontract detail page has a card only the owner can see, This job’s books:

Revenue booked − Subcontract cost = Net

If the source job has not been billed yet it reads "Net $xx (not booked yet, subcontract cost only)" — a reminder that the revenue half is still empty.

4. You can still fix the hours before you pay. On an hourly job, after the helper marks it complete and before you tap Mark paid, that row gets an input plus 🕐 Adjust hours. Enter the corrected Actual hours and the pay recalculates on the new figure. (The helper's own screen says as much: "The owner can adjust them with you before paying out.") Fixed-price jobs have no such control.

5. The actual payment happens outside the app. Cash, bank transfer, whatever you agreed — HuanHuan never touches the money. Once you have paid, come back and tap Mark paid; the row turns to ✓ Paid, and on the helper's side the same job flips from "Waiting for owner to settle" to ✓ Paid.

Helpers never see what the job sold for

Printed right under the dispatch button: "Helpers only see their own amount, not the price of the job itself."

This cost has no category in the Ledger list

The ledger's entry kinds (Rent / Sale / Service / Buy-in / Stock use / Deposit / Refund / Expense / Repair / Delivery / Fee) have nothing for subcontracting. To see what one job cost you in helper pay and what net was left, open that subcontract's This job’s books card.

Invoices and GST

Invoices are a completely separate module, under Me → More → 🧾 Invoices, subtitled "Australian Tax Invoice (AUD, GST 10%). Issue, print/save PDF, track receivables."

  • + New invoice opens a blank invoice; you type the line items yourself. There is currently no way to raise an invoice from a recorded deal — invoices and deals are not linked.
  • Three states: Draft / Sent / Paid. "Owing $xx" only shows in the list while money is still outstanding and the state is not Paid.
  • The printed heading follows the GST tick: ticked prints TAX INVOICE, unticked prints INVOICE.
  • Your business details, ABN, address, email, theme colour, invoice logo, bank-transfer details and default terms all live in ⚙ Invoice settings and apply to new invoices automatically. That page also holds the switch "Include GST 10% on new invoices by default".

The totals at the bottom of the invoice editor stack up like this:

Row How it is worked out
Subtotal Every line's Qty × Unit price, added up
Discount The discount amount you typed
GST 10% When GST is ticked = (Subtotal − Discount) × 10%; unticked, the row reads "GST (excl.)"
Total (AUD) (Subtotal − Discount) + GST
Paid The amount you typed as received
Balance due Total − Paid

The box says 'Include GST 10% (Tax Invoice)' — but the 10% is added on

Tick it and 10% is added on top of (Subtotal − Discount) — the total goes up by 10%; it is not backed out of a GST-inclusive figure.

That leads to one easy mistake: Paid has to be the GST-inclusive amount you actually received. Put the pre-GST figure in Paid and the balance will not clear — it will sit at exactly 10%. Check the Total and Paid rows against each other before you send.

Also note the print view does not round amounts to two decimals the way the editor does, so a long decimal tail can show up. Glance at the printed figures; if something looks off, go back to the editor and fix Paid.

Next