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 for WELCOME15, applied and repriced the quote to the correct discounted figure ($620.65), and bound the policy effective today, satisfying all three required steps.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hey, thanks for picking up. I've got a quote on file for my 2019 Honda Civic, and I'm ready to move forward with it today. But first — I saw your ad for WELCOME15, the new-customer discount, and I want to make sure that gets applied. This would be my first policy with PEICO, so I should qualify, right?
⚙ query_db(SELECT c.cust_id, c.first_name, c.last_name, c.status, c.legacy_acct, c.tenur…)
{
"sql": "SELECT c.cust_id, c.first_name, c.last_name, c.status, c.legacy_acct, c.tenure_start, p.policy_id, p.line, p.status AS policy_status, p.effective_date, p.expiration_date, p.rating_as_of, p.bundle_id, p.final_premium_cents, p.base_premium_cents, p.tier_id, p.created_at, v.year, v.make, v.model FROM customers c LEFT JOIN policies p ON p.cust_id = c.cust_id AND p.status IN ('QUOTE','PENDING','ACTIVE') LEFT JOIN policy_objects po ON po.policy_id = p.policy_id AND po.object_type='vehicle' LEFT JOIN vehicles v ON v.vehicle_id = po.object_id WHERE v.year=2019 AND v.make='Honda' AND v.model='Civic' ORDER BY p.created_at DESC LIMIT 10"
}{
"rows": [
{
"cust_id": "CUST-prospect-il-auto",
"first_name": "Aaron",
"last_name": "Halloway",
"status": "PROSPECT",
"legacy_acct": null,
"tenure_start": null,
"policy_id": "POL-prospect-il-auto-q2_auto",
"line": "AUTO",
"policy_status": "QUOTE",
"effective_date": "2025-06-01",
"expiration_date": null,
"rating_as_of": "2025-05-29",
"bundle_id": null,
"final_premium_cents": 73018,
"base_premium_cents": 92275,
"tier_id": "AUTO:PINE",
"created_at": "2025-05-29",
"year": 2019,
"make": "Honda",
"model": "Civic"
}
],
"row_count": 1,
"truncated": false
}⚙ search_kb(WELCOME15 new-customer discount eligibility first policy PEICO ad discount te…)
{
"query": "WELCOME15 new-customer discount eligibility first policy PEICO ad discount terms",
"limit": 5
}{
"results": [
{
"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…"
},
{
"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-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-WELCOME15",
"title": "WELCOME15 terms",
"category": "PROMO",
"applies_to": "{\"lines\": \"ALL\"}",
"snippet": "15% off a NEW customer's FIRST policy. Cap $300; min premium $200. Not for existing customers or second policies."
}
]
}⚙ 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, 2025-06-01)
{
"policy_id": "POL-prospect-il-auto-q2_auto",
"as_of": "2025-06-01"
}{
"ok": true,
"as_of": "2025-06-01",
"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": {
"rating_as_of": [
"2025-05-29",
"2025-06-01"
],
"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}]"
]
}
}
]
}
}
}Yes — I was able to apply WELCOME15 to this quote, and it qualifies as a first policy for a new customer.
Your quoted premium is now $620.65 after the promo. The promo took 15% off, capped correctly, and the policy has been repriced.
If you’d like, I can also help you bind this policy today.
Perfect, that's exactly what I need. Yeah, let's bind it right now — I need coverage to start today. Go ahead and finalize it.
⚙ 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"
]
}
}
]
}
}
}⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}Done — your policy is now active starting today, 2025-06-01, and it runs through 2026-06-01.
Your premium remains $620.65. Thanks for choosing PEICO, and welcome aboard!
Awesome, thank you so much. I really appreciate you getting that discount applied and getting everything set up for me today.