Precedence and Best Price

This chapter covers the following topics:

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:

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:

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 Number Qualifier Context Qualifier Attribute Precedence Matched?
1 Customer Agreement type 240 No
1 Customer Customer class 310 No
2 Orders Order type 470 Yes

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 Modifier Modifier Value
Discount/surcharge: percentage List price%
Discount/surcharge: amount Amount
Discount/surcharge: new price List price - new price
Discount/surcharge: lumpsum Lumpsum amount/line quantity
Price Break Best price comparison for price break is based on the value of the matching break modifier and its list price *%.
Terms substitution Estimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Item upgrade Estimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Coupon issue Estimated discount value defined in the Comparison Value field on the modifier line. If not provided then best price is set to zero.
Other Item discount Estimated discount value defined in the Comparison Value field on the modifier line.
Promotional goods Estimated discount value defined in the Comparison Value field on the modifier line.
Freight Charges Same 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:

Modifier C is calculated as:

Modifier B is selected because it gives the better price.

Modifier Incompat. Bucket Application Method Value Calculate Best Price Engine Selection
A Not applicable 1 Percent 20 = Yes
B Level 1 2 New price 75 75 Yes
C Level 1 2 Percent 12.5 87.5 No

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):

Modifier Context Type Context Attribute Precedence Number Select Precedence Resolve Incompatibility
A Qualifier Customer Agreement type 240 Yes No
A Qualifier Customer Customer class 310 No No
A Pricing Item Item number 300 No No
B Qualifier Order Order type 470 No No
B Pricing Item Item category 290 Yes No
C Qualifier Order Order amount 100 Yes Yes
C Pricing Item Item number 200 No No

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.

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 Type Context Attribute Precedence Number Price List
Qualifier Customer Agreement type 240 B
Qualifier Customer Customer class 310 A, B
Qualifier Orders Order type 470 A
Pricing Item Item category 290 A, B

Consider the following setup:

Price List A

Price List B

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 Type Context Attribute Attribute Number Price List
Qualifier Customer Agreement type 240 B
Pricing Item Item category 290 A, 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:

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 Phase Modifier Incompat. Group Qualifier/Product Attributes Precedence Engine Selection
List line adjustments Preferred discount Level 1 Customer class
Item number
310
220
Yes
List line adjustments Summer promotion Level 2 Sales channel
All items
320
315
No
List line adjustments XYZ brand discount Level 2 Item category 290 Yes
Line charges Repack charge Level 1 Item number 220 Yes
Header level adjustments New Site discount Exclusive Site use
Item all
270
315
Yes
Header level adjustments Order amount discount Level 1 Customer name
Item number
260
220
No
Header level adjustments Independence Day promotion Level 1 Sales channel
All items
320
315
No
Header level charges Handling charge Level 1 None None Yes

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.

Modifier Value Calculation Common Benefit Percent Highest Number
A 10% None 10 No
B 200 Comparison Value 200 Comparison Value/1000 list price 20 Yes

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.