This chapter contains the following:

## Pricing Matrixes

Use a pricing matrix to apply conditional logic on a pricing entity according to the value of an attribute that you specify.

A pricing matrix is an array that specifies conditions and results.

• The array contains rows and columns.

• Condition columns specify the condition to test, such as Customer Size equals Small.

• Result columns specify what to do when the condition is true, such as use the Corporate Segment.

• Each row specifies a separate condition and result.

Here's an example pricing matrix that assigns a pricing segment.

This matrix includes three rows. Each row specifies a rule that contains a condition and a result.

Row Condition Result

1

If Revenue Potential is Very high, and

Customer Size is Large, and

Cost to Serve is Very High, and

Customer Value is Very High, and

Customer Rating is Very High, then . . .

. . .assign the Corporate Segment.

2

If Revenue Potential is High, and

Customer Size is Medium, and

Cost to Serve is High, and

Customer Value is Medium, and

Customer Rating is High, then . . .

. . .assign the International Segment.

3

If Revenue Potential is Low, and

Customer Size is Small, and

Cost to Serve is Low, and

Customer Value is Low, and

Customer Rating is Medium, then . . .

. . .assign the Domestic Segment.

At run time, Pricing evaluates each row until it finds a match. If it doesn't find a match, then it sets a default value.

Here's the pricing entities where you can add a pricing matrix.

The conditions and results are different for each type of entity.

For example.

Entity Conditions Results

Pricing segment

Depending on the values of.

• Revenue Potential

• Customer Size

• Cost to Serve

• Customer Value

• Customer Rating

Set the.

• Pricing Segment

Pricing strategy assignment

Depending on the values of.

• Channel Method

• Pricing Segment

• Transaction Type

Set the.

• Pricing Strategy

Price list

Depending on the value of.

• Geography

Set the.

### Pricing Matrix Class

A pricing matrix class is a template that defines the structure of the pricing matrix. Use it to add condition columns and result columns to a pricing matrix.

Each pricing matrix class includes columns.

• Condition columns specify the conditions that determine whether to apply the result.

• Result columns specify what to do when all the conditions are true.

Example

Here's the predefined Pricing Segment matrix class.

The predefined Pricing Segment matrix class includes these condition columns.

Name Comparison Compare-to Attribute Domain

Revenue Potential

=

CustomerPricingProfile.RevenuePotentialCode

Lookup:ORA_QP_REV_POTENTIAL_VALUES

Customer Size

=

CustomerPricingProfile.CustomerSizeCode

Lookup:ORA_QP_CUSTOMER_SIZE_VALUES

Cost to Serve

=

CustomerPricingProfile.CosttoServeCode

Lookup:ORA_QP_COST_TO_SERVE

Customer Value

=

CustomerPricingProfile.CustomerValueCode

Lookup:ORA_QP_CUSTOMER_VALUE_RANKINGS

Customer Rating

=

CustomerPricingProfile.CustomerRatingCode

Lookup:ORA_QP_CUSTOMER_RATING_VALUES

And this result column.

Name Domain

Pricing Segment

Lookup:ORA_QP_CUST_PRICING_SEGMENTS

In pseudocode.

• If Revenue Potential equals the value of the RevenuePotentialCode attribute of the CustomerPricingProfile entity.

• If Customer Size equals the value of the CustomerSizeCode attribute of the CustomerPricingProfile entity.

• If Cost to Serve equals the value of the CosttoServeCode attribute of the CustomerPricingProfile entity.

• If Customer Value equals the value of the CustomerValueCode attribute of the CustomerPricingProfile entity.

• If Customer Rating equals the value of the CustomerRatingCode attribute of the CustomerPricingProfile entity.

then

• Set the Pricing Segment to a value from the ORA_QP_CUST_PRICING_SEGMENTS lookup.

You use the Pricing Segment matrix class to determine the condition columns that display for the pricing segment in the Pricing Administration work area, such as Revenue Potential.

Notes

• Oracle Fusion Pricing comes predefined with matrix types and matrix classes. Each type references one, and only one, class. Each class specifies conditions and results.

Predefined Matrix Type Predefined Matrix Class

Pricing Segment

Pricing Segment

Sales Pricing Strategy Assignment

Sales Pricing Strategy Assignment

Line Strategy

Line Pricing Strategy Assignment

Pricing Charge Guideline

Pricing Charge Guideline

• Use the predefined classes, when possible.

• If you must modify a predefined class, or add a new one.

• You typically define a new condition column.

• You only rarely need to define a result column.

• You can use only a predefined result column with a predefined pricing algorithm.

• Don't remove a predefined result column. It might cause an error when the pricing algorithm runs.

• If you add a new result column, then you must modify the pricing algorithm in the same way to make sure the pricing algorithm uses the new result. For example, if you add the Precedence column to the Strategy Assignment pricing matrix, then you must also modify the pricing algorithm so it sequences data according to precedence.

• Use the matrix type to identify the matrix class that Pricing uses for each pricing entity. For example, use the Pricing Segment matrix type to instruct Pricing to use the Pricing Segment matrix class when Pricing processes a pricing segment.

• Use the Setup and Maintenance work area to set up a matrix type. For details, see the Manage Pricing Matrix Types topic.

Note.

• Required, Allow Null, and Domain control behavior in the Pricing Administration work area. For example, if you enable the Allow Null option in the Revenue Potential row, then you don't have to set a value for Revenue Potential when you set up the pricing segment in the Pricing Administration work area. And Domain in the Revenue Potential row controls the values you can choose for Revenue Potential when you set up the pricing segment.

• Comparison, Compare to Attribute, and Null Is Wildcard controls runtime behavior. For example, Pricing uses Comparison and Compare to Attribute at run time to assign the pricing segment according to the value that the Order Entry Specialist sets in the Customer attribute on the order header when creating a sales order in the Order Management work area.

#### Set the Compare-to Attribute

Specify the entity and the attribute in the entity that the condition compares. Each matrix class specifies a different set of entities and attributes to test.

In this example, each row in the class examines an attribute of the customer pricing profile because a pricing segment determines how to organize profiles into market segments.

The Customer Rating condition column examines the value of the CustomerRatingCode attribute. CustomerRatingCode is part of the CustomerPricingProfile pricing entity.

#### Specify Values That Display as Choices

As an option, you can use the Domain to specify the values that display as choices for each attribute in the matrix. For details, see the Values That Display as Choices in Pricing Matrixes topic.

#### Extend the Compare-to Attributes

For a more advanced set up, use a service mapping to determine the compare-to attributes that the matrix class uses.

Note.

• A service mapping provides the compare-to attributes in the matrix class.

• In this example, the Pricing Segment matrix class uses the PriceRequestInternal service of the predefined Sales service mapping.

• The CustomerPricingProfile entity of PriceRequestInternal contains the compare-to attributes.

• You can't delete predefined attributes in a predefined service mapping, but you can add new ones.

• You can use an internal attribute that exists in Pricing, such as CustomerValueCode.

• You can use an external attribute that exists outside of Pricing, such as an attribute on the order header of a sales order from Order Management Cloud.

#### Make Rules Even More Flexible

Enable the Can Add New Columns option on the matrix class so you can edit the matrix for each new rule you create.

Note.

• This feature enables you to refine your matrix at a more detailed level than what your matrix class specifies.

• The Inherited section lists columns that the pricing matrix inherits from the matrix class. To include a column from the matrix class, enable it.

• Use a mix of inherited columns and columns you add only for the rule.

• Don't enable any inherited columns if you don't need them.

#### Examples

Examine a predefined matrix class.

1. On the Overview page, click Tasks > Manage Matrix Classes.

2. On the Manage Matrix Classes page, click Pricing Segment.

3. On the Edit Matrix Class page, notice values.

Condition Columns Result Columns

Revenue Potential

