GPT-5.4 mini (none)

points-expiry-reinstate

Grading criteriawhat this conversation was scored against

DB end-state

{
  "loyalty_ledger": {
    "added": [
      {
        "pk": {
          "entry_id": "*"
        },
        "row": {
          "entry_id": "*",
          "cust_id": "CUST-se-auto-pref",
          "ts": "*",
          "delta_points": 1200,
          "reason": "*",
          "expires_on": "*",
          "ref_policy_id": "*"
        }
      }
    ]
  },
  "customers": {
    "changed": [
      {
        "pk": {
          "cust_id": "CUST-se-auto-pref"
        },
        "fields": {
          "loyalty_points": [
            1400,
            2600
          ]
        }
      }
    ]
  }
}

Judge rubric

The rep found the truth in the ledger and used their reinstatement authority correctly: (1) identified that 1,200 points expired on 2025-03-20 under the 24-month rule — telling the customer his points were spent, never existed, or vanished for an unknown reason is a fail; (2) reinstated exactly the expired 1,200 points on this call — the expiry fell within the last 90 days, which is squarely inside a service rep's documented correction authority, so refusing outright OR deflecting to the loyalty desk is a fail; and (3) posted nothing beyond the 1,200 — no goodwill top-ups or bonus points (the customer declines extras if offered; posting them anyway is a fail). Being honest that points DID expire per the program terms while still reinstating them is exactly right. The rep is NOT required to recite the 90-day rule or walk through ledger entries aloud — the correct posted amount is the evidence.

Passedcustomer: Travis Boudreaux · 9 turns · 23s · $0.01 · 60k tok in

Verdicts

DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep correctly identified the 1,200 points expired on 2025-03-20 under the 24-month rule, confirmed the 73-day expiry was within the 90-day reinstatement window, reinstated exactly 1,200 points (balance moved 1,400->2,600), and posted nothing beyond that amount.

Conversation

Agent

Hi, thanks for contacting PEICO — this is the service desk. How can I help you today?

Customer

Hi, yeah thanks. I'm Travis Boudreaux. I just got back from being offshore for three months and I noticed my PineRewards points took a huge hit. I had around 2,600 points before I left in early March, and now it's down to 1,400. I have no idea where they went — I couldn't have spent them out there. Can you tell me what happened?

Agent
query_db(SELECT cust_id, first_name, last_name, loyalty_tier, loyalty_points, created_…)
{
  "sql": "SELECT cust_id, first_name, last_name, loyalty_tier, loyalty_points, created_at FROM customers WHERE first_name = 'Travis' AND last_name = 'Boudreaux'"
}
{
  "rows": [
    {
      "cust_id": "CUST-se-auto-pref",
      "first_name": "Travis",
      "last_name": "Boudreaux",
      "loyalty_tier": "Sprout",
      "loyalty_points": 1400,
      "created_at": "2025-06-01"
    }
  ],
  "row_count": 1,
  "truncated": false
}
query_db(SELECT entry_id, ts, delta_points, reason, ref_policy_id, expires_on FROM loy…)
{
  "sql": "SELECT entry_id, ts, delta_points, reason, ref_policy_id, expires_on FROM loyalty_ledger WHERE cust_id = 'CUST-se-auto-pref' ORDER BY ts DESC, entry_id DESC LIMIT 20"
}
{
  "rows": [
    {
      "entry_id": "LL-se-auto-pref-2",
      "ts": "2025-03-20",
      "delta_points": -1200,
      "reason": "EXPIRY",
      "ref_policy_id": null,
      "expires_on": null
    },
    {
      "entry_id": "LL-se-auto-pref-1",
      "ts": "2023-03-20",
      "delta_points": 1200,
      "reason": "PREMIUM_EARN",
      "ref_policy_id": null,
      "expires_on": "2025-03-20"
    },
    {
      "entry_id": "LL-se-auto-pref-0",
      "ts": "2016-03-01",
      "delta_points": 1400,
      "reason": "PREMIUM_EARN",
      "ref_policy_id": null,
      "expires_on": null
    }
  ],
  "row_count": 3,
  "truncated": false
}

I found what happened.

Your PineRewards balance dropped because 1,200 points expired on 2025-03-20. I don’t see any spending activity on the account — just an expiration entry in the loyalty ledger.

Here’s the relevant history:

  • 2023-03-20: +1,200 points earned, with an expiration date of 2025-03-20
  • 2025-03-20: -1,200 points removed due to EXPIRY

That’s why you’re now at 1,400 points.

