Good to continue from mechanism selection into the arithmetic that makes a promotion commercially precise. In the previous lesson, you chose how a customer becomes entitled to a benefit: an automatic rule, coupon, referral, loyalty mechanism, or product-oriented offer. This lesson focuses on how much value that benefit creates in a concrete transaction, and where it is applied.
By the end, you should be able to calculate and clearly specify fixed and percentage discounts at both order and item level. You will also be able to identify the assumptions that must be explicit before a Talon.One rule and a commerce implementation can agree on the payable amount.
Start with a priced transaction and explicit assumptions
A discount calculation is only reliable once its base is defined. “15% off” is incomplete until you state 15% of what: merchandise, the whole customer session, selected items, shipping, or a bundle.
Use this sample transaction throughout the lesson.
| Line | Quantity | Unit price | Line value |
|---|---|---|---|
| Trail jacket | 1 | USD 120.00 | USD 120.00 |
| Thermal base layer | 2 | USD 35.00 | USD 70.00 |
| Water bottle | 1 | USD 20.00 | USD 20.00 |
| Merchandise subtotal | USD 210.00 | ||
| Shipping | USD 12.00 | ||
| Session total before discounts and tax | USD 222.00 |
For this lesson:
- Prices are already the relevant selling prices; there are no previous markdowns or discounts.
- Tax is excluded, because tax treatment is a commerce and jurisdiction-specific policy.
- A discount cannot reduce its applicable base below zero.
- Shipping is a session-level additional cost, not merchandise.
- Promotions are considered independently. Combining promotions requires an explicit stacking and sequencing policy, which you will address later when studying campaign evaluation behavior.
The two totals are deliberately separate:
Here, is the merchandise subtotal and is the pre-discount customer-session total including shipping.
This distinction catches a frequent design defect. A business stakeholder may say “USD 25 off the order,” while the implementation team assumes “USD 25 off merchandise.” Both sound reasonable, but they produce different behavior when shipping, gift wrapping, fees, or other additional costs are present.
Order-level discounts: one amount against the session
An order-level discount is a single monetary amount applied against an agreed transaction base. In Talon.One, the Rule Builder’s Discount session total effect returns a setDiscount effect. The returned amount is an instruction to the integration: apply this named discount to the order according to the agreed commerce contract.
Read the Talon.One documentation subsection “Discount session total.” It establishes the rule-level mechanism for a fixed discount or a formula-based discount against a customer session.
In “Use discount effects” and then “Discount session total,” read the session-total effect through the end of that subsection. Focus on the fact that the discount value may be a fixed number or a formula, and note the resulting setDiscount API effect.
Fixed order-level discount
For a fixed discount , applied to a discountable base :
Where:
- is the actual discount.
- is the amount payable before tax and any non-discountable elements.
- must be explicitly defined by the promotion policy.
Example: USD 25 off the entire session
Offer statement:
“Get USD 25 off your order.”
If the business means the entire session total, including shipping:
The rule can produce a setDiscount effect with a value of 25.00. The commerce system then represents that amount as an order discount.
The low-value cart boundary
Suppose the same offer is used with a session worth USD 18.00:
The payable value is USD 0.00, not negative USD 7.00.
Whether the promotion should be allowed to reduce the order to zero is a commercial policy choice. If it should not, introduce a qualifying spend threshold or a rule-level cap rather than hoping the payment layer resolves the ambiguity.
Percentage order-level discount
For a percentage expressed as a decimal:
The 2 represents rounding to two decimal places in a two-decimal currency. In production, use the currency’s configured minor-unit precision rather than assuming every currency uses cents.
Example: 15% off merchandise
Offer statement:
“15% off merchandise. Shipping excluded.”
The discountable base is merchandise subtotal:
Shipping remains unchanged:
Now contrast that with “15% off the session total,” where shipping is included:
The difference is USD 1.80. That may be immaterial for one cart, but it becomes material across a high-volume campaign and can create customer-support disputes if storefront language and checkout behavior disagree.
Percentage discounts with a cap
A cap prevents a percentage discount from becoming unexpectedly expensive on large orders. For a maximum discount :
For “15% off merchandise, maximum USD 30”:
The payable amount, including shipping, is:
A robust promotion specification therefore records all of the following:
| Field | Example |
|---|---|
| Reward | 15% discount |
| Scope | Merchandise only |
| Qualifying condition | Merchandise subtotal at least USD 100 |
| Cap | Maximum USD 30 |
| Exclusions | Shipping, tax, gift cards |
| Rounding | Currency minor unit |
| Settlement point | At confirmed order, subject to return policy |
Item-level discounts: calculate against eligible merchandise
An item-level discount applies to selected cart items rather than the whole order. Its base is normally an item’s price, quantity, or item total. This makes it the appropriate model for category promotions, SKU-specific sale pricing, BOGO-style offers, and bundle incentives.
In Talon.One, the Rule Builder’s Discount individual items effect returns setDiscountPerItem. The item selection comes from a cart item filter, value map, or bundle definition. The important architectural implication is that Talon.One identifies the affected item and the integration must preserve that relationship when presenting prices, creating the order, and later processing returns.
Read the item-discount and pro-rata sections of “Use effects.” They distinguish selection of eligible cart items, the possible scopes of an item discount, and the allocation logic required when one discount is distributed across several items.
In “Discount individual items,” read the item-level overview, then continue through the end of the subsection. Pay particular attention to the available scopes: Price, Additional costs, and Item total. Then read the complete “Discount individual items pro rata” subsection, beginning with the allocation definition. Focus on proportional allocation and the documented handling of rounding residuals.
Percentage discount on an eligible item
Offer statement:
“20% off Trail jackets.”
Only the jacket is eligible.
The discounted jacket price is:
The other merchandise remains unchanged:
| Line | Original value | Discount | Discounted value |
|---|---|---|---|
| Trail jacket | USD 120.00 | USD 24.00 | USD 96.00 |
| Thermal base layers | USD 70.00 | USD 0.00 | USD 70.00 |
| Water bottle | USD 20.00 | USD 0.00 | USD 20.00 |
| Merchandise | USD 210.00 | USD 24.00 | USD 186.00 |
| Shipping | USD 12.00 | USD 0.00 | USD 12.00 |
| Session total | USD 222.00 | USD 24.00 | USD 198.00 |
Compare this with a 20% order-level discount on all merchandise:
The amount is USD 42.00 rather than USD 24.00 because all merchandise, not only the jacket, is eligible. This is why an item filter is a commercial control, not merely a user-interface configuration detail.
Percentage discount across several eligible lines
Offer statement:
“20% off outerwear and base layers. Accessories excluded.”
Here the jacket and thermal base layers are eligible:
The discount can be calculated per line:
| Eligible line | Original value | Discount | Discounted value |
|---|---|---|---|
| Trail jacket | USD 120.00 | USD 24.00 | USD 96.00 |
| Thermal base layers | USD 70.00 | USD 14.00 | USD 56.00 |
| Eligible subtotal | USD 190.00 | USD 38.00 | USD 152.00 |
The water bottle remains at USD 20.00. Merchandise becomes USD 172.00, and the session total including shipping becomes USD 184.00.
Fixed amount per qualifying unit
Fixed item discounts need especially careful wording. These two offers are different:
- “USD 10 off the thermal base-layer line.”
- “USD 10 off each thermal base layer.”
The sample cart contains two base layers priced at USD 35.00 each.
For a discount of per unit, with quantity and unit price :
For “USD 10 off each thermal base layer”:
The line changes as follows:
| Base-layer line | Value |
|---|---|
| Original quantity | 2 |
| Original line price | USD 70.00 |
| Discount | USD 20.00 |
| Discounted line price | USD 50.00 |
By contrast, “USD 10 off the base-layer line” would discount the whole line once:
The difference is USD 10.00 in this cart and grows with quantity. A requirement must say whether the reward is per item, per line, per bundle, or per order.
Discount scope: price, additional costs, or item total
The item-level effect supports different scopes:
| Scope | What the discount base includes | Typical use |
|---|---|---|
| Price | Item selling price, excluding associated additional costs | “20% off selected apparel” |
| Additional costs | An additional cost associated with an item | “Free personalization on qualifying items” |
| Item total | Item price plus its associated additional costs | “10% off a configured product package including its service fee” |
Do not infer the scope from a campaign slogan. “20% off a custom jacket” could mean the jacket’s merchandise price only, or the jacket plus a customization fee. Decide and document it.
Pro-rata discount allocation
Sometimes the commercial offer is one fixed amount, but accounting, tax, returns, or customer display requires that amount to be distributed across eligible items. A pro-rata discount allocates value in proportion to each eligible item’s price.
For eligible item , with item value , total eligible value , and total discount :
Example: USD 25 off eligible merchandise, allocated pro rata
Assume all three merchandise lines are eligible:
The allocation is:
Rounded to cents:
| Line | Original value | Pro-rata discount | Discounted value |
|---|---|---|---|
| Trail jacket | USD 120.00 | USD 14.29 | USD 105.71 |
| Thermal base layers | USD 70.00 | USD 8.33 | USD 61.67 |
| Water bottle | USD 20.00 | USD 2.38 | USD 17.62 |
| Total | USD 210.00 | USD 25.00 | USD 185.00 |
The allocation preserves the total discount:
This matters later if one item is partially returned. An order-level discount of USD 25.00 tells you the order received value; a per-item allocation records how much of that value belongs to each item. They are different representations and should not be conflated.
Rounding creates an important edge case. Allocating a value may yield fractions of a cent. Talon.One documents that pro-rata values are rounded to the nearest hundredth and that any remaining difference is added to or subtracted from the largest individual discounts so the final allocated values equal the intended total. Your downstream commerce and finance treatment must preserve that reconciliation.
From rule result to payable price
Talon.One evaluates rules and returns effects. A discount effect is not a payment capture, tax calculation, invoice, or fulfillment action. It is a decision result that the integration must interpret and apply consistently.
Read the opening of “API effects” to connect the calculations in this lesson with the Integration API response your commerce adapter receives.
In “Locate the returned effects,” read the opening context. Then read the coupon example and its explanation beginning “In our examples, there are three effects,” including the setDiscount interpretation. Focus on two implementation rules: effects have effect-specific props, and the integration must not rely on their position in the returned array.
At this stage, keep the boundary clear:
| Concern | Talon.One decisioning role | Commerce integration role |
|---|---|---|
| Decide eligibility | Evaluate campaign conditions | Supply accurate session, profile, and item data |
| Calculate configured reward | Return a discount effect value | Interpret the effect according to its type |
| Identify item-level scope | Return a per-item discount effect | Apply the discount to the correct cart or order item |
| Determine customer-facing total | Supply discount result | Combine product pricing, discounts, shipping, tax, and payment rules |
| Record the order | Respond to session lifecycle updates | Create or update the order, invoice, and payment state |
A useful implementation discipline is to retain both values:
- Original price: the undiscounted price sent to Talon.One for the current session evaluation.
- Applied discount: the effect-derived amount, identified by promotion and applicable item or order scope.
- Final price: the commerce calculation after all approved discounts, fees, taxes, and rounding.
Do not overwrite original prices with promotional prices in the source session payload. If the cart changes or an effect no longer qualifies, the Rule Engine needs the true current cart state to recalculate correctly.
For financial calculations, use integer minor units or a decimal-money type in the commerce service. Do not use binary floating-point arithmetic for money. For example, represent USD 31.50 as 3150 cents, or as a fixed-scale decimal, until final display formatting.
A calculation checklist for promotion design reviews
Before approving a discount rule, make the calculation answerable without interpretation:
- What is the reward type? Fixed amount, percentage, free item, or something else?
- What is the base? Entire session, merchandise subtotal, selected products, item price, item total, or an additional cost?
- What is the unit of application? Once per order, once per item line, per quantity unit, or per eligible bundle?
- Which items are eligible or excluded? Name the filter logic, category, SKU set, bundle, or product attributes.
- Does a maximum discount apply? Especially important for percentage promotions.
- Can the discount exceed the base? If not, define the floor at zero.
- What rounding rule applies? Include the currency precision and pro-rata residual treatment.
- What happens with other discounts? Define stackability, ordering, and whether the percentage sees original or already-discounted prices.
- How will the integration represent it? Order-level
setDiscountor item-levelsetDiscountPerItem, with a stable promotion name and appropriate item mapping.
If these answers are not written down, two systems can each behave “correctly” while producing different totals.
Key takeaways
- A fixed discount is bounded by its applicable base: .
- A percentage discount requires a defined base, rounding policy, and often a maximum cap.
- Order-level discounts apply one amount to an agreed session or order base and return
setDiscount. - Item-level discounts apply only to selected merchandise or item-related costs and return
setDiscountPerItem. - “Per item,” “per line,” and “per order” are materially different reward definitions when quantities exceed one.
- A pro-rata discount distributes one total discount across eligible items in proportion to price, with rounding reconciliation required.
- Price scope, shipping treatment, tax treatment, rounding, and stacking are not incidental details; they are part of the promotion contract.
Next, you will trace a customer action through the Integration API, Rule Engine, and returned effects, connecting these calculations to the real-time decisioning sequence your commerce integration must implement.
Can't find a good explanation? Sign up and we'll make it for you
Sign up