MilkGo
/User Guide
User Guide

09. Billing & Khata — Monthly Bills

The Billing screen replaces the back of your paper register where you used to write "Ramesh — March — ₹4,200". MilkGo computes the monthly bill from delivery and counter-sale records and keeps it up to date as you mark deliveries through the month.

Before you start

  1. 06-subscriptions.md — at least one subscription so deliveries exist
  2. 07-deliveries.md — and/or 08-counter.md — so there's something to bill

You don't generate bills manually. They build up as deliveries / sales accumulate.

Where to find it

Bottom navigation → Billing (receipt icon).

There's also a per-customer view: open any customer → View Khata button. That shows only that customer's bills across months.

Bill lifecycle

Draft → Generated → Sent → Paid / Partial / Overdue
StatusWhat it means
DraftBill is being built up as deliveries are marked. Editable.
GeneratedMonth is over (or you tapped Generate). Bill total is locked in.
SentYou sent the bill via WhatsApp. Customer has the PDF.
PartialCustomer paid some, balance still due.
PaidFully paid, balance = 0.
OverduePast due date with balance > 0.

Auto-reopen behaviour: if you add a new delivery to a Paid month later, the bill flips back to Partial automatically. Money already collected stays.

How a bill is built

For each customer, each month, MilkGo aggregates:

ComponentSource
Delivery itemsMarked deliveries (subscription-based) for that month
Counter sale itemsWalk-in sales linked to that month
AdjustmentsManual additions / discounts you add
Previous balanceCarryover from earlier unpaid months (informational; doesn't double-count)

Final amount = Total items + Adjustments Balance due = Final amount − Amount paid

Reading the Billing screen

Each card shows:

  • Bill number (e.g. BILL-202604-001) and period (1 Apr – 30 Apr)
  • Customer name + code
  • Status badge (color-coded)
  • Bill amount · Paid · Due in a single line
  • Quick action buttons — Pay, Remind (if enabled)

Filter & search

Top of screen:

  • Status tabs — All / Generated / Partial / Paid / Overdue
  • Search box — by customer name, customer code, or bill number

Useful for sweeping through "who's overdue" at month-end.

Opening a bill — the Bill drawer

Tap any bill row → drawer slides in with:

SectionWhat's there
HeaderCustomer + month + status
Delivery itemsEach product, total qty, rate, amount
Counter itemsSame, for walk-in sales
AdjustmentsManual ₹+/− entries you've added
Previous balanceCarryover info
TotalsBill amount, paid, balance due
PaymentsEach payment recorded against this bill
ActionsSend via WhatsApp · Record Payment · Adjustment · PDF

Manual adjustments

Sometimes you want to add a discount or extra charge:

  1. Open the bill.
  2. Tap + Add Adjustment.
  3. Pick:
    • Type — Discount (₹−) or Extra (₹+)
    • Description — e.g. "Diwali discount" or "Late delivery refund"
    • Amount — in ₹
  4. Save.

Adjustments are listed separately on the bill PDF so customers see what changed.

Send the bill via WhatsApp

(Only visible if your plan has WhatsApp + the Monthly bill owner toggle is on. See 11-whatsapp.md.)

Two ways:

Single bill

  1. Open the bill drawer.
  2. Tap Send Bill via WhatsApp.
  3. The customer receives:
    • A WhatsApp message with the bill_summary template (month, products, total, paid, pending)
    • A PDF attachment with full delivery details
  4. Bill status flips from GeneratedSent after a successful send.

Bulk send — "Send All Due"

  1. On the Billing screen, tap Send All Due (top-right, green button).
  2. A modal opens listing all unpaid bills for the chosen month.
  3. Select / deselect specific customers (default = all selected).
  4. Tap Send N Bills.
  5. Watch the progress bar — each bill is sent one by one with a 350 ms gap (rate-limit safe).
  6. End screen shows totals: Sent / Failed / Cancelled.

Bulk failures (e.g. customer's WhatsApp number is blocked) appear in the failed list with the reason. You can Retry Failed in one tap.

Bill PDF

The PDF auto-generated from the bill is in the owner's preferred language (Gujarati / Hindi / English). It contains:

  • Header with your business name + phone
  • Customer block with name + address
  • Bill number + month + due date
  • All delivery items grouped by product (qty, rate, amount)
  • All counter sale items
  • Subtotal · Adjustments · Final amount · Paid · Balance due
  • Footer with your contact for queries

To download manually: open the bill → Download PDF.

Recording a payment

Tap Pay (or open the bill → Record Payment). See the full flow in 10-payments.md.

Tips

  • Don't worry about "generating" bills. They build as you mark deliveries. Open them at month-end for a final review.
  • Add adjustments before sending. Once the customer has the PDF, changes look messy. Adjust → review → send.
  • Use the bulk send on the 1st of the next month. Most owners send all due bills the same day they generate.
  • Filter by Overdue regularly. End of week, sweep the overdue list and tap Remind on each.

Common mistakes

MistakeFix
Bill amount looks wrongOpen the bill — check delivery items vs your records. Edit any wrong delivery on the Deliveries screen and the bill auto-recomputes.
Sent the bill but customer says "didn't get it"Check Settings → WhatsApp Notifications → usage. If quota was full, message wasn't actually sent. Resend after next month resets.
Customer paid more than the billExcess goes to advance balance automatically — see 10-payments.md.
Two customers got the same bill numberBill numbers are owner-scoped, so duplicates can't happen for one owner. If you see BILL-202604-001 twice on Customer A and B — that's actually two different rows; check the customer column.

What's next?

Once bills are flowing, focus on collection:

Related upstream