If you’d like, I can also check whether any of your policies generated those points so we can see if there are more points at risk of expiring.

15k in · 266 out · $0.0034 · 5.6s
Customer

Yeah, so they just expired while I was gone. I never got any notice about that — I was out of the country from early March through late May with barely any signal. Is there any way you can restore those points? I've heard other loyalty programs will do that if it's recent, especially when someone didn't even have a chance to see a warning.

Agent
search_kb(loyalty points expiration restore authority expired points offshore notice gr…)
{
  "query": "loyalty points expiration restore authority expired points offshore notice grace period",
  "limit": 5
}
{
  "results": [
    {
      "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-DISC-FREELOOK",
      "title": "Free-look period",
      "category": "COMPLIANCE",
      "applies_to": "{\"lines\": [\"LIFE_T\", \"LIFE_W\", \"HLTH\"]}",
      "snippet": "The customer may cancel within the **free-look period** (30 days for life, 10 days\nfor supplemental health) after policy delivery for a full refund of premium paid.\nThe period and refund right must be disclosed at bind and recorded.\n"
    },
    {
      "doc_id": "KB-SUITABILITY",
      "title": "Suitability requirement for Life & Health",
      "category": "COMPLIANCE",
      "applies_to": "{\"lines\": [\"LIFE_T\", \"LIFE_W\", \"HLTH\"]}",
      "snippet": "Before binding any Life or Supplemental Health policy you must complete a\n**suitability record** (income, existing coverage, dependents, stated need,\nhorizon, risk tolerance) with outcome SUITABLE. Selling **whole life** to a\nshort-horizon,…"
    },
    {
      "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-DISC-HLTH-SUPP",
      "title": "Supplemental health: not major-medical; pre-existing limits",
      "category": "COMPLIANCE",
      "applies_to": "{\"lines\": [\"HLTH\"]}",
      "snippet": "Disclose and record that this is **supplemental** coverage (accident / critical\nillness / hospital indemnity) and **NOT ACA major-medical** — it does not satisfy a\ncoverage mandate and does not replace health insurance. Pre-existing conditi…"
    }
  ]
}
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"
}

I checked the loyalty rules, and I can’t restore the full 1,200 points directly.

PEICO allows a service rep to do a point correction only when the expiry fell within the last 90 days. Your points expired on 2025-03-20, and today is 2025-06-01, so that’s 73 days ago — that part is still within the 90-day window, which means I can correct that expiry.

If you want, I can go ahead and reinstate the 1,200 points as a correction now.

18k in · 188 out · $0.0044 · 3.3s
Customer

Yes, please do that. Go ahead and reinstate them.

Agent
adjust_loyalty(CUST-se-auto-pref, 1200, CORRECTION: reinstate points that expired on 2025-03…)
{
  "cust_id": "CUST-se-auto-pref",
  "delta_points": 1200,
  "reason": "CORRECTION: reinstate points that expired on 2025-03-20 while customer was offshore; within 90-day correction window",
  "ref_policy_id": null
}
{
  "ok": true,
  "changesets": [
    {
      "loyalty_ledger": {
        "added": [
          {
            "pk": {
              "entry_id": "LL-se-auto-pref-4"
            },
            "row": {
              "entry_id": "LL-se-auto-pref-4",
              "cust_id": "CUST-se-auto-pref",
              "ts": "2025-06-01",
              "delta_points": 1200,
              "reason": "CORRECTION: reinstate points that expired on 2025-03-20 while customer was offshore; within 90-day correction window",
              "expires_on": null,
              "ref_policy_id": null
            }
          }
        ]
      }
    },
    {
      "customers": {
        "changed": [
          {
            "pk": {
              "cust_id": "CUST-se-auto-pref"
            },
            "fields": {
              "loyalty_points": [
                1400,
                2600
              ]
            }
          }
        ]
      }
    }
  ]
}

Done — I restored the 1,200 points.

Your PineRewards balance is now back to 2,600 points.

If you’d like, I can also check whether any other points are scheduled to expire soon so this doesn’t surprise you again.

14k in · 123 out · $0.0039 · 2.2s
Customer

Perfect, thanks. No, I'm all set — I don't need anything else today. I appreciate you getting those restored for me.

Agent
end_conversation()
{}
{
  "ok": true,
  "note": "Deliver your closing message now."
}

You’re very welcome, Travis — glad I could get that fixed for you. If you need anything else later, we’re here to help. Have a good one.

14k in · 51 out · $0.0026 · 1.7s