Rules & Referrals

Written By Jessica Moore (Super Administrator)

Updated at January 8th, 2026

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:

  1. Log in to SchemeServe as an Administrator.
  2. Click the ‘Admin‘ tab.
  3. Click the ‘Rule Builder’ icon.
  4. Search for the scheme, insurer, type and user (or any combination of these) to add a rule.
  5. Click the ‘New Rule’ button.
  6. Click the green plus (+) button in the ‘IF’ box to generate conditions for the rule.
  7. Then Click the green plus (+) button in the ‘THEN’ box to generate actions for the rule.
  8. Then click the floppy disc (save) icon to save 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  
Set Cover Set the cover to a field 
Set Excess Set an excess
Set Fee Set a fee to a field
Set Free Trial  
Set Import Ref  
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.