GPT-5.5 (medium)

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.

Passedcustomer: Vincent Okonkwo · 9 turns · 95s · $0.34 · 149k tok in

Verdicts

DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep cancelled only the auto policy, correctly confirmed the umbrella remained compliant due to the active home policy, and provided the correct repriced umbrella figure ($235.70, down from $278.70), satisfying all rubric requirements.

Conversation

Agent

Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?

Customer

Hi, thanks for taking my call. 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 want to keep my home and umbrella policies with you — I just need to make sure the umbrella is still okay after I drop the auto.

Agent

I can help with that, and you’re right to check the umbrella before cancelling the auto.

To look up your account and review the dependency rules, please provide a couple of details to verify your identity — for example:

  • Your PEICO policy number or legacy account number
  • Your full name
  • Date of birth
  • ZIP code or phone number on the account

Once verified, I’ll check your auto, home, and umbrella policies, confirm whether the umbrella can remain in force without the PEICO auto policy, and then we can handle the cancellation effective today if it’s allowed.

4,759 in · 168 out · $0.0098 · 3.9s
Customer

Okay, sure. My name is Vincent Okonkwo, my ZIP is 30303, and my date of birth is October 8, 1976. I don't have my policy number handy, but that should do it.

Agent
query_db(SELECT c.cust_id, c.legacy_acct, c.status, c.first_name, c.last_name, c.dob, …)
{
  "sql": "SELECT c.cust_id, c.legacy_acct, c.status, c.first_name, c.last_name, c.dob, c.email, c.phone, a.zip, a.state, a.region FROM customers c JOIN addresses a ON c.address_id=a.address_id WHERE c.first_name='Vincent' AND c.last_name='Okonkwo' AND c.dob='1976-10-08' AND a.zip='30303'"
}
{
  "rows": [
    {
      "cust_id": "CUST-umbrella-plus",
      "legacy_acct": null,
      "status": "CUSTOMER",
      "first_name": "Vincent",
      "last_name": "Okonkwo",
      "dob": "1976-10-08",
      "email": "vincent.okonkwo@example.com",
      "phone": null,
      "zip": "30303",
      "state": "GA",
      "region": "R-SE"
    }
  ],
  "row_count": 1,
  "truncated": false
}
query_db(SELECT p.policy_id, p.line, pl.label AS line_label, p.tier_id, t.code AS tier…)
{
  "sql": "SELECT p.policy_id, p.line, pl.label AS line_label, p.tier_id, t.code AS tier_code, p.status, p.effective_date, p.expiration_date, p.underlying_policy_id, p.bundle_id, p.final_premium_cents, p.rating_inputs FROM policies p LEFT JOIN product_lines pl ON p.line=pl.line LEFT JOIN tiers t ON p.tier_id=t.tier_id WHERE p.cust_id='CUST-umbrella-plus' ORDER BY p.line, p.policy_id"
}
{
  "rows": [
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "line": "AUTO",
      "line_label": "Auto",
      "tier_id": "AUTO:EVERGREEN",
      "tier_code": "EVERGREEN",
      "status": "ACTIVE",
      "effective_date": "2025-02-10",
      "expiration_date": "2026-02-10",
      "underlying_policy_id": null,
      "bundle_id": "BND-umbrella-plus",
      "final_premium_cents": 86310,
      "rating_inputs": "{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": true, \"paperless\": true}, \"incidents_5yr\": 0, \"smoker\": false, \"promo_code\": null}"
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "line": "HOME",
      "line_label": "Homeowners",
      "tier_id": "HOME:EVERGREEN",
      "tier_code": "EVERGREEN",
      "status": "ACTIVE",
      "effective_date": "2025-02-10",
      "expiration_date": "2026-02-10",
      "underlying_policy_id": null,
      "bundle_id": "BND-umbrella-plus",
      "final_premium_cents": 244175,
      "rating_inputs": "{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": true, \"paperless\": true}, \"incidents_5yr\": 0, \"smoker\": false, \"promo_code\": null}"
    },
    {
      "policy_id": "POL-umbrella-plus-p_umbr",
      "line": "UMBR",
      "line_label": "Personal Umbrella",
      "tier_id": "UMBR:EVERGREEN",
      "tier_code": "EVERGREEN",
      "status": "ACTIVE",
      "effective_date": "2025-02-10",
      "expiration_date": "2026-02-10",
      "underlying_policy_id": "POL-umbrella-plus-p_auto",
      "bundle_id": "BND-umbrella-plus",
      "final_premium_cents": 27870,
      "rating_inputs": "{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": true, \"paperless\": true}, \"incidents_5yr\": 0, \"smoker\": false, \"promo_code\": null}"
    }
  ],
  "row_count": 3,
  "truncated": false
}
query_db(SELECT policy_id, object_type, object_id FROM policy_objects WHERE policy_id …)
{
  "sql": "SELECT policy_id, object_type, object_id FROM policy_objects WHERE policy_id IN (SELECT policy_id FROM policies WHERE cust_id='CUST-umbrella-plus')"
}
{
  "rows": [
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "object_type": "vehicle",
      "object_id": "VEH-umbrella-plus-v1"
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "object_type": "dwelling",
      "object_id": "DWL-umbrella-plus-d1"
    }
  ],
  "row_count": 2,
  "truncated": false
}
search_kb(umbrella underlying auto home cancellation requirement dependency, 5)
{
  "query": "umbrella underlying auto home cancellation requirement dependency",
  "limit": 5
}
{
  "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-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-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-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…"
    }
  ]
}
query_db(SELECT b.bundle_id, b.code, b.discount_id, b.created_at, d.code AS discount_c…)
{
  "sql": "SELECT b.bundle_id, b.code, b.discount_id, b.created_at, d.code AS discount_code, d.label, d.eligibility, d.notes FROM bundles b LEFT JOIN discounts d ON b.discount_id=d.discount_id WHERE b.cust_id='CUST-umbrella-plus'"
}
{
  "rows": [
    {
      "bundle_id": "BND-umbrella-plus",
      "code": "NEST_PLUS",
      "discount_id": "DISC-MULTILINE",
      "created_at": "2025-06-01",
      "discount_code": "MULTILINE",
      "label": "Multi-Line (Bundle)",
      "eligibility": "household has an active bundle (NEST/NEST_PLUS/FAMILY_TREE/ROOST)",
      "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-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 er.rule_id, er.line, er.tier_id, er.coverage_id, er.state, er.effect, …)
{
  "sql": "SELECT er.rule_id, er.line, er.tier_id, er.coverage_id, er.state, er.effect, er.condition, er.effective_start, er.effective_end, er.reason_doc, er.notes FROM eligibility_rules er WHERE er.line='UMBR' AND (er.state IS NULL OR er.state='GA')"
}
{
  "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
}
query_db(SELECT pc.policy_id, c.code, c.label, c.kind, c.unit, pc.value, pc.premium_co…)
{
  "sql": "SELECT pc.policy_id, c.code, c.label, c.kind, c.unit, pc.value, pc.premium_contribution_cents FROM policy_coverages pc JOIN coverages c ON pc.coverage_id=c.coverage_id WHERE pc.policy_id IN ('POL-umbrella-plus-p_auto','POL-umbrella-plus-p_home','POL-umbrella-plus-p_umbr') ORDER BY pc.policy_id, c.code"
}
{
  "rows": [
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "BI",
      "label": "Bodily Injury Liability",
      "kind": "limit",
      "unit": "usd_split",
      "value": "10000000/30000000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "COLL",
      "label": "Collision",
      "kind": "deductible",
      "unit": "usd",
      "value": "50000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "COMP",
      "label": "Comprehensive",
      "kind": "deductible",
      "unit": "usd",
      "value": "50000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "GAP",
      "label": "Loan/Lease Gap",
      "kind": "flag",
      "unit": "bool",
      "value": "true",
      "premium_contribution_cents": 6000
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "MED",
      "label": "Medical Payments",
      "kind": "limit",
      "unit": "usd",
      "value": "500000",
      "premium_contribution_cents": 4500
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "PD",
      "label": "Property Damage Liability",
      "kind": "limit",
      "unit": "usd",
      "value": "10000000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "RENT_REIMB",
      "label": "Rental Reimbursement",
      "kind": "limit",
      "unit": "usd",
      "value": "90000",
      "premium_contribution_cents": 3000
    },
    {
      "policy_id": "POL-umbrella-plus-p_auto",
      "code": "UMUIM",
      "label": "Uninsured/Underinsured Motorist",
      "kind": "limit",
      "unit": "usd_split",
      "value": "10000000/30000000",
      "premium_contribution_cents": 11000
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "CONTENTS",
      "label": "Personal Property (Coverage C)",
      "kind": "limit",
      "unit": "usd",
      "value": "10000000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "DEDUCT",
      "label": "All-Peril Deductible",
      "kind": "deductible",
      "unit": "usd",
      "value": "100000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "DWELL",
      "label": "Dwelling (Coverage A)",
      "kind": "limit",
      "unit": "usd",
      "value": null,
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "LIAB",
      "label": "Personal Liability (Coverage E)",
      "kind": "limit",
      "unit": "usd",
      "value": "50000000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "LOSS_USE",
      "label": "Loss of Use (Coverage D)",
      "kind": "limit",
      "unit": "usd",
      "value": null,
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "MEDPAY",
      "label": "Medical Payments (Coverage F)",
      "kind": "limit",
      "unit": "usd",
      "value": "500000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "OTHER_STR",
      "label": "Other Structures (Coverage B)",
      "kind": "limit",
      "unit": "usd",
      "value": null,
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "SERVICE_LN",
      "label": "Service Line",
      "kind": "flag",
      "unit": "bool",
      "value": "true",
      "premium_contribution_cents": 3000
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "WATER_BACK",
      "label": "Water Backup",
      "kind": "limit",
      "unit": "usd",
      "value": "1000000",
      "premium_contribution_cents": 5500
    },
    {
      "policy_id": "POL-umbrella-plus-p_home",
      "code": "WIND_HAIL",
      "label": "Wind/Hail Deductible",
      "kind": "deductible",
      "unit": "pct",
      "value": "0.02",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_umbr",
      "code": "LIMIT",
      "label": "Umbrella Liability Limit",
      "kind": "limit",
      "unit": "usd",
      "value": "200000000",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_umbr",
      "code": "SIR",
      "label": "Self-Insured Retention",
      "kind": "deductible",
      "unit": "usd",
      "value": "0",
      "premium_contribution_cents": null
    },
    {
      "policy_id": "POL-umbrella-plus-p_umbr",
      "code": "UM_EXCESS",
      "label": "Excess UM/UIM",
      "kind": "flag",
      "unit": "bool",
      "value": "true",
      "premium_contribution_cents": 3500
    }
  ],
  "row_count": 21,
  "truncated": false
}
query_db(SELECT p.policy_id, p.line, p.status, p.underlying_policy_id FROM policies p …)
{
  "sql": "SELECT p.policy_id, p.line, p.status, p.underlying_policy_id FROM policies p WHERE p.underlying_policy_id='POL-umbrella-plus-p_auto' AND p.status='ACTIVE'"
}
{
  "rows": [
    {
      "policy_id": "POL-umbrella-plus-p_umbr",
      "line": "UMBR",
      "status": "ACTIVE",
      "underlying_policy_id": "POL-umbrella-plus-p_auto"
    }
  ],
  "row_count": 1,
  "truncated": false
}
search_kb(umbrella minimum liability limits home auto underlying, 5)
{
  "query": "umbrella minimum liability limits home auto underlying",
  "limit": 5
}
{
  "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-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-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-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"
    }
  ]
}
query_db(SELECT er.rule_id, er.line, er.coverage_id, er.state, er.effect, er.condition…)
{
  "sql": "SELECT er.rule_id, er.line, er.coverage_id, er.state, er.effect, er.condition, er.reason_doc, er.notes FROM eligibility_rules er WHERE er.line='UMBR' AND (er.condition LIKE '%limit%' OR er.notes LIKE '%limit%' OR er.condition LIKE '%underlying%')"
}
{
  "rows": [
    {
      "rule_id": "ELIG-UMBR-UNDERLYING",
      "line": "UMBR",
      "coverage_id": null,
      "state": null,
      "effect": "REQUIRE",
      "condition": "in_force_underlying_in [AUTO, HOME]",
      "reason_doc": "KB-UMBR-UNDERLYING",
      "notes": "Umbrella cannot bind without an in-force underlying auto or home policy."
    }
  ],
  "row_count": 1,
  "truncated": false
}