Customer Size

Cost To Serve

Customer Value

Customer Rating

Pricing Segment

Precedence

4. Click Tasks > Manage Pricing Segments.

5. Notice that the predefined Pricing Segment matrix class that you examined in step 3 determines condition columns and result columns that you can specify for a pricing segment.

6. On the Edit Matrix Class page, in the Revenue Potential row, notice the attributes.

Attribute Value

Compare to Attribute

CustomerPricingProfile.CustomerRatingCode

In this example, the pricing matrix gets values from the CustomerRatingCode attribute of pricing profile CustomerPricingProfile.

Domain

Lookup:ORA_QP_CUSTOMER_RATING_VALUES

The pricing matrix gets values from the ORA_QP_CUSTOMER_RATING_VALUES lookup.

These attributes determine values you can choose for the Revenue Potential column in the pricing matrix on the Manage Pricing Segments page.

Another Example

Here's an example of a matrix class you can use with a quantity adjustment.

Here's the conditions that this class implements.

1. If the user doesn't enter a quantity for the sales order, or if the user enters any quantity.

2. If the user doesn't choose a value for the customer on the sales order.

### Values That Display as Choices in Pricing Matrixes

Use the Domain of the pricing matrix class to specify where to get values that the pricing matrix displays as choices for each attribute in the matrix.

The Revenue Potential attribute of the Pricing Segment matrix class references the ORA_QP_REV_POTENTIAL_VALUES lookup in this example.

Pricing gets the values that the lookup contains when you use the Manage Pricing Segments page, then displays them as choices in the Revenue Potential attribute of the segment.

#### Specify Where to Get Values

Use the domain type to specify where to get the values.

Domain Type Description

Lookup

Get the value from a lookup that you specify on the Manage Pricing Lookups page. For example, to get values for approval status, choose CSD_APPROVAL_STATUS.

Item Extensible Attribute

Get the value from an attribute that you define on the Manage Item Attribute Groups and Attributes page in the Product Information Management work area. For details, see the Set Up Item Extensible Attributes in Pricing topic.

View Object Query

Get the value from an object that Pricing displays in the Pricing Administration work area.

Custom

Get the value from your set up in the Edit Column Domain Values dialog. Allows you to use your own values.

None

Get the value from free-form text that you enter when you use the pricing matrix in the Pricing Administration work area.

#### View Object Query

View Object Query requires a more complex set up. Here's the attributes you set.

Attribute Description

Domain Type

Choose View Object Query.

Application Module

Choose the part of Pricing that displays the object that contains the value. For example, if the value.

• Resides in a pricing matrix, then choose MatrixDomainAM.

• Is part of the pricing process, such as a matrix class or pricing algorithm, then choose PricingProcess.

Pay careful attention to the dot notated string. Make sure you choose the string for the correct application. For example.

• PricingProcessAM (oracle.apps.scm.doo.common.pricingIntegration.ApplicationModule.PricingProcessAM). doo identifies the application as Order Management. Note that doo means Distributed Order Orchestration, which is an earlier name for Order Management. Use this choice for Order Management.

• PricingProcessAM (oracle.apps.scm.fos.orchestrationProcesses.transferPrice.publicModel.pricingIntegration.ApplicationModule.PricingProcessAM). fos identifies the application as Financial Orchestration. Don't use this choice for Order Management.

Configuration

If Application Module doesn't display the value you require, then enter it in the Configuration attribute.

Tip: The dialog filters values that you can enter in Configuration according to the value you set for Application Module. To determine the values that are available, enter a percent symbol ( % ) in the Configuration attribute. For example, set Application Module to MatrixDomainAM enter % in Configuration, wait a moment, then click MatrixDomainAMLocal. In most situations, use MatrixDomainAMLocal when you set up a matrix class.

View Object

Choose the view object that displays the value.

For example, to get the value from an object that's part of the pricing strategy, choose PricingStrategyPVO. PricingStrategyPVO displays objects that are part of these pages.

• Manage Customer Pricing Profiles

• Manage Pricing Segments

• Manage Pricing Strategies

• Manage Pricing Strategy Assignments

• Manage Currency Conversion Lists

For another example, to view values for the customer, choose CustomerPVO. CustomerPVO enables you to get attributes that describe the customer, such as PartyId, PartyName, and so on.

Key Attribute

Choose the attribute that identifies the object that the result column must use.

For example, choose OrgId to get the value from the Business Unit attribute of the pricing strategy.

Display Attribute

Choose the attribute that contains the value that the matrix must display.

View Criteria

As an option, set the view criteria to filter the data.

Data Type

Set the data type so it supports the attribute you choose in Key Attribute.

For example, if you set Key Attribute to.

• PartyId, then set Data Type to Number because PartyId contains numeric data.

• PartyName, then set Data Type to Text because PartyName contains text data.

View Object Bind Variables

Add a join condition to filter the result.

Use View Object Bind Variables to add a join condition. For example, assume you reference a view that displays these rows.

Row Attribute X Attribute Y

1

V1

R1

2

V2

R2

3

V3

R3

You can define this condition.

• If attribute y equals R1 and R2, then display only rows 1 and 2 in the Pricing Administration work area, such as on a price list.

#### What's a Public View Object?

A view object is a type of database query. It describes how Pricing views and updates data in the Oracle database.

A public view object is a type of view object that an application outside of Pricing, such as Order Management Cloud, uses to communicate with Pricing. Its public, which means the data that it gets from the database isn't private and only visible to Pricing.

For example, assume you developed a new product with a very large revenue potential, the Heart Wrist Watch that monitors heart rhythms. You need to use it as input to Revenue Potential on your pricing matrix. If the order line contains the wrist watch, then you need to set Revenue Potential to Very High.

Note.

• An application module is a like a briefcase you can open to access the Oracle database. PricingProcessAM (Pricing Process Application Module) is an example of an application module.

• Use the view object to query the Oracle database.

• In the Condition Columns area of the pricing matrix, In the Domain column, click the pencil, then set the Domain Type to View Object Query.

• Use the dialog to specify how to use view object to query the Oracle database.

• You use these settings for this example.

Attribute Value

Domain Type

View Object Query

Application Module

PricingProcessAM (oracle.apps.scm.doo.common.pricingIntegration.ApplicationModule.PricingProcessAM)

Configuration

PricingProcessAMShared

View Object

Line

The order line contains the item, so choose Line.

Key Attribute

InventoryItemId

InventoryItemId identifies the item that the order line contains.

Display Attribute

InventoryItemId

View Criteria

Leave empty.

Data Type

Number

InventoryItemId is a number data type.

View Object Bind Variables

Leave empty.

#### More Examples

For detailed examples that set the domain, see these topics.

• Assign Pricing Strategy According to Precedence

• Create Price Lists for Each Customer

• Use Extensible Flexfields with Pricing

• Set Up Item Extensible Attributes in Pricing

### Manage Pricing Matrix

In this example, modify a predefined pricing matrix so you can add adjustments to a pricing rule according to the value of the Customer Region attribute.

North

10% discount

South

0% discount

East

5% discount

West

15% discount

The Customer Region is the condition, and the Adjustment Type of % discount and Adjustment Amount are the results. For example, if the Customer Region contains North, then reduce the price by 10%.

Here's a summary.

This topic includes example values. You might use different values, depending on your business requirements.

Manage a matrix class.

1. Set up the condition column.

#### Set up the Condition Column

1. On the Overview page, click Tasks > Manage Matrix Classes.

2. On the Manage Matrix Classes page, click Price List Charge Adjustment.

You can modify the predefined Price List Charge Adjustment matrix class. It determines the conditions and results that you can specify in the pricing matrix that you add to a price list. Oracle Fusion Pricing comes predefined with a number of matrix classes. To reduce maintenance, modify a predefined matrix class to meet your business requirement rather than create a new one.

