Discounts & loyalty
Build codes, happy-hour windows and automatic promotions, and run a points programme customers can redeem at the till.
Create a discount
Dashboard → Discounts
Open Dashboard → Discounts and click New discount.
Enter a Code such as WELCOME10.
Codes are stored in upper case, so welcome10 and WELCOME10 are the same code.
Choose the Type: Percentage (%) or Fixed amount.
Enter the Value.
10 as a percentage takes 10% off; 200 as a fixed amount takes 200 off, and never more than the basket is worth.
Set the conditions you need — see below.
Leave Active on and click Create.
The conditions you can attach
- Starts at / Ends at
- Calendar window. Outside it the code is refused. The end date must be after the start date.
- Days of week
- Restrict to particular days — Tuesdays only, or weekends. Leave empty for every day.
- Start time / End time
- Happy-hour window in 24-hour time, evaluated in Nairobi time. Both must be set together. A window that crosses midnight, such as 22:00 to 02:00, works as expected.
- Min subtotal
- The basket must reach this amount before the discount applies.
- Usage limit
- How many times the code may be used in total. Once it is exhausted the code stops working; leave blank for unlimited.
- Applies to (category)
- Scope it to one category — drinks only, for instance. The discount is worked out on that category's share of the basket.
- Branch scope
- Limit the discount to one branch, or leave it open to the whole organization.
- Auto-apply
- On: no code needed, it applies itself whenever it qualifies. Off: the cashier must type the code.
How a discount is chosen
A typed code must pass every condition or it is refused with a reason. With no code, qualifying auto-apply rules compete and the customer gets the best one — never two.
Read this diagram as text
- Checkout starts → Code typed?
- Code typed? → Look that code up (yes)
- Code typed? → Gather active auto-apply rules for this branch (no)
- Look that code up → Passes dates, days, time window, minimum subtotal, usage limit, category?
- Gather active auto-apply rules for this branch → Best qualifying rule wins
- Passes dates, days, time window, minimum subtotal, usage limit, category? → Refused with the reason (no)
- Passes dates, days, time window, minimum subtotal, usage limit, category? → Best qualifying rule wins (yes)
- Best qualifying rule wins → Amount recomputed on the server
- Amount recomputed on the server → Discount applied
One discount per order
Discounts do not stack. If several auto-apply promotions qualify, the customer gets the largest, and only that one. A code that fails its conditions is rejected with a message — it is never silently ignored.
Discount amounts are decided by the server
The till sends the code, not the money. The discount is recomputed from the stored rule at checkout, so an old value cached on a terminal cannot be used to take more off.
Recipes for common promotions
| You want | Set it up as |
|---|---|
| Happy hour on drinks, 17:00–19:00 weekdays | Percentage, auto-apply on, days Mon–Fri, start 17:00, end 19:00, applies to the Drinks category |
| Launch code for the first 100 customers | Percentage or fixed, code shared publicly, usage limit 100 |
| Spend 2,000 get 200 off | Fixed amount 200, min subtotal 2000, auto-apply on |
| One branch clearing stock this weekend | Percentage, branch scope set to that branch, starts and ends over the weekend |
Turn on loyalty
Dashboard → Settings → Customer loyalty
Open Dashboard → Settings and find Customer loyalty.
Switch Enable loyalty points on.
Set KES per point.
100 means a customer earns one point for every KES 100 they pay. A smaller number is a more generous programme.
Save changes.
Points only exist against an identified customer. The phone number captured at the till is what links the sale to the balance.
Read this diagram as text
- Sale at the till → Phone number captured?
- Phone number captured? → Walk-in: no points either way (no)
- Phone number captured? → Balance shown at the till (yes)
- Balance shown at the till → Redeeming now?
- Redeeming now? → Capped by balance, programme minimum and the bill (yes)
- Redeeming now? → Order settles as paid (no)
- Capped by balance, programme minimum and the bill → Order settles as paid
- Order settles as paid → Points earned (paid)
- Order settles as paid → No points (not paid)
- Points earned → Refunded later?
- Refunded later? → Earned points taken back (yes)
Points are earned on settled sales only
Points are awarded when an order is actually paid and is tied to an identified customer. Held orders, unpaid orders and walk-ins with no phone number earn nothing, and points earned on a sale are taken back if it is refunded.
Redeeming points at the till
Capture the customer's phone number on the order.
This is what matches them to their record and their balance.
The Redeem points field appears with their balance beside it.
It only shows when a matched customer actually has points to spend.
Enter how many points to spend.
The credit shows on the summary as Applied N pts, and the total comes down accordingly.
Place the order as usual.
The limits, applied automatically
- Never more points than the customer actually holds.
- Never more than the bill is worth — a redemption cannot make a total negative.
- Never below the programme's minimum redemption, if one is set.
- Points are deducted as part of the same transaction that records the sale, so two tills cannot spend the same balance twice.