offdataai
Insurance · data model template

P&C Insurance Analytics data model

Kimball warehouse for P&C insurance: premium transactions, monthly in-force policy snapshots, an accumulating claim snapshot, and claim payments over conformed policy, policyholder, coverage, peril, and agent dimensions.

Property & casualty insurance analytics: the policy lifecycle, premium transactions (written/earned), monthly in-force snapshots, and claims with peril and coverage detail — a Kimball star schema with conformed policy, policyholder, coverage, and agent dimensions supporting loss ratio, earned premium, and reserve analysis. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballInsuranceGDPRNAIC
12
tables
98
columns
18
relationships
10
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Databricks). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

premiumclaimsconformed_dimensions

Design decisions

  • Written vs earned premium as transaction + snapshot

    Written premium is transactional; earned premium accrues over time and needs a monthly in-force snapshot to report correctly.

  • Accumulating snapshot for claims

    A claim moves FNOL → open → settled with reserve and paid amounts that evolve; an accumulating snapshot captures the milestones and lag.

Tables in the P&C Insurance Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (4)

fct_premium_transaction

Grain: one row per premium transaction

ColumnTypeKeys
premium_transaction_keybigintPK
date_keybigint
policy_keybigint
policyholder_keybigint
coverage_keybigint
agent_keybigint
transaction_typevarchar
premium_amountdecimal
commission_amountdecimal
tax_amountdecimal

fct_policy_snapshot

Grain: one row per policy per month (periodic snapshot)

Monthly in-force snapshot for earned-premium reporting.

ColumnTypeKeys
date_keybigint
policy_keybigint
policyholder_keybigint
in_force_flagboolean
written_premiumdecimal
earned_premiumdecimal
unearned_premiumdecimal
exposure_countinteger

fct_claim

Grain: one row per claim (accumulating snapshot)

Accumulating snapshot through the claim lifecycle.

ColumnTypeKeys
claim_keybigintPK
loss_date_keybigint
report_date_keybigint
policy_keybigint
policyholder_keybigint
coverage_keybigint
peril_keybigint
status_keybigint
insured_asset_keybigint
claim_numbervarchar
claim_amountdecimal
paid_amountdecimal
reserve_amountdecimal
deductible_amountdecimal
salvage_amountdecimal
is_litigatedboolean
is_catastropheboolean

fct_claim_payment

Grain: one row per claim payment

ColumnTypeKeys
claim_payment_keybigintPK
date_keybigint
policyholder_keybigint
claim_numbervarchar
payment_typevarchar
payment_amountdecimal
payee_typevarchar

Dimension tables (6)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
month_numbersmallint
quartersmallint
yearsmallint

dim_policyholder

Grain: one row per policyholder per SCD2 version

SCD type 2

ColumnTypeKeys
policyholder_keybigintPK
policyholder_idvarcharBK
first_namevarcharPII
last_namevarcharPII
date_of_birthdatePII
emailvarcharPII
phonevarcharPII
address_line1varcharPII
cityvarchar
statevarchar
postal_codevarcharPII
credit_tiervarchar
customer_since_datedate

dim_policy

Grain: one row per policy per SCD2 version

SCD type 2

ColumnTypeKeys
policy_keybigintPK
policy_numbervarcharBK
line_of_businessvarchar
product_namevarchar
agent_keybigint
effective_datedate
expiration_datedate
policy_statusvarchar
payment_planvarchar

dim_coverage

Grain: one row per coverage type

ColumnTypeKeys
coverage_keybigintPK
coverage_codevarcharBK
coverage_namevarchar
limit_amountdecimal
deductible_amountdecimal

dim_agent

Grain: one row per agent

ColumnTypeKeys
agent_keybigintPK
agent_idvarcharBK
agent_namevarcharPII
agency_namevarchar
license_numbervarchar
regionvarchar

dim_insured_asset

Grain: one row per insured asset (vehicle/property)

ColumnTypeKeys
insured_asset_keybigintPK
asset_idvarcharBK
asset_typevarchar
vinvarcharPII
makevarchar
modelvarchar
model_yearsmallint
property_addressvarcharPII
construction_typevarchar
year_builtsmallint
insured_valuedecimal

Lookup tables (2)

dim_peril

Grain: one row per peril

ColumnTypeKeys
peril_keybigintPK
peril_codevarcharBK
peril_namevarchar
peril_categoryvarchar

dim_claim_status

Grain: one row per claim status

ColumnTypeKeys
status_keybigintPK
status_codevarcharBK
status_namevarchar

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • dim_policy.agent_key → dim_agent (many-to-one)
  • fct_premium_transaction.date_key → dim_date (many-to-one)
  • fct_premium_transaction.policy_key → dim_policy (many-to-one)
  • fct_premium_transaction.policyholder_key → dim_policyholder (many-to-one)
  • fct_premium_transaction.coverage_key → dim_coverage (many-to-one)
  • fct_premium_transaction.agent_key → dim_agent (many-to-one)
  • fct_policy_snapshot.date_key → dim_date (many-to-one)
  • fct_policy_snapshot.policy_key → dim_policy (many-to-one)
  • fct_policy_snapshot.policyholder_key → dim_policyholder (many-to-one)
  • fct_claim.loss_date_key → dim_date (many-to-one)
  • fct_claim.policy_key → dim_policy (many-to-one)
  • fct_claim.policyholder_key → dim_policyholder (many-to-one)
  • fct_claim.coverage_key → dim_coverage (many-to-one)
  • fct_claim.peril_key → dim_peril (many-to-one)
  • fct_claim.status_key → dim_claim_status (many-to-one)
  • fct_claim.insured_asset_key → dim_insured_asset (many-to-one)
  • fct_claim_payment.date_key → dim_date (many-to-one)
  • fct_claim_payment.policyholder_key → dim_policyholder (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time