Inland marine

A coverage-type rated inland marine model for contractors' equipment, fine art and cargo.

A default model in Ptally. Commercial Inland Marine: Contractors Equipment / Fine Art / Cargo 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

Inland marine

Inland marine covers property that moves or is unusual to insure, such as contractors' equipment, fine art and goods in transit. Each coverage type has its own risk profile, so it is the main rating driver.

Methodology

How the model rates

A base rate per $1,000 of sum insured is looked up by coverage type, then adjusted for the state and the chosen deductible. A policy fee is added.

Fine art over $500,000 without a current appraisal is declined. Very large sums insured and high-theft cargo exposures are referred.

Three further factors adjust the premium: how the property is stored, how far it travels and recent claims.

8inputs
10steps
6lookup tables
6tests

Inputs

8 fields
FieldLabelTypeDefaultAllowed values
coverage_typeCoverage typestringcontractor_equipmentcontractor_equipment, fine_art, cargo, edp
stateStatestringCACA, NY, TX, FL, IL
sum_insuredSum insured ($)integer25000050000, 250000, 1000000, 3000000
deductibleDeductible ($)integer1000500, 1000, 2500, 5000, 10000
has_appraisalFine-art appraisal on filebooleantruetrue, false
storage_securityStorage securitystringstandardsecure_yard, standard, unsecured
transit_radiusTransit radiusstringlocallocal, regional, national
claims_3yClaims in the last 3 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
Coverage type rate lookup

Base rate per $1000 sum insured by IM coverage type.

{
  "id": "coverage_rates",
  "key": "coverage_rates",
  "step": "collection",
  "name": "Coverage type rate lookup",
  "retain": true,
  "collection": [
    ["coverage_type", "coverage_rate_per_k"],
    ["contractor_equipment", 6.2],
    ["fine_art", 4.8],
    ["cargo", 8.5],
    ["edp", 5.4]
  ],
  "format": {
    "coverage_rate_per_k": {
      "key": "coverage_rate_per_k",
      "label": "Coverage type rate per $1000",
      "exp": "collection.filter(coverage_type=={{coverage_type}}).map(coverage_rate_per_k).first()",
      "type": "decimal",
      "def": 6
    }
  }
}
02Lookup table
State IM factor

Regional load: coastal / high-theft states carry a load.

