v2.0

GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!

Watch the launch videoWatch

Insurance Underwriting Risk

Automated system that evaluates insurance applications against risk factors to determine whether manual underwriting review is necessary.

Solution

This underwriting decision system automates application screening by evaluating key risk factors against established thresholds. The system analyzes medical history indicators like high-risk conditions, recent hospitalizations, and multiple pre-existing conditions, assigning specific risk points to each factor. It also considers occupational hazards and age-related risks that may increase claim likelihood.

Beyond health factors, the system evaluates coverage amount thresholds, application completeness, information discrepancies, and foreign residency status. When applications contain multiple risk factors, the system calculates a cumulative risk score. Applications exceeding risk thresholds or containing certain automatic referral triggers are flagged for expert underwriter review with a specific reason code. This approach ensures high-risk applications receive appropriate scrutiny while simplifying approval for lower-risk applicants.

How it works

The decision system processes applications through a multi-step evaluation workflow:

  1. Application Intake: Captures applicant details and questionnaire responses about medical history, occupation, and personal information.
  2. Risk Factor Analysis: Evaluates individual risk indicators such as medical conditions, hospitalizations, age, and occupation against predefined criteria.
  3. Score Calculation: Assigns point values to each identified risk factor and calculates a cumulative risk score.
  4. Threshold Evaluation: Compares the total risk score and coverage amount against automatic approval thresholds.
  5. Administrative Check: Verifies application completeness and checks for information discrepancies or foreign residency.
  6. Decision Determination: Based on all factors, determines whether the application can proceed automatically or requires manual underwriter review.
  7. Referral Documentation: For applications requiring review, generates a specific reason code to streamline the underwriting process.

Where teams use it

  • Life insurance application processing
  • Health insurance underwriting
  • Disability insurance risk assessment
  • Long-term care insurance evaluation
  • Group insurance policy administration
  • Reinsurance risk assessment
  • Specialty insurance products

Inside the decision model

Insurance Underwriting Risk ships as a JDM decision graph with 4 nodes, 2 decision tables and 11 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.

Decision graph4 nodes · read-only
input applicationtable risk_factorsexpression calculate_risk_scoretable referral_decision
01

Application

input

An application arrives with an applicationId and a flat answers questionnaire: boolean medical and administrative flags plus age and coverageAmount, which together supply every column the two tables read.

Sample requestJSON
{
  "applicationId": "APP-12345",
  "applicantName": "Jane Smith",
  "answers": {
    "hasHighRiskMedicalCondition": true,
    "recentHospitalization": false,
    "multiplePreExistingConditions": true,
    "hazardousOccupation": false,
    "age": 58,
    "coverageAmount": 1200000,
    "hasIncompleteInformation": false,
    "hasInformationDiscrepancy": true,
    "hasForeignResidency": false
  }
}
02

Risk Factors

table

Because this table runs with a collect hit policy, every matching row contributes rather than the first one winning: answers.hasHighRiskMedicalCondition adds 10 points, recentHospitalization 15, multiplePreExistingConditions 20, hazardousOccupation 25, and age > 65 another 15 as 'Advanced age applicant'. Each hit lands in the riskFactors array with its points and description, so the sample applicant with two true flags collects 10 and 20.

The weights order the way a life underwriter would triage impairments: a hazardous occupation and stacked pre-existing conditions raise both frequency and severity for the life of the policy, so they outweigh a single flagged condition. The 65 age trigger reflects the steepening mortality curve at older issue ages, though the point values themselves are template calibrations, not industry constants.

Decision tablecollect hit policy
Has High Risk Medical Conditionanswers.hasHighRiskMedicalConditionRecent Hospitalizationanswers.recentHospitalizationMultiple Pre-existing Conditionsanswers.multiplePreExistingConditionsHazardous Occupationanswers.hazardousOccupationAgeanswers.ageRisk PointspointsRisk Descriptiondescription
true----10'High risk medical condition'
-true---15'Recent hospitalization'
--true--20'Multiple pre-existing conditions'
---true-25'Hazardous occupation'
----> 6515'Advanced age applicant'
03

Calculate Risk Score

expression

Aggregation is two expressions: totalRiskScore is sum(map(riskFactors ?? [], #.points)) and riskDescriptions collects the matching description strings. The ?? [] guard matters because a fully clean applicant produces no riskFactors array at all, and the referral table still needs a numeric 0 to compare against its threshold.

Expressions2 fields
totalRiskScoresum(map(riskFactors ?? [], #.points))
riskDescriptionsmap(riskFactors ?? [], #.description)
04

Referral Decision

table

Any single trigger forces referral in this first hit table: answers.coverageAmount > 1500000 refers with 'Coverage amount exceeds automatic approval threshold', totalRiskScore > 40 with 'Risk score exceeds threshold', and true values on incomplete information, information discrepancy, or foreign residency each carry their own reason. Only the all-blank final row returns false with 'No referral required', and the first matching row's reason becomes the single referralReason code.

This mirrors how automated underwriting engines actually work: straight-through processing applies below a coverage ceiling and risk budget, and anything above goes to a human. A face amount cap on auto-approval is universal practice in life underwriting, and discrepancies or foreign residency are classic mandatory-referral triggers because they need judgment and document review rather than more rules. The 1500000 and 40 point levels are this template's chosen thresholds.

Decision tablefirst hit policy
Coverage Amountanswers.coverageAmountRisk ScoretotalRiskScoreIncomplete Informationanswers.hasIncompleteInformationInformation Discrepancyanswers.hasInformationDiscrepancyForeign Residencyanswers.hasForeignResidencyNeeds Manual Reviewunderwriting.needsManualReviewReferral Reasonunderwriting.referralReason
> 1500000----true'Coverage amount exceeds automatic approval threshold'
-> 40---true'Risk score exceeds threshold'
--true--true'Application has incomplete information'
---true-true'Discrepancy in personal information'
----truetrue'Foreign residency or citizenship'
-----false'No referral required'

Make this template
your own.

Load Insurance Underwriting Risk into GoRules, adjust the rules to your policy, and ship it behind your own API.