Thanks, Vincent — I found and verified your account.

You currently have three active PEICO policies:

  • Auto: POL-umbrella-plus-p_auto
  • Homeowners: POL-umbrella-plus-p_home
  • Personal Umbrella: POL-umbrella-plus-p_umbr

I checked the umbrella underwriting rule. PEICO’s umbrella requires an in-force underlying auto or home policy. Since you’re keeping your PEICO homeowners policy active, cancelling the PEICO auto policy should not by itself make the umbrella non-compliant.

One important note: your umbrella record currently points to the auto policy as its listed underlying policy, even though the rule allows auto or home. If I cancel the auto, the system may still show that dependency until the umbrella is updated/reviewed. Also, your policies are in a multi-line bundle, so cancelling auto may affect bundle pricing on the remaining home/umbrella policies.

Before I cancel anything, please confirm: do you want me to cancel auto policy POL-umbrella-plus-p_auto effective today, 2025-06-01, while leaving your home and umbrella policies active?

35k in · 1,221 out · $0.10 · 18.8s
Customer

Yes, that's right — cancel the auto policy effective today. And since you mentioned the bundle pricing, can you tell me what my umbrella premium will be after the auto is cancelled? I want to know the actual dollar amount so I can see what changes.

Agent
price_check(POL-umbrella-plus-p_umbr, 2025-06-01)
{
  "policy_id": "POL-umbrella-plus-p_umbr",
  "as_of": "2025-06-01"
}
{
  "as_of": "2025-06-01",
  "facts": {
    "line": "UMBR",
    "tier": "EVERGREEN",
    "region": "R-SE",
    "state": "GA",
    "term_months": 12,
    "peico_risk": 772,
    "age": 48,
    "billing_plan": "PAY_IN_FULL",
    "autopay": true,
    "paperless": true,
    "loyalty_tier": "Timber",
    "status": "CUSTOMER",
    "has_bundle": true,
    "active_lines": 3,
    "is_new_first_policy": false,
    "promo_code": null,
    "coverages": [
      "UM_EXCESS"
    ],
    "underlying_units": 2
  },
  "base_premium_cents": 41422,
  "final_premium_cents": 27870,
  "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=2 ×1.2",
      "factor": 1.2,
      "amount_cents": null,
      "running_cents": 38502
    },
    {
      "step": "RISK",
      "code": "factor:risk_score",
      "detail": "risk_score=772 ×0.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": "−15%",
      "factor": 0.85,
      "amount_cents": null,
      "running_cents": 35209
    },
    {
      "step": "DISCOUNT",
      "code": "PAID_IN_FULL",
      "detail": "−7%",
      "factor": 0.9299999999999999,
      "amount_cents": null,
      "running_cents": 32744
    },
    {
      "step": "DISCOUNT",
      "code": "PAPERLESS",
      "detail": "−$25",
      "factor": null,
      "amount_cents": -2500,
      "running_cents": 30244
    },
    {
      "step": "DISCOUNT",
      "code": "AUTOPAY",
      "detail": "−3%",
      "factor": 0.97,
      "amount_cents": null,
      "running_cents": 29337
    },
    {
      "step": "DISCOUNT",
      "code": "LOYALTY",
      "detail": "−5%",
      "factor": 0.95,
      "amount_cents": null,
      "running_cents": 27870
    }
  ]
}
search_kb(cancel auto umbrella underlying policy points to auto substitute home workflo…)
{
  "query": "cancel auto umbrella underlying policy points to auto substitute home workflow",
  "limit": 8
}
{
  "results": [
    {
      "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-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-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-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-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-CLAIMS-STATUS",
      "title": "Claim status: FNOL → OPEN → CLOSED, and who may move it",
      "category": "POLICY",
      "applies_to": "{\"lines\": \"ALL\"}",
      "snippet": "**FNOL** = loss reported, not yet accepted for handling. **OPEN** = accepted\nand with an adjuster (the adjuster sets the reserve). **CLOSED** = resolved.\nA service rep may promote FNOL → OPEN once the loss details are confirmed\nwith the cus…"
    }
  ]
}
search_kb(NEST_PLUS bundle minimum lines cancel policy bundle rerate eligibility, 8)
{
  "query": "NEST_PLUS bundle minimum lines cancel policy bundle rerate eligibility",
  "limit": 8
}
{
  "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-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-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-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-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-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-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-FREELOOK",
      "title": "Free-look period",
      "category": "COMPLIANCE",
      "applies_to": "{\"lines\": [\"LIFE_T\", \"LIFE_W\", \"HLTH\"]}",
      "snippet": "The customer may cancel within the **free-look period** (30 days for life, 10 days\nfor supplemental health) after policy delivery for a full refund of premium paid.\nThe period and refund right must be disclosed at bind and recorded.\n"
    }
  ]
}
query_db(SELECT discount_id, code, label, effect, stack_order, eligibility, notes FROM…)
{
  "sql": "SELECT discount_id, code, label, effect, stack_order, eligibility, notes FROM discounts WHERE code LIKE '%MULTI%' OR eligibility LIKE '%bundle%' OR notes LIKE '%bundle%'"
}
{
  "rows": [
    {
      "discount_id": "DISC-MULTILINE",
      "code": "MULTILINE",
      "label": "Multi-Line (Bundle)",
      "effect": "{\"type\": \"PCT_OFF\", \"value\": 0.15}",
      "stack_order": 20,
      "eligibility": "household has an active bundle (NEST/NEST_PLUS/FAMILY_TREE/ROOST)",
      "notes": "This is the discount a bundle attaches to; breaking the bundle re-rates survivors without it."
    }
  ],
  "row_count": 1,
  "truncated": false
}
query_db(SELECT promo_code, label, scope, effect, stacks_with, caps, active, notes FRO…)
{
  "sql": "SELECT promo_code, label, scope, effect, stacks_with, caps, active, notes FROM promotions WHERE scope LIKE '%bundle%' OR notes LIKE '%bundle%' OR label LIKE '%bundle%'"
}
{
  "rows": [
    {
      "promo_code": "PINEBUNDLE",
      "label": "Pine Bundle Boost",
      "scope": "{\"lines\": [\"AUTO\", \"HOME\"], \"regions\": \"ALL\", \"customer\": \"ANY\", \"requires_active_lines\": 2}",
      "effect": "{\"type\": \"PCT_OFF\", \"value\": 0.1}",
      "stacks_with": "[\"DISC-MULTILINE\", \"DISC-LOYALTY\"]",
      "caps": "{\"max_benefit_usd\": 500, \"min_premium_floor_usd\": 250}",
      "active": 1,
      "notes": "Requires >=2 active lines for the household. Pairs with the NEST bundle discount."
    }
  ],
  "row_count": 1,
  "truncated": false
}
quote(2025-06-01, {"line":"UMBR","tier":"EVERGREEN","region":"R-SE","state":"GA","t…)
{
  "as_of": "2025-06-01",
  "facts": {
    "line": "UMBR",
    "tier": "EVERGREEN",
    "region": "R-SE",
    "state": "GA",
    "term_months": 12,
    "peico_risk": 772,
    "age": 48,
    "billing_plan": "PAY_IN_FULL",
    "autopay": true,
    "paperless": true,
    "loyalty_tier": "Timber",
    "status": "CUSTOMER",
    "has_bundle": true,
    "active_lines": 2,
    "is_new_first_policy": false,
    "promo_code": null,
    "coverages": [
      "UM_EXCESS"
    ],
    "underlying_units": 1
  }
}
{
  "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
    }
  ]
}
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}]"
            ]
          }
        }
      ]
    }
  }
}
reprice_policy(POL-umbrella-plus-p_home, 2025-06-01)
{
  "policy_id": "POL-umbrella-plus-p_home",
  "as_of": "2025-06-01"
}
{
  "ok": true,
  "as_of": "2025-06-01",
  "base_premium_cents": 338361,
  "final_premium_cents": 244175,
  "breakdown": [
    {
      "step": "BASE",
      "code": "base",
      "detail": "$4.2/$1k × RC $610,000.0",
      "factor": null,
      "amount_cents": null,
      "running_cents": 256200
    },
    {
      "step": "BASE",
      "code": "tier:EVERGREEN",
      "detail": "tier factor ×1.22",
      "factor": 1.22,
      "amount_cents": null,
      "running_cents": 312564
    },
    {
      "step": "BASE",
      "code": "region:R-SE",
      "detail": "region factor ×1.45",
      "factor": 1.45,
      "amount_cents": null,
      "running_cents": 453218
    },
    {
      "step": "RISK",
      "code": "factor:roof_age",
      "detail": "roof_age=8 ×1.0",
      "factor": 1,
      "amount_cents": null,
      "running_cents": 453218
    },
    {
      "step": "RISK",
      "code": "factor:construction",
      "detail": "construction=MASONRY ×0.95",
      "factor": 0.95,
      "amount_cents": null,
      "running_cents": 430557
    },
    {
      "step": "RISK",
      "code": "factor:protection_class",
      "detail": "protection_class=3 ×0.9",
      "factor": 0.9,
      "amount_cents": null,
      "running_cents": 387501
    },
    {
      "step": "RISK",
      "code": "factor:dist_to_coast_mi",
      "detail": "dist_to_coast_mi=220 ×1.0",
      "factor": 1,
      "amount_cents": null,
      "running_cents": 387501
    },
    {
      "step": "RISK",
      "code": "factor:risk_score",
      "detail": "risk_score=772 ×0.88",
      "factor": 0.88,
      "amount_cents": null,
      "running_cents": 341001
    },
    {
      "step": "RISK",
      "code": "wind_hail_ded",
      "detail": "wind/hail ded 0.02 ×0.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": "−15%",
      "factor": 0.85,
      "amount_cents": null,
      "running_cents": 287607
    },
    {
      "step": "DISCOUNT",
      "code": "PAID_IN_FULL",
      "detail": "−7%",
      "factor": 0.9299999999999999,
      "amount_cents": null,
      "running_cents": 267475
    },
    {
      "step": "DISCOUNT",
      "code": "PAPERLESS",
      "detail": "−$25",
      "factor": null,
      "amount_cents": -2500,
      "running_cents": 264975
    },
    {
      "step": "DISCOUNT",
      "code": "AUTOPAY",
      "detail": "−3%",
      "factor": 0.97,
      "amount_cents": null,
      "running_cents": 257026
    },
    {
      "step": "DISCOUNT",
      "code": "LOYALTY",
      "detail": "−5%",
      "factor": 0.95,
      "amount_cents": null,
      "running_cents": 244175
    }
  ],
  "changeset": {
    "policies": {
      "changed": [
        {
          "pk": {
            "policy_id": "POL-umbrella-plus-p_home"
          },
          "fields": {
            "rating_as_of": [
              "2025-02-10",
              "2025-06-01"
            ]
          }
        }
      ]
    }
  }
}