3. On the Edit Matrix Classes page, notice the attributes.

Attribute Description

Service

Specify a service that a service mapping references. For details, see the Manage Service Mappings topic.

Public

Allow an application other than Oracle Fusion Pricing to use the matrix class.

Date Effectivity Enabled

Allow the pricing rule that uses the matrix class to preserve a history of changes that Pricing makes to some attributes. Use it to examine older versions of a pricing entity which might be helpful in some troubleshooting situations.

Allows you to add new columns to a pricing rule.

4. Scan the Condition Columns area and the Result Columns area.

These areas determine the conditions and the results that the adjustment matrix displays when you add a pricing matrix. For an example of this matrix, see the Adjust Prices topic.

5. In the Condition Columns area, click Actions > Add Row, then set values.

Attribute Value

Name

Geography ID

Source Code Name

GeographyID

Comparison

=

Compare to Attribute

Choose the attribute that Pricing examines to determine whether the condition is true. For this example, choose Line.FulfillmentGeographyId.

For example, assume a sales order in Order Management Cloud contains an attribute that stores the value for the FulfillmentGeographyId attribute on the order line. At run time, if Geography ID equals the value that FulfillmentGeographyId contains, then Pricing applies the result that the adjustment matrix specifies.

Required

Leave empty.

If you add a check mark, then you must provide a value for the attribute that you choose in Compare to Attribute when you create the pricing rule in Pricing Administration.

Allow Null

Leave empty

If you add a check mark, then Pricing doesn't require you to provide a value for this attribute when you use the matrix during set up in Pricing Administration. It allows an empty value or the string Null in the database.

Null is Wildcard

Leave empty.

If you add a check mark to.

• Null is Wildcard. Pricing allows the user to provide any value for the attribute at run time, and Pricing will use that value during the comparison.

• Allow Null and to Null is Wildcard, Pricing allows no value, or any value.

6. Set up the domain.

• In the row you just added, in the Domain column, click Edit Domain.

• In the Edit Column Domain Values dialog, set values.

Attribute Value

Domain Type

Custom

Data Type

Text

Default Value

For this example, enter West.

Pricing will display the value you enter in the Condition column of the pricing matrix, by default.

Default Is Fixed Value

Leave empty.

If you add a check mark, then Pricing doesn't allow you to modify the default value in the pricing matrix.

Domain Value Display Value

100

North

200

South

300

East

400

West

• Click OK > Save.

1. Create a price list, then add item AS54888 to it.

Do the steps described in the Manage Price Lists topic up through the Add an Item to the Price List section, but don't click Approve.

2. On the Edit Price List page, in the AS54888 - Buy - Each Charge area, click the down arrow next to Create Charge, then click Create Price Adjustment Matrix.

3. In the Create Price Adjustment Matrix dialog, add a check mark to Geography ID, then click OK.

North

Discount Percent

10

East

Discount Percent

5

West

Discount Percent

15

5. Click Save > Approve.

Map a matrix class to a matrix type to make sure each pricing entity in the Pricing Administration work area references the correct matrix class.

Use the Manage Matrix Types page to assign one matrix class to a matrix type. For example, Pricing maps the predefined Price List Charge Adjustment matrix class to the predefined Price List Charge Adjustment matrix type. This mapping makes sure the condition columns and result columns of the Price List Charge Adjustment matrix class display correctly in the Price List page in the Pricing Administration work area, and makes sure you use these columns when you create a pricing rule that adjusts price according to an attribute.

This topic includes example values. You might use different values, depending on your business requirements.

Manage a pricing matrix type.

1. In the Navigator, click Setup and Maintenance.

2. In the Setup and Maintenance work area, go to the task.

• Offering: Order Management

• Functional Area: Pricing

• Task: Manage Pricing Matrix Types

3. On the Manage Pricing Matrix Types page, examine the pricing matrix types that come predefined with Pricing.

To reduce maintenance, use a predefined pricing matrix type instead of creating a new one.

Examine the mapping between each matrix type and matrix class so you know which matrix class where Pricing will add the attribute. You must also know the details of the attribute, its domain, and mappings within the matrix class. After implementing the matrix class, you can define the matrix rules that will use the new attribute.

4. If you can't locate a pricing matrix type that meets your requirements, then click Actions > Add Row, then set values.

Attribute Value

Matrix Type Code

Enter text that Pricing can use to reference this pricing matrix type. Pricing assigns each pricing entity that it associates with a pricing matrix to this matrix type code.

A QP_(QP underscore) prefix identifies the predefined pricing matrix types.

Name

Enter text that describes the pricing matrix type. Pricing displays the text you enter in the Pricing Administration work area.

• Use headline capitalization, such as My Pricing Matrix Type.

• Use the same text that you choose for the Dynamic Matrix Class. Using the same text helps to visualize the mapping.

Dynamic Matrix Class

Choose the Dynamic Matrix Class that identifies the conditions, results, and domain values.

Dynamic Matrix Class displays the list of matrix classes from the Manage Matrix Classes page in the Pricing Administration work area. Use the Manage Matrix Classes page to create your own matrix class, then use Manage Pricing Matrix Types to map the type to the class.

Allow Multiple Matrixes

Add a check mark to allow more than one matrix for the pricing entity.

For example, Pricing comes predefined to include.

• More than one matrix for pricing strategy assignments.

• Only one matrix for pricing segments.

Active

Add a check mark to make the matrix is available at run time.

5. Click Save.

Here's how Dynamic Matrix Class works.

Note.

• Use Dynamic Matrix Class to choose a matrix class from the Manage Matrix Classes page of the Pricing Administration work area. If no predefined class meets your needs, then add your own.

Here's how Allow Multiple Matrixes works.

Enable the Allow Multiple Matrixes option when you need more than one matrix for an entity. For example.

• Allow Multiple Matrixes is disabled for the predefined Pricing Segment matrix type. So the Pricing Segment entity in the Pricing Administration work area includes only one matrix, and you can't add more.

• Allow Multiple Matrixes is enabled for the predefined Sales Pricing Strategy Assignment matrix type. So the Pricing Strategy Assignment entity in the Pricing Administration work area includes more than one matrix. It includes a separate matrix for each assignment. Pricing Administration also displays the Create Assignment Matrix button that you can use to add a matrix.

### Modify Algorithm When Using Matrix

If you modify the result column of a pricing matrix or use an extensible flexfield with a pricing matrix, then you must modify an algorithm step.

Assume you add an extensible flexfield to a discount adjustment. Here's the set up you need to do.

1. Click Tasks > Manage Algorithms.

2. On the Manage Algorithms page, search for, then open the algorithm you must edit.

If You Use This Matrix Type Then Modify This Algorithm Step In This Pricing Algorithm

Pricing Segment

Derive Pricing Segment

Get Sales Pricing Strategy

Sales Pricing Strategy Assignment

Get Sales Pricing Strategy

Evaluate Pricing Matrices

Apply Matrices

Line Strategy

Get Pricing Strategy

Get Line Pricing Strategy

Pricing Charge Guideline

Evaluate Pricing Matrices

Apply Matrix Rules for Guidelines

Pricing runs the predefined step at run time to process the pricing matrix.

For this example, search for, then open Apply Matrices for editing.

3. On the Edit Algorithm page, click the step that contains Evaluate Pricing Matrices in the Name column.

4. In the Step Details area, click the step that contains Matrix in the Name Column, then examine the code in the Variable Path column.

finest {'DynamicMatrixId: '+MatrixQ.DynamicMatrixId}; dynamicMatrix(MatrixQ.DynamicMatrixId, Line.PricingDate, ServiceParam.CacheEnabledFlag != null ? ServiceParam.CacheEnabledFlag : true)

Here's the format of the path to the Matrix data set.

