Pricing Options

Overview

CPQ’s pricing-related settings have been consolidated within Pricing Options in the Pricing Portal. The Pricing Options card, within the Pricing Portal provides access the pricing settings.

The following pricing-related settings are now available in Pricing Options.

Pricing Options

Closed Apply Only the First Matching Price Model

This option determines if one or multiple Price Models are applied to a part during pricing evaluation.

  • Yes: (default) Only the first Price Model that matches the Pricing Rule criteria to the part. If the same part is in multiple Pricing Rules, and within multiple Price Models within a rule, the Pricing Rule price value is derived from the first rule (as shown in the list of rules on the Administration page) and the first Price Model within the rule (as shown in the Linked Price Models section for the rule).
  • No: All Price Models that match the Pricing Rule criteria to the part.

ClosedView Example

For the following example, assume all of the Pricing Rules and models logically apply to the part, and that the rules and models are shown in ordered sequence.

  • If Apply only the first matching Price model is set to YES the price for Part A will be $100.
    • Only the price defined in Price Model 1 will be applied.
  • If Apply only the first matching Price model is set to NO the price for Part A will be $80.
    • The pricing adjustments for Model 1, 2 and 3 will all be applied in a sequential chain (i.e. The output price for one model is the input to the next model, in sequence)
    • Model 1 - Price = $100 > Model 2 - Price = $90 ($100 - %10) > Model 3 - Price = $80 ($90 - $10)

One-to-One and One-to-Many


ClosedTransfer Price Model JSON to Commerce

This pricing option determines whether to transfer Pricing Engine calculation information JSON from Price Models to Commerce line attribute calculation information _price_calculation_info.

  • On - Send Price Model JSON information to Commerce.
  • Off – Don't send Price Model JSON information to Commerce. *default value

    Turn this option off for better performance if you don't use this functionality in Commerce.


ClosedPricing Behavior

This option modifies the order of actions and calculation of prices. Depending on your adoption of Pricing Engine, this setting may have been set automatically and may limit which options you may choose.

Important: Switching from one Pricing option to another may impact existing pricing and past transactions within the system. Oracle recommends thoroughly testing the impact of the Pricing option change before implementing the change in a production environment. Once the Pricing option is changed in a production environment, returning transaction data to its previous state may require significant effort.

 

  • Version 1 represents the legacy pricing behavior. If you adopt CPQ Pricing Engine for pricing calculation, you should use pricing behavior Version 2 or higher.
  • Version 2 runs the CPQ Pricing Engine as part of pricing calculations and provides for the following adjustments to the Invocation and Pricing flows: Main Document attributes populate before the Sub Document modify execution occurs; and Global Pricing calculations occur immediately before the execution of Formulas.
  • Version 3 retains all Version 2 adjustments in addition to the following change: The Document Advanced Default BML will no longer execute when the 'Revert to Default' selection is selected for attribute(s) on the modify tab of an Action.
  • Version 4 retains all Version 3 adjustments and improves commerce pricing performance. Pricing Calculation is optimized to run once in Commerce actions between Before Formula and Formula. As a result, the pricing calculation result is accessible in Formula and After Formula BML, but is not available in Before Formula BML.

Pricing Behavior Version 4 is available beginning in Oracle CPQ 23B. Version 4 enables the following pricing behaviors:

  • Main document attributes populate before the sub-document modify execution occurs.
  • Global Pricing calculations occur immediately before the execution of Formulas.
  • The document Advanced Default BML will no longer execute when the "Revert to Default" selection is selected for attribute(s) on the modify tab of an Action.

The _pricing_engine_info item, previously returned by Pricing Engine to Commerce quote lines, is deprecated in Pricing Behavior Version 4. This item duplicated the data returned by Pricing Engine in _price_calculation_info


ClosedEnable Charge Definitions

Beginning in Oracle CPQ 23D, Charge Definitions can be used to categorize charges. When enabled, the Pricing administrator selects a Charge Definition first when creating a charge.

  • On - Enable Charge Definitions
  • Off – Disable Charge Definitions

You must turn this option on to integrate with Oracle Fusion Order Management.


ClosedEnable Currency Conversion in Pricing Engine

