Agreement Mapping

Estimated reading: 3 minutes 5 views

Introduction

Agreements (or Contracts) exist for two main reasons:

  • Being able to have a history of the different versions an Asset had for a customer.
  • Representing the contracted Asset in a way that it can be billed by the billing module or external billing system.

This is, that when we activate an Order, two things happens:

  • The asset is generate with the same structure as the Order and Product Version with its components/relationships and attributes.
  • The agreement is generated after evaluating the Agreement Term Rules defined in the Product Version.

This way, you could have actually different products that would generate the same billing concepts, or have a product that depending on the configuration of its attributes or component would generate different Agreement Terms.

This gives a lot of flexibility and avoid the need of having any kind of conversion of the Assets / Contracts when trying to process the billing or invoice.

 Agreement Terms Rules

At Product Version level you can create Agreement Term Rules which let you define rules to add an Agreement Term or not and with which value depending on the product Setup.

Field Description Example
Name The value that will be assigned to the concept / term WASTE TAX
Selection Rule Expression Rule that needs to be true in order to add the concept / term to the agreement hasComponent(‘WASTE’)
Value Rule The Expression Rule that will evaluate the value for the Agreement Term Value Field.

Rules Functions

Out of the Box CPQ Functions

Wattyo comes with different Functions that are useful for Agreement Term Rules.

Function Name Description Example
getAttributeValue(attributeName) returns the value for the specified Attribute Name in the Root Product. Null if it doesn’t exist. getAttributeValue(“Size”)
getAttributeValue(componentCode, attributeName) returns the value for the specified Component and Attribute Name. Null if the Component or Attribute doesn’t exist. getAttributeValue(“Wheel”, “Size”)
hasAttributeAndValue(attributeName,attributeValue) returns true if the Root Product has the specified Attribute Name and Value hastAttributeAndValue(“Window Size”, “Small”)
hasAttributeAndValue(attributeName,attributeValue) returns true if the Root Product has the specified Attribute Name and Value hastAttributeAndValue(“Window Size”, “Small”)
hasComponent(componentCode) Returns true if the Item has a component with the specified Product Code hasComponente(“WASTE”)
hasComponentWithAttributeAndValue(componenteCode, attributeName,attributeValue) Returns true if the configuration has a Component with the specified Product Code and the passed Attribute Name and Value hasComponentWithAttributeAndValue(“WHEEL”, “Run Flat”, “true”)

Custom Function

You can add any custom Function that you need trough [ Custom Fucntions Libraries ]({{< relref “/docs/technical/rules/implementation/customfunctionslibraries” >}}).

It’s important to note that the Context passed to functions called by the Agreement Mapping Engine is a ConfigurationWrapper.Item object with the Item configuration details. So any function should expect the Context parameter to be of this type if it needs to use the Context.

Leave a Comment

       
Euphoria, forever till the end of times

Euphoria

Share this Doc

Agreement Mapping

Or copy link

CONTENTS