SchemeServe has a very simple tool that allows you to create both simple and complex rules,
What are rules?
Rules can do a number of things: trigger referrals, decline policies, generate documents, apply endorsements and much more.
Rules can generate automatic documentation production that is tailored to a specific insurer, condition or scheme.
Rules can also trigger internal referrals. This generates a different case status, and you can create unique messages to your users informing them of the reason for a referral.
You can create different levels of referrals and control the level at which users can process the case using permission levels.
Creating or Editing Rules in a nutshell:
- Log in to SchemeServe as an Administrator.
- Click the ‘Admin‘ tab.
- Click the ‘Rule Builder’ icon.
- Search for the scheme, insurer, type and user (or any combination of these) to add a rule.
- Click the ‘New Rule’ button.
- Click the green plus (+) button in the ‘IF’ box to generate conditions for the rule.
- Then Click the green plus (+) button in the ‘THEN’ box to generate actions for the rule.
- Then click the floppy disc (save) icon to save the rule.
-
Click the red X to enable the rule
We recommend building your referral rules first. You can come back and build you document generation and endorsement rules once you have built those.
Rules Ordering
Here is a list to show in which order the rules will be run:
= Any Insurer, Any Type
= Any Insurer, Specified Type
= Specified Insurer, Any Type
= Specified Insurer, Specified Type
Main Elements:
Rule Conditions
| Add Answers | Add certain answers together |
| Add Results | Add certain results together |
| Agent | Use a specific agent as a condition |
| Always Run | Always run this rule regardless |
| Client Status | Use this for any clients that are blocked |
| Count Existing | The count of existing quotes/policies e.g. Checking for any policy with the same Client Name. |
| Days Between | Calculate the days between two dates (this can also be done in a formula rule) |
| Formula | Create any formula in here as a condition |
| Get Answer | Get an answer from your question set |
| Get Answer Lookup | Get an answer from a lookup |
| Get Answer Postcode Lookup | Get an answer from a postcode lookup |
| Get Claims Loss Ratio | Get the claims loss ratio (between 1-10) |
| Get Cover | Get the cover of a certain field |
| Get Cover (full term) | Get the full cover of a certain field (calc questions) |
| Get Cover Percent | Get the cover percentage (calculation questions) |
| Get Multipage | -- |
| Get Multipage Child (by name) | Use this to get an answer from your MultiPage |
| Get Postcode | Get the postcode from a policy, client or broker |
| Get Result | Get a result of a calculation question |
| Get Result Percent | Get a the percentage result of a calculation question |
| Get Table Column | -- |
| Get Table Column (by name) | Get an answer from a specific column in a table |
| Has Group | Use this for anything that may have a group/tag |
| Months Between | Work out months between two dates (this can also be done in a formula rule) |
| Postcode Area Lookup | Workout the postcode area |
| Postcode Full Lookup | Get full postcode from lookup |
| Risk Group Cover | Use for total cover for each risk group |
| Risk Group Net | Use for total net cover for each risk group |
| Site Url | Use to create condition for specific site urls |
| Table Column Total | When column total should be used as a condition |
| Table Row Count | When total number of rows in table is used as a condition |
| Table Row Lookup | When specific row data is needed as a condition |
| Years Since | Work out years between two dates (this can also be done in a formula rule) |
Rules Actions
We can do lots of different actions within our rules, however it is common practice to keep as much rating in your rating file:
| Add Agent Group | Automatically add the policy to a specific agent group (Agent group being the name of the tag assigned to specific agents) |
| Add Client Group | Automatically add the policy to a specific client group (Client group being the name of the tag assigned to specific clients) |
| Add Policy Group | Automatically add the policy to a specific policy group (Policy group being the name of the tag assigned to specific policy) |
| Add To Excess | Add to excesses based on certain conditions |
| API Request | We can build our API requests into here however it is common practice to build them into your rating files. |
| Decline | Decline a policy, normally based on a specific answer |
| Generate Document | Generate document for a policy |
| Generate document and send to agent | Generate a document and send the document to the agent on the policy |
| Generate document and send to client and agent | Generate a document and send the document to the agent & client on the policy |
| Include Endorsement | Attached endorsement from endorsement library. Here you'll insert the endorsement identifier e.g. 0001 |
| Refer | Refer a policy. Here you can select an authority level which runs alongside each users authority level. |
| Remove Endorsement | Remove a specific endorsement. Here you'll insert the endorsement identifier e.g. 0001 |
| Send Email | Send an email to a specific email address e.g. ##[Broker.Email]##, ##[Client.Email]## or ##[insertname@gmail.com]## |
| Send Email (Even if Referred) | Send an email to a specific email address even if the policy has been referred e.g. ##[Broker.Email]##, ##[Client.Email]## or ##[insertname@gmail.com]## |
| Send Email Template | Send a specific email template from your email template library found on your admin tab. |
| Send Email Template (Even if Referred) | Send a specific email template from your email template library found on your admin tab even if the policy has been referred. |
| Send Http Post | -- |
| Send SMS | Send a specific SMS |
| Send Welcome Email (username and password) | Send a welcome email based on certain conditions. |
| Set Answer | Set the answer to a specific question in your question set |
| Set Answer from Lookup Next and Delete | Set the answer from a lookup file and then delete that answer so that it can´t be used again. Common in custom policy numbers |
| Set Case Reference from Lookup Next and Delete | To set custom policy numbers |
| Set Cover | Set the cover to a field |
| Set Excess | Set an excess |
| Set Fee | Set a fee to a field |
| Set Free Trial | To set a free trial period on the policy |
| Set Import Ref | To set a specific import ref to allow for linking of different records |
| Set Minimum Net Premium | Set the minimum net premium based on certain conditions to a policy. This can be done per risk group in a rating file instead |
| Set Non Std Cover | -- |
| Set Rate | Set a specific rate |
| Set Risk Group Commission | Set commissions on your matrix tab |
| Set Risk Group Insurer Commission | Set commissions on your matrix tab |
| Set Risk Group Minimum Net Premium | Set the minimum net premium per risk group based on certain conditions to a policy. This can be done per risk group in a rating file instead |
Useful formula & tips
| Action | Description | |
| IF Formula ([Record.InceptionDate] - [Policy.InceptionDate]).Days Greater Than 30 | Set Fee Policy Fee 35 |
These values can only be used on calculation questions - these are the only style question where the previous values are saved. NOTE: if you backdate a test case and then change the previous values to see the impact on a later record, the _xxxBefore value will remain the same as the original entered - any changes you make will not pull through, only the original value |
| IF Formula ([Record.InceptionDate] - [Policy.InceptionDate]).Days Equal to 0 | Set Fee Policy Fee ([PreviousAnswer_PolicyFee_Result]*(-1)) | Use when the Policy Fee field in the question set is set to 'None' for cancellation method, but the broker wants to allow full refund of the policy fee only when a record is cancelled ab initio i.e. with effect from the original inception date |
| IF Formula [RiskGroup_XXXX.Insurer.Name]='XXXX' Equal to true | Generate Document | Use this in rules if you only want an action to be triggered (i.e. issuing a document) where a specific risk group is a particular insurer |
| Using _xxxBefore values i.e. _CoverBefore |
These values can only be used on calculation questions - these are the only style question where the previous values are saved. NOTE: if you backdate a test case and then change the previous values to see the impact on a later record, the _xxxBefore value will remain the same as the original entered - any changes you make will not pull through, only the original value |
|
|
IF Formula [Record.Type]="First Premium" Equal to True IF Formula [Record.Type]="Adjustment" Equal to True IF Formula [Record.Type]="Renewal" Equal to True |
Setting a condition based on the record type, in this case a referral email that needs to refer to New Business, Adjustment or Renewal dependent on the record type - search for rule 253552 on ADM | |
| ##[User.Email]## | Use this as the email address in a send email rule to send the email to the user working in the record when the rule is run i.e. send an email to the user placing a record on cover to remind them to check x, y and z after the record goes on cover | |
| ##[User.UserName]## | Use this in the body of an email to populate the email with the user ID of the user that changed the status to the one that triggers the rule | |
| ##[UserName]## | Use this in the body of an email to populate the email with the creating user's full name | |
| ##[UserPosition]## | Use this in the body of an email to populate the email with the creating user's position / job title | |
| FLOOR((([StartDate_DateValue].AddDays(1)-[ProposerDOB_DateValue]).Days/365.242199)) |
To use in a formula in a rule to calculate the clients age (where StartDate is the inception date system ID and ProposerDOB is the system ID for the clients DOB)To use in a formula in a rule to calculate the clients age (where StartDate is the inception date system ID and ProposerDOB is the system ID for the clients DOB) |
|
| ([Now].Year)-[YearTrading_Cover]<=3 |
Use with a numeric field that is capturing a year only to identify if that year is less than 3 years from today i.e. if a business has been trading for less than three years Use with the elements of 'Equal To' and 'True' |
|
| IF Formula [Record].HasEndorsement("xxx") Equal to True | Send Email (Even if Referred) | To send an email at the on cover stage when a particular endorsement has been applied to a record (whether by previous rule or since added manually by a user) |
| [Agent.AccountRef] | Use this if you need to use the BAR1 or TES2 style account ref in a rule (not to be confused with [Agent.AccountID] which uses the numeric code of an agent) | |
| [Commission_3390_IndexLevel0_Rate]<>20 | _Rate can be used in a rule to look at the rate in a record - but you cannot use _RateBefore in a rule, it will error out | |
| IF([Agent.AccountId].ToString()='ACCOUNT_ID_23451' OR [Agent.AccountId].ToString()='ACCOUNT_ID_23963','True','False') | Use in a formula where the actions are dependent on particular agent, rather than having to set multiple rules that look at the condition 'Agent' which can only account for one agent per rule | |
| FORMULA IF([ClientName_Value]=[TradingAs_Value],1,0) Equal to 1 then refer | Comparing one field to another to see if it is the same | |
| FORMULA IF([ClientName_Value].Contains([TradingAs_Value]),1,0) then refer | Looking to see if another field contains the same value as the current field | |
| FORMULA IF([TradingAs_Value].Contains([ClientName_Surname_Value]),1,0) then refer | Looking at the surname only in the client name field to compare to the contents of another field | |
|
Formula [PropAddress_Postcode_Value].Substring(0,2)='IM' OR [PropAddress_Postcode_Value].Substring(0,2)='GY' OR [PropAddress_Postcode_Value].Substring(0,2)='JE' Equal to True |
To refer a case using a particular postcode field where the risk is located in the Channel Islands of Isle or Man, and where there may not already be hidden questions setting just the first two postcode letters. In this example the system ID of the question is [PropAddress] and the question must be an address type question for this to work | |
|
Get Result | TotalPremiumNet | Greater Than 0 Formula | (([TotalPremiumNet_Result]/100)*(100+[IPT_Rate]))<10 | Equal to True Set Fee | PolicyFee | 10 |
To set (and future proof) a rule that sets a policy fee when an AP is created where the premium is between 0 and a specified amount (in this case setting a fee of 10 where the total premium inclusive of IPT is less than 10) - | |
|
Formula | (([TotalPremiumNet_Result]/100)*(100+[IPT_Rate]))>=10 | Equal to True Set Fee | PolicyFee | 0 |
To set (and future proof) a rule that overwrites and sets a policy fee to 0 when an AP is created where the premium is greater than a specified amount (in this case where the total premium inclusive of IPT is equal to or greater than 10) - view rule 284440 via ADM menu | |
| [PreviousAnswer_TotalPremiumNet_Result] |
Used on Adjustment - Cancelled rules as when you cancel a policy using the Cancel Policy button the status 'Cancelled' doesn't 'read' any XXXXX_ResultBefore or XXXX_CoverBefore. You then have to use [PreviousAnswer_XXXX_Result] or [PreviousAnswer_XXXX_Cover] or [PreviousAnswer_XXXX_Rate] if you need to use/check a result or a cover or rate from the previous record. It can be used in rules, rating and docs. the only place where it can't be used is reports. |
|
| [RecordReferralsHtml] | If, on cancellation, no policy fee should ever be refunded, you can set a rule at the 'Cancelled' status to set the fee to zero - HOWEVER, if the user selects the 'Pending' option when using the 'Cancel Policy' function, any rule set at cancelled obviously wont kick in. Edit the 'Policy Fee' question in the cover details page of the question set on the rates tab to set the cancellation method to 'None' | |
| How to pull through the referral reasons on a Send Email rule when a case is referred | ||
| Set Risk Group Commission' then select the cover group(s) to be updated | Use this to set a blanket broker commission rate to a specific cover group(s) in rules rather than in all rating files | |
|
Get Answer [NameOfPostcodeFieldUsedToCompareToLookup] Not In File Lookup file name to be selected For MP schemes: Get Multipage Child (by name) MP page question system ID Not In File Lookup file name to be selected |
To refer a case if a user manually enters a postcode and that postcode is incorrect therefore will never be found in the postcode lookup file linked to the scheme | |
| Get Cover (full term) |
Use this for MTA rules if you need to refer a case dependent on calc question answer For example, a referral rule may be set up at FP and renewal to refer a case if the field [Turnover] has a value of 0 as PL can only be covered where the client has a turnover value noted An MTA may be processed at a later date to add MD cover to the record with no changes to any other values, so the turnover field isnt changed from the value originally set in the FP. If the rule is still set up as simply 'Get Cover' the MTA will refer because there is no additional turnover noted on this MTA so the rule will read it as zero and refer the case Get cover will only give you the change in cover for that MTA |
|
| To use Agent Groups in rules use 'Has Group' as condition | To use Agent Groups in rules use 'Has Group' as condition | |
| [Policy.CreatedDate] | To use the creation date of when the policy as a whole was first created - this will be the first premium date | |
| [Record.CreatedDate] | To use the creation date of a record in a rule | |
|
Formula [BuildingsDeclaration]='checked', Equal to False |
For use with checkbox style question - note, 'checked' must be in lower case, it's case sensitive | |
| [Record.OnCoverDate]>[Record.InceptionDate] | Use in a rule to carry out an action such as sending an email to the broker to flag when a case has been placed on cover and been backdated, or to generate a doc to the client that refers to the Ts & Cs for a backdated case | |
| IF([Policy.CreatedDate]<=#2021-04-29#,1,0) | to check the date when the policy has been created | |
|
[PolicyID] [PolicyReference] |
If using [PolicyID] to display a value in an email created as an action within a rule, the policy number will be populated You can also use [PolicyReference] to populate the policy number - however, if a policy was imported to SchemeServe and had an [ImportRef] field set as part of that import, the import ref will populate instead of the policy number - to ensure that you only get the Policy Id you would use [PolicyId] |
|
| [Agent.Name] | Looks at the actual registered name of the agent | |
|
When using formula to look at an MP answer (note, the first row in an MP or table question is numbered #0 - not #1 as you would expect) [MP_InsuredAddress_AddressLine1_Row#0_Value].Contains('1') The above example is looking at the first address line in an MP address to establish if the number 1 is present - additional formula is added to the same rule to look at all numbers 0 through to 9 (see image to the right of the screen) with a condition of 'False' i.e. if the address line does not have any numbers in it because it is a house name Where this condition is met the broker wants the case referred so they can ensure the correct postcode rating is used |
It is not possible to use a formula condition combined with an MP question in a rule. If a formula is the only way to set a condition to look at an answer within an MP question it needs to be formatted in the same manner that you would use it within a table row, which means one rule for each potential row that an MP question may have. If a scheme restricts the number of pages you only need the number of rules to match the number of pages i.e. 10 page max MP equals 10 rules. If, however, there is no limit on the portfolio size then ask the broker how big their largest portfolio currently is and add rules over and above that amount. |
|
| Switch Insurer at Renewal |
Now if any insurer is no longer able to provide a quotation for a case at renewal (by way of a decline) it will go through the standard quotation process and select the cheapest non referring insurers. This will need to be turned on manually for each scheme that it is required for within the scheme settings under the advanced tab "Re-run set lowest rates at renewal if any of the current insurers decline." To set an insurer in run-off, please add a rule to decline cover. |
|
| Set Excess | Any excess rules must be set per insurer level within the rules, even if the excesses are the same between each of the insurers. Do NOT not set them up at the 'Any Insurer' stage as the rule wont know which specific insurer excess needs to apply | |
| Formula [RiskGroup_XXXX.Insurer.Name]='xyz' Equal to True | Set Answer [CurrentInsurer] INSURER_ID_XXX | Sets the field with the Insurer ID of the Insurer of a given risk group (ie Main, which will need the RiskGroup ID number). Used outside of the rating file as there is no assigned insurer when rating is run. Useful when comparing to [LastYearsInsurer], which would be updated through rating file, to identify if the insurer has changed, or to update when a different insurer is selected (and therefore amend the wording on documents based on match/mismatch). |
| [Record].EndorsementId.Value |
If a broker wants the unique record ID found in the record URL to be populated to a document: This generic system ID can be used, or it can be used to set the answer in a hidden field |
|
| ##[BrokerEmail]## | Can be used in rules to send an email to the Agent's general email address rather than the email address of the user at the Agent who created the record (which is what happens if the rule is simply set up with documents that are actioned with 'Generate document and send to agent' | |
| [Policy.RenewalCount] |
Although [PolicyRenewalCount] is used in documents to populate the numeric value of how many time a record has renewed, the format for formula within rules is [Policy.RenewalCount]. A policy that is renewing for the first time will have a renewal count of 0 at the Pending stage, and a renewal count of 1 once that renewal has been placed on cover. |
Document generation rules & email generation rules can all be found in their specific guides.
You can also use your rules to create custom policy numbers. See our guide here to check out the steps.