dynamicMatrix(MatrixId, effectivityDate, enableCache)

where

Parameter Description

MatrixId

Identifies the pricing matrix to evaluate.

effectivityDate

Date to compare against the start date and end date of the pricing matrix.

enableCache

Contains.

• True. Cache the matrix rules.

• False. Don't cache.

Most steps come with other predefined data sets, such as.

• Charge

• Line

• LineAttribute

• ItemExtensibleAttribute

• ServiceParam

To reduce maintenance, use a predefined data set. If none of the predefined data sets meet your needs, then add a new one.

If you use an item extensible attribute or extensible flexfield in a condition column, then you must add a data set. For example, here's a data set you could use to support an extensible flexfield that you add on the order header.

Name Variable Path Cardinality Data Set Join

PricingHdrEFF_Custom

PriceRequest.Name

where

• Name is identical to the data set name.

For this example.

PriceRequest.PricingHdrEFF_Custom

Zero or one

5. In the Step Details area, scroll down, locate the First Row Actions section, then examine the code.

• The algorithm runs this code for the first record that the query returns.

• Pricing runs this code for each pricing matrix type except for the pricing guideline. It runs the Each Row Action for the pricing guideline.

• Keep these points in mind during setup, maintenance, and troubleshooting.

Here's the complete code for the first row action. You must modify it in some situations. For details, see the Pricing Algorithms topic.

finest('Processing Matrix RuleId: '+Matrix.DynamicMatrixRuleId)
MatrixQ.DynamicMatrixRuleId = Matrix.DynamicMatrixRuleId
MatrixQ.ConditionString = Matrix.MatchConditions.join(' ')
MatrixQ.ResultString =  Matrix.MatchResults.join(' ')

finest('Basis Value: ' + Basis)
MatrixQ.DynamicMatrixRuleId = Matrix.DynamicMatrixRuleId

// currency conversion
if (MatrixQ.FromCurrencyCode!=Charge.CurrencyCode ) {
if ( 'ERROR'==ConvRate?.MessageTypeCode ) {
finest('creating line message')
Line.MessageTypeCode = 'ERROR'
Charge.MessageTypeCode = 'ERROR'
Term.MessageTypeCode = 'ERROR'
msg = Message.locate([ParentEntityCode:'LINE',ParentEntityId:Line.LineId,MessageText:ConvRate.PrcErrorMessage])
if ( msg==null ) {
// create new error message for Line
msg = Message.insert([PricingMessageId:getNextId()])
msg.MessageName = ConvRate.PrcMessageName
msg.MessageText = ConvRate.PrcErrorMessage
msg.ParentEntityCode = 'LINE'
msg.ParentEntityId = Line.LineId
msg.MessageTypeCode = ConvRate.MessageTypeCode
}
}
else {
finer('\tConverted currency, 1 '+MatrixQ.FromCurrencyCode+' = '+ConvRate.ConversionRate?:1+' '+Charge.CurrencyCode)
}
}
// end currency conversion
*/

### Troubleshoot Pricing Matrixes

Troubleshoot problems with a pricing matrix.

Try these solutions.

Problem Solution

Pricing doesn't apply the matrix rule.

Make sure the value that the Domain references identifies the same data that the Compare to Attribute condition column references.

For example, If Compare to Attribute equals Header.CustomerId, then get the domain value from CustomerId. Don't get it for Customer Name.

Make sure you use the correct data type.

For example, if the service mapping uses the Data data type, then make sure the data that your Compare to Attribute references also uses the Data data type.

Identify the matrix type that might contain the error. Pricing displays a slightly different message according to the matrix type that its processing when the error occurs.

Message Predefined Matrix Type

Pricing didn't apply attribute pricing to the transaction.

An error occurred while determining the pricing segment for the transaction.

Pricing Segment

An error occurred while determining the pricing strategy for the transaction.

Sales Pricing Strategy Assignment

Line Strategy

Pricing didn't apply attribute pricing to the charge.

Pricing didn't apply attribute pricing to the adjustment.

An error occurred while determining a guideline rule for charge {CHARGE_NAME} in guideline {GUIDELINE_NAME}.

Pricing Charge Guideline

After you identify the matrix class, make sure the Compare to Attribute condition column in the class references the correct data type.

Examine the latest version of the pricing algorithm. For example, if the problem occurs with the Price List Charge Adjustment matrix type, then examine the Apply Matrices pricing algorithm, and make sure the Evaluate Pricing Matrices step contains all the required data sets.

For example, if you add extensible flexfield x on the order header, and if you add a Source Order dimension, then make sure the dimension references extensible flexfield x, and make sure you add flexfield x to the data set.

Examine modifications in the pricing algorithm.

• Make sure your modifications don't contain typographical errors, such as an incorrect spelling.

• Make sure you correctly set the Data Set Join.

• Make sure the Path uses PriceRequest.EntityName, where EntityName matches exactly the value that the service mapping uses.

• Make sure the Alias uses the same value as the EntityName.

## Covered Items

Set up pricing rules that affect coverage on a price list. Manage the rules between each coverage item and each covered item.

A coverage item is an item that adds value by providing coverage for a covered item. For example, a six month warranty is a coverage item for a laptop computer, and the laptop computer is the covered item.

• Define pricing rules for a coverage item that covers all items on a price list.

• Define a one-time charge or a recurring charge.

• Use an amount or a percent of the covered item price in each rule.

• Define one or more charges for each rule between the coverage item and the covered item. Set each charge as a one-time charge or a recurring charge.

• Calculate each coverage pricing rule according to an amount or to a percent of the covered item price for a duration. For example, the price for the Gold Warranty coverage for a laptop for three years is \$10 for each year, with a total amount of \$30 over the full three year period.

• Import and export coverage pricing rules from price lists.

Pricing supports coverage pricing through an integration with Oracle Fusion Service Contracts. For details about how to set up service contracts, see the Implementing Enterprise Contracts book on Oracle Help Center.

#### Differentiate Pricing for Coverage

You can sell an item and also sell coverage for an item. In some situations, you might need Pricing to price a coverage item for a warranty or support differently than it prices a coverage item for a durable good. The coverage item price might depend on the item that it covers. For example, assume a company that builds medical devices sells items to medical clinics.

Covered Item Coverage Item

MRI machine

Technical support for an MRI machine

CT scanner

Technical support for a CT scanner

A technician typically applies a more sophisticated skill set when supporting an MRI machine than when supporting a CT scanner. Pricing allows the medical device company to differentiate the price of the support that it offers for the MRI machine from the support that it offers for the CT scanner.

#### Calculate One Time and Recurring Charges for Covered Items

Here's the calculations that Pricing uses to calculate the charge for each covered item.

Calculate One-time Charge Calculate Recurring Charge

To calculate the extended amount, multiply the one-time charge by the quantity of units of the covered item. For example, if the one-time charge is 25, and if the quantity is 4, then the one-time charge is 100.

Note that a one-time charge applies to the entire duration of the coverage.

Calculate the recurring charge for each covered quantity for each primary UOM (unit of measure), when the UOM is Time.

1. If the duration UOM isn't equal to the price periodicity UOM, then set the duration UOM to the price periodicity UOM.

For example, if the duration UOM of the coverage is 1 Year, and if the price periodicity UOM is 6 Months, then set the duration UOM to 6 Months.

2. Multiply the recurring charge by the quantity of units of the covered item.

3. Multiply the result of step 2 by the duration.

For example, if the unit price for the monthly charge is \$10, and if the quantity of units is 1, and if 12 months have passed, then the result is.

• Extended amount of \$10 (\$10 multiplied by 1, where 1 is the quantity of units of covered items)

• Total coverage amount of \$120 (\$10 extended amount multiplied by 1 unit multiplied by 12 months)

### Manage Pricing for Covered Items