{
  "id": "state_im_rates",
  "key": "state_im_rates",
  "step": "collection",
  "name": "State IM factor",
  "retain": true,
  "collection": [
    ["state", "state_im_factor"],
    ["CA", 1.1],
    ["NY", 1.15],
    ["TX", 1],
    ["FL", 1.2],
    ["IL", 1]
  ],
  "format": {
    "state_im_factor": {
      "key": "state_im_factor",
      "label": "State IM factor",
      "exp": "collection.filter(state=={{state}}).map(state_im_factor).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
03Lookup table
Deductible credit

Larger deductibles get larger credits, floored at 0.75.

{
  "id": "deductible_rates",
  "key": "deductible_rates",
  "step": "collection",
  "name": "Deductible credit",
  "retain": true,
  "collection": [
    ["deductible_max", "deductible_factor"],
    [500, 1.05],
    [1000, 1],
    [2500, 0.92],
    [5000, 0.85],
    [100000, 0.75]
  ],
  "format": {
    "deductible_factor": {
      "key": "deductible_factor",
      "label": "Deductible factor",
      "exp": "collection.filter(deductible_max>={{deductible}}).map(deductible_factor).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
04Lookup table
Storage security factor

Property kept in a secure, monitored location is far less likely to be stolen.

{
  "id": "storage_rates",
  "key": "storage_rates",
  "step": "collection",
  "name": "Storage security factor",
  "retain": true,
  "collection": [
    ["storage_security_value", "storage_factor_rel"],
    ["secure_yard", 0.92],
    ["standard", 1],
    ["unsecured", 1.2]
  ],
  "format": {
    "storage_factor": {
      "key": "storage_factor",
      "label": "Storage security factor",
      "exp": "collection.filter(storage_security_value=={{storage_security}}).map(storage_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
05Lookup table
Transit radius factor

Property that travels further is exposed to more handling, accidents and theft.

{
  "id": "transit_rates",
  "key": "transit_rates",
  "step": "collection",
  "name": "Transit radius factor",
  "retain": true,
  "collection": [
    ["transit_radius_value", "transit_factor_rel"],
    ["local", 1],
    ["regional", 1.1],
    ["national", 1.25]
  ],
  "format": {
    "transit_factor": {
      "key": "transit_factor",
      "label": "Transit radius factor",
      "exp": "collection.filter(transit_radius_value=={{transit_radius}}).map(transit_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
06Lookup table
Claims history load

Load for claims in recent years. A clean record is neutral; each band of claims adds a larger load.

{
  "id": "im_claims_rates",
  "key": "im_claims_rates",
  "step": "collection",
  "name": "Claims history load",
  "retain": true,
  "collection": [
    ["claims_3y_min", "claims_3y_max", "im_claims_factor_rel"],
    [0, 0, 1],
    [1, 1, 1.15],
    [2, 2, 1.3],
    [3, 99, 1.5]
  ],
  "format": {
    "im_claims_factor": {
      "key": "im_claims_factor",
      "label": "Claims history load",
      "exp": "collection.filter(claims_3y_min<={{claims_3y}}).filter(claims_3y_max>={{claims_3y}}).map(im_claims_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
07Calculation
Gross premium

Sum insured in thousands × coverage rate × state factor × deductible factor. Multiplied by the storage security factor, transit radius factor, claims history load.

{
  "id": "gross_premium_calc",
  "key": "gross_premium_calc",
  "step": "calculation",
  "name": "Gross premium",
  "def": 0,
  "formula": "round(({{sum_insured}} / 1000) * {{coverage_rate_per_k}} * {{state_im_factor}} * {{deductible_factor}} * {{storage_factor}} * {{transit_factor}} * {{im_claims_factor}}, 2)"
}
08Calculation
Policy premium

Add $75 policy fee to gross premium.

{
  "id": "policy_premium",
  "key": "policy_premium",
  "step": "calculation",
  "name": "Policy premium",
  "def": 0,
  "formula": "round({{gross_premium_calc}} + 75, 2)"
}
09Decline rules
Inland marine exclusions

Decline fine art over $500k without a current appraisal on file.

{
  "id": "im_exclusions",
  "key": "im_exclusions",
  "step": "exclusion",
  "name": "Inland marine exclusions",
  "def": false,
  "items": [
    {
      "id": "fine_art_unappraised",
      "name": "High-value fine art without appraisal",
      "exp": "{{coverage_type}} == 'fine_art' && {{sum_insured}} > 500000 && {{has_appraisal}} == false",
      "def": false
    }
  ]
}
10Refer rules
Inland marine refers

Refer very large sum insured or high-theft cargo exposures for underwriter review.

{
  "id": "im_refers",
  "key": "im_refers",
  "step": "refer",
  "name": "Inland marine refers",
  "def": false,
  "items": [
    {
      "id": "large_sum_insured",
      "name": "Sum insured over $2m",
      "exp": "{{sum_insured}} > 2000000",
      "def": false
    },
    {
      "id": "large_cargo",
      "name": "Cargo over $500k",
      "exp": "{{coverage_type}} == 'cargo' && {{sum_insured}} > 500000",
      "def": false
    }
  ]
}
Worked example

Worked example: equipment in a secure yard working regionally

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

Quote input
{
  "coverage_type": "contractor_equipment",
  "state": "CA",
  "sum_insured": 100000,
  "deductible": 1000,
  "has_appraisal": true,
  "storage_security": "secure_yard",
  "transit_radius": "regional",
  "claims_3y": 0
}
Result765.18VALID
Calculation trace
  1. Coverage type rate lookupLookup table
    coverage_rate_per_k = 6.2
  2. State IM factorLookup table
    state_im_factor = 1.1
  3. Deductible creditLookup table
    deductible_factor = 1
  4. Storage security factorLookup table
    storage_factor = 0.92
  5. Transit radius factorLookup table
    transit_factor = 1.1
  6. Claims history loadLookup table
    im_claims_factor = 1
  7. Gross premiumCalculation
    round((100,000 / 1000) * 6.2 * 1.1 * 1 * 0.92 * 1.1 * 1, 2) = 690.18
  8. Policy premiumCalculation
    round(690.18 + 75, 2) = 765.18
  9. Inland marine exclusionsDecline rules
    High-value fine art without appraisal: not fired
  10. Inland marine refersRefer rules
    Sum insured over $2m: not firedCargo over $500k: not fired
Start from this model

Select inland marine 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