{
  "page": "ai",
  "name": "GS1 Application Identifiers — the payload grammar",
  "address": "https://barcoding.dev/schemes/ai",
  "scheme": "gs1.element-string",
  "reference": {
    "grammar": "An AI is a 2–4 digit tag followed by a typed value. Fixed-length AIs run straight into the next AI; variable-length AIs terminate at GS (0x1D) or end of payload. The tag/length/type table is pinned data derived from the GS1 General Specifications.",
    "check": "Structural — carried values bring their own rails (AI 01 carries the GTIN mod-10). Errors are typed with byte offsets.",
    "canonical": "A typed AI map. generate emits deterministic AI ordering; resolve accepts any valid ordering.",
    "symbologies": "GS1-128 (]C1) · GS1 DataMatrix (]d2) · GS1 QR (]Q3) · and the wider AIM prologue set (]C0 ]E0 ]I1 ]A0 ]Q1 ]L2) — the prologue names the carrier, never the identifier",
    "enrichment": "— (grammar layer; enrichment attaches to the carried keys)",
    "join": "The AI map is the event's raw material: 01+21 → epcList instance, 01+10 → quantityList class, 00 → parentID."
  },
  "registry": {
    "gs1.element-string": {
      "scheme": "gs1.element-string",
      "title": "GS1 element string — AI syntax",
      "grammar": "^(\\](C1|e0|d2|Q3|Q1))?[\\x1d]?\\(?\\d{2,4}\\)?.+",
      "check": {
        "algorithm": "per-key",
        "label": "mod10 pass",
        "source": "GS1 GenSpecs 26.0 §7.8 (AI syntax), §7.9 (check digits)",
        "vectors": [
          {
            "value": "(01)09506000134352(17)260930(10)LOT42",
            "valid": true
          },
          {
            "value": "(01)09506000134353(10)LOT42",
            "valid": false
          }
        ]
      },
      "canonical": "bracketed element string, deterministic AI order: primary key, then 22, 10, 21, then ascending",
      "segments": [
        {
          "name": "one segment per AI, from the pinned AI table",
          "note": "FNC1 separators drawn as visible seams"
        },
        {
          "name": "primary-key check digit",
          "note": "the check lives inside the primary key AI — the last digit of (01)/(00)",
          "color": "green",
          "philosophy": "this character exists only to certify the others"
        }
      ],
      "symbologies": [
        "gs1-128",
        "gs1datamatrix",
        "qrcode"
      ],
      "generate": {
        "emits": [
          "gs1-128",
          "gs1datamatrix"
        ]
      },
      "policy": {},
      "handoff": "read here · resolved by id.org.ai",
      "address": "/01/{gtin14}",
      "digest": "sha256:6e4b22877ad1c3add56c885785f5768670f9c6310f15150dc69d3aff6294dac4",
      "digest_source": "engine/pins/PINS.json — pin verified against the artifact this build consumed"
    }
  },
  "resolution_stance": "barcoding.dev detects, parses, verifies, enriches and generates — the codec and the data layer. Resolution — an identifier answered with identity and its linkset of live doors — is ONE capability family-wide, served by the family's identity layer, id.org.ai; vertical estates project the same one capability (vehicles: auto.dev). This registry row is the data that resolution consumes.",
  "posts": [
    "https://barcoding.dev/blog/application-identifiers-grammar/",
    "https://barcoding.dev/blog/what-did-i-just-scan/",
    "https://barcoding.dev/blog/element-string-or-digital-link-uri/",
    "https://barcoding.dev/blog/the-round-trip-law/"
  ],
  "faces": {
    "html": "https://barcoding.dev/schemes/ai/",
    "json": "https://barcoding.dev/schemes/ai.json",
    "markdown": "https://barcoding.dev/schemes/ai.md"
  }
}
