A single-property home model pricing buildings and contents separately by region and construction.
Home insurance covers the structure of a property (buildings) and the owner's belongings (contents). The main drivers of cost are where the property is, how it is built, what it would cost to rebuild and the value of the contents.
Buildings and contents are priced separately, each as a rate per £1,000 of sum insured. The buildings premium uses the rebuild cost, a regional rate and a construction factor. The contents premium uses the contents sum insured and a regional contents rate.
The two premiums are added together and a flat policy fee is applied. Properties in high-risk flood zones are declined, and high rebuild costs or non-standard construction are referred.
Three further factors adjust the combined premium: the age of the property, the security fitted and the number of claims in the last five years.
| Field | Label | Type | Default | Allowed values |
|---|---|---|---|---|
region | Region | string | south_east | south_east, greater_london, north_west, scotland, wales |
construction | Construction type | string | brick | brick, stone, timber_frame, non_standard |
rebuild_cost | Rebuild cost (£) | integer | 250000 | 150000, 250000, 400000, 750000 |
contents_sum_insured | Contents sum insured (£) | integer | 50000 | 25000, 50000, 100000, 150000 |
flood_zone | In an Environment Agency high-risk flood zone | boolean | false | false, true |
property_age | Property age | string | built_1945_1999 | built_before_1900, built_1900_1944, built_1945_1999, built_2000_onwards |
home_security | Security | string | standard_locks | none, standard_locks, alarm, monitored_alarm |
claims_5y | Claims in the last 5 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.
Look up buildings and contents base rates per £1000 sum insured by region.
{
"id": "region_rates",
"key": "region_rates",
"step": "collection",
"name": "Regional rate lookup",
"retain": true,
"collection": [
["region", "buildings_rate_per_k", "contents_rate_per_k"],
["south_east", 1.8, 3.2],
["greater_london", 2.6, 4.4],
["north_west", 1.5, 2.8],
["scotland", 1.35, 2.6],
["wales", 1.45, 2.9]
],
"format": {
"region_buildings_rate": {
"key": "region_buildings_rate",
"label": "Regional buildings rate per £1000",
"exp": "collection.filter(region=={{region}}).map(buildings_rate_per_k).first()",
"type": "decimal",
"def": 1.8
},
"region_contents_rate": {
"key": "region_contents_rate",
"label": "Regional contents rate per £1000",
"exp": "collection.filter(region=={{region}}).map(contents_rate_per_k).first()",
"type": "decimal",
"def": 3.2
}
}
}Load or discount by construction type. Non-standard construction attracts a heavy load.
{
"id": "construction_rates",
"key": "construction_rates",
"step": "collection",
"name": "Construction factor lookup",
"retain": true,
"collection": [
["construction", "construction_factor"],
["brick", 1],
["stone", 1.05],
["timber_frame", 1.2],
["non_standard", 1.75]
],
"format": {
"construction_factor": {
"key": "construction_factor",
"label": "Construction factor",
"exp": "collection.filter(construction=={{construction}}).map(construction_factor).first()",
"type": "decimal",
"def": 1
}
}
}Rebuild cost in thousands × regional rate × construction factor.
{
"id": "buildings_premium",
"key": "buildings_premium",
"step": "calculation",
"name": "Buildings premium",
"def": 0,
"formula": "round(({{rebuild_cost}} / 1000) * {{region_buildings_rate}} * {{construction_factor}}, 2)"
}Contents sum insured in thousands × regional contents rate.
{
"id": "contents_premium",
"key": "contents_premium",
"step": "calculation",
"name": "Contents premium",
"def": 0,
"formula": "round(({{contents_sum_insured}} / 1000) * {{region_contents_rate}}, 2)"
}Sum buildings + contents into a single gross premium visible to downstream steps.
{
"id": "gross_premium",
"key": "gross_premium",
"step": "transform",
"name": "Gross premium components",
"retain": true,
"format": {
"gross_premium": {
"key": "gross_premium",
"label": "Gross premium",
"exp": "{{buildings_premium}} + {{contents_premium}}",
"type": "decimal",
"def": 0
}
}
}Older properties cost more to repair and are more prone to escape of water and subsidence claims.
{
"id": "property_age_rates",
"key": "property_age_rates",
"step": "collection",
"name": "Property age factor",
"retain": true,
"collection": [
["property_age_value", "property_age_factor_rel"],
["built_before_1900", 1.15],
["built_1900_1944", 1.08],
["built_1945_1999", 1],
["built_2000_onwards", 0.95]
],
"format": {
"property_age_factor": {
"key": "property_age_factor",
"label": "Property age factor",
"exp": "collection.filter(property_age_value=={{property_age}}).map(property_age_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Better security reduces theft claims. A monitored alarm earns the largest credit.
{
"id": "home_security_rates",
"key": "home_security_rates",
"step": "collection",
"name": "Security factor",
"retain": true,
"collection": [
["home_security_value", "home_security_factor_rel"],
["none", 1.1],
["standard_locks", 1],
["alarm", 0.95],
["monitored_alarm", 0.9]
],
"format": {
"home_security_factor": {
"key": "home_security_factor",
"label": "Security factor",
"exp": "collection.filter(home_security_value=={{home_security}}).map(home_security_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": "home_claims_rates",
"key": "home_claims_rates",
"step": "collection",
"name": "Claims history load",
"retain": true,
"collection": [
["claims_5y_min", "claims_5y_max", "home_claims_factor_rel"],
[0, 0, 1],
[1, 1, 1.15],
[2, 2, 1.3],
[3, 99, 1.5]
],
"format": {
"home_claims_factor": {
"key": "home_claims_factor",
"label": "Claims history load",
"exp": "collection.filter(claims_5y_min<={{claims_5y}}).filter(claims_5y_max>={{claims_5y}}).map(home_claims_factor_rel).first()",
"type": "decimal",
"def": 1
}
}
}Add a flat £45 policy fee to the gross premium. Multiplied by the property age factor, security factor, claims history load.
{
"id": "final_premium",
"key": "final_premium",
"step": "calculation",
"name": "Final premium",
"def": 0,
"formula": "round({{gross_premium}} * {{property_age_factor}} * {{home_security_factor}} * {{home_claims_factor}} + 45, 2)"
}Decline properties in high-risk flood zones.
{
"id": "home_exclusions",
"key": "home_exclusions",
"step": "exclusion",
"name": "Home exclusions",
"def": false,
"items": [
{
"id": "flood_zone_property",
"name": "Property in high-risk flood zone",
"exp": "{{flood_zone}} == true",
"def": false
}
]
}Refer high-value rebuild costs or non-standard construction for underwriter review.
{
"id": "home_refers",
"key": "home_refers",
"step": "refer",
"name": "Home refers",
"def": false,
"items": [
{
"id": "high_value_rebuild",
"name": "Rebuild cost over £500k",
"exp": "{{rebuild_cost}} > 500000",
"def": false
},
{
"id": "non_standard_construction",
"name": "Non-standard construction",
"exp": "{{construction}} == 'non_standard'",
"def": false
}
]
}This quote was priced by the Ptally rating engine. The trace below follows it through every step to the final result.
{
"region": "south_east",
"construction": "brick",
"rebuild_cost": 250000,
"contents_sum_insured": 40000,
"flood_zone": false,
"property_age": "built_before_1900",
"home_security": "monitored_alarm",
"claims_5y": 1
}region_buildings_rate = 1.8 · region_contents_rate = 3.2construction_factor = 1round((250,000 / 1000) * 1.8 * 1, 2) = 450round((40,000 / 1000) * 3.2, 2) = 128450 + 128 → 578property_age_factor = 1.15home_security_factor = 0.9home_claims_factor = 1.15round(578 * 1.15 * 0.9 * 1.15 + 45, 2) = 732.96Property in high-risk flood zone: not firedRebuild cost over £500k: not firedNon-standard construction: not firedSelect home buildings and contents 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.