Discounts and Pricing
Hyvä POS is in closed beta
Hyvä POS is currently in a closed beta (pilot phase) with a small group of merchants. It is not yet generally available: the App Store release follows the pilot, and features and configuration may still change - possibly in backwards-incompatible ways - before the general release. Want to take part? Sign up at hyva.io/pos.
Everything that changes a price at the register, from a quick line discount to contract pricing from an ERP.
Cashier Discounts
- Line discounts: a fixed amount or percentage on one line. The classic "small scratch on the box" discount.
- Cart discounts: a fixed amount or percentage on the whole sale, with a required description so the register report shows why it was given. This is also the pragmatic tool for one-off situations, like honouring a paper voucher: enter the amount and a short description, and the register report shows both.
Both land on the Magento order as discount amounts, so reporting and accounting see exactly what was given away, per line.
PRO
With staff and roles, discount permissions are per role, so cashiers can be limited or excluded while managers discount freely.
Coupon Codes
Coupons are validated by Magento's cart-rule engine, live: the app checks the code against your store's rules with the actual cart, so validity windows, conditions and customer-group restrictions behave exactly as online. The discounts panel can also list which of the store's coupons apply to the current cart, useful when a customer says "there was a promotion" without having the code.
The coupon code and its discount are recorded on the order, so promotion reporting includes register sales.
Cashiers don't need to memorise codes: Browse lists the active coupons from Magento, filtered to the store view, the attached customer's group and today's date. A coupon whose conditions the cart doesn't meet (a minimum subtotal, say) is rejected with the reason, not a bare error.
Promotion Rules
- Cart price rules (with or without coupon) and catalog price rules apply through live evaluation against Magento, so a running promotion prices identically at the counter and online.
- On PRO, rule prices are also cached on the device (including the product attributes rules match on, such as brand or color), so promotions keep working at full speed and offline.
Tier and Group Pricing
- Tier prices (quantity breaks) work on the free tier: sell six, pay the six-price.
- Customer-group pricing applies when a customer is attached: a B2B customer in a wholesale group sees wholesale prices at the counter, same as online.
Customer-Specific Pricing (PRO)
Contract prices, negotiated rates, ERP price lists: PRO resolves per-customer prices through a pricing resolver when a customer is attached, overriding catalog prices at the register. Where the prices live is up to the integration, see customer pricing resolvers.
You choose when the register fetches these prices, in Stores → Configuration → Hyvä POS → Terminal Defaults → Customer Prices (with a per-location override on the location form, and a lock under POS Lock if terminals must not change it locally):
- When added to cart - the register resolves each product as the cashier rings it up. The customer's price lands on the cart line and stays cached until the customer changes.
- While browsing the catalog - the register also fetches prices for the product tiles on screen, so a B2B customer's negotiated prices show struck-through on the tiles before anything is in the cart. This sends one pricing request per catalog page the cashier views; if your resolver calls out to an ERP, that is the load you are signing up for.
The device mirrors the same choice under Settings → Store Configuration → Pricing. Customer prices need a connection; catalog tier prices keep applying from local data either way.
The Exact Price Resolution Order
When a line lands in the cart, the app resolves its effective price through a fixed chain, and the cheapest applicable price wins:
- the catalog special price (date-checked at the moment of adding),
- a customer-specific price (PRO, when a customer is attached),
- the matching tier price (quantity and customer group, including the guest group when no customer is attached),
- the base price.
The original catalog price is kept alongside, so receipts and reports always show what was discounted from what. Prices in an open cart are re-validated automatically when they are older than five minutes, and whenever a parked cart is recalled.
Special prices are stamped when the line is added
If a special-price window expires while the cart is open, the line keeps the price it was added at. That is deliberate: the customer saw that price. A quantity change re-evaluates.
Coupon Mechanics in Detail
The evaluator supports Magento's rule model faithfully:
- Actions: percentage of the matching items, fixed amount per item, fixed amount on the cart, and buy-X-get-Y (cheapest matching items become free).
- Conditions: cart-level and item-level condition trees, including custom product attributes (brand, color, size). On PRO those attributes are cached on the device, so attribute-based rules match offline too.
- Fail-closed by design: when the app cannot verify an attribute condition, the rule does not apply. A promotion can be missed in an edge case; it cannot over-discount.
Two interactions worth knowing at the counter:
- A line with a manual cashier discount is excluded from coupons and automatic rules. One discount per line, no stacking, no double-discounting.
- Automatic (no-code) rules are suggested, not silently applied: the register shows the qualifying rule and the cashier confirms it, so a surprise discount never appears on a receipt unexplained.
Once a coupon is applied, its conditions travel with the cart, so quantity changes recalculate the discount instantly and even offline.
Who Wins When They Overlap
Pricing composes the way Magento merchants expect: the effective unit price (catalog, tier, group or customer-specific) first, then promotion rules, then cashier discounts on top. The receipt and the order itemise each layer, so a discounted sale stays explainable later.