This option enables the Pricing Engine to reference CPQ Exchange Rates to automatically convert prices from the base currency to other enabled currencies on the site. When enabled, customers only need to set the site base price currency for a product price or charge and the other enabled currencies can be automatically generated.

  • On - Enable the Pricing Engine to activate automatic currency conversion from the site base currency for unspecified enabled currencies.

  • Off - Disable automatic currency conversion. When no price is defined in Pricing Engine for the transaction currency, the pricing applied falls back to the previous Price Model price, Price Book price, or Part price that is available in the transaction currency. This is the legacy behavior for CPQ Pricing.

Notes:

  • Oracle CPQ strongly recommends that customers enable the Enable Currency Conversion in Pricing Engine option.

  • Conversion rates must be defined for each currency in which you wish to convert prices, refer to CPQ Exchange Rates.


ClosedApply multiple charges in a price list as a whole

When this option is enabled, multiple charges from absolute Price List type price models are applied as a whole. In other words, CPQ will only apply equivalent charges from the last absolute Price List type price model. When this option is disabled, the charges are applied additively.

For example, two absolute price value Price Lists are applicable for a product. Price list 1 has charges A & B, price list 2 has charges B & C.

  • When this option is enabled, the final charges are charges B & C.

  • When the option is disable, all charges (A, B, and C) are applied.

The default value for this option is Off. If a site does not have any pricing data, the default value for this option is set to On.


ClosedApply adjustments on existing charges only

When this option is enabled, a discount or markup to a charge is only applied if the target charge has been established in a previous absolute Price List type price model.

For example, part 1 has a $5 Activation charge discount, but no Activation charge has been defined.

  • When this option is enabled, the $5 discount is not applied.

  • When this option is disabled, a -$5 charge is applied.

The default value for this option is Off to support existing implementations. If a site does not have any pricing data, the default value for this option is set to On


ClosedObserve commerce process Steps for the pricing action in quoting

When this option is enabled, pricing calculation is only executed in Commerce if the Commerce Recalculate action is active in the current Commerce Process Workflow Step. It also ensures that Commerce sub-document actions only invoke pricing immediately before Formulas for Pricing Behaviors v2 or higher.

The default value for this option is Off to support existing implementations. If a site does not have any pricing data or Advanced Price Models, the default value for this option is set to On


ClosedEnable Pricing Portal Administration Logging

When enabled, changes to pricing made in the Pricing Portal, Product Workbench, or with any of the Pricing REST APIs are recorded in the Administration Logs.

Note: Logging can negatively impact performance. Validate performance before enabling Pricing Portal Administration Logging in a production environment.


ClosedEnable incremental pricing in quoting

When incremental pricing is enabled, only line items whose pricing attributes are changed are repriced. If any transaction level attribute is changed, all line items are repriced. When this option is disabled, all line items are repriced when any line items is changed or if any transaction level attribute is changed.

Notes: You are recommended to turn this option on if all line items are priced independently.


ClosedApply context-dependent data source in Pricing Attribute Mapping

The Apply context-dependent data source in Pricing Attribute Mapping option is only applicable when a Pricing Attribute has attribute mappings to two or more different types of Data Sources (e.g. a Configuration model and a Commerce process).

If a pricing attribute happens to have a default value populated in the pricing attribute detail page, that value will be utilized only after all the data sources are exhausted.

  • When this option is On, the Pricing Attribute uses the Data Source corresponding to the current invocation context.

  • When this option Off, the Pricing Attribute honors the Attribute Mapping order number.

For example, assume a Pricing Attribute has two Data Sources: a Configuration model and a Commerce process. When this option is On, the Pricing Attribute uses the Configuration Data Source in the Configuration model, and the Commerce Data Source in the Commerce process. When this option is Off, the Pricing Attribute uses the Data Source with the lowest order number in the Pricing Attribute's Attribute Mapping.

  • The default for this option is Off for customers currently using Pricing Engine. If a site does not have any pricing data or any Advanced Pricing Models yet defined the default for this option is On.

  • To find the order number for an attribute, check the Pricing Attribute detail page.


Scripting

Scripting options provide the ability to associate a BML script for Pricing Engine to execute before and/or after the standard Pricing Engine calculations. Administrators now use BML scripting to add new charges, modify the price, and change certain attribute values.

