Thursday, September 20, 2018

Precedence and Best Price

Precedence and Best Price

Overview of Precedence and Best Price


Incompatibility occurs when the pricing engine finds more than one price or modifier to return, but the pricing engine and user-defined rules prohibit applying more than one of them. You can resolve incompatibilities by setting the Incompatibility Resolve Code field in the Event Phases window to either Precedence or Best Price:
  • Precedence: When incompatibility is encountered between price lists or modifier lists and the incompatibility resolve code for the phase is precedence, the pricing engine attempts to resolve the incompatibility by ordering the qualifier attributes and item context attributes from highest to lowest priority (number 1 having the highest priority). The qualifier or item attribute with the highest priority has precedence over all other attributes, and the engine selects the price list line or modifier list line to which this attribute belongs.
  • Best Price: Best price is the highest modifier value that calculates the highest discount value. When the pricing engine encounters incompatibility between modifier lists and the incompatibility resolve code for the phase is best price, the engine attempts to resolve the incompatibility by finding the modifier that gives the best price.

    Note: Incompatibility resolution can be set for each pricing engine phase with the exception of Phase Sequence 0 - List Line Base Price. See Events and Phases for more information about phases.

Default Precedence Numbers


When resolving incompatibilities by precedence, the pricing engine evaluates the precedence numbers that are assigned to pricing and qualifier attributes. Precedence numbers for both seeded and user-created attributes are defined in the Precedence field in the Context Setup window:
  • Seeded attributes: Pre-assigned precedence numbers are assigned to seeded attributes.
  • User-entered attributes: You can define precedence numbers when creating or updating attributes.
The attributes and their precedence values default to the appropriate price list, modifier, and qualifier windows. However, if you wanted to change the precedence value for a particular attribute in a price list, modifier, or qualifier line, you can manually override the precedence value only for the particular line. This only changes the precedence value for that particular line. However, to update the actual precedence number for an attribute so that it defaults with the new value, you must change the Precedence number in the Context Setup window.
Warning: To avoid problems with future upgrades, do not change the original precedence numbers for seeded attributes in the Context Setup window!
Precedence and Pricing Attributes
The precedence numbers for attributes that are defined for the Pricing context (excluding item context) do not have significant meaning for pricing engine evaluation in determining precedence.

Matched Qualifiers for Modifiers/Price Lists


The pricing engine only evaluates matched qualifiers for a price list or modifier only when ordering for precedence. A matched qualifier is described as those attributes that are evaluated as true. Because qualifiers can be defined as OR conditions, some qualifier attributes that exist on the setup of the price list or modifier might not be chosen by the engine, or in other words, are not qualified by the engine. The pricing engine uses matched qualifiers only when ordering the qualifier attributes to determine which has the highest priority.
The following table lists some seeded qualifier contexts and qualifier attributes with the attribute number for each attribute for a modifier list. The qualifier attributes of Agreement Type and Customer Class have the same grouping number, and Order type is in a different grouping number. For the engine to select the modifier, an order must have either Agreement Type and Customer Class be true or Order type be true. In this example, Order type is true and Agreement Type and Customer Class are false. Order type is a matched attribute, and only the value for order type is used to evaluate precedence.
Note: Effective precedence of a line = Minimum (product/qualifier precedence).
Grouping NumberQualifier ContextQualifier AttributePrecedenceMatched?
1CustomerAgreement type240No
1CustomerCustomer class310No
2OrdersOrder type470Yes

Price List Incompatibility Resolution


The pricing engine is coded to calculate base price from the price list in phase sequence 0. Phase 0 is coded with the resolve incompatibility code as precedence. You cannot change this setting. When the pricing engine determines that a pricing request is eligible for a price from more than one price list, the engine attempts to resolve the incompatibility by ordering the qualifier attributes and item attributes that are described in the precedence resolution section of this chapter.
If two or more price list lines are matched and have the same precedence, the pricing engine selects the price list line with the most matching pricing attributes. If the incompatibility between price lists cannot be resolved, then an error message is returned to the calling application (that a price cannot be applied) and lists the names of the price lists where the incompatibility resides.

