A boiler and machinery model rated by equipment type, occupancy, age and inspection status.
Equipment breakdown, also called boiler and machinery, covers sudden mechanical or electrical failure of equipment such as boilers, chillers and production machinery. Inspection and maintenance matter as much as the equipment itself.
A rate per $1,000 of sum insured is looked up by equipment type, then adjusted for occupancy, an age load capped at 40% and a credit for a current jurisdictional inspection. A policy fee and minimum premium are applied.
Old boilers and pressure vessels without a current inspection are declined. Critical infrastructure and high-value equipment are referred for engineering review.
Three further factors adjust the premium: a planned maintenance contract, backup equipment and recent breakdown claims.
| Field | Label | Type | Default | Allowed values |
|---|---|---|---|---|
equipment_type | Primary equipment type | string | hvac | boiler, pressure_vessel, hvac, electrical, production_machinery |
occupancy | Occupancy | string | office | office, retail, manufacturing, hospital, data_center |
sum_insured | Sum insured ($) | integer | 500000 | 100000, 500000, 2500000, 10000000 |
age_years | Equipment age (years) | integer | 5 | 1, 5, 15, 30 |
inspection_current | Jurisdictional inspection current | boolean | true | true, false |
maintenance_contract | Maintenance contract | boolean | false | false, true |
redundancy | Backup equipment | string | none | none, partial, full |
claims_3y | Breakdown claims in the last 3 years | integer | 0 | 0, 1, 2, 3 |
Steps run in order. Each one can use the inputs and the outputs of every step before it.
Rate per $1000 sum insured by equipment type. Boilers and production machinery carry the highest loads.
{
"id": "equipment_rates",
"key": "equipment_rates",
"step": "collection",
"name": "Equipment type base rate",
"retain": true,
"collection": [
["equipment_type", "equipment_rate_per_k"],
["boiler", 1.4],
["pressure_vessel", 1.2],
["hvac", 0.6],
["electrical", 0.8],
["production_machinery", 1.6]
],
"format": {
"equipment_rate_per_k": {
"key": "equipment_rate_per_k",
"label": "Equipment rate per $1000",
"exp": "collection.filter(equipment_type=={{equipment_type}}).map(equipment_rate_per_k).first()",
"type": "decimal",
"def": 1
}
}
}Critical-infrastructure occupancies (hospitals, data centers) attract loads reflecting business-interruption downside.
{
"id": "occupancy_rates",
"key": "occupancy_rates",
"step": "collection",
"name": "Occupancy factor",
"retain": true,
"collection": [
["occupancy", "occupancy_factor", "critical_infrastructure"],
["office", 0.9, false],
["retail", 1, false],
["manufacturing", 1.25, false],
["hospital", 1.6, true],
["data_center", 1.8, true]
],
"format": {
"occupancy_factor": {
"key": "occupancy_factor",
"label": "Occupancy factor",
"exp": "collection.filter(occupancy=={{occupancy}}).map(occupancy_factor).first()",
"type": "decimal",
"def": 1
},
"occupancy_critical": {
"key": "occupancy_critical",
"label": "Critical infrastructure flag",
"exp": "collection.filter(occupancy=={{occupancy}}).map(critical_infrastructure).first()",
"type": "boolean",
"def": false
}
}
}1% load per year of age, capped at 40%.
{
"id": "age_calc",
"key": "age_calc",
"step": "calculation",
"name": "Equipment age load",
"def": 1,
"formula": "min(1 + ({{age_years}} * 0.01), 1.40)"
}5% credit when jurisdictional inspection is current.
{
"id": "inspection_factor",
"key": "inspection_factor",
"step": "transform",
"name": "Inspection credit",
"retain": true,
"format": {
"inspection_factor": {
"key": "inspection_factor",
"label": "Inspection factor",
"exp": "{{inspection_current}} == true ? 0.95 : 1.00",
"type": "decimal",
"def": 1
}
}
}Planned maintenance by a specialist contractor reduces the chance of a breakdown.
{
"id": "maintenance_rates",
"key": "maintenance_rates",
"step": "collection",
"name": "Maintenance contract factor",
"retain": true,
"collection": [
["maintenance_contract_value", "maintenance_factor_rel"],
[false, 1],
[true, 0.93]
],
"format": {
"maintenance_factor": {
"key": "maintenance_factor",
"label": "Maintenance contract factor",
"exp": "collection.filter(maintenance_contract_value=={{maintenance_contract}}).map(maintenance_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Backup equipment reduces business interruption when a unit fails.
{
"id": "redundancy_rates",
"key": "redundancy_rates",
"step": "collection",
"name": "Redundancy factor",
"retain": true,
"collection": [
["redundancy_value", "redundancy_factor_rel"],
["none", 1],
["partial", 0.95],
["full", 0.88]
],
"format": {
"redundancy_factor": {
"key": "redundancy_factor",
"label": "Redundancy factor",
"exp": "collection.filter(redundancy_value=={{redundancy}}).map(redundancy_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Load for claims in recent years. A clean record is neutral; each band of claims adds a larger load.
{
"id": "eb_claims_rates",
"key": "eb_claims_rates",
"step": "collection",
"name": "Claims history load",
"retain": true,
"collection": [
["claims_3y_min", "claims_3y_max", "eb_claims_factor_rel"],
[0, 0, 1],
[1, 1, 1.15],
[2, 2, 1.3],
[3, 99, 1.5]
],
"format": {
"eb_claims_factor": {
"key": "eb_claims_factor",
"label": "Claims history load",
"exp": "collection.filter(claims_3y_min<={{claims_3y}}).filter(claims_3y_max>={{claims_3y}}).map(eb_claims_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Sum insured in thousands × equipment rate × occupancy × age × inspection. Multiplied by the maintenance contract factor, redundancy factor, claims history load.
{
"id": "base_premium",
"key": "base_premium",
"step": "calculation",
"name": "Base premium",
"def": 0,
"formula": "round(({{sum_insured}} / 1000) * {{equipment_rate_per_k}} * {{occupancy_factor}} * {{age_calc}} * {{inspection_factor}} * {{maintenance_factor}} * {{redundancy_factor}} * {{eb_claims_factor}}, 2)"
}Add $150 policy fee. Minimum premium is $500.
{
"id": "policy_premium",
"key": "policy_premium",
"step": "calculation",
"name": "Policy premium",
"def": 0,
"formula": "round(max({{base_premium}} + 150, 500), 2)"
}Decline old boilers/pressure vessels without a current jurisdictional inspection: regulatory and loss-control concerns.
{
"id": "eb_exclusions",
"key": "eb_exclusions",
"step": "exclusion",
"name": "Equipment breakdown exclusions",
"def": false,
"items": [
{
"id": "old_boiler_no_inspection",
"name": "Old boiler/pressure vessel without inspection",
"exp": "({{equipment_type}} == 'boiler' || {{equipment_type}} == 'pressure_vessel') && {{age_years}} > 20 && {{inspection_current}} == false",
"def": false
}
]
}Refer critical infrastructure and high-value equipment for engineering review.
{
"id": "eb_refers",
"key": "eb_refers",
"step": "refer",
"name": "Equipment breakdown refers",
"def": false,
"items": [
{
"id": "critical_infra",
"name": "Critical infrastructure occupancy",
"exp": "{{occupancy_critical}} == true",
"def": false
},
{
"id": "high_value",
"name": "Sum insured over $5m",
"exp": "{{sum_insured}} > 5000000",
"def": false
}
]
}This quote was priced by the Ptally rating engine. The trace below follows it through every step to the final result.
{
"equipment_type": "hvac",
"occupancy": "office",
"sum_insured": 2500000,
"age_years": 2,
"inspection_current": true,
"maintenance_contract": true,
"redundancy": "full",
"claims_3y": 1
}equipment_rate_per_k = 0.6occupancy_factor = 0.9 · occupancy_critical = falsemin(1 + (2 * 0.01), 1.40) = 1.02true == true ? 0.95 : 1.00 → 0.95maintenance_factor = 0.93redundancy_factor = 0.88eb_claims_factor = 1.15round((2,500,000 / 1000) * 0.6 * 0.9 * 1.02 * 0.95 * 0.93 * 0.88 * 1.15, 2) = 1,231.18round(max(1,231.18 + 150, 500), 2) = 1,381.18Old boiler/pressure vessel without inspection: not firedCritical infrastructure occupancy: not firedSum insured over $5m: not firedSelect equipment breakdown 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.