In this example, you set up Oracle Fusion Pricing to calculate three years of warranty service for a laptop computer, starting on January 1, 2017, billed monthly at the rate of 10% of the sale price.

This topic includes example values. You might use different values, depending on your business requirements.

1. In the Navigator, click Setup and Maintenance.

2. In the Setup and Maintenance work area, open the task.

• Offering: Order Management

• Functional Area: Pricing

3. On the Manage Pricing Bases page, set the pricing basis to use for the covered item.

More than one charge might exist for a covered item. You must set up a pricing basis that determines the charges and price element, such as list price or net price, to use for the percent calculation.

For example, assume your covered item includes a separate charge for the sale price, but doesn't include charges for the monthly recurring sale price or a one-time recycling fee. You must specify which of these charges to use as the basis when calculating the coverage charge for the covered item. In this example, the price of the coverage is 10% of the list price of the covered item.

4. Click Actions > Create, then set values. This basis specifies the list price as the charge to evaluate. For details, see the Manage Pricing Bases topic.

Attribute Value

Name

Coverage_Basis_for_Desktop_PC

Usage

Coverage Basis

Price Element

List Price

Price Type

Recurring

Charge Type

Sale

Charge Subtype

Price

Price Periodicity

Month

Active

Contains a check mark

5. Click Save and Close.

6. In the Navigator, click Pricing Administration.

7. On the Overview page, click Tasks > Manage Price Lists.

8. On the Manage Price List page, search for price list Corporate Segment Price List, then open it for editing.

9. On the Price List Lines tab, in the Items area, click Actions> Add Row, then set values.

Attribute Value

Item

WR11531

Description

Desktop PC Warranty

Pricing UOM

Year

Line Type

Primary Pricing UOM

Contains a check mark

Service Duration Period

Year

Service Duration

3

Note.

• To verify you added a coverage item, make sure the Associated Items column displays the Managed Covered Item icon, and that Service Duration Period and Service Duration are grey and disabled.

• This example assumes that Product Management includes the coverage item WR11531. If the search can't find the coverage item you require, then you must add it in the Product Management work area.

10. In the Associated Items column of the row you just added, click the Manage Covered Item icon.

11. On the Manage Covered Items page, click Add Row, set values, then click Save.

Attribute Value

Pricing UOM

Each

Coverage UOM

Year

Action Type

12. Click Create Charge.

13. In the Charge details area, set values, then click Save.

Attribute Value

Pricing Charge Definition

Recurring Sale Price

Price Periodicity

Month

Calculation Method

Covered Item Price Percent

Use this method for a coverage pricing rule when the rule bases the price of the coverage on a percent of the covered item price.

Coverage Basis

Coverage_Basis_for_Desktop_PC

Calculation Amount

10

Start Date

Set a date.

End Date

Set a date.

## Configured Items

### Set Up Price for Configured Items

Set up pricing for a configuration model in a price list or discount list.

Here's an example.

Note.

1. In the Configurator Models work area, you set up the model for the zCZ_AT6751010 - Vision Slimline 5001 item, including the hierarchy, option classes, and configure options for each class.

2. In the Pricing Administration work area, you add the item to the Corporate Segment Price List, then use the Edit Component Item Charges page to create a charge for each option. For example, you create a \$400 Base Price charge for the 10" display.

3. In the Order Management work area, your user searches for the zCZ_AT6751010 on the catalog line, clicks Configure and Add, then uses the Configure dialog to choose the options. The dialog displays the charge you create for each option, such as \$400 for the 10" display.

This example assumes you already used the Configurator Models work area to set up the configuration model.

For details about the configuration model, including how to set it up, see Configurator Modeling Guide on Oracle Help Center.

This topic includes example values. You might use different values, depending on your business requirements.

Set up pricing for a configuration model.

1. On the Overview page, click Tasks > Manage Price Lists.

2. On the Manage Price Lists page, search for and open Corporate Segment Price List.

3. On the Edit Price List page, in the Search Results area, click Actions > Add Row.

4. In the row you just added, search for the item.

Attribute Value

Item

zCZ_AT6751010

5. In the Associated Items column, click the icon.

The icon displays only for a configured item or for a coverage item.

6. On the Edit Component Item Charges page, in the Item Structure Details area, expand the list, then notice the hierarchy displays for the parent zCZ_AT6751010 Vision Slimline 5001 and its child option classes.

7. Create the charge for the parent model.

Click the row that contains Vision Slimline 5001 in the Description column, click Create Charge, then set values.

Attribute Value

Pricing Charge Definition

Sale Price

Calculation Method

Price

Base Price

100

Start Date

Set the date when to start using this charge.

End Date

Set an optional date when to stop using the charge. If you don't set an end date, Pricing will use this charge continuously unless you modify it at some later time.

You must create a charge for the parent model. If you don't, the Order Management work area will display an error message when the user clicks Submit. The error indicates that a charge is missing.

8. Create charges for the Screen Option Class.

• Expand zCZ_OC4752100, the Screen Option Class, then notice the configure options that display.

Item Description

zCZ_CM4751101

8" Display

zCZ_CM4751102

10" Display

You create a charge only on the configure option, not the option class.

• Click the row that contains 8" Display in the Description column, click Create Charge, then set values.

Attribute Value

Pricing Charge Definition

Sale Price

Calculation Method

Price

Base Price

300

• In the Item Structure Details list, in the 8" Display row, notice the Charge column displays a check mark.

The check mark indicates you created a charge for the item.

• Click the row that contains 10" Display in the Description column, click Create Charge, then set values.

Attribute Value

Pricing Charge Definition

Sale Price

Calculation Method

Price

Base Price

400

9. Repeat step 8 for each option class. Use the same values for Pricing Charge Definition and Calculation Method that you used in step 8. For example.

Configure Option Base Price

100

200

10. Click Save and Close.

• Create a sales order, search for the zCZ_AT6751010 - Vision Slimline 5001 item on the catalog line, click Configure and Add, then verify that the Configure dialog displays the charges you set up for each configure option.

Note.

• Pricing doesn't create the charge from the discount list. The discount rule for a configure option is specific to the configuration model. For example, Pricing applies the discount rule for the hard drive in the context of the configuration model. If you set up the discount rule outside of the configuration model, the Pricing applies the discount rule separately.

• You can apply pricing to the configured item or to the rollup charge when you set up a discount on the configured item.

#### Apply Pricing to Rollup Charges on Discount Lists

If you add a check mark to Apply to Rolled-up Charge when you create the discount rule for the model, then Pricing applies the discount that you set for the model on the configured item and on the configure options. It applies the rollup discount and also adds any discounts that you add on each item.

Assume you set up discount rules for the Vision Slimline 5001 model and the configure options. Here's the calculations that Pricing does at run time.

Description Charge Discount Calculation Without Rollup Calculation With Rollup

Charge for the Vision Slimline 5001 model

\$100

10% of the \$100 charge equals \$10

\$100 price minus \$10 discount equals \$90

\$90

Charge for the 10" Display configure option

\$400

10% of the \$400 charge equals 40

\$400 charge minus \$40 discount equals \$360

\$360 minus \$40 (10% roll-up from configured item) equals \$320

Charge for the Quad Core 2.5GHz option

\$200

No discount

\$200

\$200 minus \$20 (10% roll-up from configured item) equals \$180

Total price

Not applicable

Not applicable

\$90 plus \$360 plus \$200 equals \$650

\$90 plus \$320 plus \$180 equals \$590

#### Manage Configure Options Across Configuration Models

You can specify pricing for a configure option independently of and across more than one configuration model. It isn't necessary to define pricing for the configure option in the context of each configuration model. Instead, you can maintain configure option pricing for all configuration models on the same price list.

You can also maintain configure option pricing.

• In a tier adjustment or pricing matrix

• For price list rules at the All Items level

