Conga Product Documentation

Welcome to the new doc site. Some of your old bookmarks will no longer work. Please use the search bar to find your desired topic.

Show Page Sections

Understanding Calculations in the Quote

The performance quoting spreadsheet offers a powerful and flexible way to define multiple types of lines in the quote, each of them being assigned to a specific calculation and negotiation schema defined in the Line Template.

To understand the types of lines that can be handled by the quote, please refer to Overview and Concepts > Anatomy of a Quote section.

Overall Calculation Flow

The way Performance quoting ensures a proper computation of the spreadsheet data is by:

  • Defining and controlling the structure of the quote lines
  • Enriching the quote and quote line data with additional properties from multiple data sources
  • Running the calculation formulas and business defined in the quote model


Quote Structure Definition

The structure of the quote is the starting point of the calculation. Quote fields and columns are defined as part of the quote model. The structure of the lines and quote content are defined during the quotation process by the end-user.

Adding Products from Catalog (Datasource)

In this scenario, the end-user picks a product (or configures a product) from a catalog datasource which provides the information necessary to create the line item structure in the quote.

STANDARD PRODUCT (WITHOUT SUB-LINES)

Standard products correspond to Standard Items (SI) defined in the PROS Catalog service (and that are not Predefined Bundles or SIs linked to configurable products - 'RefSI').

Adding a Standard product will add a PRODUCT type of line to the quote.

As you can define several line templates for a PRODUCT line, the process of adding a product to the quote actually assigns a Line Template to the quote line, by using a matching rule.

The below schema illustrates the add to quote mechanism:



Add To Quote Action

User clicks Add to Quote to add Apples to the quote.

Datasource Resolution Variables Retrieval

When a new line is added, we must determine which Line Template is applied to it. This is done with matching rules. Matching Rules need some data to be executed. In the example above, the "Family" value is used to determine the Line Template. This is what Resolution variables do - they retrieve the information necessary for Line Template Solving. During that phase, the "Family" value is retrieved from the "bpType" Catalog Business Property, and stored in the "Family" resolution variable.

Resolution Variables considerations

Resolution variables are defined with a name and the CPE to be used to get a value from a given Catalog datasource. Understanding the following elements is key to properly configure the resolution variables mapping with CPEs.

  • When a root product line is added ALL resolution variables defined for that Datasource are retrieved.


  • When a criteria returned by the data provider during the "filling of resolution variables" is missing (CPE does not point to an element for example), the quote engine sets the value to "NO VALUE".
  • When a criteria is not associated to a CPE, the quote engine sets the value to "NO VALUE".
  • Multiple catalog datasources can be used in a quote model. ALL resolution variables MUST be associated/mapped to a CPE when they are used in a matching rule of a particular line template which can be added from that particular datasource.

Supported Resolution Variable CPEs for Standard Product Add

Use the keyword currentItem to retrieve data on the product being added

  • Name: CPE.currentItem.name
  • Description: CPE.currentItem.descr
  • Business Property: CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value (for String type BP), CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value.item (to get the Business Value object if bpColor is a BVAL type Bp)

Use the static CPE to get

  • Specific setting values from the Catalog session: CPE.Settings.Session.xxxx

Line Template Solving

Amongst the eligible line templates, the quote engine will identify which line template is a match for the product being added.

  • Depending on the current insertion point, the quote engine will retrieve the list of eligible line templates.
  • Only the PRODUCT line template, flagged as "Can be root product" and authorized to be inserted at that location in the quote (according to the line template hierarchy) are eligible for the line template solving.


  • Note that the order of the line template in the quote model matters. It is taken into account for the resolution mechanism (at quote level and sub levels, depending on the current insertion point).




  • Then the Matching Rules of each Line Template is evaluated until there is a match
  • Matching Rule considerations - It is possible to test if a criteria is equal to "NO_VALUE" from

the matching rule by using specific operators.



