Approvals & Promotions

The single queue where requests wait for a manager's decision, and how to run discounts and coupon codes.

6 min read · Updated 10 Sep 2026

On this page

Two things owners ask for constantly: a way to stop staff doing expensive things unsupervised, and a way to run a promo. This page covers both — the approvals queue, then promotions.

The approvals queue

Everything that needs a manager's decision lands in one place: Approvals in the sidebar. There is no separate inbox per feature.

The queue is not a paid add-on. It appears for anyone whose role can see it.

Who can see and act

Owner Manager Cashier / Staff
See the queue Yes Yes No
Approve or reject Yes Yes No

Access is by capability — View Approvals Queue and Act on Approvals — which owners and managers hold by default. If you use custom roles, you can grant either to another role. See Custom roles.

What lands in the queue

Request type Filed when
Void A cashier asks to void a sale and cannot authorise it themselves
Refund Any return or refund is processed
Purchase Order A purchase order is submitted for sign-off
Expense An expense is recorded by someone whose expenses need approval
Leave Request A staff member files leave
Stock Transfer A branch requests stock from another branch or a warehouse
Receiving Variance Goods received differ from the purchase order by more than the allowed variance
Stock Count Variance A stock count's difference exceeds the allowed variance
Production Run A commissary production run is filed
Loan A staff loan is created
Payroll Run A payroll run is submitted for approval

Variance approvals use these limits, which is what "more than the allowed variance" means:

Limit Default
Stock-count variance, units 5
Stock-count variance, percent 10%
Receiving variance, units 5
Receiving variance, percent 10%

A count or a receipt inside those limits applies straight away, with no approval. Outside them, it waits. These limits are not editable from the web back office today — ask support if you need different figures.

Acting on a request

Open Approvals, filter by Status and Type, and open a row to see the detail: what is being asked, the amount, who asked, and when.

  • Approve applies the decision to the underlying record. A voided sale becomes voided, an approved purchase order moves forward, an approved leave request is granted.
  • Reject needs a written reason — up to 500 characters — and the queue will not let you submit without one. Say something useful; the requester sees it.

Either way the requester gets a notification. See Notifications.

Rejecting a Refund does not claw the money back. Refunds are applied at the counter first and recorded in the queue afterwards, as a sign-off and an audit record. Rejecting one is a statement that it should not have happened, not an undo. Correcting the money is a separate action.

Approved and rejected requests are final. Changes requested — a middle state that sends a request back to be amended — exists in Kassly, but the web queue only offers Approve and Reject.

The two-person rule

Kassly can require a second person's PIN before a destructive action goes through — voids, refunds, and discount overrides. It is off by default.

With it on, even a manager who could normally void a sale on their own must enter their PIN against the queue entry. With it off, an authorised manager voids inline at the counter and the queue entry is written purely for the record.

The two-person rule is not exposed on the web back office. Ask support to switch it on.

Promotions

Needs the Customer Memory & Promos add-on (₱300 per branch each month), or any bundle that includes it.

Promotions live at Promotions in the sidebar. Owners and managers can create and edit them; cashiers can apply a coupon code at the counter but cannot change the promotion itself.

The three kinds

Type What you set What happens
Percentage Off A percentage, up to 100 That percentage comes off
Fixed Amount Off A peso amount That amount comes off, never more than the sale itself
Buy X Get Y A buy quantity and a get quantity Applied at the item level by the app at the counter

Test a Buy X Get Y promotion with a real sale before you advertise it. It is applied per item by the selling app rather than as one discount on the sale, so it behaves differently from the other two. Ring one up and check the total.

Every field on a promotion

Field Required What it does
Name Yes What you and your staff call it
Type Yes Percentage Off, Fixed Amount Off, or Buy X Get Y
Value Yes The percentage or the peso amount
Minimum purchase No The promotion is ignored below this subtotal
Buy quantity / Get quantity For Buy X Get Y The X and the Y
Product No Restricts the promotion to one product
Category No Restricts the promotion to one category
Coupon code No Leave blank for a promotion that applies by itself
Usage limit No The promotion stops working after this many uses, in total across your whole store
Start date / End date No Leave both blank for always-on
Priority No Higher numbers are considered first when several promotions could apply
Active — The manual on/off switch

Product and category are single-pick, not a list. A promotion covering five specific products means five promotions, or one promotion on a category that contains them.

Automatic promotions versus coupons

This is the distinction that catches people out:

  • Leave the coupon code blank and the promotion applies automatically to any sale that matches its conditions.
  • Set a coupon code and the promotion only applies when someone enters that code. It is deliberately excluded from automatic application — otherwise every customer would get your coupon discount without the coupon.

The Promotions form upper-cases the coupon code as you type it, so summer2026 is stored as SUMMER2026.

When a promotion stops working

A promotion is inactive the moment any one of these is true:

  • Active is switched off.
  • Today is before the start date, or after the end date.
  • The usage limit has been reached.

Kassly also runs a daily sweep just after midnight that switches off promotions whose end date has passed, so your list stays honest instead of filling with dead entries.

Usage is counted when a sale using the promotion is completed, and counted back down if that sale is later voided — so a void does not burn a use.

What promotions do not do

  • No per-customer limits. The usage limit is a single total for the whole store. There is no "one per customer".
  • No stacking rules. Priority decides the order promotions are considered in; there is no engine for combining or excluding them.
  • No branch targeting. A promotion applies across your store, not to one branch.
  • They are not the same as statutory discounts. Senior citizen, PWD, national athlete and solo-parent discounts are separate, legally defined, and handled by Kassly on their own. See Discounts.

Every change to a promotion is recorded — who changed what, and when. See Audit logs.