Promotional Offers & Points

Two ways to reward a customer. A promotional offer is an ordinary product - searchable, scannable, listed online like any other - that is really a Bundle/Combo or a Buy-X-Get-Y-Free deal underneath; scanning it expands the bill into the real component lines, or bills as one line if it was set to keep its own stock. A flat "15% off this brand this week" is not an offer at all - that is a Price Rule, and a code the customer quotes for money off the bill is a Coupon. Points accrue to a customer (and optionally to the staff who sold) per bill and redeem against later bills.

Plan. Premium. Settings > Master > Promotional Offers switches the module on - stocked retail verticals only (supermarket, grocery, pharmacy, mobile/electronics, stationery, dairy).

Where it is in the app

Main menu (Premium): Promotional Offers - a paged, searchable list of every offer product, each showing its type, item count, dates and (for an own-stock offer) its stock. Its toolbar also opens Price Rules directly, for the "% off a brand" case that has no home here. Points live on the customer record (point feature) and item (point, point qty); Reports > Customer Points, Promotional Sales. Marketing posts for an offer come from Tools > Design > Business Marketing.

Setting one up

flowchart TD
    A[Add Offer] --> B[Create the offer product
name · code/barcode · group-category-brand
Keeps its own stock? on/off] B --> C[Configure the offer] C --> D{Offer type} D -->|Bundle/Combo| E[Add components: item · qty · price each
offer price = sum of price x qty] D -->|Buy X get Y free| F[Add items to buy + at least one free item
trigger bills at its own price · reward at zero] E & F --> G[Optional: name · valid dates · hours of the day
one customer or group
usage caps total/per-customer
hide the free line on print - BuyXGetYFree only] G --> H[(Offer saved against the product)] H --> I{Keeps its own stock?} I -->|on| J[Add Stock builds it from the components' own stock] I -->|off, default| K[Nothing to build - it expands at sale time]
The offer product is the offer's identity everywhere - POS search, barcode scan, the online store - so there is no second catalogue to keep in step.

What happens at the counter

flowchart TD
    A[Offer product scanned or picked, sale-side invoice] --> B{Keeps its own stock?}
    B -->|yes| C[Bills as one line, at its own price and tax
its own stock moves] B -->|no, default| D{Expired, no items, or blocked by scope/coupon/usage cap?} D -->|yes| E[Toast explains why · nothing added] D -->|no| F{Bundle or BuyXGetYFree?} F -->|Bundle| G[Each component added at its own priced qty
real tax/HSN from its own product] F -->|BuyXGetYFree| H[Same-SKU trigger + reward combined into one line
at a blended discount · a different-SKU reward its own free line] G & H --> I[(Component lines, tagged with the offer and a shared group id)] I --> J[Free line hidden on print, if the offer asks for it] I --> K[Promotional Sales report]
An offer that keeps its own stock is just a product with a story behind its price; a decomposing offer never reaches the voucher as one line - stock, tax and GST all come from its real components.

Offer types

There are exactly two, and the difference is where the price comes from: a bundle carries its own component prices, while a buy-X-get-Y reads each component's current price and zeroes the reward.

flowchart TD
    O[An offer product] --> T{Type}

    T -->|Bundle / Combo| B[Components each carry a price inside the offer]
    B --> B1[Offer price = sum of price x qty]
    B1 --> B2[At the counter: each component added
at its own priced qty] B2 --> B3[(Tax and HSN from each real product)] T -->|Buy X, get Y free| Y[Components split into trigger and reward] Y --> Y1[Trigger bills at the component's own CURRENT price] Y1 --> Y2[Reward bills at 100% off] Y2 --> Y3{Reward the same SKU as its trigger?} Y3 -->|yes| Y4[Combined into ONE line
at a blended discount] Y3 -->|no| Y5[Its own free line
hideable on the printed bill] B3 & Y4 & Y5 --> S{Offer keeps its own stock?} S -->|no, default| S1[Expands into component lines
components' stock moves] S -->|yes| S2[Bills as ONE line at its own price and tax
the offer's own stock moves]
A bundle's price is fixed when the offer is written; a buy-X-get-Y's price follows the components, so a price rise flows through without re-writing the offer.
TypeHow it pricesExample
Bundle / ComboEach component is given its own per-unit price inside the offer; the offer's own price is the sum of price × qty - nothing is split or allocated at sale time.Shampoo + conditioner sold together as one product, priced at 250.
Buy X, get Y freeTrigger rows bill at the component's own current price; reward rows are 100% off. A reward of the same SKU as its trigger combines into one line at a blended discount.Buy 2 soaps, get 1 of the same soap free - one line, 3 qty, netting the price of 2. The free line can be hidden on the printed bill.

Every offer can also carry: a name (blank falls back to the product's own name), valid from/to dates, hours of the day, a scope of one customer or one customer group (blank means everyone), a coupon code claimed by typing it instead of scanning, and total/per-customer usage caps (a returned bill gives its count back).

Hours of the day

An offer can run only between a start and an end time - the breakfast combo, the late-night deal. The rules are the same ones price rules follow, because both read the same helper: both blank (or only one filled) is all day, the bounds are inclusive, and an end time before the start crosses midnight, so 22:00-02:00 runs until 2am the next morning. An offer written for the same hours as a price rule starts and stops with it.

Which discount wins?

flowchart TD
    A[Item added to the bill] --> B{Is it a promotional-offer product?}
    B -->|yes| C[Offer expands or bills as one line
free/component pricing above] B -->|no| D{A price rule covers this customer or quantity?} D -->|yes| E[Rule rate, discount or pack price applies] D -->|no| F[The item's own rate for this customer's tier] C & E & F --> G{Biller types a manual discount?} G -->|yes| H{Within their permitted maximum?} H -->|yes| I[Applied on top] H -->|no| J[Refused — needs the owner] G -->|no| K[Line priced] I --> K K --> L{Customer redeeming points?} L -->|yes| M[Points reduce the bill total]
An offer and a price rule never both apply to the same product line - the product either is the offer, or it is priced by a rule. Manual discount and points still stack on top.

Settings & permissions

Settings > Master - Promotional Offers module (Premium); Settings > Contact - points feature and value per point. Permission: new/edit product (creating or editing an offer's product and its components), edit sales rate (the Price Rules shortcut in its toolbar), less point (redeeming).

Reports

Promotional Sales, Customer Points, Sales by Product, Commission (staff points).