BML scripts can be used to set the initial values for prices, charges, or pricing attributes for subsequent processing in Pricing Engine. For example, Customer Segment can we calculated based on logic or a data table and then used as input to Pricing Engine. BML scripts can also be used to perform post-processing of Pricing Engine outputs. For example, customers could enforce the lowest floor price by using the lower of the Pricing Engine or floor price. Another benefit is that the BML processes the whole pricing document (the pricing header and all line items) as a whole. This allows the BML to batch queries. It is also useful to handle situations when one line item's price depends on another line item.

ClosedPricing Script: Before Pricing Engine Execution

When this option is enabled, the customer provided BML script is executed before the start of pricing engine execution.

Example Before Pricing Engine Execution script

/Ensure that all pricing and charge attributes that are either read or updated are selected in the inputs.
//Failure to do so can result in errors during saving or execution.
 
//Get the Sales Channel from the header.
salesChannel = jsonget(pricingDocument,"salesChannel_c","string","none");
 
//Get the Customer Industry from the header.
customerIndustry = jsonget(pricingDocument,"customerIndustry_c","string","none");
 
//Now query the data table using BMQL and then set the customer's price sensitivity.
customerPriceSensitivity = "";
results = bmql("select PriceSensitivity from PriceSensitivity where SalesChannel = $salesChannel and  CustomerIndustry = $customerIndustry ");
for result in results {
   customerPriceSensitivity = get(result, "PriceSensitivity");
}
//Update the customer's price sensitivity so that the correct price models are activated.
jsonput(pricingDocument,"customerPriceSensitivity_c",customerPriceSensitivity);
 
//Finally return the pricing document.
return pricingDocument;

ClosedPricing Script: After Pricing Engine Execution

When this option is enabled, the customer provided BML script is executed after the end of pricing engine execution.

Example After Pricing Engine Execution script

/Ensure that all pricing and charge attributes that are either read or updated are selected in the inputs.
//Failure to do so can result in errors during saving or execution.
 
//Get the lines and start adjusting the charges.
lines = jsonget(pricingDocument,"lines","jsonarray");
 
