Billing & GST
Create bills, calculate GST for exempt healthcare and taxable items, collect payments, print invoices, issue credit notes, close cash, reconcile UPI and review practitioner payouts.
Who can do this: Receptionists/cashiers use billing.read and billing.create; branch managers/owners use billing.refund, finance.cashClosing.approve, finance.reconcile, services.manage and settings.manage; accountants use finance.read, reports.financial and finance.reconcile; payout admins use finance.payout.manage.
Where: Billing (/app/billing), create (/app/billing/create), bill details (/app/billing/:billId), payment (/app/billing/:billId/payment), print (/app/billing/:billId/print), Cash Closing (/app/revenue/cash-closing), Practitioner Payouts (/app/revenue/payouts), Services (/app/services).

The app follows configured GST settings and service tax categories. Confirm registration type, rates and HSN/SAC codes with your tax advisor.
Before you start
- Create active services with correct tax category.
- Save GST profile if the clinic is registered.
- Confirm patient, branch and practitioner before billing.
- Keep transaction ID or UTR ready for non-cash payments.
Set GST and tax categories
- In GST settings, choose Registration type: Regular (registered), Composition scheme or Not registered. Result: Bill print title and notes follow the profile.
- Enter GSTIN, Legal name, state and address where applicable. Result: GST details print on invoices.
- In Services, choose Tax category. Result: Each bill line is classified.
- Use Exempt healthcare (SAC 9993) for healthcare by a clinical establishment or authorised practitioner. Result: GST rate is 0 percent and the exemption note prints.
- Use Taxable service for taxable cosmetic or aesthetic services, with SAC code, GST rate (%) and Place of supply. Result: Tax is calculated at save.
- Use Taxable goods for medicines or consumables sold separately, with HSN code and GST rate (%). Result: The line is taxed as goods.
Create a bill
- Open Billing Management and click + Create New Bill.
Result:
/app/billing/createopens. - Search and select the patient. Result: Patient details fill in.
- Choose the practitioner. Result: Reports and payouts can link revenue.
- Select a service and add it to the bill. Result: The item appears in the table.
- Adjust quantity, price, discount and notes. Result: Totals update.
- For B2B or interstate GST, enter Buyer GSTIN, Buyer legal name and Patient / buyer state in GST summary. Result: Tax preview shows taxable value, exempt value, CGST, SGST or IGST and invoice total.
- Save. Result: The bill details page opens.

Record payment and print
- Open the bill payment page or the print page. Result: The due amount appears.
- Enter Amount and choose Cash, UPI, Card, Bank transfer, Cheque, Online or Other where available. Result: Payment mode is saved.
- Enter transaction reference for UPI, card, online or bank transfer. Result: Finance can reconcile it later.
- Submit payment. Result: The bill becomes Paid in full, Partially paid or Payment due.
- Open
/app/billing/:billId/printand print or send the invoice. Result: The printed title is TAX INVOICE, BILL OF SUPPLY or INVOICE-CUM-BILL OF SUPPLY.

Issue credit notes or cancel bills
- Open Bill Details. Result: Credit notes appears.
- Click Issue credit note. Result: The credit note dialog opens.
- Choose Full (remaining amount), Partial amount or Selected lines. Result: Credit amount is calculated including tax.
- Enter Reason, optional Refund mode and Refund reference. Result: The credit note is issued and can be printed.
- For cancellation, enter a reason of at least 3 characters. Result: The bill is marked cancelled.
Close cash and reconcile UPI
- Open Daily cash closing. Result: Expected amounts are shown by Mode.
- Enter Counted amounts and notes. Result: Variance is shown.
- Click Submit closing. Result: Cash closing submitted appears.
- A manager clicks Approve or Reopen in Closings awaiting approval. Result: Status becomes Approved or Reopened.
- In Unreconciled UPI payments, match the UTR / reference and click Reconcile. Result: Payment reconciled appears.

Review practitioner payouts
- Open Practitioner Payouts. Result: Rules and statement panels load.
- With
finance.payout.manage, click New rule or Edit. Result: You can set practitioner, share percent, basis and overrides. - Click Save rule. Result: Payout rule saved appears.
- Select Month and click Show statement. Result: Eligible amount and payout are shown.
- Click Download CSV. Result: A report downloads. No money is moved.

Troubleshooting
| Problem / message | What it means | What to do |
|---|---|---|
VALIDATION_FAILED / ?Validation failed? | Input failed server validation. | Check highlighted fields, GSTIN, SAC, HSN, rates and reasons. |
INVALID_GST_RATE / ?gstRate must be one of 0, 0.25, 3, 5, 12, 18, 28, 40? | Unsupported GST slab. | Pick an allowed rate. |
INVALID_SAC / ?sacCode must be a 4- or 6-digit SAC starting with 99? | Invalid SAC. | Correct the SAC. |
INVALID_HSN / ?hsnCode must be 4, 6 or 8 digits? | Invalid HSN. | Correct the HSN. |
| ?Exempt healthcare services use SAC 9993? | Wrong SAC for exempt healthcare. | Use 9993 or 9993xx. |
| ?Enter a valid payment amount greater than zero.? | Amount is blank or zero. | Enter a positive amount. |
| ?Payment amount cannot exceed ?? | Payment exceeds due. | Enter only the amount collected. |
| ?Please provide a reason for cancellation (min 3 characters)? | Cancellation reason too short. | Enter a clear reason. |
| ?Popup blocked. Please allow popups to print.? | Credit-note print was blocked. | Allow pop-ups. |
| ?Payments changed after this closing was submitted. Approve anyway?? | Late payment changed expected cash. | Recount before approval. |