The utilization of various discounts and surcharges is widely employed in the service sector to develop an optimal customer service policy and attract clients.
R_keeper 7 has a flexible, customizable system of discounts and markups.
Discounts and markups are:
When working with discounts, different sources of discounts are used:
A discount or markup on payment is applied automatically either to an order or a seat depending on what is being paid for.
PDS discounts or markups are selected by the code that is recorded in the PDS card. Along with the code from the PDS, the Bonus Type and the Non-cash Payer Type (Defaulter Type) are sent, which are saved in the discount record and are used to select the Detail level level level.
Card discounts may be offered both through dedicated discount cards as well as any other types of cards.
If a card is designated as a discount card, it is possible to configure verification of its validity period. If a guest bill has been printed, no discount will be applied.
Multiple discounts can be assigned to a single card. Additionally, this card may function as both a Personal Discount System (PDS) card and/or an employee card. In such cases, discounts are allocated following the order of MCR algorithms with composition checks. If the subsequent discount cannot be freely combined and there is no applicable composition rule, then the discount will not be granted.
If a discount is associated with a card, e.g., via PDS, and this discount can be applied to an order, it will be assigned to the order. If the discount applies only to specific seats, a dialog prompting seat selection will appear.
The markup is considered undistributed if a menu item is specified for it. For r_keeper version 7.6.0 and earlier — a tax group is specified. Taxes will be calculated in accordance with the menu item and its tax group, and the menu item will be printed on the fiscal registrar.
Undistributed markups apply exclusively either to orders or seating areas.
A special type of undistributed markup is tips formed from change.
The application of discounts and markups is set using:
A discount or markup has a scope of application. It can be:
Automatic discounts always have an area of application—an order, or a visit when calculating the visit.
A discount or markup on a payment applies to either an order, a visit, or a seat, depending on what the payment relates to.
There are 3 preset application rules:
The application rules are selected for the package depending on the period, trade group and other conditions by priority.
A script rule, if it has been selected according to the conditions and priority, executes a script that determines one of the values:
A discount or markup may be applied to an order or seat if it can be applied to at least one package.
To apply a discount or markup, it is necessary that:
The discount or discount type belongs to the trade group associated with the package.
The author of the package and their role have the right to apply discounts at the Right Level.
Applying the discount on an order, seat, or menu item is allowed.
There exists at least one package where the rules governing the application of the discount are met, and the discount belongs to this package's trade group.
Compositional compatibility of the discount is ensured.
An identical discount or markup was not already granted for the nested or external area of application, except for closed undistributed discounts and markups.
An automatic discount or markup is added only if it has not been given manually anywhere in the application area. The application rules can be different for different packages, it is enough that at least one package has a discount with the Automatic rule.
If the Not Manually flag is set, the discount or markup cannot be given manually, but can be used as a discount or markup on payment, assigned by card, through an interface such as PDS, or as a markup for tips.
The same percentage discount or markup cannot be given twice on the same menu item or seat.
Amount discounts and markups can be set up for multiple use. In addition, after payment of the undistributed markup, an identical additional markup may be applied upon reordering. For example, if you give a discount on a common dish, then you can no longer give the same discount on any place. If the order was partially paid in one currency with a discount, and then in another currency with the same discount, then one discount will be added with a scope combining the dishes paid for by both payments.
When defining discount compositions, you specify composition operations for various ordered sets of discounts. For example:
All discounts except freely combinable ones can be included in sets. When setting the Freely combinable property for a discount, a check is performed for the presence of compositions.
All markups are freely combined. Compositions are applied separately for each menu item.
To select the desired composition, all discounts are used, except for freely combinable ones, which are applied:
If at least one menu item lacks the required composition, the set of discounts for this dish is compositionally impossible. A discount cannot be applied if it is compositionally impossible for at least one menu item in the application area.
The scope of the discount or markup is a set of menu items or parts, with partial payment from the scope of application, for which:
To check the validity of a discount or markup on a menu item, the following is checked:
If the rules for exceeding quantities are set — FromAmount, then the discount amount depends on the input sequence. The discount amount may change, including during packaging.
The scope of the discount is used when checking the percentage limit of the discount or markup — if not set, then 100%.
Amount discounts or markups are also distributed by scope. A manually set discount or markup percentage or amount does not change its scope.
If a discount or markup on an order is given manually or it is a discount or markup on payment, then it is valid in packages where it is allowed and where it is given automatically.
If a discount or markup is given automatically, it is valid only in those packages where it is given automatically according to the rule. Therefore, the amount of the discount applied automatically may not match the amount of the same discount applied manually.
At least one Detail level level is created for each discount or markup. Detail levels define the value of the discount or markup as a percentage or the amount of the discount or markup and the conditions required for the discount or markup to take effect.
The category in the Detail level levels is set from the classifier specified in the discount or markup header. If the classifier is specified in the header, but the group is not specified in the Detail level levels, then this Detail level level refers to menu items that do not have a group specified by the discount or markup classifier. This applies to both percentage and amount discounts and markups.
Discount detail level may depend on the order category. In the case of a visit discount, the order category to which the discount was added is used — the total order category.
A discount detail level is considered zero if it specifies a zero percentage or an amount and a zero bonus percentage.
If no detail level matches any menu item, the discount is considered zero and is not included in compositions. However, if a discount becomes zero due to composition validation checks, it still participates in compositions, including payment-level discounts. Zero-value discounts without the Remember even when their value equals zero flag are not printed on receipts or guest bills ("PreReceipts").
If more than one discount with detail leveling dependent on quantity of the type For each N or For excess quantity applies to one line, then if a composition is used for discounts, such discounts after the first are ignored. The check for the simultaneous effect of such discounts is carried out immediately after the check for the effect of discounts by composition—the rule the Next does not apply.
Discount compositions are processed twice, with each process occurring separately for each menu item. Initially, they are evaluated to determine any potential limitations on the scope of the discounts by applying the "Next Does Not Apply" operation. Once the amounts have been allocated to the menu items within the defined scope, the compositions are then processed to account for restrictions through the following operations: "Reduce Next," "Maximum Discount Applies," and "Maximum Percentage." The "Reduce Next" operation is applied on a per-menu item basis, which may result in rounding errors.
If a maximum percentage discount is specified within the composition, the amount calculated based on this percentage is distributed among the discounts in proportion to the amounts determined prior to the combination or after the application of the "Reduce Next" operation. It is important to note that recalculation of total discounts after combination is not performed. The same principle applies to compositions involving the "Maximum Discount Applies" operation.
Example: A discount of 100 rubles is applied to an order totaling 500 rubles. For a specific menu item amounting to 50 rubles, a discount of 10 rubles was allocated. However, within the composition for this menu item, there is a restriction stating that the discount for this menu item will be limited to 5 rubles. Consequently, the total discount will be reduced by 5 rubles, resulting in a new total discount of 95 rubles instead of 100 rubles.
The total amount of a dish according to the price list, including applicable discounts and markups, must not be less than its minimum price or zero. The check against the minimum price is performed last but before redistribution. If necessary, discount amounts are adjusted so that the total sum per menu item equals the minimum price multiplied by quantity. This is the only scenario where freely combinable discounts may affect each other.
The amounts of all discounts applicable to a specific menu item will be adjusted proportionally based on the calculated totals for that menu item. Any excess will be disregarded if there is no redistribution of surplus among the discounts.
If a discount applies to a quantity less than that specified in the line item, the minimum price will be verified against the lesser of the two quantities.
Example: Consider a 30% discount on an order and a promotion offering every fifth menu item for free. For a line item with a quantity of 5 and a total amount of 100 rubles, both discounts will apply to the fifth menu item, which has a value of 20 rubles. The total discounts would exceed the value of the menu item, amounting to 26 rubles (20 rubles for the free menu item and 6 rubles from the 30% discount). Consequently, the overall discount will be reduced by 6 rubles, resulting in a total discount of 44 rubles instead of 50. The first discount will then be calculated as: -30*(44/50) = -26.4. The second discount will be calculated as: -20*(44/50) = -17.6.
The total amount of discounts applied to a menu item is limited by the minimum price of that menu item; however, the total amount of discounts for a specific menu item cannot exceed 100%.
If discount redistribution is not configured, the discount amount will be reduced when the limit for the menu item is reached.
If surplus redistribution is enabled, any excess discount from one menu item may be transferred to another menu item.
Example: Consider two menu items, A and B, each priced at 100 rubles. Menu item A has a minimum price of 10 rubles, while menu item B has a minimum price of 70 rubles. If a 50% discount is applied without redistribution, the discount for menu item A will be 50 rubles, and for menu item B, it will be 30 rubles. Consequently, the total discount will amount to 80 rubles instead of 100.
If surplus redistribution is activated, the excess discount of 20 rubles (70 - 50) will be transferred to menu item A, resulting in a total discount of 100 rubles.
Surplus redistribution is only possible for freely combinable discounts. Starting from version r_k 7.7.0.112, it is also applicable to discounts that are part of a composition with the "Sum" operation.
The redistribution of the total discount amount aims to optimize taxation when different tax rates are applied. In this scenario, the maximum allowable discount amount, down to the minimum price, is allocated to menu items with the highest tax rate at the expense of those with the lowest tax rate.
Example: Consider two menu items, A and B, each priced at 100 rubles. Both menu items have minimum prices of 20 rubles; however, menu item A has a higher tax rate. In this case, the total 50% discount amounting to 100 rubles will be redistributed such that menu item A receives 80 rubles, down to its minimum price of 20 rubles, while the remaining 20 rubles will be allocated to menu item B, resulting in a final price of 80 rubles for it. The total discount will remain at 100 rubles, which represents 50% of the order. If total discount redistribution is enabled but surplus redistribution is disabled, then the total discount amount will be the same as if no total discount redistribution were applied.
Total discount redistribution and surplus redistribution are only possible if payment discounts are not utilized. There exists a parameter called "Redistribute Discounts," which enables the option for discount redistribution but simultaneously disables payment discounts.
If a total discount is applied to a menu item, the same discount will be added to newly created menu items during the allocation of the menu item to seating areas or packages. If the amount is manually entered, the discount will be distributed proportionally based on the quantities.
Upon the conclusion of a common shift, unpaid orders are carried over to the new shift.
If an order has been partially paid, the amount that has been paid will remain with the original order, while the unpaid portion will be transferred to the new order. As a result, the total amount of the new order will be less than it was prior to the shift closure, which may lead to the cancellation of any applicable discounts. If a portion of the non-allocable surcharge was paid during the previous shift, the amount paid towards the surcharge in the new order will be recorded as a removed amount:
The removed amount is considered in calculations if the surcharge is cumulative.
The removed amount can be reported in the financial statements.
In addition to occurring at shift closure, the removed amount may also arise from the deletion of a check at a seat—specifically through deletion rather than void.
To work with discounts at the manager's station, an employee must possess the following rights:
Discount and Markup Details — This right allows the creation of detail level for new discounts and markups.
Discounts and Markups — Access to the Discounts and Markups directory.
Discounts and Markups Types — This right enables the creation of a new type of discount.
Discount Compositions — Access to the Discount Compositions directory.
Employee Rights for Discount Management at the cash station:
Order Amount Reduction — The right to reduce the total amount of an order.
If an employee does not have this right, confirmation will be required to remove a menu item, apply a discount, or transfer menu items to another order.Removal of Automatic Discounts — The right to remove automatic discounts from an order.
Editing Discount Amount — The right to edit the amount of a discount.
In the discount properties, the "Editable Value" setting must be enabled. To modify the discount amount, use the "Price" button and the numeric keypad.Managerial Approval for Discounts — The right to add a discount to an order that requires Managerial confirmation in its properties. This right is used in conjunction with the Discount right.
Adding Discounts to Other Employees' Orders — The right to add discounts to orders placed by other employees.
If an employee is permitted to add discounts to another employee's order, they must also be granted the rights to Open Any Order and Discounts.