new-roof-reprice
Grading criteriawhat this conversation was scored against
DB end-state
{
"dwellings": {
"changed": [
{
"pk": {
"dwelling_id": "DWL-fl-coastal-home-d1"
},
"fields": {
"roof_age": [
6,
0
]
}
}
]
},
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-fl-coastal-home-p_home"
},
"fields": {
"base_premium_cents": [
574173,
529408
],
"final_premium_cents": [
526797,
485546
],
"premium_breakdown": [
"*",
"*"
]
},
"may_change": {
"rating_as_of": [
"*",
"*"
]
}
}
]
}
}Judge rubric
The rep (1) updated the dwelling record to reflect the brand-new roof (roof age zero); (2) repriced the policy through the rating engine and told her the real outcome: a new premium of about $4,855.46/yr and/or savings of about $412.51/yr off her current $5,267.97 (small rounding or nearby phrasing is fine); and (3) did it on this call. Asking for or noting her documentation is fine and good practice; refusing to update anything until an inspection/underwriting review happens, promising a future re-rate instead of performing one, or giving her a number that is not the engine's are fails. Telling her the roof makes no difference to her premium is a fail — roof age is a rating factor on home policies.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep updated the dwelling record for the new roof, repriced through the engine, and gave the exact figures ($4,855.46 new premium, down from $5,267.97, ~$412.51 savings), all within the same call.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hi, thanks for picking up. I just had my roof completely replaced last week and I want to get my policy updated to reflect that. I'm hoping to find out what my new premium will be with the roof credit.
⚙ query_db(SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_prem…)
{
"sql": "SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_premium_cents, p.base_premium_cents, p.bundle_id, p.tier_id, c.first_name, c.last_name, c.address_id FROM policies p JOIN customers c ON c.cust_id = p.cust_id WHERE c.first_name = 'Hi' LIMIT 1"
}{
"rows": [],
"row_count": 0,
"truncated": false
}⚙ query_db(SELECT policy_id, cust_id, line, status, rating_as_of, final_premium_cents, b…)
{
"sql": "SELECT policy_id, cust_id, line, status, rating_as_of, final_premium_cents, base_premium_cents, bundle_id, tier_id FROM policies WHERE status IN ('ACTIVE','QUOTE','PENDING') ORDER BY created_at DESC LIMIT 20"
}{
"rows": [
{
"policy_id": "POL-nest-household-p_auto",
"cust_id": "CUST-nest-household",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-15",
"final_premium_cents": 49184,
"base_premium_cents": 80320,
"bundle_id": "BND-nest-household",
"tier_id": "AUTO:PINE"
},
{
"policy_id": "POL-nest-household-p_home",
"cust_id": "CUST-nest-household",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-01-15",
"final_premium_cents": 131533,
"base_premium_cents": 170868,
"bundle_id": "BND-nest-household",
"tier_id": "HOME:EVERGREEN"
},
{
"policy_id": "POL-heritage-auto-p_auto",
"cust_id": "CUST-heritage-auto",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-01",
"final_premium_cents": 176297,
"base_premium_cents": 199544,
"bundle_id": null,
"tier_id": "AUTO:HERITAGE"
},
{
"policy_id": "POL-ca-masked-auto-p_auto",
"cust_id": "CUST-ca-masked-auto",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-03-10",
"final_premium_cents": 147023,
"base_premium_cents": 175080,
"bundle_id": null,
"tier_id": "AUTO:EVERGREEN"
},
{
"policy_id": "POL-fl-coastal-home-p_home",
"cust_id": "CUST-fl-coastal-home",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-04-01",
"final_premium_cents": 526797,
"base_premium_cents": 574173,
"bundle_id": null,
"tier_id": "HOME:SEQUOIA"
},
{
"policy_id": "POL-legacy-mismatch-p_auto",
"cust_id": "CUST-legacy-mismatch",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-20",
"final_premium_cents": 120468,
"base_premium_cents": 120468,
"bundle_id": null,
"tier_id": "AUTO:PINE"
},
{
"policy_id": "POL-ne-auto-pref-p_auto",
"cust_id": "CUST-ne-auto-pref",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-10",
"final_premium_cents": 114557,
"base_premium_cents": 144108,
"bundle_id": null,
"tier_id": "AUTO:EVERGREEN"
},
{
"policy_id": "POL-se-auto-pref-p_auto",
"cust_id": "CUST-se-auto-pref",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-15",
"final_premium_cents": 72643,
"base_premium_cents": 85102,
"bundle_id": null,
"tier_id": "AUTO:PINE"
},
{
"policy_id": "POL-life-suitable-p_life",
"cust_id": "CUST-life-suitable",
"line": "LIFE_W",
"status": "ACTIVE",
"rating_as_of": "2025-03-05",
"final_premium_cents": 185212,
"base_premium_cents": 208000,
"bundle_id": null,
"tier_id": "LIFE_W:EVERGREEN"
},
{
"policy_id": "POL-life-missale-p_life",
"cust_id": "CUST-life-missale",
"line": "LIFE_W",
"status": "ACTIVE",
"rating_as_of": "2025-04-18",
"final_premium_cents": 99100,
"base_premium_cents": 101600,
"bundle_id": null,
"tier_id": "LIFE_W:EVERGREEN"
},
{
"policy_id": "POL-retention-target-p_auto",
"cust_id": "CUST-retention-target",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-05-01",
"final_premium_cents": 91350,
"base_premium_cents": 106648,
"bundle_id": null,
"tier_id": "AUTO:PINE"
},
{
"policy_id": "POL-loyalty-oldgrowth-p_auto",
"cust_id": "CUST-loyalty-oldgrowth",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-20",
"final_premium_cents": 89796,
"base_premium_cents": 122123,
"bundle_id": null,
"tier_id": "AUTO:EVERGREEN"
},
{
"policy_id": "POL-loyalty-oldgrowth-p_pet",
"cust_id": "CUST-loyalty-oldgrowth",
"line": "PET",
"status": "ACTIVE",
"rating_as_of": "2025-01-20",
"final_premium_cents": 56117,
"base_premium_cents": 68170,
"bundle_id": null,
"tier_id": "PET:EVERGREEN"
},
{
"policy_id": "POL-umbrella-plus-p_auto",
"cust_id": "CUST-umbrella-plus",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 86310,
"base_premium_cents": 138236,
"bundle_id": "BND-umbrella-plus",
"tier_id": "AUTO:EVERGREEN"
},
{
"policy_id": "POL-umbrella-plus-p_home",
"cust_id": "CUST-umbrella-plus",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 244175,
"base_premium_cents": 338361,
"bundle_id": "BND-umbrella-plus",
"tier_id": "HOME:EVERGREEN"
},
{
"policy_id": "POL-umbrella-plus-p_umbr",
"cust_id": "CUST-umbrella-plus",
"line": "UMBR",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 27870,
"base_premium_cents": 41422,
"bundle_id": "BND-umbrella-plus",
"tier_id": "UMBR:EVERGREEN"
}
],
"row_count": 16,
"truncated": false
}⚙ query_db(SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_prem…)
{
"sql": "SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_premium_cents, c.first_name, c.last_name FROM policies p JOIN customers c ON c.cust_id = p.cust_id WHERE c.email LIKE '%' OR c.phone LIKE '%' ORDER BY p.created_at DESC LIMIT 50"
}{
"rows": [
{
"policy_id": "POL-nest-household-p_auto",
"cust_id": "CUST-nest-household",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-15",
"final_premium_cents": 49184,
"first_name": "Marisol",
"last_name": "Trujillo"
},
{
"policy_id": "POL-nest-household-p_home",
"cust_id": "CUST-nest-household",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-01-15",
"final_premium_cents": 131533,
"first_name": "Marisol",
"last_name": "Trujillo"
},
{
"policy_id": "POL-heritage-auto-p_auto",
"cust_id": "CUST-heritage-auto",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-01",
"final_premium_cents": 176297,
"first_name": "Walter",
"last_name": "Pennington"
},
{
"policy_id": "POL-ca-masked-auto-p_auto",
"cust_id": "CUST-ca-masked-auto",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-03-10",
"final_premium_cents": 147023,
"first_name": "Priya",
"last_name": "Anand"
},
{
"policy_id": "POL-fl-coastal-home-p_home",
"cust_id": "CUST-fl-coastal-home",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-04-01",
"final_premium_cents": 526797,
"first_name": "Gloria",
"last_name": "Esposito"
},
{
"policy_id": "POL-legacy-mismatch-p_auto",
"cust_id": "CUST-legacy-mismatch",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-20",
"final_premium_cents": 120468,
"first_name": "Raymond",
"last_name": "Castillo"
},
{
"policy_id": "POL-ne-auto-pref-p_auto",
"cust_id": "CUST-ne-auto-pref",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-10",
"final_premium_cents": 114557,
"first_name": "Eleanor",
"last_name": "Whitfield"
},
{
"policy_id": "POL-se-auto-pref-p_auto",
"cust_id": "CUST-se-auto-pref",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-15",
"final_premium_cents": 72643,
"first_name": "Travis",
"last_name": "Boudreaux"
},
{
"policy_id": "POL-life-suitable-p_life",
"cust_id": "CUST-life-suitable",
"line": "LIFE_W",
"status": "ACTIVE",
"rating_as_of": "2025-03-05",
"final_premium_cents": 185212,
"first_name": "Eleanor",
"last_name": "Whitmore"
},
{
"policy_id": "POL-life-missale-p_life",
"cust_id": "CUST-life-missale",
"line": "LIFE_W",
"status": "ACTIVE",
"rating_as_of": "2025-04-18",
"final_premium_cents": 99100,
"first_name": "Curtis",
"last_name": "Boyd"
},
{
"policy_id": "POL-retention-target-p_auto",
"cust_id": "CUST-retention-target",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-05-01",
"final_premium_cents": 91350,
"first_name": "Tanya",
"last_name": "Brooks"
},
{
"policy_id": "POL-loyalty-oldgrowth-p_auto",
"cust_id": "CUST-loyalty-oldgrowth",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-01-20",
"final_premium_cents": 89796,
"first_name": "Harold",
"last_name": "Nyberg"
},
{
"policy_id": "POL-loyalty-oldgrowth-p_pet",
"cust_id": "CUST-loyalty-oldgrowth",
"line": "PET",
"status": "ACTIVE",
"rating_as_of": "2025-01-20",
"final_premium_cents": 56117,
"first_name": "Harold",
"last_name": "Nyberg"
},
{
"policy_id": "POL-umbrella-plus-p_auto",
"cust_id": "CUST-umbrella-plus",
"line": "AUTO",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 86310,
"first_name": "Vincent",
"last_name": "Okonkwo"
},
{
"policy_id": "POL-umbrella-plus-p_home",
"cust_id": "CUST-umbrella-plus",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 244175,
"first_name": "Vincent",
"last_name": "Okonkwo"
},
{
"policy_id": "POL-umbrella-plus-p_umbr",
"cust_id": "CUST-umbrella-plus",
"line": "UMBR",
"status": "ACTIVE",
"rating_as_of": "2025-02-10",
"final_premium_cents": 27870,
"first_name": "Vincent",
"last_name": "Okonkwo"
}
],
"row_count": 16,
"truncated": false
}⚙ query_db(SELECT p.policy_id, p.cust_id, p.line, p.status, c.first_name, c.last_name, d…)
{
"sql": "SELECT p.policy_id, p.cust_id, p.line, p.status, c.first_name, c.last_name, d.type, d.roof_age, d.construction, d.year_built, d.replacement_cost_cents, d.protection_class FROM policies p JOIN customers c ON c.cust_id = p.cust_id JOIN policy_objects po ON po.policy_id = p.policy_id AND po.object_type = 'dwelling' JOIN dwellings d ON d.dwelling_id = po.object_id WHERE p.line = 'HOME' AND p.status = 'ACTIVE'"
}{
"rows": [
{
"policy_id": "POL-nest-household-p_home",
"cust_id": "CUST-nest-household",
"line": "HOME",
"status": "ACTIVE",
"first_name": "Marisol",
"last_name": "Trujillo",
"type": "home",
"roof_age": 11,
"construction": "MASONRY",
"year_built": 2006,
"replacement_cost_cents": 38000000,
"protection_class": 4
},
{
"policy_id": "POL-fl-coastal-home-p_home",
"cust_id": "CUST-fl-coastal-home",
"line": "HOME",
"status": "ACTIVE",
"first_name": "Gloria",
"last_name": "Esposito",
"type": "home",
"roof_age": 6,
"construction": "MASONRY",
"year_built": 1998,
"replacement_cost_cents": 52000000,
"protection_class": 5
},
{
"policy_id": "POL-umbrella-plus-p_home",
"cust_id": "CUST-umbrella-plus",
"line": "HOME",
"status": "ACTIVE",
"first_name": "Vincent",
"last_name": "Okonkwo",
"type": "home",
"roof_age": 8,
"construction": "MASONRY",
"year_built": 2010,
"replacement_cost_cents": 61000000,
"protection_class": 3
}
],
"row_count": 3,
"truncated": false
}⚙ search_kb(roof replacement credit homeowners policy roof age credit underwriting docume…)
{
"query": "roof replacement credit homeowners policy roof age credit underwriting documentation home roof age discount replacement roof update",
"limit": 5
}{
"results": [
{
"doc_id": "KB-HERITAGE",
"title": "Heritage tier (retired 2009) — do not drop without disclosure",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "Heritage was retired on 2009-07-01 and cannot be sold or re-bound. It carries a\ncoverage combination no current tier offers (Sequoia-level MED/RENT_REIMB/ROAD/OEM\non a mid liability base). A customer who drops Heritage **loses that combinat…"
},
{
"doc_id": "KB-GLOSSARY-AUTO",
"title": "Auto coverage codes, decoded",
"category": "GLOSSARY",
"applies_to": "{\"lines\": [\"AUTO\", \"MOTO\", \"RV\", \"BOAT\", \"CLSC\"]}",
"snippet": "EVERGREEN stores auto coverages under terse codes. Plain-language meanings:\n- **BI** — Bodily Injury liability (per-person / per-accident).\n- **PD** — Property Damage liability.\n- **UM/UIM** (`UMUIM`) — Uninsured / Underinsured Motorist.\n- …"
},
{
"doc_id": "KB-AUTO-TIERS",
"title": "Auto tiers: Sapling → Pine → Evergreen → Sequoia",
"category": "POLICY",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "Tiers bundle coverages. Higher tiers raise liability limits, lower deductibles,\nand add coverages: **MED** and **RENT_REIMB** appear at Evergreen and above;\n**OEM** is Sequoia-only; **ROAD** is included at Sequoia (an add-on below it).\n"
},
{
"doc_id": "KB-UMBR-UNDERLYING",
"title": "Umbrella requires an underlying policy",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"UMBR\"]}",
"snippet": "A Personal Umbrella cannot be bound unless the household has an in-force underlying\n**AUTO or HOME** policy meeting minimum liability limits. Cancelling the last\nqualifying underlying policy puts the umbrella out of compliance.\n"
},
{
"doc_id": "KB-CONDO-MASTER",
"title": "Condo loss assessment & the HOA master policy",
"category": "POLICY",
"applies_to": "{\"lines\": [\"CONDO\"]}",
"snippet": "Loss Assessment coverage responds to charges levied by the HOA. Its adequacy\ndepends on the **master-policy deductible**; record that deductible so the limit\nis set correctly.\n"
}
]
}I can update the home record for a roof replacement, but I need to identify the exact policy first so I quote the correct new premium.
From the records I can see three active home policies in the system. If this is your policy, please send me either:
- the policy number, or
- your full name and the property address on the policy
Once I have that, I’ll update the dwelling facts and give you the recalculated premium.
My name is Gloria Esposito and the address is 12 Mangrove Way, Naples, FL 34102.
⚙ query_db(SELECT c.cust_id, c.first_name, c.last_name, c.address_id, a.line1, a.city, a…)
{
"sql": "SELECT c.cust_id, c.first_name, c.last_name, c.address_id, a.line1, a.city, a.state, a.zip FROM customers c LEFT JOIN addresses a ON a.address_id = c.address_id WHERE c.first_name = 'Gloria' AND c.last_name = 'Esposito'"
}{
"rows": [
{
"cust_id": "CUST-fl-coastal-home",
"first_name": "Gloria",
"last_name": "Esposito",
"address_id": "ADDR-fl-coastal-home",
"line1": "12 Mangrove Way",
"city": "Naples",
"state": "FL",
"zip": "34102"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_prem…)
{
"sql": "SELECT p.policy_id, p.cust_id, p.line, p.status, p.rating_as_of, p.final_premium_cents, d.dwelling_id, d.roof_age, d.construction, d.year_built, d.replacement_cost_cents, a.line1, a.city, a.state, a.zip FROM policies p JOIN policy_objects po ON po.policy_id = p.policy_id AND po.object_type='dwelling' JOIN dwellings d ON d.dwelling_id = po.object_id JOIN customers c ON c.cust_id = p.cust_id LEFT JOIN addresses a ON a.address_id = c.address_id WHERE p.line='HOME' AND p.status='ACTIVE' AND c.first_name='Gloria' AND c.last_name='Esposito'"
}{
"rows": [
{
"policy_id": "POL-fl-coastal-home-p_home",
"cust_id": "CUST-fl-coastal-home",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-04-01",
"final_premium_cents": 526797,
"dwelling_id": "DWL-fl-coastal-home-d1",
"roof_age": 6,
"construction": "MASONRY",
"year_built": 1998,
"replacement_cost_cents": 52000000,
"line1": "12 Mangrove Way",
"city": "Naples",
"state": "FL",
"zip": "34102"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT policy_id, cust_id, line, status, rating_as_of, final_premium_cents FR…)
{
"sql": "SELECT policy_id, cust_id, line, status, rating_as_of, final_premium_cents FROM policies WHERE line='HOME' AND status='ACTIVE' AND cust_id = 'CUST-fl-coastal-home'"
}{
"rows": [
{
"policy_id": "POL-fl-coastal-home-p_home",
"cust_id": "CUST-fl-coastal-home",
"line": "HOME",
"status": "ACTIVE",
"rating_as_of": "2025-04-01",
"final_premium_cents": 526797
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT k.doc_id, k.title, k.snippet FROM (SELECT doc_id, title, substr(body_m…)
{
"sql": "SELECT k.doc_id, k.title, k.snippet FROM (SELECT doc_id, title, substr(body_md,1,500) AS snippet FROM kb_documents) k WHERE k.title LIKE '%roof%' OR k.body_md LIKE '%roof replacement%' OR k.body_md LIKE '%roof credit%' LIMIT 10"
}{
"error": "sql_error",
"detail": "no such column: k.body_md"
}⚙ search_kb(roof replacement roof credit homeowners dwelling roof age underwriting credit…)
{
"query": "roof replacement roof credit homeowners dwelling roof age underwriting credit",
"limit": 10
}{
"results": [
{
"doc_id": "KB-HERITAGE",
"title": "Heritage tier (retired 2009) — do not drop without disclosure",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "Heritage was retired on 2009-07-01 and cannot be sold or re-bound. It carries a\ncoverage combination no current tier offers (Sequoia-level MED/RENT_REIMB/ROAD/OEM\non a mid liability base). A customer who drops Heritage **loses that combinat…"
},
{
"doc_id": "KB-GLOSSARY-AUTO",
"title": "Auto coverage codes, decoded",
"category": "GLOSSARY",
"applies_to": "{\"lines\": [\"AUTO\", \"MOTO\", \"RV\", \"BOAT\", \"CLSC\"]}",
"snippet": "EVERGREEN stores auto coverages under terse codes. Plain-language meanings:\n- **BI** — Bodily Injury liability (per-person / per-accident).\n- **PD** — Property Damage liability.\n- **UM/UIM** (`UMUIM`) — Uninsured / Underinsured Motorist.\n- …"
},
{
"doc_id": "KB-CA-RATING",
"title": "CA: prohibited auto rating factors",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"AUTO\"], \"states\": [\"CA\"]}",
"snippet": "California auto rating **may not use credit-based insurance score or gender**. The\ncredit component of `peico_risk` is zeroed for CA risks; the rating engine branches\non state accordingly.\n"
},
{
"doc_id": "KB-EVERGREEN-CLASSIC",
"title": "Evergreen Classic (Home, retired 2018) — wind/hail math",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"HOME\"]}",
"snippet": "Retired 2018-01-01. Uses a legacy flat-capped wind/hail deductible (1.5% of\ndwelling, capped) rather than the current percentage math. Not re-bindable.\n"
},
{
"doc_id": "KB-TX-MOTO",
"title": "TX: motorcycle custom-parts coverage unavailable",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"MOTO\"], \"states\": [\"TX\"]}",
"snippet": "Due to a historical licensing limitation, Custom Parts & Equipment coverage is\n**not available on motorcycle policies in Texas**.\n"
},
{
"doc_id": "KB-FL-HURRICANE",
"title": "FL: separate hurricane deductible",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"HOME\"], \"states\": [\"FL\"]}",
"snippet": "Florida homeowners policies carry a **separate hurricane deductible** expressed as\na percentage of the dwelling limit, distinct from the flat all-peril deductible.\nIt must be set explicitly before binding.\n"
},
{
"doc_id": "KB-AUTO-TIERS",
"title": "Auto tiers: Sapling → Pine → Evergreen → Sequoia",
"category": "POLICY",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "Tiers bundle coverages. Higher tiers raise liability limits, lower deductibles,\nand add coverages: **MED** and **RENT_REIMB** appear at Evergreen and above;\n**OEM** is Sequoia-only; **ROAD** is included at Sequoia (an add-on below it).\n"
},
{
"doc_id": "KB-AUTO-GAP",
"title": "GAP coverage eligibility",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "Loan/Lease GAP is available only on **financed or leased** vehicles. It cannot be\nadded to a vehicle owned outright.\n"
},
{
"doc_id": "KB-LOYALTY-AUTHORITY",
"title": "PineRewards points: what a service rep may post",
"category": "POLICY",
"applies_to": "{\"lines\": \"ALL\"}",
"snippet": "Tiers (Seedling → Sprout → Timber → OldGrowth) are assigned annually from\ntenure and lifetime earning, **not** the current point balance. Points earned\n2019 or later expire **24 months** after the earn date; older entries were\nwritten witho…"
},
{
"doc_id": "KB-DISC-HLTH-SUPP",
"title": "Supplemental health: not major-medical; pre-existing limits",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"HLTH\"]}",
"snippet": "Disclose and record that this is **supplemental** coverage (accident / critical\nillness / hospital indemnity) and **NOT ACA major-medical** — it does not satisfy a\ncoverage mandate and does not replace health insurance. Pre-existing conditi…"
}
]
}⚙ query_db(SELECT coverage_id, code, label, kind, unit, notes FROM coverages WHERE line=…)
{
"sql": "SELECT coverage_id, code, label, kind, unit, notes FROM coverages WHERE line='HOME' ORDER BY coverage_id"
}{
"rows": [
{
"coverage_id": "HOME:CONTENTS",
"code": "CONTENTS",
"label": "Personal Property (Coverage C)",
"kind": "limit",
"unit": "usd",
"notes": null
},
{
"coverage_id": "HOME:DEDUCT",
"code": "DEDUCT",
"label": "All-Peril Deductible",
"kind": "deductible",
"unit": "usd",
"notes": "Falls by tier."
},
{
"coverage_id": "HOME:DWELL",
"code": "DWELL",
"label": "Dwelling (Coverage A)",
"kind": "limit",
"unit": "usd",
"notes": "Based on replacement cost."
},
{
"coverage_id": "HOME:LIAB",
"code": "LIAB",
"label": "Personal Liability (Coverage E)",
"kind": "limit",
"unit": "usd",
"notes": null
},
{
"coverage_id": "HOME:LOSS_USE",
"code": "LOSS_USE",
"label": "Loss of Use (Coverage D)",
"kind": "limit",
"unit": "usd",
"notes": null
},
{
"coverage_id": "HOME:MEDPAY",
"code": "MEDPAY",
"label": "Medical Payments (Coverage F)",
"kind": "limit",
"unit": "usd",
"notes": null
},
{
"coverage_id": "HOME:OTHER_STR",
"code": "OTHER_STR",
"label": "Other Structures (Coverage B)",
"kind": "limit",
"unit": "usd",
"notes": "Typically a % of dwelling."
},
{
"coverage_id": "HOME:ROOF_ACV",
"code": "ROOF_ACV",
"label": "Roof Actual-Cash-Value Schedule",
"kind": "flag",
"unit": "bool",
"notes": "Older-roof endorsement; pays ACV not replacement."
},
{
"coverage_id": "HOME:SERVICE_LN",
"code": "SERVICE_LN",
"label": "Service Line",
"kind": "flag",
"unit": "bool",
"notes": null
},
{
"coverage_id": "HOME:WATER_BACK",
"code": "WATER_BACK",
"label": "Water Backup",
"kind": "limit",
"unit": "usd",
"notes": "Sewer/sump backup endorsement."
},
{
"coverage_id": "HOME:WIND_HAIL",
"code": "WIND_HAIL",
"label": "Wind/Hail Deductible",
"kind": "deductible",
"unit": "pct",
"notes": "% of dwelling. In FL this is the separate hurricane deductible (state rule)."
}
],
"row_count": 11,
"truncated": false
}⚙ get_doc(KB-FL-HURRICANE)
{
"doc_id": "KB-FL-HURRICANE"
}{
"doc_id": "KB-FL-HURRICANE",
"title": "FL: separate hurricane deductible",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"HOME\"], \"states\": [\"FL\"]}",
"body_md": "Florida homeowners policies carry a **separate hurricane deductible** expressed as\na percentage of the dwelling limit, distinct from the flat all-peril deductible.\nIt must be set explicitly before binding.\n"
}⚙ query_db(SELECT coverage_id, value, premium_contribution_cents FROM policy_coverages W…)
{
"sql": "SELECT coverage_id, value, premium_contribution_cents FROM policy_coverages WHERE policy_id='POL-fl-coastal-home-p_home' ORDER BY coverage_id"
}{
"rows": [
{
"coverage_id": "HOME:CONTENTS",
"value": "20000000",
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:DEDUCT",
"value": "50000",
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:DWELL",
"value": null,
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:LIAB",
"value": "100000000",
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:LOSS_USE",
"value": null,
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:MEDPAY",
"value": "1000000",
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:OTHER_STR",
"value": null,
"premium_contribution_cents": null
},
{
"coverage_id": "HOME:SERVICE_LN",
"value": "true",
"premium_contribution_cents": 3000
},
{
"coverage_id": "HOME:WATER_BACK",
"value": "2500000",
"premium_contribution_cents": 5500
},
{
"coverage_id": "HOME:WIND_HAIL",
"value": "0.01",
"premium_contribution_cents": null
}
],
"row_count": 10,
"truncated": false
}⚙ price_check(POL-fl-coastal-home-p_home, 2025-06-01)
{
"policy_id": "POL-fl-coastal-home-p_home",
"as_of": "2025-06-01"
}{
"as_of": "2025-06-01",
"facts": {
"line": "HOME",
"tier": "SEQUOIA",
"region": "R-SE",
"state": "FL",
"term_months": 12,
"peico_risk": 715,
"age": 55,
"billing_plan": "INSTALLMENTS",
"autopay": true,
"paperless": true,
"loyalty_tier": "Timber",
"status": "CUSTOMER",
"has_bundle": false,
"active_lines": 1,
"is_new_first_policy": false,
"promo_code": null,
"coverages": [
"SERVICE_LN",
"WATER_BACK"
],
"replacement_cost": 520000,
"roof_age": 6,
"construction": "MASONRY",
"protection_class": 5,
"dist_to_coast_mi": 2,
"wind_hail_deductible": 0.01
},
"base_premium_cents": 574173,
"final_premium_cents": 526797,
"breakdown": [
{
"step": "BASE",
"code": "base",
"detail": "$4.2/$1k × RC $520,000.0",
"factor": null,
"amount_cents": null,
"running_cents": 218400
},
{
"step": "BASE",
"code": "tier:SEQUOIA",
"detail": "tier factor ×1.55",
"factor": 1.55,
"amount_cents": null,
"running_cents": 338520
},
{
"step": "BASE",
"code": "region:R-SE",
"detail": "region factor ×1.45",
"factor": 1.45,
"amount_cents": null,
"running_cents": 490854
},
{
"step": "RISK",
"code": "factor:roof_age",
"detail": "roof_age=6 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 490854
},
{
"step": "RISK",
"code": "factor:construction",
"detail": "construction=MASONRY ×0.95",
"factor": 0.95,
"amount_cents": null,
"running_cents": 466311
},
{
"step": "RISK",
"code": "factor:protection_class",
"detail": "protection_class=5 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 466311
},
{
"step": "RISK",
"code": "factor:dist_to_coast_mi",
"detail": "dist_to_coast_mi=2 ×1.2",
"factor": 1.2,
"amount_cents": null,
"running_cents": 559573
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=715 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 559573
},
{
"step": "RISK",
"code": "wind_hail_ded",
"detail": "wind/hail ded 0.01 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 559573
},
{
"step": "COVERAGE",
"code": "SERVICE_LN",
"detail": "+ SERVICE_LN $30",
"factor": null,
"amount_cents": 3000,
"running_cents": 562573
},
{
"step": "COVERAGE",
"code": "WATER_BACK",
"detail": "+ WATER_BACK $55",
"factor": null,
"amount_cents": 5500,
"running_cents": 568073
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 570573
},
{
"step": "FEES",
"code": "installment",
"detail": "+ fractional-pay surcharge",
"factor": null,
"amount_cents": 3600,
"running_cents": 574173
},
{
"step": "DISCOUNT",
"code": "PAPERLESS",
"detail": "−$25",
"factor": null,
"amount_cents": -2500,
"running_cents": 571673
},
{
"step": "DISCOUNT",
"code": "AUTOPAY",
"detail": "−3%",
"factor": 0.97,
"amount_cents": null,
"running_cents": 554523
},
{
"step": "DISCOUNT",
"code": "LOYALTY",
"detail": "−5%",
"factor": 0.95,
"amount_cents": null,
"running_cents": 526797
}
]
}I found your homeowners policy: POL-fl-coastal-home-p_home.
Your current premium is $5,267.97, and the rating engine shows the roof age is already 6 years with the current dwelling facts on file. A roof replacement can change the premium only if the dwelling record’s roof age or related roofing facts are updated.
If you want, I can update the dwelling record now to reflect the new roof and then reprice the policy so you can see the new premium.
Yes, please do that. I have the contractor's certificate of completion from last week showing the roof is brand new, so go ahead and update it.
⚙ update_insured_object(dwelling, DWL-fl-coastal-home-d1, {"roof_age":0})
{
"object_type": "dwelling",
"object_id": "DWL-fl-coastal-home-d1",
"fields": {
"roof_age": 0
}
}{
"ok": true,
"rows_affected": 1,
"changeset": {
"dwellings": {
"changed": [
{
"pk": {
"dwelling_id": "DWL-fl-coastal-home-d1"
},
"fields": {
"roof_age": [
6,
0
]
}
}
]
}
},
"note": "if these facts feed rating, the affected policy's premium is stale — reprice_policy"
}⚙ query_db(SELECT policy_id FROM policies WHERE policy_id='POL-fl-coastal-home-p_home' A…)
{
"sql": "SELECT policy_id FROM policies WHERE policy_id='POL-fl-coastal-home-p_home' AND status='ACTIVE'"
}{
"rows": [
{
"policy_id": "POL-fl-coastal-home-p_home"
}
],
"row_count": 1,
"truncated": false
}⚙ reprice_policy(POL-fl-coastal-home-p_home, 2025-06-01)
{
"policy_id": "POL-fl-coastal-home-p_home",
"as_of": "2025-06-01"
}{
"ok": true,
"as_of": "2025-06-01",
"base_premium_cents": 529408,
"final_premium_cents": 485546,
"breakdown": [
{
"step": "BASE",
"code": "base",
"detail": "$4.2/$1k × RC $520,000.0",
"factor": null,
"amount_cents": null,
"running_cents": 218400
},
{
"step": "BASE",
"code": "tier:SEQUOIA",
"detail": "tier factor ×1.55",
"factor": 1.55,
"amount_cents": null,
"running_cents": 338520
},
{
"step": "BASE",
"code": "region:R-SE",
"detail": "region factor ×1.45",
"factor": 1.45,
"amount_cents": null,
"running_cents": 490854
},
{
"step": "RISK",
"code": "factor:roof_age",
"detail": "roof_age=0 ×0.92",
"factor": 0.92,
"amount_cents": null,
"running_cents": 451586
},
{
"step": "RISK",
"code": "factor:construction",
"detail": "construction=MASONRY ×0.95",
"factor": 0.95,
"amount_cents": null,
"running_cents": 429007
},
{
"step": "RISK",
"code": "factor:protection_class",
"detail": "protection_class=5 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 429007
},
{
"step": "RISK",
"code": "factor:dist_to_coast_mi",
"detail": "dist_to_coast_mi=2 ×1.2",
"factor": 1.2,
"amount_cents": null,
"running_cents": 514808
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=715 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 514808
},
{
"step": "RISK",
"code": "wind_hail_ded",
"detail": "wind/hail ded 0.01 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 514808
},
{
"step": "COVERAGE",
"code": "SERVICE_LN",
"detail": "+ SERVICE_LN $30",
"factor": null,
"amount_cents": 3000,
"running_cents": 517808
},
{
"step": "COVERAGE",
"code": "WATER_BACK",
"detail": "+ WATER_BACK $55",
"factor": null,
"amount_cents": 5500,
"running_cents": 523308
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 525808
},
{
"step": "FEES",
"code": "installment",
"detail": "+ fractional-pay surcharge",
"factor": null,
"amount_cents": 3600,
"running_cents": 529408
},
{
"step": "DISCOUNT",
"code": "PAPERLESS",
"detail": "−$25",
"factor": null,
"amount_cents": -2500,
"running_cents": 526908
},
{
"step": "DISCOUNT",
"code": "AUTOPAY",
"detail": "−3%",
"factor": 0.97,
"amount_cents": null,
"running_cents": 511101
},
{
"step": "DISCOUNT",
"code": "LOYALTY",
"detail": "−5%",
"factor": 0.95,
"amount_cents": null,
"running_cents": 485546
}
],
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-fl-coastal-home-p_home"
},
"fields": {
"rating_as_of": [
"2025-04-01",
"2025-06-01"
],
"base_premium_cents": [
574173,
529408
],
"final_premium_cents": [
526797,
485546
],
"premium_breakdown": [
"[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"$4.2/$1k \\u00d7 RC $520,000.0\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 218400}, {\"step\": \"BASE\", \"code\": \"tier:SEQUOIA\", \"detail\": \"tier factor \\u00d71.55\", \"factor\": 1.55, \"amount_cents\": null, \"running_cents\": 338520}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.45\", \"factor\": 1.45, \"amount_cents\": null, \"running_cents\": 490854}, {\"step\": \"RISK\", \"code\": \"factor:roof_age\", \"detail\": \"roof_age=6 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 490854}, {\"step\": \"RISK\", \"code\": \"factor:construction\", \"detail\": \"construction=MASONRY \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 466311}, {\"step\": \"RISK\", \"code\": \"factor:protection_class\", \"detail\": \"protection_class=5 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 466311}, {\"step\": \"RISK\", \"code\": \"factor:dist_to_coast_mi\", \"detail\": \"dist_to_coast_mi=2 \\u00d71.2\", \"factor\": 1.2, \"amount_cents\": null, \"running_cents\": 559573}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=715 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 559573}, {\"step\": \"RISK\", \"code\": \"wind_hail_ded\", \"detail\": \"wind/hail ded 0.01 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 559573}, {\"step\": \"COVERAGE\", \"code\": \"SERVICE_LN\", \"detail\": \"+ SERVICE_LN $30\", \"factor\": null, \"amount_cents\": 3000, \"running_cents\": 562573}, {\"step\": \"COVERAGE\", \"code\": \"WATER_BACK\", \"detail\": \"+ WATER_BACK $55\", \"factor\": null, \"amount_cents\": 5500, \"running_cents\": 568073}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 570573}, {\"step\": \"FEES\", \"code\": \"installment\", \"detail\": \"+ fractional-pay surcharge\", \"factor\": null, \"amount_cents\": 3600, \"running_cents\": 574173}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 571673}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 554523}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 526797}]",
"[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"$4.2/$1k \\u00d7 RC $520,000.0\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 218400}, {\"step\": \"BASE\", \"code\": \"tier:SEQUOIA\", \"detail\": \"tier factor \\u00d71.55\", \"factor\": 1.55, \"amount_cents\": null, \"running_cents\": 338520}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.45\", \"factor\": 1.45, \"amount_cents\": null, \"running_cents\": 490854}, {\"step\": \"RISK\", \"code\": \"factor:roof_age\", \"detail\": \"roof_age=0 \\u00d70.92\", \"factor\": 0.92, \"amount_cents\": null, \"running_cents\": 451586}, {\"step\": \"RISK\", \"code\": \"factor:construction\", \"detail\": \"construction=MASONRY \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 429007}, {\"step\": \"RISK\", \"code\": \"factor:protection_class\", \"detail\": \"protection_class=5 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 429007}, {\"step\": \"RISK\", \"code\": \"factor:dist_to_coast_mi\", \"detail\": \"dist_to_coast_mi=2 \\u00d71.2\", \"factor\": 1.2, \"amount_cents\": null, \"running_cents\": 514808}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=715 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 514808}, {\"step\": \"RISK\", \"code\": \"wind_hail_ded\", \"detail\": \"wind/hail ded 0.01 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 514808}, {\"step\": \"COVERAGE\", \"code\": \"SERVICE_LN\", \"detail\": \"+ SERVICE_LN $30\", \"factor\": null, \"amount_cents\": 3000, \"running_cents\": 517808}, {\"step\": \"COVERAGE\", \"code\": \"WATER_BACK\", \"detail\": \"+ WATER_BACK $55\", \"factor\": null, \"amount_cents\": 5500, \"running_cents\": 523308}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 525808}, {\"step\": \"FEES\", \"code\": \"installment\", \"detail\": \"+ fractional-pay surcharge\", \"factor\": null, \"amount_cents\": 3600, \"running_cents\": 529408}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 526908}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 511101}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 485546}]"
]
}
}
]
}
}
}Done — I updated the roof age to brand new and repriced your homeowners policy.
Your new premium is $4,855.46, down from $5,267.97.
If you’d like, I can also review whether the wind/hail deductible or any other home coverages should be adjusted while we’re here.
That's great, thank you! I appreciate the update and the new premium. I don't need anything else changed on the policy right now. Thanks for taking care of this for me.
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}You’re very welcome — I’m glad we could get that updated for you. Thanks for being a PEICO customer, and have a great day!