System resolution variables best practices

Matching Rule Criteria: From version 12.11, using the system variable SYS_ROW_ITEM in the matching rules is DEPRECATED. You should create a resolution variable leveraging the "currentItem" keyword if you need to leverage properties of the product as a criteria in the matching rule instead.

  • If there is no match, an error message is returned to the end-user.
  • In the Quote model, you can define a Line Template with no matching rule or restriction. In that case, if the line being added to the Quote does not match any other Line Template, then it will match this "default" Line Template and ultimately be added to the Quote. As a best practice, it is recommended to define only one Line Template of that kind and to declare it at the end of the list of Line Templates so that it is matched ONLY if no other Line Template applies.

User Permission Check

Is the current user authorized to create the line template?

Line Add

Provided that there is no conflict due to the Functional Primary Key, the line is added, see Overview and Concepts > Anatomy of a Quote.

CONFIGURED PRODUCT / CONFIGURABLE BUNDLE

Configured products refer to the Sales Bill of Material (Sales Breakdown Lines) generated from a Configurable Product (CP) or Configurable Bundle (CB) defined in the PROS Catalog service.

Configured Product from Standard item: Note that a Configured Product may be created from a Standard Item used as a Reference ('RefSI'). As such, this scenario falls into the Configured Product scenario.

  1. Creating the root line of the Configured Product. This step is strictly identical to the standard product add to quote process. The ConfigurABLE product is considered as the entity used to identify the root line template. As a consequence, all potential configured products issued from a given Configurable Product/Configuration Process need to match a single Line Template structure in the quote.

Example

    • Assuming that you configure multiple excavators using the same wks/CP/myExcavator model, you need to ensure (and build the quote model appropriately) that all variants of "myExcavator" matches 1 specific line template: My "Two-piece boom excavator and Long-reach boom excavator must both match the same PRODUCT 'Excavator' LineTemplate.

Supported Resolution Variable CPEs for Configured Product Root Line Add

Use the keyword currentItem to retrieve data on the root configured product being added:

    • Name: CPE.currentItem.name
    • Description: CPE.currentItem.descr
    • Business Property: CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value (for String type BP), CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value.item (to get the

Business Value object if bpColor is a BVAL type Bp)

Use information from settings (provided that those settings are static i.e. not altered during the complete catalog and configuration session).

    • Specific setting values from the Catalog session: CPE.Settings.Session.xxxx

Beware that the keyword currentItem used in the context of the resolution variable for the Catalog datasource represents the Configurable Product (CP) included in the Catalog. It DOES NOT represent the root SBL line. Moreover, accessing the CPE of the Configuration Process session and using them to match a PRODUCT 'Root' line it NOT supported.

Example of NON supported CPE used in the catalog datasource context for root line matching:

    • CPE.wksABC/CP/myCP.gp.wksABC/SBL/total.wksABC/SBL/line1
    • CPE.currentItem.FO/myFO.FP/FP1.value
    • CPE.Settings.Session.RefSI
    • CPE.Settings.Session.RefSI.wks/BPS/BPS1.BP/BPA.value
  1. Creating the Sub-line structure. The below schema illustrates the way sublines are generated and added to the quote based on the content of the Sales breakdown.


The process is very similar to the Standard product add except that:

  • The resolution of the sub-lines line templates is based on information of the Product Map and not the catalog Datasource. The Root Product basically provides information to drive how sublines are created.
  • If a variable is used in a matching rule (or a computation via resolution variable) and is not mapped to a specific CPE in the Product map, the CPE that is evaluated is the same as the one specified in the datasource used to add the rootLine.


  • Eligible line templates may not be flagged as "Can be root product".
  • The process is recursive. When a line is added, its subline according to the Sales breakdown structure is evaluated and then added, until the complete hierarchy is inserted into the quote.

Supported Resolution Variable CPEs for Configured Product Sub Lines Add - in Product Map

