NEWRATES_Product_Config
This page describes the properties from the Product Config table, their practical use and examples of their use.
Any property marked with an asterisk (*) is a mandatory property. The rest are optional.
Root
ProductCode*
Ties the config table back to a specific product from Umbraco. This should be an exact match of the Umbraco property: Product Level Settings > Product > Product Code
Provider*
Passed through to all Premium and Fee Sections.
This will be written into:
“Provider” property against each Premium section
“FeeOwner” property against each Fee section
It is possible to specify different providers per section, in such instances, a “Provider” property should be populated within the relevant Premium or Fee Section. If such a property is provided and populated, it will take precedence over this one.
The Provider will usually contain the name of the insurer (Fees may have different owners so these are most likely to vary based on specific-section configuration).
PremiumOutputConfigObjecCustomScript
<BLANK>
Contains the name of a custom script which can be called to make any adjustments to the PremiumOutputConfigObject after it’s been created. See PremiumOutputConfigObjectCustom
TechnicalPremiumScript*
Contains the name of the script for generating Technical Premiums.
When considering the output of Technical Premiums we really mean the premium which matches the rater provided by the insurer, before any other adjustments. See Technical Premium Calculator Script
TechnicalPremiumCustomScript
<BLANK>
Contains the name of a custom script which can be called to make any adjustments to the TechnicalPremiums array; once all transactional data has been added.
Context: Once the TechnicalPremiums have been generated in full using the TechnicalPremiumScript property an additional process runs. At New Business and Renewal this process does very little. But for Cancellations and MTAs there are a series of checks carried out based on PrevRates:
Cancellation - The main TechnicalPremium array doesn’t run for Cancellations, instead the TechnicalPremiumTransaction function works out how much to refund to each premium section based on PrevRates. This information is then passed forward.
MTA - The main TechnicalPremium array runs for sections which are still included in the risk. After this, the TechnicalPremiumTransaction finds out which sections need to be passed into the array as they are being removed on this policy version (and as such, still need to be displayed on screen to allow for the necessary information to be prevented to the user and for overrides and such to be applied.
The idea behind this script is that any custom updates can be made following on from the generic process of TechnicalPremiumTransaction (which runs identically for all products in the rating rebuild).
SummaryOutputCustomScript
<BLANK>
Contains the name of a custom script which can be called to make any adjustments to the PremiumSummary array (i.e. the rows of type “Summary” and “PremiumSummary”) and the PremiumArray (i.e. the rows of type “Premium” and “Fee”). See Building Products in Insureflow
CardPayments
{}
Refunds*
PolicySignedLines
{}
Billing
{}
InsuranceType
This sets the default insurance type for the product, as well as giving the option to elect a question code with which the answer can be overridden by the user if necessary. This is later fed into the tax function to decide which taxes should be applied.
If no value is provided for InsuranceTypeQuestion then InsuranceType will be set as InsuranceTypeDefault with no opportunity for the user to override it.
InsuranceTypeDefault
Direct
Default value for Insurance Type
The value from here is then passed forward to tax calculations (unless overridden by question code using the property below)
InsuranceTypeQuestion
<BLANK>
Question Code for a question to override the value of Insurance Type on a risk-version basis
If a question code has been provided here, the answer to that question (if it exists) will be passed forward to tax calculations
PolicyDates
Associates key date properties within the rating process to question codes within the journey. We follow standard naming conventions for these dates in new products, but we still set this at product-level in case of deviation from that process.
Like the Provider property, SectionPolicyDates can be specified against each PremiumSection and each FeeSection. If they are, then those properties will take precedent, otherwise the rates will fall back and refer back to this top-level instance. The reasoning behind this is to allow more flexibility for products where not all sections share the same question codes for this purpose.
EffectiveDate
Top-level question code for Effective Date
Top-level setting of Effective Date
ExpiryDate
Top-level question code for Expiry Date
Top-level setting of Expiry Date
InceptionDate
Top-level question code for Inception Date
Top-level setting of Inception Date
MTA (Mid-Term Adjustment)
MTA Root
PropertiesCustomScript
<BLANK>
Custom script to make additional updates to premium/fee properties when creating the new transaction
This should be used to make any updates not covered within:
ClearPremiumProperties
ClearFeeProperties
The main updates are set via the:
NEWRATES_MTA_Create_ResetProperties function
QuestionsCustomScript
<BLANK>
This should be used to make any updates not covered within the main
ApplyPrevRunningRatingStrength
true
Determines whether to apply PrevRunningRatingStrength to Premium and Fee values on MTA
MTA ClearPremiumProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_MTA_Create_ResetProperties
DiscountLoadingPremiumPercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Premium row in rates
OverridePremium
False
Determine whether to clear OverridePremium property against each Premium row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Premium row in rates
Billing
False
Determine whether to clear Billing property against each Premium row in rates. The Billing information held in Summary will also be cleared
Quoted
False
Determine whether to set the Quoted property to false against each Premium row in rates
Selected
False
Determine whether to set the Selected property to false against each Premium row in rates
Bound
False
Determine whether to set the Bound property to false against each Premium row in rates
MTA ClearFeeProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_MTA_Create_ResetProperties
DiscountLoadingFeePercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Fee row in rates
OverrideFeeValue
False
Determine whether to clear OverridePremium property against each Fee row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Fee row in rates
Billing
False
Determine whether to clear Billing property against each Fee row in rates. The Billing information held in Summary will also be cleared
MTA RiskUpdates
Actual updates occur in the function NEWRATES_MTA_Create_ResetQuestions
RefreshProduct
False
Determine whether to re-load Product-level information from Umbraco.
If this is set to true, then Risk.Flags.RefreshProduct is set to true.
This will cause the product information to be refreshed next time the user opens a flow.
ClearBinders
False
Determine whether to clear the binder information held against this risk.
If this is set to true, then Risk.Product.SelectedBinder is set to NULL
CANX (Cancellation)
Note: If Cool-off is available and the effective date of the cancellation is within the cool-off boundary, the cancellation will refund the entire risk premium (premium and fees).
CANX Root
PropertiesCustomScript
<BLANK>
Custom script to make additional updates to premium/fee properties when creating the new transaction
This should be used to make any updates not covered within:
ClearPremiumProperties
ClearFeeProperties
The main updates are set via the:
NEWRATES_CANCEL_Create_ResetProperties function
QuestionsCustomScript
<BLANK>
This should be used to make any updates not covered within the main
CoolOffAvailable
false
Determines whether Cool-off is available for the product
CoolOffDays
0
If CoolOffAvailable has been set to true, this setting defines the number of days after inception date where Cool Off is applicable
CANX ClearPremiumProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_CANCEL_Create_ResetProperties
DiscountLoadingPremiumPercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Premium row in rates
OverridePremium
False
Determine whether to clear OverridePremium property against each Premium row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Premium row in rates
Billing
False
Determine whether to clear Billing property against each Premium row in rates. The Billing information held in Summary will also be cleared
Quoted
False
Determine whether to set the Quoted property to false against each Premium row in rates
Selected
False
Determine whether to set the Selected property to false against each Premium row in rates
Bound
False
Determine whether to set the Bound property to false against each Premium row in rates
CANX ClearFeeProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_CANCEL_Create_ResetProperties
DiscountLoadingFeePercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Fee row in rates
OverrideFeeValue
False
Determine whether to clear OverridePremium property against each Fee row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Fee row in rates
Billing
False
Determine whether to clear Billing property against each Fee row in rates. The Billing information held in Summary will also be cleared
CANX RiskUpdates
Actual updates occur in the function NEWRATES_CANCEL_Create_ResetQuestions
RefreshProduct
False
Determine whether to re-load Product-level information from Umbraco.
If this is set to true, then Risk.Flags.RefreshProduct is set to true.
This will cause the product information to be refreshed next time the user opens a flow.
ClearBinders
False
Determine whether to clear the binder information held against this risk.
If this is set to true, then Risk.Product.SelectedBinder is set to NULL
REN (Renewal)
REN Root
PropertiesCustomScript
<BLANK>
Custom script to make additional updates to premium/fee properties when creating the new transaction
This should be used to make any updates not covered within:
ClearPremiumProperties
ClearFeeProperties
The main updates are set via the:
NEWRATES_RENEWAL_Create_ResetProperties function
QuestionsCustomScript
<BLANK>
This should be used to make any updates not covered within the main
REN ClearPremiumProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_RENEWAL_Create_ResetProperties
DiscountLoadingPremiumPercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Premium row in rates
OverridePremium
False
Determine whether to clear OverridePremium property against each Premium row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Premium row in rates
Billing
False
Determine whether to clear Billing property against each Premium row in rates. The Billing information held in Summary will also be cleared
Quoted
False
Determine whether to set the Quoted property to false against each Premium row in rates
Selected
False
Determine whether to set the Selected property to false against each Premium row in rates
Bound
False
Determine whether to set the Bound property to false against each Premium row in rates
REN ClearFeeProperties
All properties are assumed to be false if they are not provided or set to anything other than true.
Actual updates occur in the function NEWRATES_RENEWAL_Create_ResetProperties
DiscountLoadingFeePercentage
False
Determine whether to clear DiscountLoadingPremiumPercentage property against each Fee row in rates
OverrideFeeValue
False
Determine whether to clear OverridePremium property against each Fee row in rates
Adjustment
False
Determine whether to clear Adjustment property against each Fee row in rates
Billing
False
Determine whether to clear Billing property against each Fee row in rates. The Billing information held in Summary will also be cleared
REN RiskUpdates
Actual updates occur in the function NEWRATES_RENEWAL_Create_ResetQuestions
RefreshProduct
False
Determine whether to re-load Product-level information from Umbraco.
If this is set to true, then Risk.Flags.RefreshProduct is set to true.
This will cause the product information to be refreshed next time the user opens a flow.
ClearBinders
False
Determine whether to clear the binder information held against this risk.
If this is set to true, then Risk.Product.SelectedBinder is set to NULL
PremiumSections
SectionCode*
Unique PascalCase section code per class of business
Use PascalCase and remove any symbols/spaces from ClassOfBusiness
ClassOfBusiness*
String representing class of business
This should be identical to what is configured in Umbraco.
SectionType*
“SingleOption” is for the style of premium where the section is either included or excluded
“MultiOption” is for the style of premium where the user chooses between a number of options to decide which to bind on a class of business (multiple quotes)
If nothing is specified here, then the rates will fall back to “SingleOption” as the default.
SectionOrder*
Integer specifying the order
This property should be populated sequentially across the entirety of the PremiumSections array. It should be an integer starting from 1 and ending with the count of premium sections.
AdditionalProperties (Array)
[]
This is where we specify additional properties (outside of the core field set) which we want to include in PremiumOutput as part of this section
We need to define the properties in the config table, then we populate them in the TechnicalPremium script.
Failing to do both parts of the setup will result in an error and unexpected behaviour.
AdditionalPremiumSectionIdentifiers (Array)
[]
This property is relevant if we expect to see multiple instances of the same class of business added to the same risk. It defines which properties against that premium row make it unique.
If multiple instances of the same section are added for whatever reason (e.g. writing a separate row of Contents insurance for each insured address) then we need a unique property which we can refer to that makes each of them different.
If we follow that same example, we’d add an Additional properties to AdditionalProperties called “LocationName”, we’d then populate this in the Technical Premium function against each Contents instance.
Then we’d specify “LocationName” in the array here to specify that this is something by which we can identify an individual instance of the section.
This mechanism is then used when presenting the information on screen, applying overrides, setting previous rates… and more.
AdditionalPremiumSectionOverrideFields (Array)
[]
This section allows additional override fields to be specified for a premium section.
Binders
{}
This section determines the binder setup to be specified for a premium section.
Provider
Uses top-level provider property
Premium section level setting of “Provider”
As specified above, this is optional here as it would be automatically read-in from top-level if we left this property as blank or not included.
Overrideable
False
Boolean to dictate to the rates whether or not overrides can be applied
Setting this to false means that any overrides (including discounts and loadings) will be prevented by the rates.
It will also disable the override fields in the premium table component.
MaxDiscount
0
Integer representing the Max Discount percentage which can be applied to a section (0 - 100)
This field is significant for the DiscountLoadingPercentage overrides specifying the maximum discount that can be applied.
If the property is left blank or doesn’t exist against a section there will be no cap on discount.
MaxLoading
0
Integer representing the Max Loading percentage which can be applied to a section (0 - 100)
This field is significant for the DiscountLoadingPercentage overrides specifying the maximum loading that can be applied.
If the property is left blank or doesn’t exist against a section there will be no cap on loading.
CalculationMethod
Full
Either contains “Full” or “Change”
This setting is relevant for MTA calculations. It specifies whether we’re passing the Technical Premium through to Premium Output as the new full amount or the change since the last version.
If it’s set to “Full” then a £20 MTA after a £100 New Business premium would be passed through as £120 on the MTA transaction.
If it’s set to “Change” then a £20 MTA after a £100 New Business premium would be passed through as £20 on the MTA transaction.
If nothing is specified here, then the rates will fall back to “Full” as the default.
ExchangeRateMethod
TechnicalPremium
“TechnicalPremium” means the ExchangeRate will be passed in with the Technical Premium record.
“UserCompanyBaseRate” means ExchangeRate will be returned from the currency_rates collection based on the User Company against the risk.
The currency_rates collection holds the latest currency rates, previous versions are written into the currency_rates_archive collection.
These rates can currently be updated via the B2B UI in settings/exchange-rates.
RiskCodesRequired
False
Boolean. If it’s set to true, then RiskCodes are read in from the Technical Premium record.
If it’s set to false then RiskCodes is populated with a default RiskCode of “None” at 100% share
If this has been set to true, but no Risk Codes have been provided with the Technical Premium, then RiskCodes will be populated with an empty array rather than the single element array with the “None” default record.
Currently the responsibility sits outside of rating to ensure that Risk Codes have been properly populated if required.
We can’t really guarantee that every product should follow the same rules in this regard.
SectionPolicySignedLines
{}
Premium section level setting of “PolicySignedLines”
SectionPolicyDates
{}
Premium section level setting of “PolicyDates”
PremiumSections AdditionalPremiumSectionOverrideFields
FieldName*
The name of a property within the rate instance.
Fallback*
What the default value should be set to if the property cannot be found.
ApplyToTechnical*
Boolean which determines whether to apply this to the Technical Premium array.
This is quite an important property as it determines when the override is applied when it’s been specified here.
For example, the property in question here: “Excess” is a property of Technical Premium and if the value changes, it needs to be passed forward correctly for binders at the very least (otherwise overriding them would cause the binders to be out of alignment).
We set ApplyToTechnical to true to make sure that this happens correctly.
There other option is to set ApplyToTechnical to false, in which case the overrides will be applied when the rest of the Premium Output has run.
If this is the case, the override part runs after the logic to decide which Additional Properties to attach to a rate, so it would be possible to first define an additional property and then to attach an override to it and it should work as expected.
PremiumSections Binders
UseBinder
False
Determines whether or not we will calculate and attach the binder properties to the premium.
ClassOfBusiness
<BLANK>
If UseBinder has been set to true, then ClassOfBusiness allows the rates to identify which binder information to attach.
The ClassOfBusiness which we would use here should marry-up with the class of business specified in QuestionPlaceholder against the instance of the Binder question on the journey (Umbraco).
PremiumSections SectionPolicySignedLines
PlacementType*
Premium-section-level question code for Placement Type
Premium-section-level setting of Placement Type
Order*
Premium-section-level question code for Order
Premium-section-level setting of Order
WrittenLine*
Premium-section-level question code Written Line
Premium-section-level setting of Written Line
SignedLine*
Premium-section-level question code for Signed Line
Premium-section-level setting of Signed Line
PremiumSections SectionPolicyDates
EffectiveDate*
Premium-section-level question code for Effective Date
Premium-section-level setting of Effective Date
ExpiryDate*
Premium-section-level question code for Expiry Date
Premium-section-level setting of Expiry Date
InceptionDate*
Premium-section-level question code for Inception Date
Premium-section-level setting of Inception Date
FeeSections
Root
SectionCode*
Unique PascalCase section code per fee name
Use PascalCase and remove any symbols/spaces from FeeName
FeeName*
String representing fee name
This should be identical to what is configured in Umbraco.
SectionOrder*
Integer specifying the order
This property should be populated sequentially across the entirety of the FeeSections array. It should be an integer starting from 1 and ending with the count of fee sections.
AdditionalProperties (Array)
[]
This is where we specify additional properties (outside of the core field set) which we want to include in FeeOutput as part of this section.
We need to define the properties in the config table, then we populate them in the TechnicalPremium script.
Failing to do both parts of the setup will result in an error and unexpected behaviour.
AdditionalFeeSectionIdentifiers (Array)
[]
This property is relevant if we expect to see multiple instances of the same fee name added to the same risk. It defines which properties against that fee row make it unique.
If multiple instances of the same section are added for whatever reason (e.g. writing a separate fee row for each insured address) then we need a unique property which we can refer to that makes each of them different.
If we follow that same example, we’d add an Additional property to AdditionalProperties called “LocationName”, we’d then populate this in the Technical Premium function against each fee instance.
Then we’d specify “LocationName” in the array here to specify that this is something by which we can identify an individual instance of the section.
This mechanism is then used when presenting the information on screen, applying overrides, setting previous rates… and more.
AdditionalFeeSectionOverrideFields (Array)
[]
This section allows additional override fields to be specified for a premium section.
Provider
Uses top level provider property
Fee section level setting of “Provider”
As specified above, this isn’t strictly necessary here as it would be automatically read-in from top-level if we left this property as blank
Overrideable
False
Boolean to dictate to the rates whether or not overrides can be applied
Setting this to false means that any overrides (including discounts and loadings) will be prevented by the rates.
It will also disable the override fields in the premium table component.
MaxDiscount
0
Integer representing the Max Discount percentage which can be applied to a section (0 - 100)
This field is significant for the DiscountLoadingPercentage overrides specifying the maximum discount that can be applied.
If the property is left blank or doesn’t exist against a section there will be no cap on discount.
MaxLoading
0
Integer representing the Max Loading percentage which can be applied to a section (0 - 100)
This field is significant for the DiscountLoadingPercentage overrides specifying the maximum loading that can be applied.
If the property is left blank or doesn’t exist against a section there will be no cap on loading.
ExchangeRateMethod
TechnicalPremium
“TechnicalPremium” means the ExchangeRate will be passed in with the Technical Fee record.
“UserCompanyBaseRate” means ExchangeRate will be returned from the currency_rates collection based on the User Company against the risk.
The currency_rates collection holds the latest currency rates, previous versions are written into the currency_rates_archive collection.
These rates can currently be updated via the B2B UI in settings/exchange-rates.
InstalmentsMethod
Full
When this is set to “Full” it means that for Instalment plans, this fee value will be paid off in full on the first instalment.
If it’s set to “Split” it means the fee value will be included in the overall total to be split by instalments.
The value of any fees where InstalmentsMethod has been set to “Full” appears in the Additional column of the BillingOption component against the first instalment.
SectionPolicyDates
{}
Fee section level setting of “PolicyDates”
Inspector
This is something which exists for quite a specific purpose to tie rates back to the Inspector UI. Each transaction type short code is a property name and the string held against each represents the question code for the Premium Table from Umbraco.
The purpose of this is to display the correct information in the inspector at each transaction type. Within the flows themselves, we simply add the relevant premium table, but the inspector has no concept of this, so uses this information from the config table to present the correct instance of the question.
Inspector PremiumTable
QuestionCode*
Holds Premium Table question codes by transaction
Inspector PremiumTable QuestionCode
NB*
Question Code for Premium Table to be displayed in the Inspector at New Business
This can be comma separated to show multiple in the UI
MTA*
Question Code for Premium Table to be displayed in the Inspector at MTA
This can be comma separated to show multiple in the UI
CANX*
Question Code for Premium Table to be displayed in the Inspector at Cancellation
This can be comma separated to show multiple in the UI
REN*
Question Code for Premium Table to be displayed in the Inspector at Renewal
This can be comma separated to show multiple in the UI
CardPayments
Type*
Name of the payment provider
Currently we only integrate with “Stripe” as a card-payment provider
PublishableKey*
Stripe publishable key which can be found by logging into the Stripe portal
There is a publishable key and a secret key for each Stripe account.
We store the publishable key in the config table and the secret key is hidden away in the API.
It’s crucial that the keys both match with the same Stripe account for the payment process to work.
For our development environments we use our own Insureflow Stripe instance. UAT and live sites for clients will have their own setup.
AmountElement*
Indicates which element of the rates to look for the value to be charged as the Stripe payment amount
The combination of these properties should point at the location of a property holding the value of the full amount to be paid via card.
The example setup here is what will be followed in a majority of occasions
AmountProperty*
Indicates which property of the element above should be used to look for the value to be charged as the Stripe payment amount
PaymentCurrency*
3-digit currency code for Payment Currency
This has always been set to “GBP” so far as the Stripe accounts have been setup in this currency
Refunds
The combination of these properties should point at the location of a property holding the value of the full amount to be paid via card.
AmountElement*
Indicates which element of the rates to look for the value to be charged as the Stripe refund amount
AmountProperty*
Indicates which property of the element above should be used to look for the value to be charged as the Stripe refund amount
PolicySignedLines
The combination of the answers to these questions determines the Our Share Multiplier value which is used in binder calculations.
PlacementType
100% Placement
Question code for PlacementType
Order
If PlacementType === “100% Placement” Then Order = 100.
Question code for Order
WrittenLine
Else read in the answer using the question code, if it can’t be found then default to 0
Question code for WrittenLine
SignedLine
If PlacementType === “100% Placement” Then WrittenLine = 100.
Question code for SignedLine
Billing
Root
Options
{}
Contains a series of options used to determine display and validation for the BillingOption component.
See Billing Options
TotalToPayProperty*
Holds the name of a property in the “Summary” section which holds the total value to be paid by card.
Perhaps it would be a good idea in future to allow the TotalToPay property to also be applied to other elements of the rates array besides “Summary”.
DefaultTermsOfTrade
Holds the default value for what TermsOfTrade should be set to in the Billing section of “Summary”
This default will be set the first time the BillingOption component loads.
DefaultBillingOption
In Full
Holds the default value for what BillingOption should be set to in the Billing section of “Summary”
This default will be set the first time the BillingOption component loads.
Billing Options
These options are written into the Billing.Options in the “Summary” row where they are then picked up within the BillingOption component.
These values are also referenced in the validation method created specifically for billing "Validate_NEWRATES_Billing" - If you are using the latest automated validation script, it should automatically run billing validation for you if the question exists in the flow.
IMPORTANT: If these options aren’t provided in the “Summary” entry in Billing.Options, then the BillingOption component will look in QuestionOptions for that question instance to extract these values.
If entries cannot be found in here, then we fall back to the “default value if not specified” for each property from the table at the start of this section.
MinInstalments*
Integer option for Minimum Instalments which can be added to the instalment plan
MaxInstalments*
Integer option for Maximum Instalments which can be added to the instalment plan
MinTermsOfTrade*
Integer option for Minimum Terms of Trade for the instalment plan
MaxTermsOfTrade*
Integer option for Maximum Terms of Trade for the instalment plan
MinSettlementDueDateDays*
Integer option for the adjustment in days which should be applied to the Inception Date to determine the earliest permitted Settlement Due Date within the instalment plan
MaxSettlementDueDateDays*
Integer option for the adjustment in days which should be applied to the Expiry to determine the latest permitted Settlement Due Date within the instalment plan
Last updated