{
  "version": "1.2",
  "lastUpdated": "2026-08-11",
  "locale": "en",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "licenseLabel": "CC BY 4.0 — attribution: heypeko.com",
  "methodUrl": "https://heypeko.com/loyalty-transparency-standard/how-to-grade",
  "scoring": {
    "pass": 1,
    "partial": 0.5,
    "fail": 0,
    "unknown": 0
  },
  "verdictValues": [
    "pass",
    "partial",
    "fail",
    "unknown"
  ],
  "instructions": [
    "Each cell takes one of four verdicts: pass (●), partial (◐), fail (○), unknown (–).",
    "A cell with no public documentation stays unknown — do not infer it.",
    "Every graded cell must carry the source URL and the access date.",
    "Scoring: pass = 1, partial = 0.5, fail = 0, unknown = 0. Maximum 10."
  ],
  "criteria": [
    {
      "id": "the-right-to-see",
      "name": "Criterion 1 — The right to see",
      "question": "Can the member independently see their point balance, tier, and available vouchers without asking staff?",
      "subCriteria": [
        {
          "id": "c1_balance",
          "name": "1a. Member sees balance"
        },
        {
          "id": "c1_tier",
          "name": "1b. Member sees tier"
        },
        {
          "id": "c1_vouchers",
          "name": "1c. Member sees voucher list"
        }
      ]
    },
    {
      "id": "self-service-redemption",
      "name": "Criterion 2 — Self-service redemption, on every channel",
      "question": "Can the member redeem a reward themselves, and can they do it on an online or delivery order as well as in-store?",
      "subCriteria": [
        {
          "id": "c2_self",
          "name": "2a. Self-service redemption"
        },
        {
          "id": "c2_channels",
          "name": "2b. Redemption channels"
        }
      ]
    },
    {
      "id": "between-visit-contact",
      "name": "Criterion 3 — The right to be contacted between visits",
      "question": "Does the member receive anything between visits, on a channel they read — and are the messages the ones that matter for retention?",
      "subCriteria": [
        {
          "id": "c3_channel",
          "name": "3a. Messaging channel"
        },
        {
          "id": "c3_triggers",
          "name": "3b. Trigger types"
        }
      ]
    },
    {
      "id": "enrolment-without-the-cashier",
      "name": "Criterion 4 — Enrolment that does not depend on the cashier",
      "question": "Can a customer join without a staff member initiating it — and if so, what prevents abuse?",
      "subCriteria": [
        {
          "id": "c4_paths",
          "name": "4a. Enrolment paths"
        },
        {
          "id": "c4_integrity",
          "name": "4b. Integrity controls"
        }
      ]
    },
    {
      "id": "enrolment-scope",
      "name": "Criterion 5 — Enrolment scope: only the payer, or the whole table?",
      "question": "Can people who did not pay — the rest of the table, the group, the companions — join the programme on that visit?",
      "subCriteria": [
        {
          "id": "c5_scope",
          "name": "5. Enrolment scope"
        }
      ]
    }
  ],
  "vendorTemplate": {
    "vendor": "",
    "market": "",
    "gradedOn": "",
    "cells": {
      "c1_balance": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c1_tier": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c1_vouchers": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c2_self": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c2_channels": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c3_channel": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c3_triggers": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c4_paths": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c4_integrity": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      },
      "c5_scope": {
        "verdict": "",
        "note": "",
        "source": "",
        "accessedOn": ""
      }
    }
  }
}