Modifier Incompatibility Resolution


The incompatibility resolution codes for phases that are associated with modifier processing can be changed from the seeded values to reflect the business need. The exception to this is for Phase 0, in which the code cannot be changed.

Best Price Resolution for Modifiers

Incompatible modifiers can be across modifier types, therefore when the engine resolves incompatibility by best price, the engine needs to evaluate the modifiers on a similar basis. The engine does this by calculating a common benefit percent for each modifier. The following table identifies the modifier value that is used for evaluating best price for each modifier type:
Type of ModifierModifier Value
Discount/surcharge: percentageList price%
Discount/surcharge: amountAmount
Discount/surcharge: new priceList price - new price
Discount/surcharge: lumpsumLumpsum amount/line quantity
Price BreakBest price comparison for price break is based on the value of the matching break modifier and its list price *%.
Terms substitutionEstimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Item upgradeEstimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Coupon issueEstimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Other Item discountEstimated discount value defined in the Comparison Value field on the modifier line.
Promotional goodsEstimated discount value defined in the Comparison Value field on the modifier line.
Freight ChargesSame as discount and surcharges.
The pricing engine does not consider modifiers with formulas for best price calculation.

Calculating Common Benefit Percent

The pricing engine needs a common basis to estimate modifier types to determine which modifier yields the best price. The engine accomplishes this by calculating the common benefit percent. For some modifier types, no stated value exists that the engine can use to evaluate best price; thus, the engine uses the value that the user enters in the Comparison Value column on the modifier summary line. The engine calculates the benefit percent by taking the Comparison Value as the numerator divided by the list price of the item that the modifier will be applied as the denominators. This benefit percent is compared to the other benefit percents for the modifier lines that are being evaluated. The highest benefit percent number is the modifier that yields the best price. This is the modifier that the engine will apply.
Note: Comparison Value is a user-entered field. The pricing engine uses this value to calculate the common benefit percent.

Best Price Calculation Ignores Buckets

The pricing engine ignores buckets when selecting modifiers and determining best price calculation. Best price is calculated off of the list price. For example, an item has a $100 list price. The engine determines that the item is eligible for modifiers A, B and C. Modifiers B and C are incompatible and the engine must resolve the incompatibility by best price. For modifier B, the engine calculates:
  • 100 - (100 - 75) = 75
Modifier C is calculated as:
  • 100 - (100 * 0.125) = 87.5
Modifier B is selected because it gives the better price.
ModifierIncompat.BucketApplication MethodValueCalculate Best PriceEngine Selection
ANot applicable1Percent20=Yes
BLevel 12New price7575Yes
CLevel 12Percent12.587.5No
If only eligible modifiers are sent to the calculation engine, these modifiers are calculated in the correct bucket. In this example, the calculation engine takes the list price, $100, subtracts the bucket 1 discount, 20, for a selling price of $80. Next the engine calculates the bucket 2 discount off of the $80. Because modifier B is a new price discount, a discount of $5 is created and the new selling price is $75.

Header and Line Qualifiers for Modifiers

To determine precedence, the engine selects all qualified header level and line level qualifiers and item context for the modifier line. The engine then chooses the attribute with the lowest precedence number. This attribute is used for incompatibility resolution.
During precedence processing if two or more modifiers tie based on precedence processing, then the engine resolves using best price processing without going below the established precedence.

Modifier Incompatible Precedence Resolution

