This chapter covers the following topics:
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.
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.
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?|
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.
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.
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: 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.
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.
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.
|Modifier||Incompat.||Bucket||Application Method||Value||Calculate Best Price||Engine Selection|
|B||Level 1||2||New price||75||75||Yes|
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.
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.
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|
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.
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.
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.
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||Customer class||310||A, B|
|Pricing||Item||Item category||290||A, 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 Type||Context||Attribute||Attribute Number||Price List|
|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.
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 Phase||Modifier||Incompat. Group||Qualifier/Product Attributes||Precedence||Engine Selection|
|List line adjustments||Preferred discount||Level 1||Customer class
|List line adjustments||Summer promotion||Level 2||Sales channel
|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
|Header level adjustments||Order amount discount||Level 1||Customer name
|Header level adjustments||Independence Day promotion||Level 1||Sales channel
|Header level charges||Handling charge||Level 1||None||None||Yes|
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|
|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.