The following CPEs can be used in the Product map to retrieve information of the various level of the sales bill of material (SBL); prices, business properties, sales information grids elements, etc. As the CPEs will be evaluated for each line of the sales structure, you will use relative CPE and keywords:

Use the keyword currentItem to retrieve:

  • Name: CPE.currentItem.name
  • Description: CPE.currentItem.descr
  • Business Property: CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value (for String type BP), CPE.currentItem.wks/BPS/bpsPerformanceQuoting.wks/BP/bpColor.value.item (to get the Business Value object if bpColor is a BVAL type Bp)
  • Rich Media Objects (RMOs)

Use the keyword currentItemOrSBL to retrieve:

  • Prices: CPE.currentItemOrSBL.GET(CPE.Settings.Session.PricingMethod[1]).Range[1].value
  • Use the keyword currentResult for Complete Matching line item to retrieve:
  • Quantity of the current matched item: CPE.currentResult.quantity

Use the keyword currentSBL to retrieve:

  • Breakdown line identification (name/descr): CPE.currentSBL.name
  • Quantity: CPE.currentSBL.quantity
  • Drawing: CPE.currentSBL.wks/DWM/frontView.drawing.svg

Elements from a **Sales Information

Grid (SIG): CPE.currentSBL.salesInformation.result[1].wks/BPS/dimension.BP/length.value

  • Context of the SBL - to eventually get information related to the configuration dialog (FPs)

: CPE.currentSBL.confContext.wks/FO/myFO.FP/myFP.value

You can also use an absolute keyword to bet information on the current CP - CPE.rootCP

For information, depending on the context (e.g. complete matching or codification), the CPE representing the above keywords can differ (see below). Using the keywords listed above guarantees that the CPEs will be correct for each use case for both complete matching and codification.

Complete matching type of SBL:

  • currentSBL=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i]
  • currentResult=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i].completeMatching[j] // currentResult is only useful to get the Quantities of the matched items
  • currentItem=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i].completeMatching[j].item
  • currentItemOrSBL=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i].completeMatching[j].ite m

Codification type of SBL:

  • currentSBL=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i]
  • currentResult=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i].codification // currentResult should not be used in the context of a codified line
  • currentItem=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i].codification.item
  • currentItemOrSBL=CPE.wks/CP/CpR.gp.wks/SBL/total.wks/SBL/line[i]

Role of the Product Map The product map attached to the configured product root line is used:

  • During the sub-line line template matching process - using the resolution variables attached to it
  • When enriching the data of the line item, by populating cell values - using the resolution or local variables attached to it (see below chapter Quote data enrichment and Formulaic Execution)

Hierarchy Considerations

Please do not forget to consider the following when using products with sub-lines in the quote:

  • ALL lines that are generated and are visible in the returned SBL have to match a Line Template in the quote and have to be added to the quote.
  • If, for some reason (no match, or invalid user permissions) a subline cannot be added, the entire product line structure will be rejected. This situation is considered as a wrong quote model configuration.
  • ALL product sublines are part of a joint structure that cannot be broken/exploded. They are inseparable from the root line and cannot be manipulated separately or independently.
  • To ensure that a Line Template can NEVER be associated or match a root product - i.e. the Line Template only drives the business logic of product sub-lines - the property called "Can Be Root Product" must be unchecked. As a consequence, those LTs will not be used (non-eligible) when matching the root line.
  • The depth of the SBL structure and then the quote line items in a 'Root' product line cannot exceed 5 (including root line).
  • If, for some reason the depth of the SBL structure exceeds this limit, the entire product line structure will be rejected. This situation is considered as a wrong quote model configuration.

PREDEFINED BUNDLES

Predefined Bundles corresponds to Standard Items (SI) defined in the PROS Catalog service and containing components. Bundle components are also standard items linked to the root Bundle

product by leveraging the 'Bundle' type of Product link.

