A fleet model rating each vehicle, then applying state, claim-free experience and safety programme factors.
Commercial auto insurance covers vehicles used for business, from a single van to a fleet of hundreds. Each vehicle has its own risk, and the fleet as a whole is adjusted for the operator's record and risk management.
A child model prices each vehicle. The parent model sums the vehicles, then applies a state factor, a credit for claim-free years and a credit for a formal safety programme, plus a policy fee.
Empty fleets and fleets over 200 vehicles are declined. Fleets of 50 or more vehicles and fleets with recent losses are referred.
Three further factors adjust the fleet premium: telematics, the radius of operation and the type of cargo carried.
| Field | Label | Type | Default | Allowed values |
|---|---|---|---|---|
state | State | string | TX | CA, TX, IL, FL, NY |
fleet_years_claim_free | Consecutive claim-free years for the fleet | integer | 0 | 0, 2, 5, 8 |
safety_program | Formal driver safety program in place | boolean | false | true, false |
vehicles | Vehicles | array | list | A list of items, each rated by the child model |
telematics | Telematics fitted | boolean | false | false, true |
radius | Radius of operation | string | local | local, intermediate, long_haul |
cargo_type | Cargo type | string | general | general, refrigerated, hazardous |
Steps run in order. Each one can use the inputs and the outputs of every step before it.
Overall state loading: high-cost states carry a substantial load.
{
"id": "state_auto_rates",
"key": "state_auto_rates",
"step": "collection",
"name": "State commercial auto factor",
"retain": true,
"collection": [
["state", "state_auto_factor"],
["CA", 1.15],
["TX", 1],
["IL", 1.05],
["FL", 1.2],
["NY", 1.25]
],
"format": {
"state_auto_factor": {
"key": "state_auto_factor",
"label": "State commercial auto factor",
"exp": "collection.filter(state=={{state}}).map(state_auto_factor).first()",
"type": "decimal",
"def": 1
}
}
}Bigger credit for longer claim-free records, floored at 0.75.
{
"id": "fleet_experience_calc",
"key": "fleet_experience_calc",
"step": "calculation",
"name": "Fleet experience credit",
"def": 1,
"formula": "max(1 - ({{fleet_years_claim_free}} * 0.03), 0.75)"
}Formal safety program: 5% credit.
{
"id": "safety_factor",
"key": "safety_factor",
"step": "transform",
"name": "Safety program credit",
"retain": true,
"format": {
"safety_factor": {
"key": "safety_factor",
"label": "Safety program factor",
"exp": "{{safety_program}} == true ? 0.95 : 1.00",
"type": "decimal",
"def": 1
}
}
}Iterate vehicles[]. Child model returns each vehicle's base premium; parent sums into a fleet total and counts vehicles.
Prices a single commercial vehicle by class, radius, and GVW.
Vehicle class base rate. Base premium per vehicle by commercial class.
Operating radius factor. Longer radius = higher factor. Long-haul is the largest load.
GVW factor. Very heavy vehicles (>45,000 lbs) attract an additional load.
Per-vehicle premium. Class base × radius × GVW.
{
"id": "per_vehicle_rating",
"key": "per_vehicle_rating",
"step": "modules",
"name": "Per-vehicle rating",
"format": {
"vehicle_base_total": {
"key": "vehicle_base_total",
"label": "Sum of per-vehicle base premiums",
"exp": "collection.sum(result)",
"type": "decimal",
"def": 0
},
"vehicle_count": {
"key": "vehicle_count",
"label": "Number of vehicles",
"exp": "collection.count()",
"type": "integer",
"def": 0
}
},
"child_model_steps": [
{
"id": "class_rates",
"key": "class_rates",
"step": "collection",
"name": "Vehicle class base rate",
"retain": true,
"collection": [
["class", "class_base_premium"],
["private_passenger", 900],
["light_truck", 1200],
["medium_truck", 2200],
["heavy_truck", 3800],
["extra_heavy_truck", 5400]
],
"format": {
"class_base_premium": {
"key": "class_base_premium",
"label": "Class base premium",
"exp": "collection.filter(class=={{class}}).map(class_base_premium).first()",
"type": "decimal",
"def": 1200
}
}
},
{
"id": "radius_rates",
"key": "radius_rates",
"step": "collection",
"name": "Operating radius factor",
"retain": true,
"collection": [
["radius", "radius_factor"],
["local", 1],
["intermediate", 1.15],
["long_haul", 1.35]
],
"format": {
"radius_factor": {
"key": "radius_factor",
"label": "Radius factor",
"exp": "collection.filter(radius=={{radius}}).map(radius_factor).first()",
"type": "decimal",
"def": 1
}
}
},
{
"id": "gvw_rates",
"key": "gvw_rates",
"step": "collection",
"name": "GVW factor",
"retain": true,
"collection": [
["gvw_max", "gvw_factor"],
[10000, 1],
[26000, 1.1],
[45000, 1.25],
[80000, 1.45]
],
"format": {
"gvw_factor": {
"key": "gvw_factor",
"label": "GVW factor",
"exp": "collection.filter(gvw_max>={{gvw_lbs}}).map(gvw_factor).first()",
"type": "decimal",
"def": 1
}
}
},
{
"id": "vehicle_premium",
"key": "vehicle_premium",
"step": "calculation",
"name": "Per-vehicle premium",
"def": 0,
"formula": "round({{class_base_premium}} * {{radius_factor}} * {{gvw_factor}}, 2)"
}
]
}Fleets with telematics monitor driving behaviour and recover stolen vehicles more often.
{
"id": "telematics_rates",
"key": "telematics_rates",
"step": "collection",
"name": "Telematics factor",
"retain": true,
"collection": [
["telematics_value", "telematics_factor_rel"],
[false, 1],
[true, 0.92]
],
"format": {
"telematics_factor": {
"key": "telematics_factor",
"label": "Telematics factor",
"exp": "collection.filter(telematics_value=={{telematics}}).map(telematics_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Vehicles that travel further spend more time on the road and in unfamiliar areas.
{
"id": "radius_rates",
"key": "radius_rates",
"step": "collection",
"name": "Radius of operation factor",
"retain": true,
"collection": [
["radius_value", "radius_factor_rel"],
["local", 1],
["intermediate", 1.1],
["long_haul", 1.25]
],
"format": {
"radius_factor": {
"key": "radius_factor",
"label": "Radius of operation factor",
"exp": "collection.filter(radius_value=={{radius}}).map(radius_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Hazardous goods increase the severity of an accident; refrigerated loads add breakdown exposure.
{
"id": "cargo_rates",
"key": "cargo_rates",
"step": "collection",
"name": "Cargo type factor",
"retain": true,
"collection": [
["cargo_type_value", "cargo_factor_rel"],
["general", 1],
["refrigerated", 1.08],
["hazardous", 1.35]
],
"format": {
"cargo_factor": {
"key": "cargo_factor",
"label": "Cargo type factor",
"exp": "collection.filter(cargo_type_value=={{cargo_type}}).map(cargo_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Sum of vehicle bases × state factor × fleet-experience × safety factor, plus $200 policy fee. Multiplied by the telematics factor, radius of operation factor, cargo type factor.
{
"id": "policy_premium",
"key": "policy_premium",
"step": "calculation",
"name": "Fleet policy premium",
"def": 0,
"formula": "round(({{vehicle_base_total}} * {{state_auto_factor}} * {{fleet_experience_calc}} * {{safety_factor}} * {{telematics_factor}} * {{radius_factor}} * {{cargo_factor}}) + 200, 2)"
}Decline empty fleets or fleets larger than 200 vehicles (outside standard commercial appetite).
{
"id": "auto_exclusions",
"key": "auto_exclusions",
"step": "exclusion",
"name": "Commercial auto exclusions",
"def": false,
"items": [
{
"id": "no_vehicles",
"name": "No vehicles supplied",
"exp": "{{vehicle_count}} == 0",
"def": false
},
{
"id": "very_large_fleet",
"name": "Fleet over 200 vehicles",
"exp": "{{vehicle_count}} > 200",
"def": false
}
]
}Refer larger fleets (50+ vehicles) and fleets with recent losses (claim-free years = 0) for underwriter review.
{
"id": "auto_refers",
"key": "auto_refers",
"step": "refer",
"name": "Commercial auto refers",
"def": false,
"items": [
{
"id": "large_fleet",
"name": "50+ vehicles",
"exp": "{{vehicle_count}} >= 50",
"def": false
},
{
"id": "recent_losses",
"name": "No claim-free years",
"exp": "{{fleet_years_claim_free}} == 0 && {{vehicle_count}} >= 5",
"def": false
}
]
}This quote was priced by the Ptally rating engine. The trace below follows it through every step to the final result.
{
"state": "TX",
"fleet_years_claim_free": 3,
"safety_program": true,
"vehicles": [
{
"class": "light_truck",
"radius": "local",
"gvw_lbs": 8500
},
{
"class": "light_truck",
"radius": "local",
"gvw_lbs": 9000
},
{
"class": "light_truck",
"radius": "local",
"gvw_lbs": 10000
}
],
"telematics": true,
"radius": "long_haul",
"cargo_type": "refrigerated"
}state_auto_factor = 1max(1 - (3 * 0.03), 0.75) = 0.91true == true ? 0.95 : 1.00 → 0.95Item 1 {"class":"light_truck","radius":"local","gvw_lbs":8500} → 1,200Item 2 {"class":"light_truck","radius":"local","gvw_lbs":9000} → 1,200Item 3 {"class":"light_truck","radius":"local","gvw_lbs":10000} → 1,200vehicle_base_total = 3,600 · vehicle_count = 3telematics_factor = 0.92radius_factor = 1.25cargo_factor = 1.08round((3,600 * 1 * 0.91 * 0.95 * 0.92 * 1.25 * 1.08) + 200, 2) = 4,065.35No vehicles supplied: not firedFleet over 200 vehicles: not fired50+ vehicles: not firedNo claim-free years: not firedSelect commercial auto fleet as the default model for a new project, then change the rates, rules and tests to match your product. Our consultants can do this for you, with no implementation fee.