payinfull-switch-savings
Grading criteriawhat this conversation was scored against
DB end-state
The database must be left untouched: the correct outcome for this case is no writes at all.
Judge rubric
The rep gave the customer the complete, engine-verified savings from switching his auto policy to pay-in-full: about $117.81 per 6-month term (equivalently: his term premium going from about $1,204.68 to about $1,086.87). The savings has TWO components — dropping the $36 fractional-pay surcharge AND gaining the 7% paid-in-full discount — and the rep's final answer must reflect the combined figure. Accept any final savings figure within a few dollars of $117.81 per term (or a new term total within a few dollars of $1,086.87) — e.g., ~$116 from a slightly different fee/discount ordering is a PASS; the tolerance is a couple of dollars, not tens. Telling him only that he'd avoid the ~$36 installment fee, and never producing the combined figure even after he pushes for the full number, is a fail. Giving a materially different combined figure (tens of dollars off — e.g., ~$197 per term, which comes from pricing a 12-month policy instead of his actual 6-month term) is a fail. The rep must not change his billing plan or anything else on this call — he explicitly isn't switching today; describing how to make the switch at renewal is fine.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep provided the correct combined savings figure ($117.81, from $1,204.68 to $1,086.87 for the 6-month term), correctly explained both components, and did not change the billing plan.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hey, thanks for picking up. I'm Raymond Castillo. I just got a bonus at work and I'm thinking about paying my next auto insurance term in full instead of doing monthly installments. Before I commit to anything, I need to know exactly how much I'd save by doing that. Can you run those numbers for me?
⚙ query_db(SELECT cust_id, first_name, last_name, email, phone, status FROM customers WH…)
{
"sql": "SELECT cust_id, first_name, last_name, email, phone, status FROM customers WHERE first_name='Raymond' AND last_name='Castillo'"
}{
"rows": [
{
"cust_id": "CUST-legacy-mismatch",
"first_name": "Raymond",
"last_name": "Castillo",
"email": "raymond.castillo@example.com",
"phone": null,
"status": "CUSTOMER"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT policy_id, line, tier_id, status, effective_date, expiration_date, ter…)
{
"sql": "SELECT policy_id, line, tier_id, status, effective_date, expiration_date, term_months, base_premium_cents, final_premium_cents, rating_as_of FROM policies WHERE cust_id='CUST-legacy-mismatch'"
}{
"rows": [
{
"policy_id": "POL-legacy-mismatch-p_auto",
"line": "AUTO",
"tier_id": "AUTO:PINE",
"status": "ACTIVE",
"effective_date": "2025-02-20",
"expiration_date": "2025-08-20",
"term_months": 6,
"base_premium_cents": 120468,
"final_premium_cents": 120468,
"rating_as_of": "2025-02-20"
}
],
"row_count": 1,
"truncated": false
}⚙ price_check(POL-legacy-mismatch-p_auto, 2025-06-01)
{
"policy_id": "POL-legacy-mismatch-p_auto",
"as_of": "2025-06-01"
}{
"as_of": "2025-06-01",
"facts": {
"line": "AUTO",
"tier": "PINE",
"region": "R-SW",
"state": "TX",
"term_months": 6,
"peico_risk": 616,
"age": 50,
"billing_plan": "INSTALLMENTS",
"autopay": false,
"paperless": false,
"loyalty_tier": "Sprout",
"status": "CUSTOMER",
"has_bundle": false,
"active_lines": 1,
"is_new_first_policy": false,
"promo_code": null,
"coverages": [],
"driver_age": 50,
"annual_miles": 16000,
"vehicle_age": 7,
"incidents_5yr": 2,
"exposure_count": 1
},
"base_premium_cents": 120468,
"final_premium_cents": 120468,
"breakdown": [
{
"step": "BASE",
"code": "base",
"detail": "base_rate $900",
"factor": null,
"amount_cents": null,
"running_cents": 90000
},
{
"step": "BASE",
"code": "tier:PINE",
"detail": "tier factor ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 90000
},
{
"step": "BASE",
"code": "region:R-SW",
"detail": "region factor ×1.12",
"factor": 1.12,
"amount_cents": null,
"running_cents": 100800
},
{
"step": "BASE",
"code": "term",
"detail": "6mo proration ×0.5",
"factor": 0.5,
"amount_cents": null,
"running_cents": 50400
},
{
"step": "RISK",
"code": "factor:driver_age",
"detail": "driver_age=50 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 50400
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=616 ×1.22",
"factor": 1.22,
"amount_cents": null,
"running_cents": 61488
},
{
"step": "RISK",
"code": "factor:annual_miles",
"detail": "annual_miles=16000 ×1.2",
"factor": 1.2,
"amount_cents": null,
"running_cents": 73786
},
{
"step": "RISK",
"code": "factor:vehicle_age",
"detail": "vehicle_age=7 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 73786
},
{
"step": "RISK",
"code": "factor:incidents_5yr",
"detail": "incidents_5yr=2 ×1.55",
"factor": 1.55,
"amount_cents": null,
"running_cents": 114368
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 116868
},
{
"step": "FEES",
"code": "installment",
"detail": "+ fractional-pay surcharge",
"factor": null,
"amount_cents": 3600,
"running_cents": 120468
}
]
}⚙ quote({"line":"AUTO","tier":"PINE","region":"R-SW","state":"TX","term_months":6,"pe…)
{
"facts": {
"line": "AUTO",
"tier": "PINE",
"region": "R-SW",
"state": "TX",
"term_months": 6,
"peico_risk": 616,
"age": 50,
"billing_plan": "PAY_IN_FULL",
"autopay": false,
"paperless": false,
"loyalty_tier": "Sprout",
"status": "CUSTOMER",
"has_bundle": false,
"active_lines": 1,
"is_new_first_policy": false,
"promo_code": null,
"coverages": [],
"driver_age": 50,
"annual_miles": 16000,
"vehicle_age": 7,
"incidents_5yr": 2,
"exposure_count": 1
},
"as_of": "2025-06-01"
}{
"as_of": "2025-06-01",
"base_premium_cents": 116868,
"final_premium_cents": 108687,
"breakdown": [
{
"step": "BASE",
"code": "base",
"detail": "base_rate $900",
"factor": null,
"amount_cents": null,
"running_cents": 90000
},
{
"step": "BASE",
"code": "tier:PINE",
"detail": "tier factor ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 90000
},
{
"step": "BASE",
"code": "region:R-SW",
"detail": "region factor ×1.12",
"factor": 1.12,
"amount_cents": null,
"running_cents": 100800
},
{
"step": "BASE",
"code": "term",
"detail": "6mo proration ×0.5",
"factor": 0.5,
"amount_cents": null,
"running_cents": 50400
},
{
"step": "RISK",
"code": "factor:driver_age",
"detail": "driver_age=50 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 50400
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=616 ×1.22",
"factor": 1.22,
"amount_cents": null,
"running_cents": 61488
},
{
"step": "RISK",
"code": "factor:annual_miles",
"detail": "annual_miles=16000 ×1.2",
"factor": 1.2,
"amount_cents": null,
"running_cents": 73786
},
{
"step": "RISK",
"code": "factor:vehicle_age",
"detail": "vehicle_age=7 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 73786
},
{
"step": "RISK",
"code": "factor:incidents_5yr",
"detail": "incidents_5yr=2 ×1.55",
"factor": 1.55,
"amount_cents": null,
"running_cents": 114368
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 116868
},
{
"step": "DISCOUNT",
"code": "PAID_IN_FULL",
"detail": "−7%",
"factor": 0.9299999999999999,
"amount_cents": null,
"running_cents": 108687
}
]
}Great news, Raymond — here's the exact comparison for your auto policy (POL-...-p_auto, AUTO PINE tier, 6-month term):
Current — monthly installments:
- Premium per 6-month term: $1,204.68
- This includes a $36.00 installment surcharge
If you switch to pay-in-full:
- Premium per 6-month term: $1,086.87
- The $36 installment surcharge goes away, and you earn a 7% paid-in-full discount
Your savings: $117.81 per 6-month term (about $235.62 a year if you keep it up).
Nothing has been changed on your account — this was just a price check. Would you like me to go ahead and switch your billing to pay-in-full?
Perfect — that's exactly what I needed. So $117.81 per term, that's real savings. I appreciate you breaking it down with the actual numbers. I'm gonna think it over before my renewal comes up, but I definitely have what I need to make the call. Thanks for running that for me.
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}Thanks again for reaching out, Raymond — take care, and we're here whenever you decide!