Adding a predefined bundle will add a BUNDLE_PRODUCT type of line corresponding to the 'Root' bundle standard item, and a list of PRODUCT lines corresponding to the components of the bundle (i.e. standard items linked to the root bundle product via "bundle" product links").

Quote Data Enrichment and Formulaic Execution

Once a line is added to the quote, as a line template is associated to this line, cell values can be computed.

The below schema's goal is to illustrate the way the engine ensures the proper computation of quote data. The process is not sequential as Performance quoting takes care of the proper execution and the dependencies between the formulas and the data retrieval from multiple datasources.



Cell values can be populated from:

  • Manual User inputs / entries or choices: the end user (or an external API) populates line cells
  • User choices can replace a previous user choice or override a value computed by the quote
  • Depending on the type of cell, specific selectors can help the end-user selecting a valid value
    • Date picker
    • Search mechanisms for Dimension or Product values
    • Etc.
    • Business rules may apply to ensure the consistency of the user choices with the rest of the quote (leveraging Dynamic filters for example)
    • Additional syntaxic controls are applied (e.g. to check that a URL , a date, or a decimal value

value is well-formed)

  • as a result of Computation formulas leveraging other cell values
  • pulled from Other services and datasources of PROS platform or external systems (see next section)

LINE ITEM DATA ENRICHMENT FROM MULTIPLE DATA SOURCES

Cell values may be populated from the following datasources based on some specific triggers.

From PROS Datasources Maps (Prices, Product and Dimension Properties)

Main Principle

Based on the current line item values or quote level fields, it is possible to call

  • PROS catalog service to get business properties, RMOs of a product (Standard Item , or Configurable product, or Bundle - Not the CP content (SBL etc.) ) - the product corresponding to the line itself or another product selected in an other cell of the line item
  • PROS pricing service to get prices based on dimensional data
  • PROS dimension services to get dimension attributes

The definition of that call is done by mapping quote variable to the service parameters.

Example of a catalog column mapping

The general settings defines which catalog will be used and which parameters will be used to execute the service.



The (Column) maps will define the input and output parameters - the goal is to get the "Storage" value of the product.



More details are available in Connect in the Help Topic Examples - Retrieving Data on a Line.

From External Datasource Maps

Main Principle

Similarly to using PROS Platform services, it is possible to call external systems to enrich the data used by a quote line. More details on external services are in External services & Performance Quoting.

From Information Used to Match a Particular Line Template (Resolution Variables)

PRODUCT and BUNDLE_PRODUCT type of line only Main Principle

Information retrieved at the time of the line template solving can be used to populate a line item cell.



From the Content of the Root Product

The bill of material and its associated generated data, or the product structure characteristics (Local Variables of the product map).

PRODUCT and BUNDLE_PRODUCT type of line only Main Principle

When there is a need to use in the quote information from

  • A configured product root line,
  • A configured product or bundle sublines,
  • Or any information that may have been selected and computed during a configuration workflow (Codified Business Properties, Specific prices or benchmarks, Form property values, Codified RMOs, drawings, Business Information Grids etc.) and as that type of information is not used as a

matching criteria for a line template, you will use the Local Variables of a product map.

As explained in "Adding Products from Catalog / Configured products / Step 2 - Creating the Sub-line structure," the product map binds quote local variables with configured product (or bundle) CPEs.

Those variables will be evaluated for at each level and for each line of the product sales bill of material that is inserted into the quote. Once retrieved, those values can then be used to populate a line item cell with a specific type of calculation "Resolution."

Example





Root Line Resolution and Local Variables Specificities

PRODUCT and BUNDLE_PRODUCT type of line only

In the example below, my quote model has 2 variables:

  • A resolution variable that may be used to in a matching rule of a given product root line or subline,
  • And optionally used to compute the value of a cell for that particular line.
  • A local variable that may be used to computed the value of a cell of a given line.


Note:

  • In the context of a root line, the Line template solving AND calculation formula only uses the datasource CPE binding (in blue) for the resolution variable "myResolutionVar".
  • In the context of a sub line, the Line template solving AND calculation formula only uses the product maps CPE binding (in green) for the resolution variable "myResolutionVar".

The product map CPE binding of "myLocalVar" is used for both the root line and sublines as needed.

Known Limitation - Current Recommendations for Root Product Line Matching

A known issue leads to inconsistent computations of the root line cells when they are leveraging a resolution variable that is used BOTH in the data source AND product map section. It is currently recommended to use the DIFFERENT variables pointing to the same CPE when you need to use a value in a line template matching rule and use that same value to compute a cell of the root line.



Refresh Mechanisms

Unless the quote is completely frozen (see API documentation), data from the quote needs to be consistent and is regularly refreshed - automatically with triggers, and/or manually/on demand by end-user actions.

REFRESHING COLUMNS/FIELDS (BY REFRESHING DATASOURCES USED FOR LINE ITEM DATA ENRICHMENT)

This type of data is refreshed:

  • Explicitly when an end user (or an API) manually triggered a Refresh Datasource action
  • According to a Refresh Policy positioned on the datasource maps
  • None = no automated refresh (unless the entire line item is refreshed)
  • Once = only at line creation first time it is triggered
  • Each input = automatically depending on changes of the input parameters
    • when one of the input values of the map changes
    • or when one of the implicit/system inputs changes (a typical example of that is when a Pricing datasource returns a price in EUR and the end-user changes the currency to USD)
    • Reload = when a quote session if launched (quote is re-opened or created)
    • Each input and reload = when one of the event is raised.


  • When the complete Line Item structure is refreshed and re-evaluated (see below)
Note: Some datasource settings (as well as some input map parameters) can be flagged as "MANDATORY." The datasource will not be refreshed while those elements are not populated


REFRESHING LINES

The refresh of a line item can happen:

  • Explicitly when an end user (or an API) manually triggers the Refresh Line action
  • As a consequence of the refresh of a product or bundle root line
  • In this case all sub-lines of that root product (i.e. the complete Bill of Material / product structure) are refreshed.
  • Automatically when structural changes happens in the quote (see Automated Line Refresh Scenarios below)

When a line is refreshed, the behavior is the same as if the line was deleted, then added again. All data providers (line and product data maps) are then re-executed. See Adding Products from Catalog. The only difference compared to an initial line creation is that User inputs and choices can be restored once the line is refreshed (This behavior can be configured on the refresh action).



In some situations, when a product line item is refreshed, the matched line template may be different once the line is re-evaluated. As a consequence some user choices may be lost as the structure of the destination line template may be different than the original one.

Automated Line Refresh Scenarios

Refresh line may happen with the user changes some elements of the quote structure or the quote/line item manually. Moving a FOLDER, a SPECIFIC or a BUNDLE_SPECIFIC line from a quote location to another one will not refresh the line item. It will check that the line can be inserted at that particular location in the quote but will not re-evaluate the line template of the line.

On the contrary, for PRODUCT lines, copy/pasting or moving an existing line from one place to another one will follow a specific refresh mechanism:

  • When the destination location is the root QUOTE or a FOLDER
  • If the line template of the line that is moved or duplicated is authorized to be inserted at that location, the line is added as-is (no refresh).
  • If the line template of the line that is moved or duplicated is NOT authorized to be inserted at that location, an error message is raised.
  • When the destination location is a BUNDLE_PRODUCT or a BUNDLE_SPECIFIC (coming soon)
  • The line is refreshed. It is inserted as if it was a new line i.e. the template of the line will be re-evaluated.
  • Once the line template is identified, the UserChoices/UserInputs of the source line will be applied to the new destination line.

Bundle Refresh Specificities

See Quote Data Manipulations Functions > Product Bundling