When the incompatibility resolve code for a phase is precedence, and more than one modifier line is eligible, the engine resolves the incompatibility in the following way (for this example, assume that all qualifier attributes are matched):
ModifierContext TypeContextAttributePrecedence NumberSelect PrecedenceResolve Incompatibility
AQualifierCustomerAgreement type240YesNo
AQualifierCustomerCustomer class310NoNo
APricingItemItem number300NoNo
BQualifierOrderOrder type470NoNo
BPricingItemItem category290YesNo
CQualifierOrderOrder amount100YesYes
CPricingItemItem number200NoNo
First, the engine will select the attribute with the lowest precedence number for each of the modifiers. For modifier A, agreement type is selected because it has the lowest number. For modifier B, item category is selected and for modifier C, order amount is selected.
The engine resolves incompatibility by ordering the precedence numbers for the three modifiers. Because modifier C has the lowest number, it is selected by the engine as the highest priority and is the modifier that is returned by the engine.
When the incompatibility resolve code for a phase is precedence and the engine cannot resolve incompatibility between two or more modifiers through precedence, the engine resolves incompatibility using best price resolution. If two or more modifiers result in the same best price, the engine randomly selects one modifier to return to the calling application.

Setting Up Incompatibility Groups


Incompatibility occurs when the pricing engine finds more than one modifier to return, but is permitted to apply only one of them. When incompatibility is encountered between modifier lines, the pricing engine attempts to resolve the incompatibility by evaluating the precedence value and selecting the modifier line with the highest priority (precedence number of 1 having the highest priority).
Note: The incompatibility resolve code, which determines incompatibility processing preference for the phase, must be set to Precedence.
The qualifier or item attribute with the highest priority has precedence over all other attributes, and the engine selects the modifier to which this attribute belongs.
Notes:
Use the Find Incompatibility Groups window to query modifiers by Phase Sequence, Phase Name and Incompatibility Group name and to display them in the Incompatibility Groups window. The query is phase-specific and returns only the modifier lines that are assigned to a specific phase such as the List Line Adjustment phase. You can view all modifier lines for the selected phase, and change or assign an incompatibility group. To view and edit the related modifier and its line details click Modifiers.
  • Incompatible Group: Displays the incompatibility group currently assigned to a modifier line.
    Assigning modifier lines to an incompatibility group enables the pricing engine to use incompatibility processing to resolve incompatibility between multiple eligible modifier lines. If an incompatibility occurs, the pricing engine reviews the modifier lines in the incompatibility group (assigned for a specific phase), evaluates their product precedence value from highest to lowest priority (number 1 having the highest priority), then selects the modifier line with the highest priority. In the Incompatible Group field, you can change an existing incompatible group assignment or assign a new incompatibly group to a modifier line.

    Note: You do not need to assign a modifier line to an Incompatibility Group.
  • Product Precedence: This value identifies the product precedence for the modifier line. The pricing engine evaluates the product precedence value during incompatibility resolution to select the modifier line with the highest priority (product precedence number of 1 having the highest priority). If required, you can click Modifiers to open the modifier to change the product Precedence value.

    Note: The precedence for the qualifier attribute does not appear. These attributes are evaluated by the engine during incompatibility resolution.

Incompatibility Resolution Examples


The following examples illustrate incompatibility processing by precedence or best price for modifiers and price lists:

Price List: Precedence Incompatibility Resolution

The following table lists several of the seeded qualifier contexts and qualifier attributes, and the item context and item number attribute with the precedence number for each attribute.
Context TypeContextAttributePrecedence NumberPrice List
QualifierCustomerAgreement type240B
QualifierCustomerCustomer class310A, B
QualifierOrdersOrder type470A
PricingItemItem category290A, B
Consider the following setup:
Price List A
  • Qualifier: Customer Class = VIP Customer
Price List B
  • Qualifier: Agreement Type = Yearly and Order Type = Special.
