umbrella-underlying-cancel-reprice
Grading criteriawhat this conversation was scored against
DB end-state
{
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-umbrella-plus-p_auto"
},
"fields": {
"status": [
"ACTIVE",
"CANCELLED"
]
}
},
{
"pk": {
"policy_id": "POL-umbrella-plus-p_umbr"
},
"fields": {
"base_premium_cents": [
41422,
35518
],
"final_premium_cents": [
27870,
23570
],
"premium_breakdown": [
"*",
"*"
]
},
"may_change": {
"rating_as_of": [
"*",
"*"
]
}
},
{
"pk": {
"policy_id": "POL-umbrella-plus-p_home"
},
"optional": true,
"fields": {},
"may_change": {
"rating_as_of": [
"*",
"*"
],
"premium_breakdown": [
"*",
"*"
]
}
}
]
}
}Judge rubric
The rep (1) cancelled the customer's AUTO policy as requested — and ONLY the auto; the home and umbrella stayed in force; (2) verified the umbrella dependency rather than either silently ignoring it or wrongly claiming the umbrella breaks — the household's active HOME policy satisfies the underlying requirement, and the rep's answer to the customer reflected that; and (3) answered the customer's direct question about the umbrella's new price with the real repriced figure (about $235.70/yr, down from $278.70 — small rounding or nearby phrasing is fine) rather than guessing, dodging, or quoting the stale number as final. Refusing the cancellation, cancelling or "having to cancel" the umbrella or home, or telling him the umbrella is now out of compliance, is a fail. The rep is NOT required to recite the eligibility rule or the rating factors — correct actions and correct figures are themselves the evidence.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep cancelled only the auto policy, kept home and umbrella active, correctly explained the umbrella remains compliant due to the home policy, and provided the correct repriced umbrella figure ($235.70/yr, down from $278.70).
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hi, thanks for picking up. I need to cancel my auto policy effective today — I've already switched to another carrier and my new coverage is active as of this morning. But I'm keeping my home and umbrella with PEICO, so I just want to make sure cancelling the auto doesn't mess anything up with my umbrella policy.
I can help with that — and good instinct to ask about the umbrella, because that's exactly the kind of thing that can get tangled.
First, let me pull up your account. Can you give me your name and one other identifier (email, phone, or your customer/policy ID) so I can verify I've got the right person?
It's Vincent Okonkwo. My email on file is vincent.okonkwo@example.com.
⚙ query_db(SELECT * FROM customers WHERE email = 'vincent.okonkwo@example.com')
{
"sql": "SELECT * FROM customers WHERE email = 'vincent.okonkwo@example.com'"
}{
"rows": [
{
"cust_id": "CUST-umbrella-plus",
"legacy_acct": null,
"legacy_mismatch": 0,
"status": "CUSTOMER",
"first_name": "Vincent",
"last_name": "Okonkwo",
"dob": "1976-10-08",
"email": "vincent.okonkwo@example.com",
"phone": null,
"address_id": "ADDR-umbrella-plus",
"peico_risk": 772,
"risk_components": "{\"prior_claims\": {\"value\": 0, \"points\": 0}, \"late_payments\": {\"value\": 0, \"points\": 0}, \"tenure\": {\"value\": 11, \"points\": 44}, \"credit\": {\"value\": 770, \"points\": 28, \"weight\": 1, \"masked\": false, \"note\": null}}",
"tenure_start": "2014-07-01",
"loyalty_tier": "Timber",
"loyalty_points": 5000,
"created_at": "2025-06-01"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT policy_id, line, tier_id, status, effective_date, expiration_date, fin…)
{
"sql": "SELECT policy_id, line, tier_id, status, effective_date, expiration_date, final_premium_cents, underlying_policy_id, bundle_id FROM policies WHERE cust_id = 'CUST-umbrella-plus'"
}{
"rows": [
{
"policy_id": "POL-umbrella-plus-p_auto",
"line": "AUTO",
"tier_id": "AUTO:EVERGREEN",
"status": "ACTIVE",
"effective_date": "2025-02-10",
"expiration_date": "2026-02-10",
"final_premium_cents": 86310,
"underlying_policy_id": null,
"bundle_id": "BND-umbrella-plus"
},
{
"policy_id": "POL-umbrella-plus-p_home",
"line": "HOME",
"tier_id": "HOME:EVERGREEN",
"status": "ACTIVE",
"effective_date": "2025-02-10",
"expiration_date": "2026-02-10",
"final_premium_cents": 244175,
"underlying_policy_id": null,
"bundle_id": "BND-umbrella-plus"
},
{
"policy_id": "POL-umbrella-plus-p_umbr",
"line": "UMBR",
"tier_id": "UMBR:EVERGREEN",
"status": "ACTIVE",
"effective_date": "2025-02-10",
"expiration_date": "2026-02-10",
"final_premium_cents": 27870,
"underlying_policy_id": "POL-umbrella-plus-p_auto",
"bundle_id": "BND-umbrella-plus"
}
],
"row_count": 3,
"truncated": false
}⚙ query_db(SELECT * FROM product_lines WHERE line = 'UMBR')
{
"sql": "SELECT * FROM product_lines WHERE line = 'UMBR'"
}{
"rows": [
{
"line": "UMBR",
"label": "Personal Umbrella",
"category": "P&C",
"parent_line": null,
"requires_suitability": 0,
"requires_underlying": "[\"AUTO\", \"HOME\"]",
"notes": "Cannot bind without an in-force underlying AUTO or HOME."
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT b.*, d.code AS disc_code, d.label AS disc_label, d.effect, d.eligibili…)
{
"sql": "SELECT b.*, d.code AS disc_code, d.label AS disc_label, d.effect, d.eligibility FROM bundles b LEFT JOIN discounts d ON d.discount_id = b.discount_id WHERE b.cust_id = 'CUST-umbrella-plus'"
}{
"rows": [
{
"bundle_id": "BND-umbrella-plus",
"cust_id": "CUST-umbrella-plus",
"code": "NEST_PLUS",
"discount_id": "DISC-MULTILINE",
"created_at": "2025-06-01",
"disc_code": "MULTILINE",
"disc_label": "Multi-Line (Bundle)",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.15}",
"eligibility": "household has an active bundle (NEST/NEST_PLUS/FAMILY_TREE/ROOST)"
}
],
"row_count": 1,
"truncated": false
}⚙ search_kb(umbrella underlying policy cancel auto requirement)
{
"query": "umbrella underlying policy cancel auto requirement"
}{
"results": [
{
"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-LEGACY-XWALK",
"title": "Reading an EVERGREEN plan code (legacy → CANOPY)",
"category": "HOWTO",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "PEICO is migrating from the legacy **EVERGREEN** mainframe to **CANOPY**. An\nEVERGREEN auto policy is stored as one **plan code** `A<class><gen>` (class\nB=Basic, S=Standard, P=Preferred). A plan code does NOT map to a CANOPY tier on\nits own…"
},
{
"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"
},
{
"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-SUITABILITY",
"title": "Suitability requirement for Life & Health",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"LIFE_T\", \"LIFE_W\", \"HLTH\"]}",
"snippet": "Before binding any Life or Supplemental Health policy you must complete a\n**suitability record** (income, existing coverage, dependents, stated need,\nhorizon, risk tolerance) with outcome SUITABLE. Selling **whole life** to a\nshort-horizon,…"
},
{
"doc_id": "KB-NE-MIN-LIMITS",
"title": "NY/NJ minimum auto liability limits",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"AUTO\"], \"states\": [\"NY\", \"NJ\"]}",
"snippet": "New York and New Jersey mandate minimum BI/PD limits above the Sapling tier's\nlimits, so **Sapling auto is not sellable** in those states — quote Pine or higher.\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"
}
]
}⚙ get_doc(KB-UMBR-UNDERLYING)
{
"doc_id": "KB-UMBR-UNDERLYING"
}{
"doc_id": "KB-UMBR-UNDERLYING",
"title": "Umbrella requires an underlying policy",
"category": "UNDERWRITING",
"applies_to": "{\"lines\": [\"UMBR\"]}",
"body_md": "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"
}⚙ query_db(SELECT * FROM eligibility_rules WHERE line = 'UMBR')
{
"sql": "SELECT * FROM eligibility_rules WHERE line = 'UMBR'"
}{
"rows": [
{
"rule_id": "ELIG-UMBR-UNDERLYING",
"line": "UMBR",
"tier_id": null,
"coverage_id": null,
"state": null,
"effect": "REQUIRE",
"condition": "in_force_underlying_in [AUTO, HOME]",
"effective_start": null,
"effective_end": null,
"reason_doc": "KB-UMBR-UNDERLYING",
"notes": "Umbrella cannot bind without an in-force underlying auto or home policy."
}
],
"row_count": 1,
"truncated": false
}⚙ search_kb(bundle NEST_PLUS multi-line discount requirements)
{
"query": "bundle NEST_PLUS multi-line discount requirements"
}{
"results": [
{
"doc_id": "KB-PROMO-PINEBUNDLE",
"title": "PINEBUNDLE terms",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"snippet": "10% off when the household has >=2 active lines. Cap $500; min premium $250. Stacks with the multi-line discount."
},
{
"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-PROMO-GREENSTART",
"title": "GREENSTART — retired rider ($0)",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"snippet": "GREENSTART still validates as a code, but its underlying **rate rider was retired**,\nso it produces a **$0 benefit**. Do not promise customers a discount from it.\n"
}
]
}⚙ search_kb(NEST bundle codes minimum lines discount)
{
"query": "NEST bundle codes minimum lines discount"
}{
"results": [
{
"doc_id": "KB-PROMO-PINEBUNDLE",
"title": "PINEBUNDLE terms",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"snippet": "10% off when the household has >=2 active lines. Cap $500; min premium $250. Stacks with the multi-line discount."
},
{
"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-NE-MIN-LIMITS",
"title": "NY/NJ minimum auto liability limits",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"AUTO\"], \"states\": [\"NY\", \"NJ\"]}",
"snippet": "New York and New Jersey mandate minimum BI/PD limits above the Sapling tier's\nlimits, so **Sapling auto is not sellable** in those states — quote Pine or higher.\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-PROMO-GREENSTART",
"title": "GREENSTART — retired rider ($0)",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"snippet": "GREENSTART still validates as a code, but its underlying **rate rider was retired**,\nso it produces a **$0 benefit**. Do not promise customers a discount from it.\n"
}
]
}⚙ search_kb(umbrella underlying swap replace change underlying policy)
{
"query": "umbrella underlying swap replace change underlying policy"
}{
"results": [
{
"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"
},
{
"doc_id": "KB-LEGACY-XWALK",
"title": "Reading an EVERGREEN plan code (legacy → CANOPY)",
"category": "HOWTO",
"applies_to": "{\"lines\": [\"AUTO\"]}",
"snippet": "PEICO is migrating from the legacy **EVERGREEN** mainframe to **CANOPY**. An\nEVERGREEN auto policy is stored as one **plan code** `A<class><gen>` (class\nB=Basic, S=Standard, P=Preferred). A plan code does NOT map to a CANOPY tier on\nits own…"
},
{
"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-PROMO-GREENSTART",
"title": "GREENSTART — retired rider ($0)",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"snippet": "GREENSTART still validates as a code, but its underlying **rate rider was retired**,\nso it produces a **$0 benefit**. Do not promise customers a discount from it.\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-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-SUITABILITY",
"title": "Suitability requirement for Life & Health",
"category": "COMPLIANCE",
"applies_to": "{\"lines\": [\"LIFE_T\", \"LIFE_W\", \"HLTH\"]}",
"snippet": "Before binding any Life or Supplemental Health policy you must complete a\n**suitability record** (income, existing coverage, dependents, stated need,\nhorizon, risk tolerance) with outcome SUITABLE. Selling **whole life** to a\nshort-horizon,…"
}
]
}⚙ query_db(SELECT doc_id, title, category FROM kb_documents WHERE body_md LIKE '%NEST%' …)
{
"sql": "SELECT doc_id, title, category FROM kb_documents WHERE body_md LIKE '%NEST%' OR title LIKE '%bundle%'"
}{
"rows": [
{
"doc_id": "KB-PROMO-PINEBUNDLE",
"title": "PINEBUNDLE terms",
"category": "PROMO"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT notes FROM discounts WHERE discount_id = 'DISC-MULTILINE')
{
"sql": "SELECT notes FROM discounts WHERE discount_id = 'DISC-MULTILINE'"
}{
"rows": [
{
"notes": "This is the discount a bundle attaches to; breaking the bundle re-rates survivors without it."
}
],
"row_count": 1,
"truncated": false
}⚙ get_doc(KB-PROMO-PINEBUNDLE)
{
"doc_id": "KB-PROMO-PINEBUNDLE"
}{
"doc_id": "KB-PROMO-PINEBUNDLE",
"title": "PINEBUNDLE terms",
"category": "PROMO",
"applies_to": "{\"lines\": [\"AUTO\", \"HOME\"]}",
"body_md": "10% off when the household has >=2 active lines. Cap $500; min premium $250. Stacks with the multi-line discount."
}⚙ query_db(SELECT doc_id, title FROM kb_documents WHERE body_md LIKE '%multi-line%' OR b…)
{
"sql": "SELECT doc_id, title FROM kb_documents WHERE body_md LIKE '%multi-line%' OR body_md LIKE '%multiline%' OR body_md LIKE '%bundle%'"
}{
"rows": [
{
"doc_id": "KB-AUTO-TIERS",
"title": "Auto tiers: Sapling → Pine → Evergreen → Sequoia"
},
{
"doc_id": "KB-PROMO-PINEBUNDLE",
"title": "PINEBUNDLE terms"
}
],
"row_count": 2,
"truncated": false
}⚙ query_db(SELECT policy_id, premium_breakdown FROM policies WHERE cust_id = 'CUST-umbre…)
{
"sql": "SELECT policy_id, premium_breakdown FROM policies WHERE cust_id = 'CUST-umbrella-plus' AND line IN ('HOME','UMBR')"
}{
"rows": [
{
"policy_id": "POL-umbrella-plus-p_home",
"premium_breakdown": "[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"$4.2/$1k \\u00d7 RC $610,000.0\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 256200}, {\"step\": \"BASE\", \"code\": \"tier:EVERGREEN\", \"detail\": \"tier factor \\u00d71.22\", \"factor\": 1.22, \"amount_cents\": null, \"running_cents\": 312564}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.45\", \"factor\": 1.45, \"amount_cents\": null, \"running_cents\": 453218}, {\"step\": \"RISK\", \"code\": \"factor:roof_age\", \"detail\": \"roof_age=8 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 453218}, {\"step\": \"RISK\", \"code\": \"factor:construction\", \"detail\": \"construction=MASONRY \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 430557}, {\"step\": \"RISK\", \"code\": \"factor:protection_class\", \"detail\": \"protection_class=3 \\u00d70.9\", \"factor\": 0.9, \"amount_cents\": null, \"running_cents\": 387501}, {\"step\": \"RISK\", \"code\": \"factor:dist_to_coast_mi\", \"detail\": \"dist_to_coast_mi=220 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 387501}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=772 \\u00d70.88\", \"factor\": 0.88, \"amount_cents\": null, \"running_cents\": 341001}, {\"step\": \"RISK\", \"code\": \"wind_hail_ded\", \"detail\": \"wind/hail ded 0.02 \\u00d70.96\", \"factor\": 0.96, \"amount_cents\": null, \"running_cents\": 327361}, {\"step\": \"COVERAGE\", \"code\": \"SERVICE_LN\", \"detail\": \"+ SERVICE_LN $30\", \"factor\": null, \"amount_cents\": 3000, \"running_cents\": 330361}, {\"step\": \"COVERAGE\", \"code\": \"WATER_BACK\", \"detail\": \"+ WATER_BACK $55\", \"factor\": null, \"amount_cents\": 5500, \"running_cents\": 335861}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 338361}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 287607}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 267475}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 264975}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 257026}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 244175}]"
},
{
"policy_id": "POL-umbrella-plus-p_umbr",
"premium_breakdown": "[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"base_rate $180\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 18000}, {\"step\": \"BASE\", \"code\": \"tier:EVERGREEN\", \"detail\": \"tier factor \\u00d71.55\", \"factor\": 1.55, \"amount_cents\": null, \"running_cents\": 27900}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.15\", \"factor\": 1.15, \"amount_cents\": null, \"running_cents\": 32085}, {\"step\": \"RISK\", \"code\": \"factor:underlying_units\", \"detail\": \"underlying_units=2 \\u00d71.2\", \"factor\": 1.2, \"amount_cents\": null, \"running_cents\": 38502}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=772 \\u00d70.92\", \"factor\": 0.92, \"amount_cents\": null, \"running_cents\": 35422}, {\"step\": \"COVERAGE\", \"code\": \"UM_EXCESS\", \"detail\": \"+ UM_EXCESS $35\", \"factor\": null, \"amount_cents\": 3500, \"running_cents\": 38922}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 41422}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 35209}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 32744}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 30244}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 29337}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 27870}]"
}
],
"row_count": 2,
"truncated": false
}Thanks, Vincent — I've verified your account and checked everything. Here's the picture:
Your policies:
| Policy | Line | Status | Annual premium |
|---|---|---|---|
| POL-umbrella-plus-p_auto | Auto (Evergreen tier) | Active | $863.10 |
| POL-umbrella-plus-p_home | Home (Evergreen tier) | Active | $2,441.75 |
| POL-umbrella-plus-p_umbr | Umbrella | Active | $278.70 |
About the umbrella: PEICO's rule is that an umbrella requires an in-force underlying auto or home policy. Your umbrella is currently recorded against the auto, but since your home policy stays active with us, the home satisfies the requirement — the umbrella remains compliant and in force. Two things to know:
- Your bundle discount survives. Your NEST_PLUS bundle (15% multi-line discount on home and umbrella) stays intact with home + umbrella.
- Your umbrella premium may actually drop slightly — it's currently rated with two underlying policies; with only the home underlying it, the rate re-computes. I'll reprice it after the cancellation and confirm the new number.
One heads-up: cancelling means any liability from your vehicles is no longer covered by us — your umbrella will sit over your new carrier's auto policy for auto exposures, so make sure your new auto liability limits meet your umbrella's underlying-limit requirements with them.
To confirm: you'd like me to cancel POL-umbrella-plus-p_auto (the auto policy) effective today, June 1, 2025, keeping home and umbrella active. Shall I go ahead?
Yes, that sounds right — go ahead and cancel the auto. And once you process that, can you give me the new umbrella premium after the repricing? I want to know what I'll actually be paying now.
⚙ cancel_policy(POL-umbrella-plus-p_auto)
{
"policy_id": "POL-umbrella-plus-p_auto"
}{
"ok": true,
"rows_affected": 1,
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-umbrella-plus-p_auto"
},
"fields": {
"status": [
"ACTIVE",
"CANCELLED"
]
}
}
]
}
}
}⚙ reprice_policy(POL-umbrella-plus-p_umbr, 2025-06-01)
{
"policy_id": "POL-umbrella-plus-p_umbr",
"as_of": "2025-06-01"
}{
"ok": true,
"as_of": "2025-06-01",
"base_premium_cents": 35518,
"final_premium_cents": 23570,
"breakdown": [
{
"step": "BASE",
"code": "base",
"detail": "base_rate $180",
"factor": null,
"amount_cents": null,
"running_cents": 18000
},
{
"step": "BASE",
"code": "tier:EVERGREEN",
"detail": "tier factor ×1.55",
"factor": 1.55,
"amount_cents": null,
"running_cents": 27900
},
{
"step": "BASE",
"code": "region:R-SE",
"detail": "region factor ×1.15",
"factor": 1.15,
"amount_cents": null,
"running_cents": 32085
},
{
"step": "RISK",
"code": "factor:underlying_units",
"detail": "underlying_units=1 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 32085
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=772 ×0.92",
"factor": 0.92,
"amount_cents": null,
"running_cents": 29518
},
{
"step": "COVERAGE",
"code": "UM_EXCESS",
"detail": "+ UM_EXCESS $35",
"factor": null,
"amount_cents": 3500,
"running_cents": 33018
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 35518
},
{
"step": "DISCOUNT",
"code": "MULTILINE",
"detail": "−15%",
"factor": 0.85,
"amount_cents": null,
"running_cents": 30190
},
{
"step": "DISCOUNT",
"code": "PAID_IN_FULL",
"detail": "−7%",
"factor": 0.9299999999999999,
"amount_cents": null,
"running_cents": 28077
},
{
"step": "DISCOUNT",
"code": "PAPERLESS",
"detail": "−$25",
"factor": null,
"amount_cents": -2500,
"running_cents": 25577
},
{
"step": "DISCOUNT",
"code": "AUTOPAY",
"detail": "−3%",
"factor": 0.97,
"amount_cents": null,
"running_cents": 24810
},
{
"step": "DISCOUNT",
"code": "LOYALTY",
"detail": "−5%",
"factor": 0.95,
"amount_cents": null,
"running_cents": 23570
}
],
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-umbrella-plus-p_umbr"
},
"fields": {
"rating_as_of": [
"2025-02-10",
"2025-06-01"
],
"base_premium_cents": [
41422,
35518
],
"final_premium_cents": [
27870,
23570
],
"premium_breakdown": [
"[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"base_rate $180\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 18000}, {\"step\": \"BASE\", \"code\": \"tier:EVERGREEN\", \"detail\": \"tier factor \\u00d71.55\", \"factor\": 1.55, \"amount_cents\": null, \"running_cents\": 27900}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.15\", \"factor\": 1.15, \"amount_cents\": null, \"running_cents\": 32085}, {\"step\": \"RISK\", \"code\": \"factor:underlying_units\", \"detail\": \"underlying_units=2 \\u00d71.2\", \"factor\": 1.2, \"amount_cents\": null, \"running_cents\": 38502}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=772 \\u00d70.92\", \"factor\": 0.92, \"amount_cents\": null, \"running_cents\": 35422}, {\"step\": \"COVERAGE\", \"code\": \"UM_EXCESS\", \"detail\": \"+ UM_EXCESS $35\", \"factor\": null, \"amount_cents\": 3500, \"running_cents\": 38922}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 41422}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 35209}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 32744}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 30244}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 29337}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 27870}]",
"[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"base_rate $180\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 18000}, {\"step\": \"BASE\", \"code\": \"tier:EVERGREEN\", \"detail\": \"tier factor \\u00d71.55\", \"factor\": 1.55, \"amount_cents\": null, \"running_cents\": 27900}, {\"step\": \"BASE\", \"code\": \"region:R-SE\", \"detail\": \"region factor \\u00d71.15\", \"factor\": 1.15, \"amount_cents\": null, \"running_cents\": 32085}, {\"step\": \"RISK\", \"code\": \"factor:underlying_units\", \"detail\": \"underlying_units=1 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 32085}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=772 \\u00d70.92\", \"factor\": 0.92, \"amount_cents\": null, \"running_cents\": 29518}, {\"step\": \"COVERAGE\", \"code\": \"UM_EXCESS\", \"detail\": \"+ UM_EXCESS $35\", \"factor\": null, \"amount_cents\": 3500, \"running_cents\": 33018}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 35518}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 30190}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 28077}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 25577}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 24810}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 23570}]"
]
}
}
]
}
}
}All done, Vincent. Here's the summary:
✅ Auto policy POL-umbrella-plus-p_auto is cancelled effective today, June 1, 2025.
✅ Umbrella repriced — your new umbrella premium is $235.70/year, down from $278.70. The drop comes from the "underlying units" factor: it was rated with two underlying policies (×1.2), and now with just the home it's ×1.0. All your discounts carried through, including the 15% multi-line bundle discount, paid-in-full, paperless, autopay, and loyalty.
✅ Home policy is untouched — still active at $2,441.75/year, bundle discount intact.
One last reminder: since your umbrella now sits over your new carrier's auto policy for vehicle liability, double-check that your new auto liability limits meet the umbrella's underlying-limit requirements. Any premium refund due on the cancelled auto policy will be handled by billing as a prorated adjustment.
Anything else I can help with?
No, that's perfect — thank you so much. That's exactly what I needed to know. I appreciate you walking me through the umbrella piece and getting me the new rate. Thanks again.
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}Thanks again for being a PEICO customer, Vincent — have a great day!