Assume you set up.

• A configuration model that includes three configure options.

• A sales charge for the configuration model at \$1000.

• A sales charge for the first two configure options at \$20 each.

• A price of the third configure option at \$10, and define it as a separate line item on the price list. Its the same price across all configuration models.

Here's how Pricing does the calculation at run time.

• Price the first two configure options at \$20 each.

• Price the third configure option at \$10.

• Price the configuration model at \$1050.

## Other Set Ups

### Set the Time Zone for Pricing Administration

Specify the time zone to use for time attributes that display in the Pricing Administration work area, such as the Start Date and End Date.

Time attributes store date and time values in the server time zone, by default. You can specify your time zone to display in the Pricing Administration work area.

Assume you must set the time zone to Pacific Time.

1. In the Navigator, click Set Preferences.

2. On the Preferences page, click Regional.

3. On the General Preferences page, set the Time Zone preference to your preferred time zone.

The Pricing Administration work area will use this preference to determine the time zone to use when it displays time attributes.

For this example, set it to (UTC-8:00) Los Angeles - Pacific Time (PT).

4. Create a new price list, then notice the Start Date and End Date on the Edit Price Page displays in the Pacific time zone.

Note.

• Pricing converts your time zone to the server time zone when it saves the value of a time attribute to the database. For example, it converts the value in Start Date to the server time zone. If you query the price list, then the Edit Price List page converts Start Date from server time to Pacific Time and displays it.

• This feature applies only to values in the Pricing Administration work area. It doesn't apply to file-based data import, pricing spreadsheets you use through ADFdi, or pricing through REST API. These technologies use the server time zone.

### Use Empty Values as Filters

Use an empty value in your pricing setup as a way to filter the pricing segments that Pricing considers when it prices an item.

Assume you set up pricing segments.

Revenue Potential Customer Rating Pricing Segment Precedence

Low

-

Corporate Segment

98

Low

-

International Segment

100

Low

Low

Domestic Segment

100

You create a sales order, and Pricing uses the pricing strategy you assigned to Corporate Segment, but you want it to use the pricing strategy you assigned to Domestic Segment.

Pricing uses Corporate Segment because its precedence is 98, and Pricing uses the segment with the lowest precedence.

Next, assume you have three customers.

Customer Revenue Potential Customer Rating

A

Low

-

B

Low

-

C

Low

Low

Note.

• You create a sales order for customer C and find that Pricing uses Corporate Segment but you want to use Domestic Segment, so you adjust precedence for Corporate Segment from 98 to 110.

• You create another sales order for customer C and find that Pricing now uses International Segment.

• If you enable Null Is Wildcard for Customer Rating, then Pricing considers all three matrix rows. So, Pricing will pick International Segment or Domestic Segment, depending on which row the query returns first.

• You want to use Domestic Segment but you don't want to adjust precedence because you have 20 other segments and you don't want a precedence adjustment to impact them.

If you already set up a customer pricing profile for each customer, then do this.

1. In the Pricing Administration work area, click Tasks > Manage Matrix Classes.

2. On the Manage Matrix Classes page, click the value.

Attribute Value

Name

Pricing Segment

3. On the Edit Matrix Class page, disable null for the customer rating.

Name Null Is Wildcard

Customer Rating

Doesn't contain a check mark.

Now, Pricing won't consider Corporate Segment or International Segment because their Customer Rating on the pricing segment doesn't contain a value. Instead, it will use Domestic because it's Customer Rating does contain a value. Its value is Low.

## Performance and Troubleshooting

### Runtime Behavior of Pricing Changes

Improve application performance. Refresh pricing data to reduce the number of times required to initialize objects and to minimize round trips to the database.

Here's the data you can refresh.

Data Description

Pricing Rule

Pricing queries rules and entities to calculate the price of an item, such as shipping charges, discounts, margin, and taxes. Here's the objects you can refresh in your pricing rules.

• Price list

• Cost list

• Shipping charge list

• Discount list

• Pricing strategy

• Pricing segment

• Customer pricing profile

• Return price list

• Pricing strategy assignment

• Currency conversion list

• Matrix rule

Here's some more data you can refresh.

• Configurations in the Setup and Maintenance Work Area

• Pricing setup data

• Matrix classes

• Item attributes

• Customer attributes

Starting in release 19C, Pricing doesn't come predefined to refresh pricing rules. The Oracle Fusion application will include changes you make to a pricing rule as soon as you make it. Example applications include Order Management, Supply Chain Financial Orchestration, Subscription Management, and so on.

Pricing Algorithm

Refresh algorithm metadata to avoid reading and parsing it more than one time from the database.

Service Mapping

#### What Happens When Pricing Rules Change at Runtime

Consider an example.

• User 1 and User 2 are each an Order Entry Specialist who use the Order Management work area.

Behavior Without Refresh

Assume the Pricing Administrator set up the Sentinel Desktop with a unit price of \$300.

Step Description Unit Price with Refresh Enabled Unit Price with Refresh Disabled

1

User 1 adds the Sentinel Desktop to an order line.

\$300

\$300

2

User 2 adds the Sentinel Desktop to an order line.

\$300

\$300

3

Not applicable

Not applicable

4

User 1 signs out, signs in, creates a new sales order, and then adds Sentinel Desktop to an order line.

\$300

\$399

5

User 2 signs out, signs in, creates a new sales order, and then adds Sentinel Desktop to an order line.

\$300

\$399

Behavior With Refresh

Assume you set up the Sentinel Desktop with a unit price of \$300, data refreshes every 60 minutes, and the Order Management users wait 60 minutes before signing back in.

Step Description Unit Price with Refresh Enabled Unit Price with Refresh Disabled

1

User 1 adds the Sentinel Desktop to an order line.

\$300

\$300

2

User 2 adds the Sentinel Desktop to an order line.

\$300

\$300

3

Not applicable

Not applicable

4

User 1 signs out, waits 60 minutes, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

\$399

\$399

5

User 2 signs out, waits 60 minutes, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

\$399

\$399

Behavior With Two Charges, Without Refresh

Assume you set up the Sentinel Desktop with charge 1 of \$300, and charge 2 of \$200.

Step Description Unit Price with Refresh Enabled Unit Price with Refresh Disabled

1

User 1 adds the Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

2

User 2 adds the Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

3

Not applicable

Not applicable

4

User 1 signs out, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

charge 2 equals \$200

5

User 2 signs out, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

charge 2 equals \$200

Behavior With Two Charges, With Refresh

Assume you set up the Sentinel Desktop with charge 1 of \$300 and charge 2 of \$200. Assume data refreshes every 60 minutes, and the Order Management users wait 60 minutes before signing back in.

Step Description Unit Price with Refresh Enabled Unit Price with Refresh Disabled

1

User 1 adds the Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

2

User 2 adds the Sentinel Desktop to an order line.

charge 1 equals \$300

charge 1 equals \$300

3

Not applicable

Not applicable

4

User 1 signs out, waits 60 minutes, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

charge 1 equals \$300

charge 2 equals \$200

charge 1 equals \$300

charge 2 equals \$200

5

User 2 signs out, waits 60 minutes, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

charge 1 equals \$300

charge 2 equals \$200

charge 1 equals \$300

charge 2 equals \$200

Behavior With Price Adjustment, Without Refresh

Assume you set up the Sentinel Desktop with a unit price of \$300 and a \$20 markup.

Step Description Unit Price with Refresh Unit Price without Refresh

1

User 1 adds the Sentinel Desktop to an order line.

\$300

\$300

2

User 2 adds the Sentinel Desktop to an order line.

\$300

\$300

3

Not applicable

Not applicable

4

User 1 signs out, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

\$300

\$320

5

User 2 signs out, signs in, creates a new sales order, and adds Sentinel Desktop to an order line.

\$300

\$320