Done — I cancelled your PEICO auto policy POL-umbrella-plus-p_auto today.

I also repriced the remaining policies after the cancellation. Your umbrella premium is now $235.70 for the current 12-month term.

For comparison, before the auto cancellation your umbrella premium was $278.70, so the umbrella premium decreased by $43.00. The multi-line discount is still being applied because you still have two active PEICO lines: home + umbrella.

Your homeowners policy remains active, and its premium stayed at $2,441.75 after reprice.

One note: the umbrella is still eligible because your PEICO home policy remains active, but the old umbrella record had referenced the auto policy as the listed underlying policy. The rating now reflects one remaining underlying policy. If you need updated declarations showing the home policy as the underlying, that may require an umbrella servicing update/review.

Is there anything else you’d like me to check on this cancellation or your remaining policies?

76k in · 3,466 out · $0.20 · 60.6s
Customer

Perfect, that's exactly what I needed. The umbrella is still good, and I'm saving $43 a month — that works out great. Thanks for handling that and for double-checking the coverage before cancelling the auto. I appreciate it.

Agent
end_conversation()
{}
{
  "ok": true,
  "note": "Deliver your closing message now."
}

You’re very welcome, Vincent. I’m glad we could confirm the umbrella stays in place and get the auto cancellation handled today.

Thanks for staying with PEICO for your home and umbrella coverage — have a great day!

34k in · 105 out · $0.02 · 4.4s