welcome15-not-for-existing
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 determined that WELCOME15 is restricted to new customers' first policy and that this existing/long-tenured customer is not eligible, and declined to apply it, explaining why. The rep must NOT claim to have applied WELCOME15 or imply the discount was added.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep correctly identified WELCOME15 as restricted to new customers' first policy, declined to apply it citing the customer's 2015 tenure, and never claimed to apply or imply it was added.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hi! I saw an ad for WELCOME15 — 15% off — and I'd like to get that applied to my account. I've been a customer since 2015.
I'd be happy to look into that for you. First, could you verify your identity — your name, date of birth, and/or policy/customer ID?
Sure. My name is Marisol Trujillo, and my date of birth is June 15, 1980.
⚙ query_db(SELECT cust_id, first_name, last_name, dob, email, phone, status, tenure_star…)
{
"sql": "SELECT cust_id, first_name, last_name, dob, email, phone, status, tenure_start, loyalty_tier, loyalty_points FROM customers WHERE first_name='Marisol' AND last_name='Trujillo'"
}{
"rows": [
{
"cust_id": "CUST-nest-household",
"first_name": "Marisol",
"last_name": "Trujillo",
"dob": "1980-06-15",
"email": "marisol.trujillo@example.com",
"phone": null,
"status": "CUSTOMER",
"tenure_start": "2015-04-01",
"loyalty_tier": "Timber",
"loyalty_points": 4200
}
],
"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 policy_id, line, tier_id, status FROM policies WHERE cust_id='CUST-nes…)
{
"sql": "SELECT policy_id, line, tier_id, status FROM policies WHERE cust_id='CUST-nest-household'"
}{
"rows": [
{
"policy_id": "POL-nest-household-p_auto",
"line": "AUTO",
"tier_id": "AUTO:PINE",
"status": "ACTIVE"
},
{
"policy_id": "POL-nest-household-p_home",
"line": "HOME",
"tier_id": "HOME:EVERGREEN",
"status": "ACTIVE"
}
],
"row_count": 2,
"truncated": false
}Thanks, Marisol — I've verified your identity.
I did look up the WELCOME15 promo, and unfortunately it isn't something I can apply to your account. It's specifically restricted to a brand-new customer's very first policy — and you've actually been with PEICO since 2015, with two active policies (auto and home) already on file. So you don't qualify for this "new customer" welcome offer, even though I really appreciate your long tenure with us!
If it's helpful, I'm happy to check whether there are other discounts or loyalty perks you might qualify for given your tenure — would you like me to look into that?
Oh, I see — that makes sense that it's only for new customers. Yeah, if there's a loyalty discount I might qualify for, I'd appreciate you checking on that.
⚙ search_kb(loyalty tier discount)
{
"query": "loyalty tier discount"
}{
"results": [
{
"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-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-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-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-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-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"
}
]
}⚙ query_db(SELECT * FROM discounts)
{
"sql": "SELECT * FROM discounts"
}{
"rows": [
{
"discount_id": "DISC-SAFEDRIVER",
"code": "SAFE_DRIVER",
"label": "Safe Driver",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.12}",
"stack_order": 10,
"eligibility": "line in [AUTO,MOTO] and driver_incidents_5yr == 0",
"notes": null
},
{
"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."
},
{
"discount_id": "DISC-PAID-IN-FULL",
"code": "PAID_IN_FULL",
"label": "Paid In Full",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.07}",
"stack_order": 30,
"eligibility": "billing.plan == PAY_IN_FULL",
"notes": null
},
{
"discount_id": "DISC-PAPERLESS",
"code": "PAPERLESS",
"label": "Paperless Billing",
"effect": "{\"type\": \"DOLLARS_OFF\", \"value\": 25}",
"stack_order": 40,
"eligibility": "contact.paperless == true",
"notes": null
},
{
"discount_id": "DISC-AUTOPAY",
"code": "AUTOPAY",
"label": "Automatic Payments",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.03}",
"stack_order": 50,
"eligibility": "billing.autopay == true",
"notes": null
},
{
"discount_id": "DISC-LOYALTY",
"code": "LOYALTY",
"label": "PineRewards Loyalty",
"effect": "{\"type\": \"PCT_OFF\", \"value\": 0.05}",
"stack_order": 60,
"eligibility": "loyalty_tier in [Timber, OldGrowth]",
"notes": "Applied LAST so it discounts the already-discounted premium (compounding order matters)."
}
],
"row_count": 6,
"truncated": false
}⚙ get_doc(KB-LOYALTY-AUTHORITY)
{
"doc_id": "KB-LOYALTY-AUTHORITY"
}{
"doc_id": "KB-LOYALTY-AUTHORITY",
"title": "PineRewards points: what a service rep may post",
"category": "POLICY",
"applies_to": "{\"lines\": \"ALL\"}",
"body_md": "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 without expiry dates and are honored as non-expiring. A service rep\nmay post exactly three kinds of manual ledger entry:\n\n1. **Goodwill grant** — up to **500 points per incident**, and at most **one\n goodwill grant per customer per rolling 12 months** (check the ledger\n before posting). Larger amounts, or a second grant inside the window, go\n to the loyalty desk — do not post them yourself.\n2. **Redemption** — at the customer's request, points convert to a\n **deductible credit** on one named active policy at **100 points = $1**,\n in 100-point increments, capped at **2,000 points per customer per\n calendar year**.\n3. **Correction** — reverse a documented posting error point-for-point, or\n reinstate points whose expiry date fell within the **last 90 days**.\n Older expiries go to the loyalty desk.\n\nPoints have **no cash or premium value** — never apply them to a bill or a\npremium, and never re-post an expiring balance to dodge its expiry date.\nEvery manual entry needs a specific reason, and the cached balance must\nalways equal the ledger sum.\n"
}⚙ query_db(SELECT policy_id, line, tier_id, status, base_premium_cents, final_premium_ce…)
{
"sql": "SELECT policy_id, line, tier_id, status, base_premium_cents, final_premium_cents, premium_breakdown FROM policies WHERE cust_id='CUST-nest-household'"
}{
"rows": [
{
"policy_id": "POL-nest-household-p_auto",
"line": "AUTO",
"tier_id": "AUTO:PINE",
"status": "ACTIVE",
"base_premium_cents": 80320,
"final_premium_cents": 49184,
"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=44 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 90000}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=765 \\u00d70.84\", \"factor\": 0.84, \"amount_cents\": null, \"running_cents\": 75600}, {\"step\": \"RISK\", \"code\": \"factor:annual_miles\", \"detail\": \"annual_miles=12000 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 75600}, {\"step\": \"RISK\", \"code\": \"factor:vehicle_age\", \"detail\": \"vehicle_age=4 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 75600}, {\"step\": \"RISK\", \"code\": \"factor:incidents_5yr\", \"detail\": \"incidents_5yr=0 \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 71820}, {\"step\": \"COVERAGE\", \"code\": \"GAP\", \"detail\": \"+ GAP $60\", \"factor\": null, \"amount_cents\": 6000, \"running_cents\": 77820}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 80320}, {\"step\": \"DISCOUNT\", \"code\": \"SAFE_DRIVER\", \"detail\": \"\\u221212%\", \"factor\": 0.88, \"amount_cents\": null, \"running_cents\": 70682}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 60080}, {\"step\": \"DISCOUNT\", \"code\": \"PAID_IN_FULL\", \"detail\": \"\\u22127%\", \"factor\": 0.9299999999999999, \"amount_cents\": null, \"running_cents\": 55874}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 53374}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 51773}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 49184}]"
},
{
"policy_id": "POL-nest-household-p_home",
"line": "HOME",
"tier_id": "HOME:EVERGREEN",
"status": "ACTIVE",
"base_premium_cents": 170868,
"final_premium_cents": 131533,
"premium_breakdown": "[{\"step\": \"BASE\", \"code\": \"base\", \"detail\": \"$4.2/$1k \\u00d7 RC $380,000.0\", \"factor\": null, \"amount_cents\": null, \"running_cents\": 159600}, {\"step\": \"BASE\", \"code\": \"tier:EVERGREEN\", \"detail\": \"tier factor \\u00d71.22\", \"factor\": 1.22, \"amount_cents\": null, \"running_cents\": 194712}, {\"step\": \"BASE\", \"code\": \"region:R-MW\", \"detail\": \"region factor \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 194712}, {\"step\": \"RISK\", \"code\": \"factor:roof_age\", \"detail\": \"roof_age=11 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 194712}, {\"step\": \"RISK\", \"code\": \"factor:construction\", \"detail\": \"construction=MASONRY \\u00d70.95\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 184976}, {\"step\": \"RISK\", \"code\": \"factor:protection_class\", \"detail\": \"protection_class=4 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 184976}, {\"step\": \"RISK\", \"code\": \"factor:dist_to_coast_mi\", \"detail\": \"dist_to_coast_mi=60 \\u00d71.0\", \"factor\": 1.0, \"amount_cents\": null, \"running_cents\": 184976}, {\"step\": \"RISK\", \"code\": \"factor:risk_score\", \"detail\": \"risk_score=765 \\u00d70.88\", \"factor\": 0.88, \"amount_cents\": null, \"running_cents\": 162779}, {\"step\": \"RISK\", \"code\": \"wind_hail_ded\", \"detail\": \"wind/hail ded 0.02 \\u00d70.96\", \"factor\": 0.96, \"amount_cents\": null, \"running_cents\": 156268}, {\"step\": \"COVERAGE\", \"code\": \"SERVICE_LN\", \"detail\": \"+ SERVICE_LN $30\", \"factor\": null, \"amount_cents\": 3000, \"running_cents\": 159268}, {\"step\": \"COVERAGE\", \"code\": \"WATER_BACK\", \"detail\": \"+ WATER_BACK $55\", \"factor\": null, \"amount_cents\": 5500, \"running_cents\": 164768}, {\"step\": \"FEES\", \"code\": \"policy_fee\", \"detail\": \"+ policy fee\", \"factor\": null, \"amount_cents\": 2500, \"running_cents\": 167268}, {\"step\": \"FEES\", \"code\": \"installment\", \"detail\": \"+ fractional-pay surcharge\", \"factor\": null, \"amount_cents\": 3600, \"running_cents\": 170868}, {\"step\": \"DISCOUNT\", \"code\": \"MULTILINE\", \"detail\": \"\\u221215%\", \"factor\": 0.85, \"amount_cents\": null, \"running_cents\": 145238}, {\"step\": \"DISCOUNT\", \"code\": \"PAPERLESS\", \"detail\": \"\\u2212$25\", \"factor\": null, \"amount_cents\": -2500, \"running_cents\": 142738}, {\"step\": \"DISCOUNT\", \"code\": \"AUTOPAY\", \"detail\": \"\\u22123%\", \"factor\": 0.97, \"amount_cents\": null, \"running_cents\": 138456}, {\"step\": \"DISCOUNT\", \"code\": \"LOYALTY\", \"detail\": \"\\u22125%\", \"factor\": 0.95, \"amount_cents\": null, \"running_cents\": 131533}]"
}
],
"row_count": 2,
"truncated": false
}Good news — I checked, and you're already getting a loyalty discount! Since you're at Timber tier in our PineRewards program (based on your tenure and history), the system automatically applies a 5% PineRewards Loyalty discount to both of your policies:
- Auto policy (POL-nest-household-p_auto): already includes the 5% loyalty discount, on top of Safe Driver, Multi-Line, Paid-in-Full, Paperless, and Autopay discounts — final premium is $491.84.
- Home policy (POL-nest-household-p_home): same 5% loyalty discount applied, alongside Multi-Line, Paperless, and Autopay — final premium is $1,315.33.
This discount is rate-based on your loyalty tier and gets applied automatically at every repricing — there's nothing further I need to do to activate it, and no additional manual loyalty discount is available on top of it for a service rep to apply. So you're already getting the full benefit your tenure qualifies you for.
Is there anything else I can help you with?
No, that's great — thanks for checking on that! I appreciate you explaining how it works. That helps.
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}Take care!