#### What Happens When Pricing Algorithms Change at Runtime

Pricing uses the user's session to refresh each pricing algorithm.

• Pricing loads the pricing algorithm the first time it gets the algorithm when it prices a transaction, then reads the algorithm from the session during each subsequent price request.

• Pricing continues to use the session data until the user signs out of the session.

• Pricing doesn't refresh the data until the user signs back into the application.

Consider an example.

• User 1, User 2, and User 3 are each an Order Entry Specialist who use the Order Management work area.

1. The administrator creates an pricing algorithm named Calculate My Shipping Charges, creates version 1 for the algorithm, then publishes it.

2. User 1 signs into Order Management, creates a sales order, then adds the Sentinel Desktop to an order line.

3. Order Management sends a request to Pricing to price the order line.

4. Pricing looks for Calculate My Shipping Charges in the session data but doesn't find it because this is the first request in this session.

5. Pricing gets Calculate My Shipping Charges from the database and loads it into the session data.

6. User 2 signs into Order Management, creates a sales order, then adds the Sentinel Desktop to an order line.

7. Order Management sends a request to Pricing to price the order line.

8. Pricing looks for Calculate My Shipping Charges in the session data, finds it, and uses it to price the order line.

Assume the administrator modifies the Calculate My Shipping Charges pricing algorithm, creates version 2 of it, then publishes it.

1. User 1, who hasn't signed out of Order Management, creates a new sales order, then adds the Sentinel Desktop to an order line.

2. Order Management sends a request to Pricing to price the order line for User 1.

3. Pricing looks for Calculate My Shipping Charges in the session data, finds version 1, and uses it to price the order line for User 1.

4. User 2 signs out of and signs into Order Management, creates a sales order, and adds the Sentinel Desktop to an order line.

5. Order Management sends a request to Pricing to price the order line for User 2.

6. The administrator published version 2, so Pricing looks for version 2 of Calculate My Shipping Charges in the session data but doesn't find it. So, Pricing loads version 2 into the session data, then uses version 2 to price the order line for User 2.

7. User 3 signs into Order Management, creates a sales order, and adds the Sentinel Desktop to an order line.

8. Order Management sends a request to Pricing to price the order line for User 3.

9. Pricing looks for version 2 of Calculate My Shipping Charges in the session data, finds it, and uses it to price the order line for User 3.

#### What Happens When Service Mappings Change at Runtime

Pricing publishes each service mapping to session data in Oracle Metadata Service. If you don't modify any service mappings, then Pricing reads the service mapping from the data in Oracle Metadata Service when it prices your item.

Here's what Pricing does if you modify a service mapping.

1. Gets the service mapping that you modified.

2. Creates the schema for the mapping you modified.

3. Publishes the schema to the data in Oracle Metadata Service.

For details, see the Oracle Metadata Services section in the book titled Oracle Fusion Middleware Understanding Oracle Application Development Framework on https://docs.oracle.com.

### Troubleshoot Pricing Setup

Troubleshoot problems you encounter that involve pricing.

Problem Solution

I create a new sales order in Order Management and encounter a problem on the Create Order page.

The View Pricing Strategy and Segment dialog doesn't contain a value for the pricing segment and the strategy defaults to Corporate Pricing Strategy.

I click the error icon and notice an error.

The pricing strategy was not determined for the current transaction.

No matching pricing segment was found for the customer.

If the problem persists, make sure you create a profile, segment, strategy, and strategy assignment for the customer that you choose in the Customer attribute on the Create Order Page in Order Management.

I notice a delay at run time in applying a discount.

Open the highest version of your pricing algorithm, then disable the cache.

For example.

• Assume you have two published versions of the Price Sales Transactions pricing algorithm.

• Open version 2, click on step 1, then set the EnableCache variable to False.

• Republish version 2.

I add an item to a price list, but the order line I create in Order Management doesn't include the changes I made in the Pricing Administration work area. I am collecting planning data and using the Refresh and Start the Order Promising Server scheduled process to publish my changes.

Wait for the scheduled process to finish and for your changes to propagate through your environment. Wait about one hour.

I encounter an error when I create a sales order in the Order Management work area.

A matching price list cannot be found for this transaction for the pricing strategy

This problem might occur when I set up more than one business unit, I set up a price list for each unit, and the error only occurs for one of the units.

You might not have assigned the correct access set to the price list.

Assume you created price list m for business unit n, price list y for business unit x, and the problem occurs only when you create a sales order that references business unit x.

1. Go to the Pricing Administration work area.

2. Click Tasks > Manage Price Lists.

3. Search for, then open price list y for editing.

4. Click Access Sets.

5. Add the Common access set.

I add an item to a cost list and click Save. I add the item on the catalog line in Order Management, then click the price on the catalog line, but the price breakdown doesn't contain any text or values.

If you add an item to the cost list but don't create a charge for it, pricing will fail.

Make sure you click Create Cost Charge, set up the charge, then click Save when you add the item to the cost list on the Cost List page in Pricing Administration.

The price breakdown on the Catalog Line or order line in Order Management doesn't contain the rows I need, such as Margin or Cost of Goods Sold.

Set up the pricing results presentation. For details, see the Manage Price Details on Order Lines topic.

#### Various Lists

Can't Find Price List

I create a sales order for customer Computer Service and Rentals in the Order Management work area, add item AS54888 on the order line, click Submit, then an error displays.

The application can't find a matching price list for this transaction for pricing strategy Corporate Pricing Strategy.

Its possible you didn't add the item to the price list. For details, see the How Profiles, Segments, and Strategies Work Together topic.

Try this.

1. Examine the profile.

• In the Pricing Administration work area, click Tasks > Manager Customer Pricing Profiles.

• On the Manager Customer Pricing Profiles page, search for customer Computer Service and Rentals.

• In the search results, notice the value.

Customer Name Customer Value

Computer Service and Rentals

Very High

2. Examine the segment.

• Click Tasks > Manage Pricing Segments.

• On the Manage Pricing Segments page, notice the values.

Pricing Segment Customer Value

High Value

Very High

In this example, notice Pricing assigns the High Value segment to each customer that has a Very High value. Computer Service and Rentals has a Very High value, so Pricing places Computer Service and Rentals in the High Value segment.

3. Examine the strategy assignment.

• Click Tasks > Manage Pricing Strategy Assignments.

• On the Manage Pricing Strategy Assignments page, on the top part of the page, click the row that includes Header in the Assignment Level attribute, then notice the values that display in the matrix.

Pricing Strategy Pricing Segment

Corporate Pricing Strategy

High Value

In this example, notice Pricing assigns the Corporate Pricing Strategy to the High Value segment. In the previous step, you determined Pricing places Computer Service and Rentals in the High Value segment, so Pricing uses the Corporate Pricing Strategy for Computer Service and Rentals.

4. Examine the strategy.

• Click Tasks > Manage Pricing Strategies.

• On the Manage Pricing Strategies page, search the Name attribute for Corporate Pricing Strategy.

• In the search results, click Corporate Pricing Strategy.

• Click Price Lists, then, in the Segment Price Lists area, notice you assigned one price list to the strategy.

Name Currency

USD Price List

USD

At this point, you have confirmed that the profile, segment, strategy assignment, and strategy result in using the USD Price List for customer Computer Service and Rentals. So, its very likely you didn't add the AS54888 item to the price list, and that's what's causing the error.

5. Examine the price list.

• In the Name column, click USD Price List.

• On the Edit Price List page, in the Items area, search the Item attribute for AS54888.

• The search likely doesn't return a result, so, in the search results, click Actions > Add Row, then add the AS54888.

Wrong Currency Displays on Order Line

I create a sales order in the Order Management work area, add an order line, but the currency on the order line defaults to a value I didn't expect.

Assume you used the Pricing Administration work area.

