Commerce: coupons, shipping and affiliates
The Commerce section gathers everything that changes the cart total: discounts, shipping cost, taxes, gift cards and partner rewards. The settings apply at storefront checkout — both for an online store and for a restaurant menu with delivery.
Where: Admin panel → Finance → “Commerce” (admin.cenaly.ge).
What you need to get started#
Location taxes require access to location settings; testing a fiscal receipt requires a connected fiscal device. For coupons, you need access to Commerce and a selected location. Create a coupon in Coupons & discounts, check its conditions and save. POS needs a cloud connection to validate the code; on the storefront the guest enters it.
Coupons and automatic discounts#
A coupon is a code the guest enters at checkout. An automatic discount is the same coupon with the “Apply automatically (no code needed)” box ticked: no code required, the discount is calculated on its own.
Four types:
| Type | What it does |
|---|---|
| Percentage discount | 10% off the cart, for example |
| Fixed amount | A fixed sum in the venue's currency |
| Free shipping | Zeroes the shipping cost |
| BOGO — buy X, get Y | “2+1”, for example: without a product list the cheapest items become free |
Scope: the whole cart, specific products, collections or a selected item option.
Create a promo code with dates and a usage limit#
Result: the promo code works only on the dates you choose and a limited number of times — in total and per customer.
- Open Commerce → Coupons & discounts and choose the location.
- Click + Add coupon. A new coupon is already enabled: 10% off the whole cart.
- Code — what the guest types at checkout, for example
AUTUMN10. Case and spaces do not matter: the code is saved in capitals without spaces. The code must be unique within the location. - Type and Value: Percent off (10 = 10%) or Fixed amount off (in your currency). Free shipping needs no value; for BOGO fill in Buy quantity and Get free quantity.
- Applies to — the whole cart, specific products, collections or a selected option. If needed, Min. subtotal and Max. discount.
- Limits: Total usage limit — how many times the code can be used across all orders; Per-customer limit — how many times by one customer. Empty or 0 means no limit.
- Dates: Starts and Ends. The code works until the end of the end day.
- Check Enabled and Stackable with other coupons, and if needed narrow down customers and channels (Customer conditions, Where the coupon works).
- Click Save. If the code is already used by another coupon of the location or the Code field is empty, the form shows an error and keeps what you entered.
How limits and dates work:
- A use is counted when the order is completed or paid. An order the guest abandoned or that was cancelled before payment does not use up the limit.
- The per-customer limit is checked only when the customer is recognised — by phone, email or account. It will not stop an anonymous guest; only the total limit does.
- The start date counts from midnight UTC, while the end date lasts until 23:59 of the chosen day in your browser's time. In time zones east of UTC the code starts working in the morning of the first day, west of UTC — in the evening before. If the exact start matters, switch the coupon on manually with Enabled.
- On the storefront, an expired, not-yet-started or used-up code shows the guest a single message — Invalid or not applicable — without the reason. The POS has its own reasons: "This promo code has been used the maximum number of times." and "This guest has already used the promo code the maximum number of times." (Discounts at the POS).
- The promo code field appears on the storefront when the location has at least one enabled coupon.
- The panel does not show how many times a code has been used — there is no redemption counter in the interface. An automatic discount whose limit is used up simply stops applying.
Discount from a selected option#
This promotion starts when a guest selects an option on an item: “Make it a combo” takes 20% off the burger, “Large size” takes 30 off the coffee.
- Open the coupon and choose When an option is selected in Applies to.
- Choose the item, then tick its options. An option belongs to its item: identical options of two dishes are ticked on each dish separately.
- Choose the type: percentage, fixed amount or free shipping. BOGO does not work with this scope.
- Turn on Apply automatically (no code) if the discount should not wait for a code, then tap Save.
The discount goes on the item itself: it does not reduce option and add-on surcharges, while the variant (size) is part of the item price. Example: a 300 burger with a 100 option, 50% off, two pieces — the discount is 300 and the total is 500. A fixed amount applies to each unit, not once per ticket. If the guest removes the option, the discount goes with it.
The till and the storefront use one rule, and online payment recalculates it on the server. The cashier can remove the discount: it does not come back for the same set of options. The guest removes it with Remove, like any automatic discount.
Per-coupon limits: minimum order value, maximum discount, total and per-customer usage limits, validity dates, stackability with other coupons.
Promo codes created on the “Location” page are shown here read-only, so that two entities never fight over the same code. They also have a validity window (“from” and “to”): the location's table shows a validity column and a filter “Active / Not started yet / Expired / All”, and at checkout the date window is judged by the same rule as for the coupons of this section.
Automatic coupons apply on the storefront. As soon as the cart meets the conditions, the discount appears in the checkout totals with nothing to enter. The guest can take it off with Remove: it stays off while checkout is open.
If the guest enters a code, the code takes priority. A regular code replaces the automatic discount, and the storefront says so; removing the code brings the automatic discount back. A coupon marked as stackable adds up with stackable automatic discounts. Both online payment and pay-on-site orders recalculate the amount on the server, so the guest pays what the totals showed. Kiosks do not apply automatic discounts: an entered code works there.
At the till, staff enter the code — except for a discount from a selected option, which web POS applies itself. At the till, it is one coupon per ticket, even when stackability is enabled. For steps and refusal reasons, see Discounts, promo codes and points at the till.
Pause or delete a coupon#
- To pause it, select Edit, clear Enabled and select Save. The coupon stays in the list with its conditions, but new validations reject it. Enable it again in the same editor.
- To remove it, select Delete and confirm Delete this coupon? It disappears from the list; there is no separate coupon archive.
- Existing orders and redemption records are not deleted by either action. This does not reverse earlier discounts or reset usage; do not reuse an old code to reset its limit.
If saving fails, read the error and retry: do not assume the offer has stopped until the change is saved.
Send a code to a guest#
Autopilot, below Coupons & discounts, can attach a discount to a campaign message. Each message gets a personal single-use code, added to your coupons. This differs from a manual coupon whose shared code you give to multiple guests.
A subscription pop-up can also issue a separate single-use code under its configured offer. For display rules, see Engagement campaigns.
A newsletter works differently: add the Promo code block to the email, enter an existing code and optionally fill in Note (optional). All recipients get the same code; the block does not generate personal coupons. This is an email newsletter — see Email newsletters.
Customer conditions#
A coupon can target a customer segment:
- new customers only — no completed orders yet;
- returning customers only;
- by lifetime spend — above a given total of completed orders;
- win-back — customers whose last order is older than N days.
Customers are identified by phone number: without a phone at checkout, a coupon with customer conditions will not apply.
Where the coupon works#
The Where the coupon works block in the coupon form narrows where it applies. Nothing ticked means no limit.
- Sales channels — website, QR at the table, register, kiosk, delivery platforms. This is how you set up an online-only discount or a coupon that only a cashier can apply.
- Order types — dine-in, pickup, delivery. A custom register order type ("Banquet", "Catering") counts as its base type.
The storefront, kiosk and register all follow the same rule. A pickup-only coupon is declined for delivery: the guest sees "This code doesn't work with this order type", the cashier sees "This promo code doesn't work for this order type — change the type or remove the code." If the order type or guest changes after the code is entered, the code is checked again and the discount is removed once the condition no longer holds. The online payment amount is calculated by the server from the order itself, not from what the storefront showed.
Coupon for a guest segment#
In the same block you can pick a saved segment from Customers → Segments, for example "−15 % VIP". The coupon applies only to guests in that segment; for anyone else the register shows "This promo code is for a specific guest segment — this guest isn't in it."
- The guest is recognised by phone: enter it on the ticket or at checkout first.
- The server takes segment membership from the latest guest list sync. A new segment is calculated right after you save it. A new tag or order arrives with the next sync (it runs when the Customers and Orders sections open).
- If the segment is deleted, the coupon works for no one, and the coupon form warns about it.
- On cenaly.ru there is no segment picker because the Segments tab does not exist there. Channels and order types still work.
Shipping methods#
The list of methods the guest chooses at checkout. Cost is calculated by the method's rules:
| Method | How it is calculated |
|---|---|
| Pickup | Free |
| Flat rate | One price for any order |
| Free over threshold | Above the threshold it is free, below it the nested method's price applies |
| Local delivery (radius) | By distance from the origin point, in kilometres |
| By zone | Price per country/region (ISO codes); an empty country list means “everywhere” |
| CDEK | Carrier rates; the method itself is configured in the CDEK integration panel |
If there are no methods, checkout falls back to the previous flat delivery fee from the location settings — enabling the section breaks nothing.
Delivery zones on the map — right here#
Above the list of methods sits the Delivery zones on the map block: polygons of your own courier delivery, each with its own fee, minimum order and ETA. Set up zones (or the 🗺️ Delivery zones on the map entry in the "+ Add method" list) opens the very same editor as the Own delivery section — right here, without leaving the page: you have one set of zones, wherever you edit them.
The block comes first for a reason — that is how checkout counts: if you have a zone and the guest's address falls inside it, the zone sets the delivery price, not the methods below. Addresses outside every zone are served by the methods in the list (carrier, pickup point, flat rate).
Do not confuse it with the By zone method in the table above: that one is about countries and regions by ISO code, not about a polygon on the map.
Carrier integrations appear as cards in the App Store. Cards marked as coming soon do not yet offer setup.
A method also works beyond the zones and radius of your own delivery: if at least one method quotes the guest's address, there is no "Address outside the delivery zone" refusal — the guest picks the method and pays its price.
Taxes#
The Taxes tab contains the storefront tax table for cases where one rate is not enough:
- Tax classes group products with the same rate, such as food, alcohol or exempt items.
- Jurisdictions select rates by country, region, postcode range and priority.
- Rates combine jurisdiction, class and sales channel: dine-in, takeaway, delivery or any, with item overrides.
- Prices include tax controls tax-inclusive storefront prices.
- Country presets suggest rates for 64 countries and show their verification date. Presets distinguish sales channels where applicable. A blank table can be prefilled for the location's country, but it takes effect only after saving. You can also request a jurisdiction preset explicitly, review it and change it before saving.
The location selector and jurisdiction summary show the country, currency, tax regime and table status.
Assigning an item to a class. The dish editor's Info tab and the product editor's Prices tab have a tax-class selector. Its options come from saved tax tables and presets for your locations' countries. An unset class uses the standard class; you can also enter a class identifier manually.
The editor warns about duplicate entries, broken references and a missing standard rate. This table serves the storefront and checkout; POS does not use it.
Taxes at the register#
The storefront tax table, the location's receipt tax block and the fiscal device's VAT rate are separate settings. Select the location in Locations and open its card. The tax block's name depends on the country, for example VAT or Sales tax.
| Location setting | Purpose |
|---|---|
| Enable tax | Allows a receipt tax block to be produced |
| Rate, % | The tax block's general rate; it does not change the fiscal device's default VAT rate |
| Receipt label | The tax name shown to the customer |
| Prices already include tax | Extracts tax from the price; a country hint appears alongside |
| Apply to | For tax on top of the price: subtotal or subtotal plus service charge |
Review the suggested country rate and mode. If a country rule replaces the toggle, use the adjacent change button to edit it. The base selector is hidden for inclusive tax. See Service charge for how the charge works.
Inclusive tax or tax on top. For tax-inclusive prices (Russia, Georgia, VAT/GST countries), enable "Prices already include tax" and check a sample receipt. The POS total stays the same, and the tax is extracted from the price.
For the US and Canada, turn off "Prices already include tax" and choose the base. The POS adds the tax to the total, the same way the storefront checkout does. A tax line with the rate appears on the POS screen, on the customer display, on the guest check and on the receipt. The web POS, the POS apps for Android, Windows and Linux, and the waiter app all calculate it this way.
- The base is the items after the check discount and the coupon. With "Subtotal + service charge", the charge is in the base too.
- Tips and delivery are not in the base.
- Payment, split payment, partial payments and refunds use the amount including tax.
- The tax is saved in the order as a separate field. Finance reports and the guest's room folio get it separately from revenue.
- The shift X/Z-report shows the tax as a separate “Sales tax (added on top)” line, next to “Net sales (excl. tax)” — see Cash shift.
- An open check is paid with the tax recorded in the order when it was created. An order created before the tax was turned on stays without tax. A new rate applies to new orders.
Example: items worth $100, a $10 service charge, 8.875% tax on "Subtotal + service charge". The tax is $9.76, the total is $119.76, and tips go on top.
VAT rate for an individual item#
Task: a café in Russia uses 22% as its main rate, but some products use 10%. Check the fiscal device's default rate first: the location card's Rate, % field does not change it.
- Open a saleable item in the menu editor and find “VAT rate on the fiscal receipt”. This choice appears when there is a Russian location.
- Select 10% for the differently taxed product. For a standard item, choose “Same as the location register” if its default really is 22%, or explicitly select 22%.
- Save the item and check its rate on a sample fiscal receipt. If it differs, check the item profile and fiscal device configuration, not the storefront tax table.
For an exempt item, choose “No VAT (exempt)” and enter “Exemption basis”. The basis is kept for reference and is not printed on the receipt. Selecting a rate does not verify eligibility for an exemption. See Simplified taxation and VAT in 2026 for the Russian workflow.
In non-Russian mode, you can instead choose “Fiscal printer tax group (A–D)”. The letter must match a group configured on the device; leaving it empty keeps the device's default. The field may be hidden when the account has no fiscal device. This is separate from the storefront tax-class field.
Gift cards#
This tab issues and tracks gift cards:
- Issue: amount, currency, your own or generated code, expiry and a note. The full code is shown once at issue; save it, as it cannot be reopened from the card list later.
- List: balance and active, blocked or expired status; block or unblock a card.
- Ledger: each operation with its date, order and amount.
The server redeems the balance at payment; customers can check their balance using the card code on the storefront.
You can also sell and redeem cards at POS. Selling a certificate issues a card for the chosen amount; its code is printed and sent to the recipient by e-mail. The gift-card tender redeems the balance. Issuing a card creates a liability, not sales revenue; issued, redeemed and outstanding totals appear in Finance. See POS.
Affiliate program#
A partner brings customers via a referral link shaped like ?ref=CODE and earns commission on realised orders.
Per-partner settings:
- commission — percentage of the order or fixed per order, in a chosen currency (orders in another currency are not accrued);
- attribution window — how many days after the click an order still counts (30 by default);
- first orders only — pay for new customers only;
- payout threshold;
- status: active, paused, archived;
- a link to a customer account — the one the partner signs in with to open their own dashboard on the storefront;
- an optional reference to a client record.
The commission is calculated by the server, not the browser: it is accrued when an order is realised and reversed if the order is cancelled. Every movement is visible in the partner's ledger: accruals, reversals, payouts and the current balance.
Device registrations#
A separate tab lists devices customers registered on the storefront: serial number, product, contact, warranty. Useful for electronics and anything with warranty service.
Limitations#
- The storefront tax table does not control POS: the POS uses the location's single tax rate. The exemption basis is not printed.
- The receipt for one part of a split payment has no tax line. The amount of that part already includes the tax.
Coupons have no bulk code generator or redemption-statistics interface. Autopilot and subscription pop-ups issue single-use codes in response to events, not as a manually generated batch. Automatic coupons work on the storefront; POS and kiosks accept one manually entered code, except the option-based discount, which the web POS applies by itself (not yet in the Android, Windows and Ubuntu POS apps).
Troubleshooting#
| Symptom | Cause | What to do |
|---|---|---|
| Tax on top is missing from the POS total | "Prices already include tax" is on, tax is off, or the rate is 0 in the location card | Check the location's Tax block and reload the POS. A check opened before the change is recalculated on its next edit |
| Wrong item VAT rate on a fiscal receipt | Item profile is unset or the device default differs | Check the item’s fiscal VAT field and the fiscal device configuration |
| Disabled coupon stays in the list | Pausing retains the record | This is expected; use Delete to remove it |
| Coupon is rejected | Disabled, expired, limit reached, or ticket/guest does not qualify | Check the editor's conditions; see POS refusal reasons |
| “Code … is already used by another coupon at this location” on save | This location already has a coupon with that code (case and spaces are ignored), so a second one would never apply | Pick a different code or open and edit the existing coupon |
| Automatic discount did not appear on the storefront | The cart does not meet the coupon's conditions, the limit is used up, or the guest removed the discount or entered their own code | Check the coupon's conditions and limits; remove the entered code |
| Automatic coupon does not trigger at the till | Automatic application is storefront-only | Enter the code in POS and wait for validation |
| Every newsletter recipient got the same code | The email block contains a shared code | Use a suitable autopilot campaign or subscription pop-up for personal codes |
FAQ#
Can I run a discount without a promo code? On the storefront, yes: enable “Apply automatically (no code needed)”. At the till, enter the code manually.
Do coupons stack? On the storefront, according to “Stackable with other coupons”. At the till there is one coupon; it can combine with a manual discount.
What if a guest cancels an order that came from a referral link? The accrued commission is reversed automatically and shown as a separate ledger entry.
Is the partner's commission calculated on the discounted total? Yes, on the order as actually realised.
Related topics#
- Online store — cart, checkout and storefront
- Loyalty — bonuses and programs for regulars
- Collections — what to attach discounts to
- Own delivery — couriers and order logistics
- Finance — how discounts and shipping show up in reports
Limit a tax rate to fulfillment channels#
Use this procedure once the applicable rates and rules for your business have been established.
- In Commerce → Taxes, select the location and open the rate rules.
- Check the jurisdiction, tax class and rate on the relevant row. Select the channels it applies to, such as dine-in, takeaway or delivery.
- Save. An empty channel list means a general rule, not a disabled rate; do not leave it empty when you intend to restrict its application.
- Check the calculation for an item in the relevant tax class separately for each fulfillment method. Verify the total and tax line against your settings before recording a real sale.
Configuring a rate does not connect national fiscal issuance or determine which rate legally applies to your business.