GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!
Watch the launch videoWatchPolicy Eligibility Analyzer
Automated rule-based system that evaluates customer eligibility for insurance policies based on age, location, and specific risk factors.
Solution
This insurance eligibility system streamlines the underwriting process by automatically evaluating potential policyholders against key criteria. The system analyzes customer age to verify compliance with minimum and maximum age requirements, ensuring appropriate risk categorization. Location assessment filters applicants from high-risk geographic areas or regions outside service boundaries, maintaining portfolio balance across territories.
The risk assessment component evaluates both the quantity and nature of customer risk factors, considering them alongside health scores to determine overall insurability. When eligibility criteria are not met, the system provides specific denial reasons, enabling agents to clearly communicate decisions to applicants. This automated approach ensures consistent application of underwriting standards while accelerating the decision process for straightforward cases, allowing underwriters to focus on more complex applications.
How it works
The decision graph processes applications through multiple evaluation stages:
- Age Verification: Checks if the applicant falls within acceptable age ranges (18-75).
- Location Analysis: Evaluates the applicant's state/region against excluded high-risk areas and verifies the location is within supported territories.
- Risk Assessment: Evaluates the number of risk factors and their interaction with the applicant's health score.
- Eligibility Determination: Combines all evaluations to make a final decision, collecting specific reasons when applications are denied.
Each evaluation node operates independently but contributes to the final determination, with the system producing a clear approved/denied decision along with detailed reasoning.
Where teams use it
- Individual life insurance underwriting
- Health insurance application processing
- Auto insurance eligibility screening
- Property insurance risk assessment
- Small business insurance qualification
- Travel insurance eligibility verification
Inside the decision model
Policy Eligibility Analyzer ships as a JDM decision graph with 5 nodes, 3 decision tables and 9 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.
Request
inputA single customer object carries everything the graph needs: customer.age, customer.location.state, customer.healthScore, and customer.riskFactors.count drive every eligibility check downstream.
Sample requestJSON
{
"customer": {
"age": 45,
"location": {
"country": "US",
"state": "CA",
"city": "San Francisco"
},
"healthScore": 85,
"riskFactors": {
"count": 2,
"factors": [
"previous_claim",
"family_history"
]
}
}
}Age Eligibility
tableAge screening runs with a first hit policy over customer.age. Applicants under 18 are declined with 'Age below minimum requirement', anyone over 75 gets 'Age exceeds maximum limit', and the empty catch-all row returns true with 'Age requirements met', so every applicant leaves this table with a flag and a reason.
An 18 to 75 issue-age window is typical for standard individual products: minors cannot enter an insurance contract on their own, and past the mid-70s carriers usually route applicants to specialized senior products instead of standard issue. Emitting the reason string alongside the boolean is what lets the final step return an explainable denial rather than a bare false.
| Agecustomer.age | Eligibleeligibility.age.isEligible | Reasoneligibility.age.reason |
|---|---|---|
| < 18 | false | 'Age below minimum requirement' |
| > 75 | false | 'Age exceeds maximum limit' |
| - | true | 'Age requirements met' |
Location Eligibility
tableTerritory checks fire in order under a first hit policy on customer.location.state. A row matching contains(['FL', 'LA', 'TX'], $) declines with 'High risk location', a second row declines anything failing the ['US', 'CA', 'UK'] membership test with 'Location not supported', and the catch-all passes with 'Location requirements met'.
FL, LA, and TX are the classic hurricane and coastal catastrophe states where carriers routinely restrict new business or require separate wind programs, so excluding them at intake is a realistic screen. The supported-territory list simply reflects where this book is licensed to write, which is a business footprint choice rather than a risk judgment.
| State/Regioncustomer.location.state | Eligibleeligibility.location.isEligible | Reasoneligibility.location.reason |
|---|---|---|
| contains(['FL', 'LA', 'TX'], $) | false | 'High risk location' |
| !contains(['US', 'CA', 'UK'], $) | false | 'Location not supported' |
| - | true | 'Location requirements met' |
Risk Factor Assessment
tableHazard accumulation is judged from customer.riskFactors.count with a first hit policy. More than 3 factors declines outright with 'Too many high-risk factors', exactly 3 factors combined with customer.healthScore < 70 declines with 'Combination of risk factors and low health score', and everything else passes with 'Risk factor assessment passed'.
The layered structure mirrors how underwriters treat marginal files: a borderline factor count does not decline on its own, but paired with a weak health score it does. The cutoffs of 3 factors and a 70 health score are sensible business choices for this template rather than industry-mandated thresholds, and they are easy to retune as loss experience comes in.
| Risk Factors Countcustomer.riskFactors.count | Eligibleeligibility.riskFactors.isEligible | Reasoneligibility.riskFactors.reason |
|---|---|---|
| > 3 | false | 'Too many high-risk factors' |
| == 3 and customer.healthScore < 70 | false | 'Combination of risk factors and low health score' |
| - | true | 'Risk factor assessment passed' |
Final Determination
expressionThree booleans are ANDed into isEligible, so one failed check is enough to deny the application. The denialReasons expression filters the three reason strings down to actual failures by dropping pass messages like 'Age requirements met', and policyDecision packages { 'approved': isEligible, 'reasons': denialReasons } so the caller gets both the verdict and the specific grounds for it.
eligibility.age.isEligible and eligibility.location.isEligible and eligibility.riskFactors.isEligiblefilter([eligibility.age.reason, eligibility.location.reason, eligibility.riskFactors.reason], # != 'Age requirements met' and # != 'Location requirements met' and # != 'Risk factor assessment passed'){ 'approved': isEligible, 'reasons': denialReasons }Other Insurance templates
View all templatesAuto 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.
InsurancePolicy Discount Calculator
Automated system that calculates personalized insurance discounts based on customer loyalty, policy bundling, and vehicle safety features.
Make this template
your own.
Load Policy Eligibility Analyzer into GoRules, adjust the rules to your policy, and ship it behind your own API.