• Created a price list named RMB Price List, set the currency for the price list to RMB, then added the AS54600 item to it.

• Added the RMB Price List to the Corporate Pricing Strategy.

Next, in the Order Management work area, you add the AS54600 to an order line. The currency on the order line defaults to USD. You expect it to default to RMB.

Its possible you didn't set up the default currency or currency conversion correctly.

• Go to the Order Management work area, open your sales order, set the Customer attribute, then click Actions > View Pricing Strategy and Segment.

• Copy the strategy name, such as Corporate Pricing Strategy, to your clipboard.

• Sign out of Order Management.

• In the Navigator, click Pricing Administration.

• In the Pricing Administration work area, click Tasks > Manage Pricing Strategies.

• On the Manage Pricing Strategies page, search for, then open Corporate Pricing Strategy.

• On the Edit Pricing Strategy page, notice the value for the Default Currency attribute.

In this example, the order line defaults to USD, so its likely the Default Currency attribute contains USD. This set up is ok if you plan to use this strategy primarily for order lines that require USD.

• Click Currency Conversion Lists, then examine the list.

• Create a currency conversion list that converts USD to RMB. For details, see the Manage Currency Conversion Lists topic.

#### Pricing Rules

• Make sure you add the list that contains the pricing rule to a pricing strategy.

• Make sure you approve the list. Click Approve on the page that you use to create the list so you can add it to a pricing strategy and so the pricing algorithm can use it. Pricing displays Approve only if you sign in with the Pricing Manager role, and only if you haven't already approved the list.

• Make sure the transaction occurs during the time frame that you specify when you set the start date and end date for the list.

Price Breakdown Doesn't Display a Value

I set up a discount rule, create a new sales order and add an item to it, but one of the lines in the price breakdown doesn't display a value until I click Save or Submit. I don't want to save or submit the order yet because I am providing a quote to my customer.

Try this.

2. Create a sand box. For details, see the Create a Sandbox So You Can Edit Service Mappings topic.

3. Click Tasks > Manage Service Mappings.

4. Search for and open the service mapping you use with your rule, such as the Sales mapping.

5. Click Sources.

Assume you use the RoundingBillToPartyId attribute in your discount rule.

• In the Sources list, click OrderCatalogLine.

• In the Entity Mapping list, click Header.

• In the Attribute Mappings list, click Actions > Add, then map the RoundingBillToPartyId attribute to the PartyId view object attribute.

7. Repeat step 5, but map RoundingBillToPartyId to PartyId in the OrderLine source.

Note.

• Examine the predefined mapping of RoundingBillToPartyId to PartyId in the Header entity of the OrderHeader source. The OrderHeader source provides pricing when you reprice or save the sales order.

• The OrderCatalogLine source provides pricing on the catalog line when you search.

• The OrderLine source provides pricing when you add an item to the sales order.

• OrderCatalogLine and OrderLine don't come predefined with the mapping. You must add whatever attributes you use with your rule to OrderCatalogLine and OrderLine.

#### Service Mappings

Problem Solution

In the Pricing Administration work area, I click Tasks > Manage Service Mappings, open my service mapping for editing, then click Sources. But I can't map an attribute because the Add Row action on the Attribute Mappings tab is grey and not active.

Here are some solutions you can try.

• Sign in with pricing administrator privileges. If you don't have the privileges, there are many actions you can't do.

• If you opt into the Unified Sandbox during set up, then you must create and active it. For details, see the Create and Activate Unified Sandboxes topic.

I set up a matrix class or algorithm variable and notice that the list of values for the Service doesn't contain any values, or doesn't contain the entity I set up in the service mapping.

Remove any values you entered in the Alias of an entity.

I encounter an error that's similar to this one.

The definition of inherited attribute LineItemRating_Custom of entity Line in the service mapping isn't valid.

In this example, the data type for LineItemRating_Custom is probably different across service mappings. For example, you might have set it up as a String in the Sales service mapping and as a Decimal in the MaterialTransfer service mapping.

Make sure you use the same data type for your custom attribute in the Sales service mapping and in the MaterialTransfer service mapping.

The list of values for the Join Entity is empty.

Refresh the row. Click the next row in the list of entities, then click the row where the Join Entity is empty.

If the problem persists, make sure you correctly set up your attribute. For example, make sure it doesn't contain any typographical errors.

The Save action is disabled.

Do.

• Save changes frequently, such as after you set up each attribute.

• Redo your set up on the entity or attribute.

Pricing doesn't save my changes.

Do.

• Use the View Source XML action to verify your changes and make sure they're what you expect.

• Create a new Test for your pricing algorithm. Verify that the example PriceRequest payload includes the changes you expect.

• If you modify a source mapping, then create or reprice a sales order and make sure it doesn't contain any errors.

I move my service mappings from my test environment to my production environment, but production doesn't include my set up.

In your test environment, on the Manage Service Mappings page, click Actions > View Source XML, then verify the XML includes your changes and that the changes are what you expect. In particular, examine your _Custom objects, make sure they exist, and you set them up correctly.

Do it again in your production environment, and make sure the set up is the same in test and production.

I encounter an incident error when creating or pricing a sales order.

Do.

• If necessary, remove the source map, set it up again, and retry the flow.

• Make sure View Object Name and View Object Attribute in your source mapping don't contain typographical errors.

• Use Auto Suggest when you set View Object Name to make sure you set a value that doesn't contain typographical errors.

The attributes I set up don't match their intended use.

Examine the descriptions for the attributes and make sure you're using them correctly. For details, see the Price Sales Transaction section at https://docs.oracle.com/en/cloud/saas/supply-chain-management/19a/oessc/price-sales-transaction-PriceRequest-svcDataObj-332.html.

#### Pricing Algorithms

Testing

You might encounter one of these errors when you test your pricing algorithm.

Error Solution

I encounter an error message.

An application error occurred. See the incident log for details.

I encounter a java.math.BigDecimal exception.

This error typically occurs when Pricing can't process the price override.

Add a check mark to the Allow Manual Adjustment option in the Price List Charge area of the price list.

If caching is.

• Turned off. Restart your test.

• Turned on. Wait 30 minutes, and then restart your test.

I encounter an error message.

Unable to parse the variable[PriceRequest] using the service definition [Sales.PriceRequestInternal]. Please check the variable value or service schema.

This error typically indicates that you didn't format the XML syntax in the test case input correctly.

Use an XML editor to make sure you format the XML correctly.

I encounter an error message.

Failed to get data for Service Parameter Mapping "Sales" Source "Orderheader" Service "PriceSalesTransaction". Caused by failing to process entity "LinePrcOverrideEFF_Custom".

This error occurs because the Weblogic Server doesn't include the service data object, the entities, or the attributes that you added to the PriceSalesTransactions service.

Restart each OrderOrchestration Weblogic Server (WLS) that you use in your test.

I encounter an error message.

Another user changed the row with primary key oracle.jbo.Key[300100078134872]

This error might occur when you modify a pricing algorithm, save your changes, and then immediately publish the pricing algorithm.

Try one of these solutions, then publish again.

• On the Manage Algorithms page, enter %Custom% in the Query by Example to refresh the list of algorithms.

• Sign out of Pricing, and then sign back in.

I encounter one of these errors when I click Run Test.

• java.lang.NullPointerException

• Attempt to access dead entity in TestcaselOEO, key=oracle.jbo.Key[300100078134901]

• Attribute VariableName in SetTransformAlgorithmAM.TestcaseInput is required.

These errors occur when an unsaved modification exists in the input payload and you click Run Test.

Click OK in the error dialog, cancel your algorithm edit, navigate to the Manage Algorithm page, open the algorithm, make your changes, save them, then click Run Test.

#### Other Resources for Troubleshooting

See individual topics throughout the Administering Pricing book for other troubleshooting tips.