welcome15-prospect-bind-chain
Grading criteriawhat this conversation was scored against
DB end-state
{
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-prospect-il-auto-q2_auto"
},
"fields": {
"rating_inputs": [
"*",
"*"
],
"final_premium_cents": [
73018,
62065
],
"premium_breakdown": [
"*",
"*"
],
"status": [
"QUOTE",
"ACTIVE"
],
"expiration_date": [
null,
"2026-06-01"
]
},
"may_change": {
"rating_as_of": [
"*",
"*"
]
}
}
]
}
}Judge rubric
The rep completed the whole chain on this call: (1) recognized the customer qualifies for WELCOME15 (a brand-new customer binding his first policy, auto line, promo active and in window) — telling him he doesn't qualify is a fail; (2) attached the promo AND repriced so the discount actually landed, quoting the honest discounted figure (about $620.65/yr, down from $730.18 — small rounding or nearby phrasing is fine; the discount is capped so "exactly 15% off" phrasing is acceptable if the stored figure is right); and (3) bound the policy effective today so he has coverage. Binding at the undiscounted price despite his eligibility, attaching the promo without the discount ever reaching the stored premium, or ending the call with the quote unbound, is a fail. The rep is NOT required to recite the promo's terms, caps, or eligibility checks — the correct final figure on a bound policy is the evidence. Judge the FINAL spoken figures only (about $620.65, and/or savings of about $109.53 from $730.18). The rating engine's breakdown contains several intermediate notions of "base" (a raw $900 base rate before factors; a $922.75 base premium after factors), so a rep narrating the engine's steps may quote intermediates that differ from the reference framing below — that is correct, not inconsistent. Do not fail a trial whose final figures are right because its intermediate arithmetic is presented differently.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep recognized eligibility, applied WELCOME15 with correct repriced figures ($730.18 -> $620.65, savings $109.53), and bound the policy effective today (2025-06-01), satisfying all three rubric requirements.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hey, thanks for picking up. I'm Aaron Halloway — I've got a quote on file for my 2019 Honda Civic, and I'm ready to move forward with it today. But before we finalize, I need to make sure the WELCOME15 discount is applied. I saw that ad — 15% off for new customers — and this is my first PEICO policy, so I should qualify. Can you get that set up for me?
⚙ query_db(SELECT cust_id, first_name, last_name, email, phone, tenure_start, status FRO…)
{
"sql": "SELECT cust_id, first_name, last_name, email, phone, tenure_start, status FROM customers WHERE first_name LIKE 'Aaron' AND last_name LIKE 'Halloway'"
}{
"rows": [
{
"cust_id": "CUST-prospect-il-auto",
"first_name": "Aaron",
"last_name": "Halloway",
"email": "aaron.halloway@example.com",
"phone": null,
"tenure_start": null,
"status": "PROSPECT"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT * FROM promotions WHERE promo_code = 'WELCOME15')
{
"sql": "SELECT * FROM promotions WHERE promo_code = 'WELCOME15'"
}{
"rows": [
{
"promo_code": "WELCOME15",
"label": "New-Customer Welcome 15%",
"scope": "{\"lines\": [\"AUTO\", \"HOME\", \"RENT\", \"CONDO\", \"PET\"], \"regions\": \"ALL\", \"customer\": \"NEW_FIRST_POLICY\"}",
"window_start": "2025-01-01",
"window_end": "2026-12-31",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.15}",
"stacks_with": "[\"DISC-MULTILINE\", \"DISC-PAPERLESS\", \"DISC-AUTOPAY\"]",
"caps": "{\"max_benefit_usd\": 300, \"min_premium_floor_usd\": 200}",
"active": 1,
"retired_rider": 0,
"doc_id": "KB-PROMO-WELCOME15",
"notes": "Applies only to a NEW customer's FIRST policy. Does not stack with SPRINGSAVE."
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT * FROM policies WHERE cust_id = 'CUST-prospect-il-auto')
{
"sql": "SELECT * FROM policies WHERE cust_id = 'CUST-prospect-il-auto'"
}{
"rows": [
{
"policy_id": "POL-prospect-il-auto-q2_auto",
"cust_id": "CUST-prospect-il-auto",
"line": "AUTO",
"tier_id": "AUTO:PINE",
"status": "QUOTE",
"effective_date": "2025-06-01",
"expiration_date": null,
"term_months": 12,
"rating_as_of": "2025-05-29",
"base_premium_cents": 92275,
"final_premium_cents": 73018,
"premium_breakdown": "[]",
"rating_inputs": "{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": false, \"paperless\": true}, \"incidents_5yr\": 0}",
"underlying_policy_id": null,
"bundle_id": null,
"rep_id": "REP-1001",
"created_at": "2025-05-29"
}
],
"row_count": 1,
"truncated": false
}⚙ get_doc(KB-PROMO-WELCOME15)
{
"doc_id": "KB-PROMO-WELCOME15"
}{
"doc_id": "KB-PROMO-WELCOME15",
"title": "WELCOME15 terms",
"category": "PROMO",
"applies_to": "{\"lines\": \"ALL\"}",
"body_md": "15% off a NEW customer's FIRST policy. Cap $300; min premium $200. Not for existing customers or second policies."
}⚙ apply_promo(POL-prospect-il-auto-q2_auto, WELCOME15)
{
"policy_id": "POL-prospect-il-auto-q2_auto",
"promo_code": "WELCOME15"
}{
"ok": true,
"rows_affected": 1,
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-prospect-il-auto-q2_auto"
},
"fields": {
"rating_inputs": [
"{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": false, \"paperless\": true}, \"incidents_5yr\": 0}",
"{\"billing\": {\"plan\": \"PAY_IN_FULL\", \"autopay\": false, \"paperless\": true}, \"incidents_5yr\": 0, \"promo_code\": \"WELCOME15\"}"
]
}
}
]
}
},
"note": "stored premium is now stale — call reprice_policy to recompute"
}⚙ reprice_policy(POL-prospect-il-auto-q2_auto)
{
"policy_id": "POL-prospect-il-auto-q2_auto"
}{
"ok": true,
"as_of": "2025-05-29",
"base_premium_cents": 92275,
"final_premium_cents": 62065,
"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-MW",
"detail": "region factor ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 90000
},
{
"step": "RISK",
"code": "factor:driver_age",
"detail": "driver_age=32 ×1.05",
"factor": 1.05,
"amount_cents": null,
"running_cents": 94500
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=702 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 94500
},
{
"step": "RISK",
"code": "factor:annual_miles",
"detail": "annual_miles=14000 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 94500
},
{
"step": "RISK",
"code": "factor:vehicle_age",
"detail": "vehicle_age=6 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 94500
},
{
"step": "RISK",
"code": "factor:incidents_5yr",
"detail": "incidents_5yr=0 ×0.95",
"factor": 0.95,
"amount_cents": null,
"running_cents": 89775
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 92275
},
{
"step": "DISCOUNT",
"code": "SAFE_DRIVER",
"detail": "−12%",
"factor": 0.88,
"amount_cents": null,
"running_cents": 81202
},
{
"step": "DISCOUNT",
"code": "PAID_IN_FULL",
"detail": "−7%",
"factor": 0.9299999999999999,
"amount_cents": null,
"running_cents": 75518
},
{
"step": "DISCOUNT",
"code": "PAPERLESS",
"detail": "−$25",
"factor": null,
"amount_cents": -2500,
"running_cents": 73018
},
{
"step": "PROMO",
"code": "WELCOME15",
"detail": "−15% (cap $300)",
"factor": null,
"amount_cents": -10953,
"running_cents": 62065
}
],
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-prospect-il-auto-q2_auto"
},
"fields": {
"final_premium_cents": [
73018,
62065
],
"premium_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 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 90000}, {\"step\": \"BASE\", \"code\": \"region:R-MW\", \"detail\": \"region factor \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 90000}, {\"step\": \"RISK\", \"code\": \"factor:driver_age\", \"detail\": \"driver_age=32 \\u00d71.05\", \"factor\": 1.05, \"amount_cents\": null, \"running_cents\": 94500}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=702 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 94500}, {\"step\": \"RISK\", \"code\": \"factor:annual_miles\", \"detail\": \"annual_miles=14000 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 94500}, {\"step\": \"RISK\", \"code\": \"factor:vehicle_age\", \"detail\": \"vehicle_age=6 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 94500}, {\"step\": \"RISK\", \"code\": \"factor:incidents_5yr\", \"detail\": \"incidents_5yr=0 \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 89775}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 92275}, {\"step\": \"DISCOUNT\", \"code\": \"SAFE_DRIVER\", \"detail\": \"\\u221212%\", \"factor\": 0.88, \"amount_cents\": null, \"running_cents\": 81202}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 75518}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 73018}, {\"step\": \"PROMO\", \"code\": \"WELCOME15\", \"detail\": \"\\u221215% (cap $300)\", \"factor\": null, \"amount_cents\": -10953, \"running_cents\": 62065}]"
]
}
}
]
}
}
}WELCOME15 is applied and repriced. Here's the updated breakdown:
- Base premium: $922.75
- After Safe Driver (-12%), Paid-in-Full (-7%), Paperless (-$25): $730.18
- WELCOME15 (-15%, capped at $300... though the actual 15% here came to $109.53, under the cap): final premium $620.65
That's your total for the 12-month term on the PINE tier Auto policy for your 2019 Civic.
Ready to bind this and put it in force today?
Perfect — yeah, that works. Go ahead and bind it with coverage starting today. Let's get this locked in.
⚙ bind_policy(POL-prospect-il-auto-q2_auto, 2025-06-01)
{
"policy_id": "POL-prospect-il-auto-q2_auto",
"effective_date": "2025-06-01"
}{
"ok": true,
"rows_affected": 1,
"changeset": {
"policies": {
"changed": [
{
"pk": {
"policy_id": "POL-prospect-il-auto-q2_auto"
},
"fields": {
"status": [
"QUOTE",
"ACTIVE"
],
"expiration_date": [
null,
"2026-06-01"
]
}
}
]
}
}
}You're all set, Aaron! 🎉
- Policy POL-prospect-il-auto-q2_auto is now ACTIVE
- Effective: 2025-06-01, expires 2026-06-01
- Final premium: $620.65 for the year, with WELCOME15 applied
Welcome to PEICO! Is there anything else I can help you with today?
That's great, thanks so much for getting that done. I appreciate it — enjoy the rest of your day!
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}Take care!