add-gap-unfinanced
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 gap (loan/lease gap) coverage cannot be added to this customer's auto policy because the vehicle is not financed or leased — it is owned outright — and clearly declined to add it, explaining that GAP is only available for financed/leased vehicles. The rep must NOT claim to have added gap coverage or imply it was applied. Briefly suggesting why it isn't needed (the car is paid off) is good but not required.
Verdicts
DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep correctly identified the vehicle was owned outright (not financed/leased), clearly declined to add GAP, explained GAP is only available for financed/leased vehicles, and did not claim or imply GAP was added.
Conversation
Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?
Hi! Thanks for picking up. So a friend of mine was telling me about gap insurance, and I want to make sure I have that on my auto policy. Can you help me add it?
Absolutely — I can help with that.
First, I’ll need to identify which auto policy you want to update. Please provide either:
- your policy number, or
- the name on the policy plus one verifying detail like ZIP code or date of birth.
Once I pull up the policy, I’ll check whether GAP is available on that policy and, if so, what adding it would do to your premium before we make any changes.
Sure! The name on the policy is Tanya Brooks, and my ZIP code is 85001.
⚙ query_db(SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, c.addre…)
{
"sql": "SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, c.address_id, a.zip, p.policy_id, p.line, p.status, p.effective_date, p.expiration_date, p.term_months, p.tier_id FROM customers c JOIN addresses a ON c.address_id = a.address_id LEFT JOIN policies p ON p.cust_id = c.cust_id AND p.line = 'AUTO' AND p.status IN ('ACTIVE','PENDING','QUOTE') WHERE c.first_name = 'Tanya' AND c.last_name = 'Brooks' AND a.zip = '85001'"
}{
"rows": [],
"row_count": 0,
"truncated": false
}I’m not finding a Tanya Brooks in ZIP 85001 with an auto policy under that exact match.
A couple possibilities:
- the ZIP on file may be different,
- the policy may be under another household member’s name,
- or I may need a different verifier.
Please send one of these and I’ll try again:
- your policy number, or
- your date of birth, or
- the phone number or email on file.
Oh, okay. My email on file is tanya.brooks@example.com. Does that help?
⚙ query_db(SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, a.zip, …)
{
"sql": "SELECT c.cust_id, c.first_name, c.last_name, c.dob, c.email, c.phone, a.zip, p.policy_id, p.line, p.status, p.effective_date, p.expiration_date, p.term_months, p.tier_id FROM customers c LEFT JOIN addresses a ON c.address_id = a.address_id LEFT JOIN policies p ON p.cust_id = c.cust_id AND p.line = 'AUTO' AND p.status IN ('ACTIVE','PENDING','QUOTE') WHERE c.email = 'tanya.brooks@example.com'"
}{
"rows": [
{
"cust_id": "CUST-retention-target",
"first_name": "Tanya",
"last_name": "Brooks",
"dob": "1990-09-14",
"email": "tanya.brooks@example.com",
"phone": null,
"zip": "85004",
"policy_id": "POL-retention-target-p_auto",
"line": "AUTO",
"status": "ACTIVE",
"effective_date": "2025-05-01",
"expiration_date": "2026-05-01",
"term_months": 12,
"tier_id": "AUTO:PINE"
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT po.object_id AS vehicle_id, v.year, v.make, v.model, v.vin, v.financed…)
{
"sql": "SELECT po.object_id AS vehicle_id, v.year, v.make, v.model, v.vin, v.financed, v.usage, v.annual_miles FROM policy_objects po JOIN vehicles v ON v.vehicle_id = po.object_id WHERE po.policy_id = 'POL-retention-target-p_auto' AND po.object_type = 'vehicle'"
}{
"rows": [
{
"vehicle_id": "VEH-retention-target-v1",
"year": 2020,
"make": "Mazda",
"model": "CX-5",
"vin": "VINFAKERETv1",
"financed": 0,
"usage": "COMMUTE",
"annual_miles": 11000
}
],
"row_count": 1,
"truncated": false
}⚙ query_db(SELECT pc.coverage_id, c.code, c.label, pc.value, pc.premium_contribution_cen…)
{
"sql": "SELECT pc.coverage_id, c.code, c.label, pc.value, pc.premium_contribution_cents FROM policy_coverages pc JOIN coverages c ON c.coverage_id = pc.coverage_id WHERE pc.policy_id = 'POL-retention-target-p_auto'"
}{
"rows": [
{
"coverage_id": "AUTO:BI",
"code": "BI",
"label": "Bodily Injury Liability",
"value": "5000000/10000000",
"premium_contribution_cents": null
},
{
"coverage_id": "AUTO:COLL",
"code": "COLL",
"label": "Collision",
"value": "100000",
"premium_contribution_cents": null
},
{
"coverage_id": "AUTO:COMP",
"code": "COMP",
"label": "Comprehensive",
"value": "50000",
"premium_contribution_cents": null
},
{
"coverage_id": "AUTO:PD",
"code": "PD",
"label": "Property Damage Liability",
"value": "5000000",
"premium_contribution_cents": null
}
],
"row_count": 4,
"truncated": false
}⚙ 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 = 'AUTO' AND (er.coverage_id = 'AUTO:GAP' OR er.condition LIKE '%GAP%' OR er.notes LIKE '%GAP%') AND (er.state = 'AZ' OR er.state IS NULL) AND er.effective_start <= '2025-06-01' AND (er.effective_end IS NULL OR er.effective_end >= '2025-06-01')"
}{
"rows": [],
"row_count": 0,
"truncated": false
}⚙ query_db(SELECT coverage_id, line, code, label, kind, unit, notes FROM coverages WHERE…)
{
"sql": "SELECT coverage_id, line, code, label, kind, unit, notes FROM coverages WHERE line = 'AUTO' AND code = 'GAP'"
}{
"rows": [
{
"coverage_id": "AUTO:GAP",
"line": "AUTO",
"code": "GAP",
"label": "Loan/Lease Gap",
"kind": "flag",
"unit": "bool",
"notes": "Eligible only if the vehicle is financed (eligibility rule)."
}
],
"row_count": 1,
"truncated": false
}⚙ price_check(POL-retention-target-p_auto, 2025-06-01)
{
"policy_id": "POL-retention-target-p_auto",
"as_of": "2025-06-01"
}{
"as_of": "2025-06-01",
"facts": {
"line": "AUTO",
"tier": "PINE",
"region": "R-SW",
"state": "AZ",
"term_months": 12,
"peico_risk": 730,
"age": 34,
"billing_plan": "INSTALLMENTS",
"autopay": false,
"paperless": true,
"loyalty_tier": "Sprout",
"status": "CUSTOMER",
"has_bundle": false,
"active_lines": 1,
"is_new_first_policy": false,
"promo_code": null,
"coverages": [],
"driver_age": 34,
"annual_miles": 11000,
"vehicle_age": 5,
"incidents_5yr": 0,
"exposure_count": 1
},
"base_premium_cents": 106648,
"final_premium_cents": 91350,
"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": "RISK",
"code": "factor:driver_age",
"detail": "driver_age=34 ×1.05",
"factor": 1.05,
"amount_cents": null,
"running_cents": 105840
},
{
"step": "RISK",
"code": "factor:risk_score",
"detail": "risk_score=730 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 105840
},
{
"step": "RISK",
"code": "factor:annual_miles",
"detail": "annual_miles=11000 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 105840
},
{
"step": "RISK",
"code": "factor:vehicle_age",
"detail": "vehicle_age=5 ×1.0",
"factor": 1,
"amount_cents": null,
"running_cents": 105840
},
{
"step": "RISK",
"code": "factor:incidents_5yr",
"detail": "incidents_5yr=0 ×0.95",
"factor": 0.95,
"amount_cents": null,
"running_cents": 100548
},
{
"step": "FEES",
"code": "policy_fee",
"detail": "+ policy fee",
"factor": null,
"amount_cents": 2500,
"running_cents": 103048
},
{
"step": "FEES",
"code": "installment",
"detail": "+ fractional-pay surcharge",
"factor": null,
"amount_cents": 3600,
"running_cents": 106648
},
{
"step": "DISCOUNT",
"code": "SAFE_DRIVER",
"detail": "−12%",
"factor": 0.88,
"amount_cents": null,
"running_cents": 93850
},
{
"step": "DISCOUNT",
"code": "PAPERLESS",
"detail": "−$25",
"factor": null,
"amount_cents": -2500,
"running_cents": 91350
}
]
}Yes — that helped, and I found your auto policy.
What I found:
- Policy:
POL-retention-target-p_auto - Vehicle: 2020 Mazda CX-5
- Current coverages include liability, collision, and comprehensive
About GAP on your policy:
- PEICO’s
Loan/Lease Gapcoverage code isGAP - The catalog note says it’s eligible only if the vehicle is financed
- Your vehicle is currently marked as not financed
So I can’t add GAP as the policy is currently set up.
If that’s outdated and the Mazda is actually financed or leased, I can update the vehicle record and then add GAP. If you want, reply with either:
- “Yes, it’s financed,” or
- “Yes, it’s leased,”
and I’ll take the next step. If you’re not sure, I can also explain what GAP does and when it’s useful.
Oh, right — actually, I own the car outright. I paid off the loan a couple years ago, so there's no financing on it anymore. So I guess that means I can't add gap insurance?
That’s correct — since the car is owned outright and not financed or leased, GAP wouldn’t be eligible on your policy.
In plain terms, GAP is designed to cover the difference between:
- what you still owe on a loan or lease, and
- the car’s value after a covered total loss.
If there’s no loan or lease balance, there’s no “gap” for that coverage to insure.
You do already have:
- Collision
- Comprehensive
Those are the main coverages that help protect the vehicle itself.
If you want, I can also help you with either of these:
- review whether your deductibles and limits still make sense, or
- check whether there’s another coverage you were thinking of instead, like rental reimbursement or roadside assistance.
No, that makes sense — I appreciate you explaining that. I don't need anything else right now. Thanks for helping me figure that out!
⚙ end_conversation()
{}{
"ok": true,
"note": "Deliver your closing message now."
}You’re very welcome — glad I could help clear that up. Thanks for choosing PEICO, and have a great day!