//Find the size so that an integer array representing the indices can be created.
linesize = jsonarraysize(lines);
//Build the indices array.
lineIdxArr = range (linesize);
 
 
//Iterate through the lines
for lineIdx in lineIdxArr {
 
   //Extract the line as JSON
   line = jsonarrayget(lines,lineIdx,"JSON");
 
   //Get hold of the charges for this line.  
   charges = jsonget(line,"charges","jsonarray");
 
   //Use JsonPath to efficiently locate the node.
   //Here, we are interested in extracting the unit price of the One-Time Shipping Freight charge.
   shippingFeeJsonPath = "$.charges[?(@.chargeType == 'freight' && @.priceType == 'One Time')].unitPrice";
 
   //Locate the freight charge.
   //Assign a default value of 0.0 if such a charge is not found.
   shippingFee = jsonpathgetsingle(line,shippingFeeJsonPath,"float",0.0);
 
   //Add a handling fee for line that has a non zero shipping charge.
   if (shippingFee > 0.0){
       //Create the One Time Handling Charge.
       handlingFee = json();
       jsonput(handlingFee,"priceType","One Time");
       jsonput(handlingFee,"chargeType","handling");
 
       //Adds a 15% handling fee for the shipping charge.
       jsonput(handlingFee,"unitPrice",shippingFee * 0.15);
 
       //It's a good practice to add/update the calculation info for more diagnostic information.
       calcInfo = json();
       jsonput(calcInfo,"message","One time fee for handling the Shipping Freight");
       calcInfoArr = jsonarray();
       jsonarrayappend(calcInfoArr,calcInfo);
 
       //Insert the handling charge to the incoming charges
       jsonarrayappend(charges,handlingFee);
   }

//Remove the processing fee for highly price-sensitive customers. //Get the Customer's Price Sensitivity. priceSensitivity = jsonget(pricingDocument,"customerPriceSensitivity_c","string","<empty>"); //Check if its high. if (priceSensitivity == "high") { //Iterate through the charges and find the index of the processing Fee and then remove it. chargeArrIdx = range(jsonarraysize(charges)); for chgIdx in chargeArrIdx { //Get the Charge as json. charge = jsonarrayget(charges,chgIdx,"json"); //Get the Charge Type. chargeType = jsonget(charge,"chargeType","string","<empty>"); //Get the Price Type. priceType = jsonget(charge,"priceType","string","<empty>"); //Check if this is a processing charge. if (chargeType == "processingFee" and priceType == "One Time") { //Remove the charge using the index (chgIdx). jsonarrayremove(charges,chgIdx); break; } } } } //Return the pricing document after adjusting the charges. return pricingDocument;

 

Administration

ClosedSet Pricing Options

Complete the following steps to set pricing options.

  1. Navigate to the Admin page.

  2. Click Pricing Portal in the Products section.

  3. Click on the Pricing Options card.

  4. Click Edit.

  5. Set the Apply Only the First Matching Price Model option.

    This option determines if one or multiple Price Models are applied to a product during pricing evaluation.

    • On - Only the first Price Model that matches the Pricing Rule and Price Model criteria for a product. *default value

      If the same product is in multiple Pricing Rules, and within multiple Price Models within a rule, the Pricing Rule price value is derived from the first rule (as shown in the list of rules on the Administration page) and the first Price Model within the rule (as shown in the Linked Price Models section for the rule) that applies to the product and context.

    • Off - All Price Models that match the Pricing Rule and Price Model criteria for a product are applied.

  6. Select the Pricing Behavior version.

    This option modifies the order of actions and calculation of prices.

    Important: Switching from one Pricing option to another may impact existing pricing and past transactions within the system. Oracle recommends thoroughly testing the impact of the Pricing option change before implementing the change in a production environment. Once the Pricing option is changed in a production environment, returning transaction data to its previous state may require significant effort.

    Depending on your adoption of Pricing Engine, this setting may have been set automatically and may limit which options you can choose.

    • Version 1 represents the legacy pricing behavior. If you adopt CPQ Pricing Engine for pricing calculation, you should use pricing behavior Version 2 or higher.
    • Version 2 runs the CPQ Pricing Engine as part of pricing calculations and provides for the following adjustments to the Invocation and Pricing flows: Main Document attributes populate before the Sub Document modify execution occurs; and Global Pricing calculations occur immediately before the execution of Formulas.
    • Version 3 retains all Version 2 adjustments in addition to the following change: The Document Advanced Default BML will no longer execute when the 'Revert to Default' selection is selected for attribute(s) on the modify tab of an Action.
    • Version 4 retains all Version 3 adjustments and improves commerce pricing performance. Pricing Calculation is optimized to run once in Commerce actions between Before Formula and Formula. As a result, the pricing calculation result is accessible in Formula and After Formula BML, but is not available in Before Formula BML.

  7. Select one of the following Charge Definition options:

    ClosedEnable Charge Definitions

    ClosedDisable Charge Definitions

  8. Set the Transfer Price Model JSON to Commerce option.

    This option determines whether to transfer Pricing Engine calculation information JSON from Price Models to Commerce line attribute calculation information _price_calculation_info.

    • On - Send Price Model JSON information to Commerce.

    • Off – Don't send Price Model JSON information to Commerce. *default value

    Turn this option off for better performance if you don't use this function in Commerce.

  9. Set the Enable Currency Conversion in Pricing Engine option.

    This option enables the Pricing Engine to reference CPQ Exchange Rates to automatically convert prices from the base currency to other enabled currencies on the site.

    • On - Enable automatic currency conversion from the site base currency for unspecified enabled currencies.

      • Oracle CPQ strongly recommends that customers enable the Enable Currency Conversion in Pricing Engine option.

      • Conversion rates must be defined for each currency in which you wish to convert prices, refer to CPQ Exchange Rates.

    • Off - Disable automatic currency conversion. When no price is defined in Pricing Engine for the transaction currency, the pricing applied falls back to the previous Price Model price, Price Book price, or Part price that is available in the transaction currency. This is the legacy behavior for CPQ Pricing.

  10. Set the Apply multiple charges in a price list as a whole option.

    This option determines how charges from multiple absolute Price List type price models are applied.

    as a whole. In other words, CPQ will only apply equivalent charges from the last absolute Price List type price model.

    • On - Apply multiple charges from absolute Price List type price models as a whole. Only charges from the last absolute Price List type price model are applied.

    • Off - Apply multiple charges additively. *default value

      If a site does not have any pricing data, the default value for this option is set to On.

  11. Set the Apply adjustments on existing charges only option.

    • On - Only apply discounts or markups to a charge if the target charge has been established in a previous absolute Price List type price model.

    • Off - Apply discounts or markups to a charge even if a target charge has NOT been established in a previous absolute Price List type price model. *default value

      If a site does not have any pricing data, the default value for this option is set to On.

  12. Set the Observe commerce process Steps for the pricing action in quoting option.

    • On - Only invoke pricing calculation Commerce if the Commerce Recalculate action is active in the current Commerce Process Workflow Step. It also ensures that Commerce sub-document actions only invoke pricing immediately before Formulas for Pricing Behaviors v2 or higher.

    • Off - Invoke pricing calculation for all Commerce main document actions. Pricing calculation is invoked even if the pricing action is disallowed in the current Commerce Process Workflow Step. *default value

      If a site does not have any pricing data or Advanced Price Models, the default value for this option is set to On.

  13. Set the Enable Pricing Portal Administration Logging option.

    This option determines if pricing changes from the Pricing Portal, Product Workbench, or with any of the Pricing REST APIs are recorded in the Administration Logs.

    • On - Enable logging of pricing change history in Administration Logs.

      Note: Logging can negatively impact performance. Validate performance before enabling Pricing Portal Admin

    • Off - Disable logging of pricing change history in Administration Logs.

  14. Set the Enable incremental pricing in quoting option.

    • On - Only line items whose pricing attributes are changed are repriced. If any transaction level attribute is changed, all line items are repriced.

      Notes: You are recommended to turn this option on if all line items are priced independently.

    • Off - all line items are repriced when any line items is changed or if any transaction level attribute is changed.

  15. Set the Apply context-dependent data source in Pricing Attribute Mapping option.

    Note: This setting is only applicable when a Pricing Attribute has attribute mappings to two or more different types of Data Sources (e.g. a Configuration model and a Commerce process).

    • On - the Pricing Attribute uses the Data Source corresponding to the current invocation context.

    • Off - the Pricing Attribute honors the Attribute Mapping order number.

    For example, assume a Pricing Attribute has two Data Sources: a Configuration model and a Commerce process. When this option is On, the Pricing Attribute uses the Configuration Data Source in the Configuration model, and the Commerce Data Source in the Commerce process. When this option is Off, the Pricing Attribute uses the Data Source with the lowest order number in the Pricing Attribute's Attribute Mapping.

    • The default for this option is Off for customers currently using Pricing Engine. If a site does not have any pricing data or any Advanced Pricing Models yet defined the default for this option is On.

    • To find the order number for an attribute, check the Pricing Attribute detail page.

  16. Set the Pricing Script: Before Pricing Engine Execution option and script (if applicable).

    1. Set this option to On.
    2. Click the Edit link.
    3. Enter your BML script.

      ClosedExample Before Pricing Engine Execution script

    4. Click Save and Close.
  17. Set the Pricing Script: After Pricing Engine Execution option and script (if applicable).

    1. Set this option to On.
    2. Click the Edit link.
    3. Enter your BML script. Enter your BML script.

      ClosedExample After Pricing Engine Execution script

    4. Click Save and Close.

  18. Click Save or Update to save your changes, or Cancel to keep previous settings.


 

Notes

Important: Switching from one Pricing option to another may impact existing pricing and past transactions within the system. Oracle recommends thoroughly testing the impact of the Pricing option change before implementing the change in a production environment. Once the Pricing option is changed in a production environment, returning transaction data to its previous state may require significant effort.

Notes:

  • Pricing Engine requires Pricing Behavior Version 2, Version 3, or Version 4. Use Version 4 for best performance.
  • Depending on your adoption of Pricing Engine, the Pricing Behavior version may have been set automatically and may limit which options you can choose.
  • Existing sites retain the current setting on upgrade.

Related Topics

Related Topics Link IconSee Also