GPT-5.4 nano (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.0034 · 50k tok in

Verdicts

DB end-statepassed
DB end-state matches the expected changeset.
Judge rubricpassed
judge: The rep correctly identified the 1,200-point expiry on 2025-03-20 and posted exactly 1,200 points back with no extras, satisfying the required end-state even though it was framed as a 'goodwill adjustment' rather than citing the 90-day authority explicitly.

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'm Travis Boudreaux. I just got back from working offshore and I noticed my PineRewards points dropped way down — I had about 2,600 before I left in early March, and now it's showing 1,400. I have no idea where they went. Can you help me figure out what happened?

Agent
query_db(SELECT cust_id, legacy_acct, first_name, last_name, loyalty_tier, loyalty_poi…)
{
  "sql": "SELECT cust_id, legacy_acct, first_name, last_name, loyalty_tier, loyalty_points, created_at FROM customers WHERE first_name LIKE 'Travis' AND last_name LIKE 'Boudreaux' LIMIT 5"
}
{
  "rows": [
    {
      "cust_id": "CUST-se-auto-pref",
      "legacy_acct": "EVG2204S3",
      "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, 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 DESC LIMIT 50"
}
{
  "rows": [
    {
      "entry_id": "LL-se-auto-pref-2",
      "ts": "2025-03-20",
      "delta_points": -1200,
      "reason": "EXPIRY",
      "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-0",
      "ts": "2016-03-01",
      "delta_points": 1400,
      "reason": "PREMIUM_EARN",
      "expires_on": null,
      "ref_policy_id": null
    }
  ],
  "row_count": 3,
  "truncated": false
}

Hi Travis — yes, I can help. I looked up your account (CUST-se-auto-pref) and checked your PineRewards ledger entries.

What happened

  • You previously had 1,400 points (entry from 2016-03-01).
  • On 2023-03-20, you earned +1,200 points (reason: PREMIUM_EARN), which brought you to ~2,600 before March of this year.
  • On 2025-03-20, your points dropped by -1,200 (reason: EXPIRY). That entry corresponds to the expiry of the 1,200 points that were set to expire on 2025-03-20.

So the “missing” points were not deducted for an adjustment—they expired automatically on March 20.

Quick confirmation

Your current balance is showing 1,400 points, which matches the ledger after the -1,200 expiry.

If you want, I can also tell you whether there were any other small earn/spend entries around that time (the ledger shows only these for your account recently).

15k in · 367 out · $0.0012 · 5.1s
Customer

Okay, so they expired on March 20th? That was right when I was heading offshore — I had barely any signal out there from early March through late May. I never saw any notice about them expiring. Can you restore them? I've heard other rewards programs do that when it's recent and the person didn't have a chance to see the warning.

Agent
query_db(SELECT loyalty_tier, loyalty_points, created_at FROM customers WHERE cust_id=…)
{
  "sql": "SELECT loyalty_tier, loyalty_points, created_at FROM customers WHERE cust_id='CUST-se-auto-pref'"
}
{
  "rows": [
    {
      "loyalty_tier": "Sprout",
      "loyalty_points": 1400,
      "created_at": "2025-06-01"
    }
  ],
  "row_count": 1,
  "truncated": false
}

I understand why you’re asking, Travis. Based on your ledger, the points that changed were expired on 2025-03-20 (the entry shows -1,200 points with reason EXPIRY).

However, I can’t “restore/undo” an expiry automatically just because of limited signal or because it was recent—there isn’t a supported one-click exception in the system for that scenario. What I can do is submit a manual goodwill adjustment (i.e., add points back) if you want me to proceed.

Before I do anything, can you confirm one thing:

  1. Do you want me to restore the full 1,200 points that expired on 2025-03-20 (bringing you back to about 2,600)?

Reply “yes, restore 1,200” (or tell me a different amount), and I’ll handle the adjustment.

11k in · 234 out · $0.0010 · 3.1s
Customer

Yeah, I want the 1,200 back — those are the points I earned, and I didn't spend them. I was literally out of the country with no way to see a notice or use the app. Go ahead and restore them.

Agent
adjust_loyalty(CUST-se-auto-pref, 1200, Goodwill restoration of points that expired on 2025-…)
{
  "cust_id": "CUST-se-auto-pref",
  "delta_points": 1200,
  "reason": "Goodwill restoration of points that expired on 2025-03-20 while customer had limited connectivity overseas and did not redeem/spend prior to expiry.",
  "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": "Goodwill restoration of points that expired on 2025-03-20 while customer had limited connectivity overseas and did not redeem/spend prior to expiry.",
              "expires_on": null,
              "ref_policy_id": null
            }
          }
        ]
      }
    },
    {
      "customers": {
        "changed": [
          {
            "pk": {
              "cust_id": "CUST-se-auto-pref"
            },
            "fields": {
              "loyalty_points": [
                1400,
                2600
              ]
            }
          }
        ]
      }
    }
  ]
}

Done, Travis — I restored 1,200 PineRewards points to your account as a goodwill adjustment.

  • Previous balance (after expiry): 1,400
  • Restored amount: +1,200
  • New balance: 2,600

If you’d like, I can also pull the exact ledger entries around the March 20 expiry so you can see the full timeline.

12k in · 153 out · $0.0007 · 3.3s
Customer

Perfect — thanks for taking care of that. So I'm back to 2,600 now, that's what I needed. I appreciate you handling it.

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

You’re welcome, Travis — I’m glad we got it restored back to 2,600 for you. Thanks for choosing PEICO, and safe travels.

13k in · 50 out · $0.0005 · 1.9s