GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!
Watch the launch videoWatchPolicy Discount Calculator
Automated system that calculates personalized insurance discounts based on customer loyalty, policy bundling, and vehicle safety features.
Solution
This insurance discount calculator automatically applies appropriate premium reductions by evaluating multiple factors in the customer's profile. The system first analyzes customer loyalty, rewarding long-term clients with tiered discounts based on their years with the company. It then evaluates policy bundling, offering increased savings for customers with multiple policies across different insurance types.
For auto insurance specifically, the system identifies safety features installed in the vehicle and applies corresponding discounts for each qualifying feature. Anti-theft systems, dash cams, and advanced driver assistance systems (ADAS) all trigger specific discount percentages. After calculating individual discount categories, the system combines them while ensuring the total doesn't exceed the maximum allowable discount cap. The final premium is then calculated by applying the consolidated discount to the base premium amount.
How it works
The decision graph processes insurance data through four sequential evaluation nodes:
- Customer Loyalty Analysis: Examines customer tenure and assigns appropriate percentage discounts (5-15%) based on years with the company.
- Policy Bundle Evaluation: Determines additional discounts (7-12%) based on the number of policies the customer holds.
- Safety Feature Assessment: Identifies installed vehicle safety features and assigns specific discount percentages for each qualifying feature (anti-theft: 3%, dash cam: 2%, ADAS: 5%).
- Discount Calculation: Sums all applicable discounts, caps the total at a maximum of 25% if necessary, and calculates the final premium by applying the discount to the base premium.
Where teams use it
- Auto insurance premium calculation
- Home insurance discount determination
- Multi-policy bundle pricing
- Customer retention incentive programs
- New safety feature promotion campaigns
- Insurance quote generation systems
Inside the decision model
Policy Discount Calculator ships as a JDM decision graph with 5 nodes, 3 decision tables and 10 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.
Request
inputTwo objects drive the whole calculation: customer supplies yearsAsCustomer and numberOfPolicies, while policy carries the basePremium and the safetyFeatures list that the collect table scans.
Sample requestJSON
{
"customer": {
"id": "C12345",
"name": "Jane Smith",
"yearsAsCustomer": 4,
"numberOfPolicies": 2
},
"policy": {
"id": "P98765",
"type": "auto",
"basePremium": 1200,
"safetyFeatures": [
"antiTheftSystem",
"advancedDriverAssistance"
]
}
}Customer Loyalty Discounts
tableTenure is read off customer.yearsAsCustomer with a first hit policy, so the most generous row wins: >= 5 years earns 15 with 'Premium loyalty discount', >= 3 earns 10, >= 1 earns 5, and the blank fallback row writes 0 with 'No loyalty discount'. Ordering the rows from largest threshold down is what makes the overlapping >= conditions safe.
Stepped tenure discounts are a common retention lever because renewal books are cheaper to service and better risks on average than new business, and 5 to 15 percent is a plausible band for that credit. The specific breakpoints at 1, 3, and 5 years are a business choice for this template rather than any market convention.
| Years as Customercustomer.yearsAsCustomer | Loyalty Discount Percentagediscounts.loyalty.percentage | Loyalty Discount Descriptiondiscounts.loyalty.description |
|---|---|---|
| >= 5 | 15 | 'Premium loyalty discount' |
| >= 3 | 10 | 'Standard loyalty discount' |
| >= 1 | 5 | 'Basic loyalty discount' |
| - | 0 | 'No loyalty discount' |
Bundled Policies Discounts
tableBundle credit hinges on customer.numberOfPolicies: >= 3 policies earn 12 as a 'Multi-policy premium discount', exactly 2 earn 7 as a 'Dual policy discount', and everything else falls to the 0 row. First hit ordering again puts the richest tier on top.
Multi-policy discounts are among the most widely used offers in personal lines because bundled households lapse far less often, which lets carriers give back part of the retention gain as premium credit. The 7 and 12 point values are sensible template numbers in the range such programs actually offer.
| Number of Policiescustomer.numberOfPolicies | Bundle Discount Percentagediscounts.bundle.percentage | Bundle Discount Descriptiondiscounts.bundle.description |
|---|---|---|
| >= 3 | 12 | 'Multi-policy premium discount' |
| 2 | 7 | 'Dual policy discount' |
| - | 0 | 'No bundle discount' |
Safety Features Discounts
tableUnlike the earlier tables this one uses a collect hit policy over policy.safetyFeatures, so every matching row fires: contains($, 'antiTheftSystem') adds a 3 point row, contains($, 'dashCam') adds 2, and contains($, 'advancedDriverAssistance') adds 5. The results land as an array under the discounts.safetyFeatures output path, each row carrying its percentage and description.
Per-feature credits mirror how auto insurers price equipment: anti-theft devices cut theft severity, and ADAS reduces at-fault collision frequency, which justifies it carrying the largest credit at 5 points. A dash cam mostly helps liability disputes rather than preventing losses, so its smaller 2 point value is a reasonable business choice.
| Safety Featurespolicy.safetyFeatures | Feature Discountpercentage | Feature Descriptiondescription |
|---|---|---|
| contains($, 'antiTheftSystem') | 3 | 'Anti-theft system discount' |
| contains($, 'dashCam') | 2 | 'Dash cam discount' |
| contains($, 'advancedDriverAssistance') | 5 | 'ADAS discount' |
Calculate Total Discount
expressionSummation happens here: totalDiscountPercentage adds the loyalty and bundle percentages to sum(map(discounts.safetyFeatures, #.percentage)), then maximumDiscountPercentage clamps the result with min([$.totalDiscountPercentage, 25]). The finalPremium expression applies that capped figure to policy.basePremium, and the 25 percent ceiling is what keeps stacked discounts from eroding the rate below its actuarial floor.
discounts.loyalty.percentage + discounts.bundle.percentage + sum(map(discounts.safetyFeatures, #.percentage))min([$.totalDiscountPercentage, 25])policy.basePremium * (1 - ($.maximumDiscountPercentage / 100))Other Insurance templates
View all templatesPolicy Eligibility Analyzer
Automated rule-based system that evaluates customer eligibility for insurance policies based on age, location, and specific risk factors.
InsuranceAuto Insurance Premium Calculator
Dynamic pricing system that determines accurate premiums based on driver profile, vehicle specifications, and coverage options for personalized insurance rates.
InsuranceInsurance Claim Validation System
Automated verification that validates insurance claims against policy status, timeframe requirements, and claim details before investigation.
Make this template
your own.
Load Policy Discount Calculator into GoRules, adjust the rules to your policy, and ship it behind your own API.