Home buildings and contents

A single-property home model pricing buildings and contents separately by region and construction.

A default model in Ptally. Personal Home: Buildings & Contents is one of the default models you can select when you start a new project in Ptally. It comes with its rate tables, rules and 6 tests, ready to adapt to your own product.
The line of business

Home buildings and contents

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.

Methodology

How the model rates

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.

8inputs
11steps
5lookup tables
6tests

Inputs

8 fields
FieldLabelTypeDefaultAllowed values
regionRegionstringsouth_eastsouth_east, greater_london, north_west, scotland, wales
constructionConstruction typestringbrickbrick, stone, timber_frame, non_standard
rebuild_costRebuild cost (£)integer250000150000, 250000, 400000, 750000
contents_sum_insuredContents sum insured (£)integer5000025000, 50000, 100000, 150000
flood_zoneIn an Environment Agency high-risk flood zonebooleanfalsefalse, true
property_ageProperty agestringbuilt_1945_1999built_before_1900, built_1900_1944, built_1945_1999, built_2000_onwards
home_securitySecuritystringstandard_locksnone, standard_locks, alarm, monitored_alarm
claims_5yClaims in the last 5 yearsinteger00, 1, 2, 3
The model

Step by step

Steps run in order. Each one can use the inputs and the outputs of every step before it.

01Lookup table
Regional rate lookup

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
    }
  }
}
02Lookup table
Construction factor lookup

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
    }
  }
}
03Calculation
Buildings premium

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)"
}
04Calculation
Contents premium

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)"
}
05Transform
Gross premium components

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
    }
  }
}
06Lookup table
Property age factor

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
    }
  }
}
07Lookup table
Security factor

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
    }
  }
}
08Lookup table
Claims history load

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
    }
  }
}
09Calculation
Final premium

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)"
}
10Decline rules
Home exclusions

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
    }
  ]
}
11Refer rules
Home refers

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
    }
  ]
}
Worked example

Worked example: Victorian house with a monitored alarm and one claim

This quote was priced by the Ptally rating engine. The trace below follows it through every step to the final result.

Quote input
{
  "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
}
Result732.96VALID
Calculation trace
  1. Regional rate lookupLookup table
    region_buildings_rate = 1.8 · region_contents_rate = 3.2
  2. Construction factor lookupLookup table
    construction_factor = 1
  3. Buildings premiumCalculation
    round((250,000 / 1000) * 1.8 * 1, 2) = 450
  4. Contents premiumCalculation
    round((40,000 / 1000) * 3.2, 2) = 128
  5. Gross premium componentsTransform
    450 + 128 → 578
  6. Property age factorLookup table
    property_age_factor = 1.15
  7. Security factorLookup table
    home_security_factor = 0.9
  8. Claims history loadLookup table
    home_claims_factor = 1.15
  9. Final premiumCalculation
    round(578 * 1.15 * 0.9 * 1.15 + 45, 2) = 732.96
  10. Home exclusionsDecline rules
    Property in high-risk flood zone: not fired
  11. Home refersRefer rules
    Rebuild cost over £500k: not firedNon-standard construction: not fired
Start from this model

Select 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.

Talk to our team