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 roof age to 0, repriced the policy giving the exact expected new premium ($4,855.46) and savings ($412.51) matching the current premium ($5,267.97), and did so during the call.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hi! I just had my roof completely replaced last week and I have all the documentation. I'd like to get my policy updated to reflect the new roof and find out what my new premium is.
Absolutely — a roof replacement can affect your home policy rating, and I can update the dwelling record and reprice it once I verify the account.
Please provide one of the following to find your account:
- Your PEICO policy number, or
- Your legacy account number, or
- Your full name plus ZIP code
Then I’ll also verify with a second detail, such as date of birth, phone, or email on file.
My name is Gloria Esposito, and my ZIP code is 34102. You can verify with my email on file — gloria.esposito@example.com.
⚙ query_db(SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, c.statu…)
{
"sql": "SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, c.status, c.address_id, a.line1, a.city, a.state, a.zip, a.region FROM customers c JOIN addresses a ON c.address_id = a.address_id WHERE c.first_name = 'Gloria' AND c.last_name = 'Esposito' AND a.zip = '34102'"
}{
"rows": [
{
"cust_id": "CUST-fl-coastal-home",
"first_name": "Gloria",
"last_name": "Esposito",
"dob": "1969-07-19",
"email": "gloria.esposito@example.com",
"phone": null,
"status": "CUSTOMER",
"address_id": "ADDR-fl-coastal-home",
"line1": "12 Mangrove Way",
"city": "Naples",
"state": "FL",
"zip": "34102",
"region": "R-SE"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT p.policy_id, p.line, p.tier_id, p.status, p.effective_date, p.expirati…)
{
"sql": "SELECT p.policy_id, p.line, p.tier_id, p.status, p.effective_date, p.expiration_date, p.rating_as_of, p.base_premium_cents, p.final_premium_cents, p.premium_breakdown, po.object_type, po.object_id, d.dwelling_id, d.type, d.year_built, d.construction, d.roof_age, d.sq_ft, d.replacement_cost_cents, d.protection_class, d.dist_to_coast_mi FROM policies p LEFT JOIN policy_objects po ON p.policy_id = po.policy_id LEFT JOIN dwellings d ON po.object_type = 'dwelling' AND po.object_id = d.dwelling_id WHERE p.cust_id = 'CUST-fl-coastal-home' AND p.line = 'HOME' ORDER BY p.effective_date DESC"
}{
"rows": [
{
"policy_id": "POL-fl-coastal-home-p_home",
"line": "HOME",
"tier_id": "HOME:SEQUOIA",
"status": "ACTIVE",
"effective_date": "2025-04-01",
"expiration_date": "2026-04-01",
"rating_as_of": "2025-04-01",
"base_premium_cents": 574173,
"final_premium_cents": 526797,
"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}]",
"object_type": "dwelling",
"object_id": "DWL-fl-coastal-home-d1",
"dwelling_id": "DWL-fl-coastal-home-d1",
"type": "home",
"year_built": 1998,
"construction": "MASONRY",
"roof_age": 6,
"sq_ft": 2800,
"replacement_cost_cents": 52000000,
"protection_class": 5,
"dist_to_coast_mi": 2
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT rule_id, line, tier_id, coverage_id, state, effect, condition, effecti…)
{
"sql": "SELECT rule_id, line, tier_id, coverage_id, state, effect, condition, effective_start, effective_end, reason_doc, notes FROM eligibility_rules WHERE line = 'HOME' AND (state = 'FL' OR state IS NULL) AND (tier_id = 'HOME:SEQUOIA' OR tier_id IS NULL) AND (effective_end IS NULL OR effective_end >= '2025-06-01') ORDER BY state, tier_id, rule_id"
}{
"rows": [
{
"rule_id": "ELIG-FL-HOME-HURRICANE",
"line": "HOME",
"tier_id": null,
"coverage_id": "HOME:WIND_HAIL",
"state": "FL",
"effect": "GATE",
"condition": "separate_hurricane_deductible_set",
"effective_start": null,
"effective_end": null,
"reason_doc": "KB-FL-HURRICANE",
"notes": "FL HOME requires a separate % hurricane deductible (not the flat all-peril one)."
}
],
"row_count": 1,
"truncated": false
}⚙ search_kb(home roof age replacement update dwelling roof_age documentation Florida home…)
{
"query": "home roof age replacement update dwelling roof_age documentation Florida homeowners underwriting",
"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-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-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-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"
}
]
}⚙ 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"
}⚙ 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}]"
]
}
}
]
}
}
}Thanks, Gloria — I verified your account by the email on file.
I found your active homeowners policy POL-fl-coastal-home-p_home for 12 Mangrove Way, Naples, FL 34102. I updated the dwelling record to show the roof age as 0 years for the complete replacement.
Your policy has been repriced effective 06/01/2025:
- Previous annual premium: $5,267.97
- New annual premium: $4,855.46
- Estimated annual savings: $412.51
The rating change came from the roof-age factor improving from the prior roof age of 6 years to a new-roof factor.
Please keep your roof replacement documentation available in case underwriting requests it. Anything else I can help with today?
That's great — thank you! I really appreciate you getting that updated and repriced right away. I have the contractor's certificate of completion if underwriting needs it. That's all I needed today!
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}You’re very welcome, Gloria. I’m glad we could get the new roof reflected and your premium updated today. Please keep that certificate of completion with your records in case underwriting follows up.
Thank you for choosing PEICO — have a great day!