Receivables
Selling on credit (utang), tracking who owes you what, collecting payments, and what happens when you void a credit sale that was already paid.
14 min read · Updated 24 Oct 2026
On this page
- "Credit" means two opposite things — get this straight first
- Putting a sale on credit
- Credit limits
- Payment terms and what "overdue" means
- The Accounts Receivable page
- The customer ledger
- Sending a statement of account
- Sending every customer their statement
- Collecting a payment
- Collecting from the app
- Voiding a credit sale the customer already paid
- Where the money shows up
- What prints
- What Kassly does not do here
Selling on credit means finishing a sale without taking the money. The amount goes on the customer's account and you collect it later. Kassly calls the whole of that machinery Accounts Receivable, and it is live — the pages below are the ones you will actually see.
Needs accounts receivable, which comes with the Cash Drawer & Expenses add-on (₱300 per branch each month), the B2B Sales Orders add-on (₱500), the Consignment add-on (₱300), or any bundle including one of them. The Receivables pages on the web are for owners and managers. A cashier can put a sale on credit and collect payments from the app, but cannot open the web pages.
Cash Drawer & Expenses alone is enough to sell on credit. It lets you find a customer at checkout, add a new one, and attach them to the sale so the balance has someone to belong to. The full customer records (history, loyalty, promos, editing a customer) are the Customer Memory & Promos add-on.
"Credit" means two opposite things — get this straight first
This is the single easiest thing in Kassly to get backwards, so before anything else:
| What you see | What it actually is | Direction |
|---|---|---|
| Credit — the tender at checkout | Charging the sale to the customer's account. Utang | The customer now owes you more |
| Store Credit — a refund method on a return | Money you owe the customer, held against their account | You owe them |
They are opposites, and they move the same number in opposite directions.
Kassly's own labels are inconsistent here, and you need to know it. At the counter the tender is called Credit. On the web Transactions list and in the report filters, that same tender is labelled Store Credit. It is not store credit. A sale filed under "Store Credit" in the transactions list charged the customer's account — it did not spend anything.
Real store credit only ever comes from choosing Store Credit as the refund method on a return or a void. It shows up as a negative balance on the customer, and the next credit sale eats into it.
One practical consequence: a customer sitting on store credit has a negative balance, and the Accounts Receivable list only shows customers who owe you something. They will not appear there. Open their record from Customers instead, which needs Customer Memory & Promos.
Putting a sale on credit
- At checkout, tap + Attach Customer (it reads + Attach Customer (for credit) when your store does not have Customer Memory & Promos). Search by name or phone, or add the customer there and then if they are new.
- Pick Credit as the payment method. The tile appears once a customer is attached.
- Complete the sale. The receipt shows the tender as Credit and names the customer.
Three conditions are enforced:
- A customer must be attached. No customer, no credit.
- You must be online. Credit is the one tender Kassly refuses offline: "Credit payments require an internet connection." If any leg of a split payment is credit, the whole sale is blocked until you reconnect.
- The charge must fit inside the customer's limit.
Only the credit portion is checked against the limit, not the whole bill, so a part-cash, part-credit sale is judged on the credit part alone. The mechanics of the checkout screen are in Payments.
The charge is recorded against the receipt, so the sale, the receipt and the balance all point at each other.
Credit limits
A limit of ₱0 means No limit — not "no credit". That is the default.
The only way to set a credit limit is the customer import. There is no field for it on the customer form, the counter sheet or the Receivables pages. Download the template from Customers → All Customers → Import, fill in the Credit Limit column and upload it back (see Customer profiles). Once set, the limit is shown and enforced at checkout.
Payment terms and what "overdue" means
The customer edit dialog has a Payment terms (days) box, and the import has a column for it. The terms are saved on the customer, but Kassly does not use them for aging yet, and nothing stamps a due date onto a credit charge.
So overdue is measured from the day the charge was made, and the rule is a flat 30 days. A charge more than 30 days old counts toward Overdue Amount and lands in an aging bucket accordingly. If your store works on 15-day or 45-day terms, the aging columns will not match your own reckoning.
The Accounts Receivable page
Finance → Receivables. Four figures across the top:
| Card | What it counts |
|---|---|
| Total Receivables | Everything currently owed to you |
| Overdue Amount | The part more than 30 days old |
| Customers with Balance | How many people owe you something |
| Collection Rate (30d) | Payments collected in the last 30 days as a percentage of charges made in the same period |
Then Aging Summary, in four buckets — Current, 31 - 60 days, 61 - 90 days, 90+ days — each showing an amount and a customer count. Then a Post-Dated Cheques panel with Cheques On Hand and Due This Week, which is a shortcut into Post-dated cheques.
The table below lists every customer who owes you, with Customer, Phone, Balance, Credit Limit, Oldest Charge and Last Payment. Search by name or phone. Collect on a row takes a payment straight away; click the row to open their ledger.
The customer ledger
Customer Ledger is the statement. Three cards — Current Balance, Credit Limit, Available Credit — over a table of every charge and payment:
| Column | Meaning |
|---|---|
| Date | When it happened |
| Type | Charge or Payment |
| Amount | The full amount of that entry |
| Outstanding | On a charge, how much of it is still unpaid |
| Method | How a payment was taken |
| Reference | Receipt number on a charge; your own reference on a payment |
| Notes | |
| Balance | The running balance after that line |
Filter by date with From and To. A date-filtered statement opens with the balance carried in from before the period, so the running balance still adds up.
A red bounced cheque badge appears above the table once a customer has bounced one on you. It is a warning only — Kassly never blocks a sale because of it.
If the customer has cheques you are still holding, a Cheques on hand panel lists them, labelled "Not yet cleared — excluded from the balance above." That exclusion is deliberate: a cheque is a promise, and the balance only moves when it clears.
Sending a statement of account
Send Statement on the ledger turns what is on screen into a printable Statement of Account PDF for the From / To range you have set (no range means all activity to date). It shows:
- your business header and the customer's billing details;
- the opening balance carried in from before the range;
- every charge (with its invoice and receipt number) and payment in the range, with the running balance;
- the closing balance, and today's balance if it differs;
- post-dated cheques on hand, listed separately and not deducted;
- ageing of the unpaid balance as of today: current (0–30 days), 31–60, 61–90 and over 90, the same buckets as the Accounts Receivable page.
The figures come from the same place as the screen, so the PDF always matches the ledger. From the menu you can:
| Action | What happens |
|---|---|
| Download PDF | Saves the statement |
| Copy link | A link that opens the PDF without logging in, for 7 days. The date range is locked into the link |
| WhatsApp / Viber / Messenger | Opens the app with a short message and the link (WhatsApp goes straight to the customer's PH mobile number when it is on file) |
| Open in mail app | Starts an email in your own mail app |
| Email PDF from Kassly… | Kassly emails the PDF and link. Replies go to your business email |
The ledger remembers the last time a statement was sent and how ("Sent Oct 2 · Email"). A chat share is recorded when you pick the app; Kassly cannot see whether you actually pressed send.
The statement says at the bottom that it is not an official receipt or sales invoice. It is a reminder of what is owed, not a tax document.
Sending needs the same access as seeing the statement: the Accounts Receivable add-on and View AR Aging, Statements & Cheques.
Turn off shared links… in the same menu stops every statement link shared with this customer so far, whatever dates it covered; opening one shows This link has been turned off. Emailed statements go out in the background: the ledger shows Email sending… until the mail has gone, and Email failed with the reason (and Retry) if it couldn't be delivered.
Sending every customer their statement
Send all statements on the Accounts Receivable page emails a Statement of Account to every customer with an open balance, in one go.
- Pick the period. It starts on last month (the 1st to the last day).
- Kassly counts who it will go to: "12 customers will get their statement by email", with the total they owe. Customers with no email are listed separately and skipped. Add an email on the customer to include them, or share their statement from their ledger.
- Press Send 12 statements. The emails go out in the background, one per customer, with the PDF attached and a 7-day link, exactly as Email PDF from Kassly would send them. Each customer's ledger then shows "Sent … · Email".
The dialog shows how the last run went: how many statements were queued, how many have been delivered so far, who was skipped for having no email, and any that failed (for example, an address the mail server refused), with the reason. A failed one also shows Email failed on that customer's ledger, where Retry sends it again. One failure does not stop the others. Only one run goes at a time.
Monthly schedule
On the Monthly schedule tab you can have Kassly do this for you:
| Setting | What it does |
|---|---|
| Send statements every month | Off unless you switch it on |
| Day of the month | 1 to 28 (every month has those days). On that day, each customer gets last month's statement |
| Minimum balance | Customers owing less than this are left out. 0 sends to everyone who owes anything. It also applies to Send all statements |
The scheduled run goes out in the morning (Philippine time) and sends each month only once. If it is missed on the day, it still goes out in the next two days. Changing the schedule needs Edit Store, Receipt & Inventory Settings; sending needs the same access as a single statement.
Collecting a payment
Collect on the Accounts Receivable list, or Collect Payment on the ledger, opens a dialog showing the outstanding balance, then:
| Field | Required | Notes |
|---|---|---|
| Amount | Yes | Cannot exceed the outstanding balance |
| Payment Method | Yes | Cash, Card, GCash, Maya, Bank Transfer |
| Reference | No | "e.g. GCash ref #, check number" |
| Notes | No |
Two rules to know:
- Overpaying is refused: "Amount cannot exceed the outstanding balance" in the dialog, and "Payment amount exceeds outstanding balance." from the server.
- A cash collection needs an open shift — the collector's own: "Open a shift before collecting cash payments. Non-cash methods can be recorded without an open shift." That is because cash physically enters the drawer and has to reconcile at close, as an AR Collected line on that shift. A bank transfer notification arriving in the back office does not.
The payment is applied to the oldest unpaid charge first, then the next, and so on. You do not pick which charge it settles.
Collecting from the app
Cashiers collect at the counter. Tap Receivables at the top of the POS for the same list of customers who owe you, then Collect on one. The Collect Payment sheet shows their outstanding balance and asks for:
- Amount
- Method: Cash, GCash, Maya, Card or Bank. Anything but cash also asks for a Reference Number, "Required for digital payments"
- Notes, if you want one
Tap Record amount. A collection receipt, marked Payment on Account, prints on a paired printer. Collecting cash needs your own shift to be open, as on the web.
With Require manager approval for receivable collections switched on in Settings → Security, a cashier's collection asks for a manager's PIN.
This screen needs a connection. Offline it shows an amber banner: Offline — "Reconnect to load balances and collect payments." Balances change from other terminals, so Kassly would rather show you nothing than a stale figure you might collect against.
Without the add-on the screen says "Receivables add-on not enabled" — "Enable the Accounts Receivable add-on to track customer balances and collect payments from this device."
Voiding a credit sale the customer already paid
This is the case worth reading twice. A credit sale can be part-collected — the customer paid ₱500 of a ₱2,000 charge — and then the sale turns out to be wrong. Voiding it has to do two different things with two different pots of money.
Voiding a sale is done in the app — the web dashboard has no void action. When you void a sale that went on credit, the app asks under Charged to account: "If the customer already paid, choose how to return it. Unpaid credit is simply cancelled." Two buttons:
| Choice | What happens to the part already paid |
|---|---|
| Refund cash | Handed back out of the drawer, and recorded as a refund so the shift still reconciles at close |
| Store credit | Left on the customer's account as a negative balance. Their next credit purchase spends it |
Either way, the part they had not yet paid is simply cancelled — it stops being a receivable.
Two things constrain the choice:
- A cash refund needs an open shift. Without one you get "Open a shift to refund cash on a void, or choose store credit instead." Kassly refuses rather than quietly turning your cash refund into store credit.
- A void that goes through manager approval always settles as store credit, whatever was picked when it was requested. The request records the preference for the approver to see, but a cash refund needs somebody standing at the drawer, and the approver may be elsewhere. If cash back matters, have the manager void it directly.
Voiding is covered more generally in Returns and refunds.
Where the money shows up
| Event | Effect |
|---|---|
| A credit sale | No money moves. The customer's balance owed goes up |
| A cash collection | Expected drawer cash goes up, reconciled when you close the shift |
| A non-cash collection | Recorded against the customer. No drawer effect |
| A cleared cheque | Reduces the balance owed. No drawer effect — it is a bank event, and X and Z readings are untouched |
See Closing a shift for how a collection reaches the drawer count.
What prints
A credit sale prints the tender as Credit and names the customer. Once your store is BIR-accredited it prints as a CHARGE INVOICE rather than a CASH INVOICE, because the document type follows how it was paid. See Receipts.
A collection prints its own COLLECTION RECEIPT, marked Payment on Account, so the customer cannot mistake it for an invoice.
What Kassly does not do here
- Statements go by email only in bulk. The monthly run and Send all statements email customers who have an email address; everyone else is listed for you to send by hand.
- No interest, penalties or finance charges on an overdue balance.
- No collection reminders. Kassly does not chase your customers.
- No write-off action on a bad receivable. A balance stays on the ledger until it is collected, or a cheque against it is written off.
- No credit hold. Exceeding a limit blocks that one sale; it does not flag the account.