Both price lists contain prices for Item Category Z. Item X is part of Item Category Z. A price list is not defined for Item X.
An order is placed in Oracle Order Management for Item X. When Oracle Order Management sends the pricing request without a price list name to the pricing engine, the pricing engine must search for a price list for Item X. The pricing engine will not find a price for Item X, but will find that Item X belongs to Item Category Z. Item Category Z is on both Price List A and Price List B. Because the engine can return only one price for an item, the engine must determine which price list to select.
To resolve this, the engine first evaluates the qualifier attributes and item context attribute on Price List A. On Price List A, customer class has a precedence number of 310 and item category has a precedence number of 290; therefore the engine selects item category as the highest precedence on Price List A.
On Price List B, agreement type has a segment number of 240 and order type has a segment value of 470; therefore the engine selects agreement type with a number 240 to compare to the item context. Item category with a segment number of 290 is compared to agreement type with a number of 240. Agreement type has a lower number and has the highest precedence on Price List B. The engine orders the precedence numbers for Price Lists A and B in a sequence of the lowest number to the highest. The engine chooses the lowest number (the number with the highest precedence).
The engine will order the attributes as outlined in the following table:
Context TypeContextAttributeAttribute NumberPrice List
QualifierCustomerAgreement type240B
PricingItemItem category290A, B
Because agreement type has a precedence of 240, the pricing engine selects the price of Item X from Price List B and returns this information to the calling application.
Note: If the calling application sends a validated price list to the engine in the pricing request and is qualified to receive price from this price list, the engine does not perform precedence resolution; it returns the price from the designated price list. Using the example, if Oracle Order Management sends the pricing request to use Price List A and the eligibility rules are met, the engine returns the price from Price List A to Oracle Order Management and does not need to perform incompatibility processing.
The default precedence numbers can be changed by the user on the price list window at the time of setup.

Modifier: Precedence Incompatibility Resolution

In the following example, the pricing engine selects the following modifiers based on precedence resolution (for this example, assume that all qualifier attributes are qualified):
For this List Line Adjustments phase:
  • The Preferred Discount is applied because there are no other modifiers are in this incompatibility level.
  • The XYZ Brand Discount and the Summer Promotion are in the same phase and same incompatibility group. All Items has the lowest precedence number for Summer Promotion - 315. The XYZ Brand Discount has an item category precedence of 290. The XYZ Brand Discount is selected over the Summer Promotion because the precedence for item category at 290 has the highest priority.
For line charges phase, the Repack Charge is applied because there are no other modifiers in this incompatibility level.
For header level adjustments phase, the New Site Discount is exclusive and therefore the only modifier that is applied in this phase.
For header level charges phase, the Handling Charge is applied because there are no other modifiers in this incompatibility level.
Pricing PhaseModifierIncompat. GroupQualifier/Product AttributesPrecedenceEngine Selection
List line adjustmentsPreferred discountLevel 1Customer class
Item number
310
220
Yes
List line adjustmentsSummer promotionLevel 2Sales channel
All items
320
315
No
List line adjustmentsXYZ brand discountLevel 2Item category290Yes
Line chargesRepack chargeLevel 1Item number220Yes
Header level adjustmentsNew Site discountExclusiveSite use
Item all
270
315
Yes
Header level adjustmentsOrder amount discountLevel 1Customer name
Item number
260
220
No
Header level adjustmentsIndependence Day promotionLevel 1Sales channel
All items
320
315
No
Header level chargesHandling chargeLevel 1NoneNoneYes

Modifier: Best Price Incompatibility Resolution

The pricing engine determines that Modifier A and Modifier B are incompatible. The incompatibility resolve code for the phase is set to best price. Modifier A is a 10% discount and Modifier B is an other item discount with a Comparison Value of 200. The list price for the item that the modifier will be applied to is $1000. The engine calculates the common benefit percent to determine which modifier has the highest number.
ModifierValueCalculationCommon Benefit PercentHighest Number
A10%None10No
B200 Comparison Value200 Comparison Value/1000 list price20Yes
Modifier B has the highest common benefit percent and is applied as the best price discount.
Note: Best Price processing cannot be used for the following order-level modifier types: Discount, Surcharge, Freight and Special charge.

No comments:

Post a Comment

SQL Important Queries

  How to delete rows with no where clause The following example deletes  all rows  from the  Person.Person  the table in the AdventureWork...