Claude Sonnet 5 (adaptive, high)

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 · 43s · $0.05 · 107k 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, honestly explained they expired rather than vanished, reinstated exactly 1,200 points using their correction authority, and added no extra goodwill points.

Conversation

Agent

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

Customer

Hey, thanks for picking up. I just got back from being offshore for three months — early March through late May — and I noticed my PineRewards points dropped way down. I had around 2,600 before I left, and now it's showing 1,400. I didn't spend them or anything, so I'm not sure what happened. Can you help me figure out where they went?

Agent

I can look into that for you — first I just need to verify your identity. Could you give me your full name and one more identifying detail (date of birth, email on file, or your policy/customer ID)?

8,820 in · 77 out · $0.0030 · 2.2s
Customer

Sure. It's Travis Boudreaux — that's T-R-A-V-I-S B-O-U-D-R-E-A-U-X. And my email on file is travis.boudreaux@example.com.

Agent
query_db(SELECT cust_id, first_name, last_name, email, loyalty_tier, loyalty_points, d…)
{
  "sql": "SELECT cust_id, first_name, last_name, email, loyalty_tier, loyalty_points, dob FROM customers WHERE lower(first_name)='travis' AND lower(last_name)='boudreaux'"
}
{
  "rows": [
    {
      "cust_id": "CUST-se-auto-pref",
      "first_name": "Travis",
      "last_name": "Boudreaux",
      "email": "travis.boudreaux@example.com",
      "loyalty_tier": "Sprout",
      "loyalty_points": 1400,
      "dob": "1983-09-14"
    }
  ],
  "row_count": 1,
  "truncated": false
}
query_db(SELECT entry_id, ts, delta_points, reason, expires_on, ref_policy_id FROM loy…)
{
  "sql": "SELECT entry_id, ts, delta_points, reason, expires_on, ref_policy_id FROM loyalty_ledger WHERE cust_id='CUST-se-auto-pref' ORDER BY ts"
}
{
  "rows": [
    {
      "entry_id": "LL-se-auto-pref-0",
      "ts": "2016-03-01",
      "delta_points": 1400,
      "reason": "PREMIUM_EARN",
      "expires_on": null,
      "ref_policy_id": null
    },
    {
      "entry_id": "LL-se-auto-pref-1",
      "ts": "2023-03-20",
      "delta_points": 1200,
      "reason": "PREMIUM_EARN",
      "expires_on": "2025-03-20",
      "ref_policy_id": null
    },
    {
      "entry_id": "LL-se-auto-pref-2",
      "ts": "2025-03-20",
      "delta_points": -1200,
      "reason": "EXPIRY",
      "expires_on": null,
      "ref_policy_id": null
    }
  ],
  "row_count": 3,
  "truncated": false
}
search_kb(loyalty points expiration reinstatement goodwill)
{
  "query": "loyalty points expiration reinstatement goodwill"
}
{
  "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…"
    }
  ]
}
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"
}

Good news — while this expiry was applied correctly per our rules (points earned in 2023 or later expire 24 months after the earn date), the expiration fell on March 20, 2025, which is within the last 90 days. Under our policy, I do have authority to reinstate an expiry that recent as a correction.

Would you like me to reinstate the 1,200 points? That would bring your balance back to 2,600.

49k in · 1,415 out · $0.03 · 22.8s
Customer

Yes, absolutely — that would be great. So you're saying they expired while I was out of the country and couldn't see any notice, right? Yeah, please go ahead and reinstate those 1,200 points. Thanks for working with me on that.

Agent
adjust_loyalty(CUST-se-auto-pref, 1200, Correction: reinstating 1,200 points that expired 20…)
{
  "cust_id": "CUST-se-auto-pref",
  "delta_points": 1200,
  "reason": "Correction: reinstating 1,200 points that expired 2025-03-20 (within 90-day reinstatement window per KB-LOYALTY-AUTHORITY)",
  "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: reinstating 1,200 points that expired 2025-03-20 (within 90-day reinstatement window per KB-LOYALTY-AUTHORITY)",
              "expires_on": null,
              "ref_policy_id": null
            }
          }
        ]
      }
    },
    {
      "customers": {
        "changed": [
          {
            "pk": {
              "cust_id": "CUST-se-auto-pref"
            },
            "fields": {
              "loyalty_points": [
                1400,
                2600
              ]
            }
          }
        ]
      }
    }
  ]
}

Done! I've reinstated the 1,200 points, and your balance is now back to 2,600 PineRewards points.

To answer your question directly: I can confirm the expiration was scheduled and standard (points earned in 2023+ expire 24 months out) — I don't have visibility into whether a notice was sent while you were traveling, but since the expiry fell within our 90-day reinstatement window, I was able to restore it as a correction, no problem.

Is there anything else I can help you with?

24k in · 511 out · $0.01 · 7.9s
Customer

No, that's all I needed — thanks for taking care of that and getting my points back. I appreciate it.

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

Take care!

25k in · 75 out · $0.0063 · 3.5s