{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "A Digital Traceability Event (DTE) credential. The credential subject is a list of GS1 EPCIS 2.0 events. Event semantics are defined by the GS1 EPCIS/CBV vocabulary; this schema defines only the W3C VCDM envelope and the linkage to the EPCIS event model.",
  "type": "object",
  "additionalProperties": true,
  "required": [
    "@context",
    "id",
    "issuer",
    "validFrom",
    "name",
    "credentialSubject"
  ],
  "properties": {
    "type": {
      "type": "array",
      "readOnly": true,
      "default": ["DigitalTraceabilityEvent", "VerifiableCredential"],
      "items": { "type": "string" },
      "allOf": [
        {
          "contains": { "const": "DigitalTraceabilityEvent", "minContains": 1 }
        },
        { "contains": { "const": "VerifiableCredential", "minContains": 1 } }
      ]
    },
    "@context": {
      "type": "array",
      "readOnly": true,
      "description": "A list of JSON-LD context URIs that define the semantic meaning of properties within the credential. The W3C VCDM context, the UNTP context, and the GS1 EPCIS context MUST all be present, in that order. Further entries MAY be added, including inline context objects declaring extension namespaces used by the EPCIS events.",
      "example": [
        "https://www.w3.org/ns/credentials/v2",
        "https://vocabulary.uncefact.org/untp/0.8.0/context/",
        "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
        { "ext": "https://ns.example.com/epcis/" }
      ],
      "default": [
        "https://www.w3.org/ns/credentials/v2",
        "https://vocabulary.uncefact.org/untp/0.8.0/context/",
        "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
      ],
      "prefixItems": [
        { "const": "https://www.w3.org/ns/credentials/v2", "type": "string" },
        {
          "const": "https://vocabulary.uncefact.org/untp/0.8.0/context/",
          "type": "string"
        },
        {
          "const": "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
          "type": "string"
        }
      ],
      "items": { "anyOf": [{ "type": "string" }, { "type": "object" }] },
      "minItems": 3,
      "uniqueItems": true
    },
    "id": {
      "example": "https://example-company.com/credentials/2a423366-a0d6-4855-ba65-2e0c926d09b0",
      "type": "string",
      "format": "uri",
      "description": "A unique identifier (URI) assigned to this verifiable credential."
    },
    "issuer": {
      "$ref": "#/$defs/CredentialIssuer",
      "description": "The organisation that is the issuer of this VC. The \"id\" property MUST be a W3C DID. Other identifiers, such as business or tax registration numbers, are listed in the \"issuerAlsoKnownAs\" property."
    },
    "validFrom": {
      "example": "2024-03-15T12:00:00Z",
      "type": "string",
      "format": "date-time",
      "description": "The date and time from which the credential is valid."
    },
    "validUntil": {
      "example": "2034-03-15T12:00:00Z",
      "type": "string",
      "format": "date-time",
      "description": "The expiry date (if applicable) of this verifiable credential."
    },
    "name": {
      "example": "Some name",
      "type": "string",
      "description": "Name of this verifiable credential instance."
    },
    "credentialStatus": {
      "oneOf": [
        { "$ref": "#/$defs/BitstringStatusListEntry" },
        {
          "type": "array",
          "items": { "$ref": "#/$defs/BitstringStatusListEntry" },
          "minItems": 1
        }
      ],
      "description": "A W3C VCDM2.0 compliant object, or array of such objects, containing credential status information."
    },
    "renderMethod": {
      "type": "array",
      "items": { "$ref": "#/$defs/RenderTemplate2024" },
      "description": "Human rendering information for this credential."
    },
    "credentialSubject": {
      "type": "array",
      "minItems": 1,
      "description": "The GS1 EPCIS 2.0 event(s) that are the subject of this digital traceability event. Each item is an EPCIS event as defined by the GS1 EPCIS JSON Schema. Events do not carry their own @context: the GS1 EPCIS context is declared once at the credential level, exactly as it is for events inside an EPCISDocument.",
      "items": { "$ref": "#/$defs/EPCISEvent" }
    },
    "issuingSoftware": {
      "$ref": "#/$defs/IssuingSoftware",
      "description": "Optional metadata identifying the software product (and its vendor) that issued this credential."
    }
  },
  "$defs": {
    "EPCISEvent": {
      "$comment": "A GS1 EPCIS 2.0 event. The EPCIS context is declared at credential level, so events need not carry their own @context, exactly as events inside an EPCISDocument; a per-event @context is permitted but redundant. Resolves to the event union in the GS1 EPCIS JSON Schema, which dispatches on the 'type' property across ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, AssociationEvent, and any extension event type identified by a URI. UNTP does not add, remove, or constrain any EPCIS event property. Restated here as anyOf for display; see DigitalTraceabilityEvent.json.",
      "anyOf": [
        { "title": "ObjectEvent", "$ref": "#/$defs/Display-ObjectEvent" },
        {
          "title": "AggregationEvent",
          "$ref": "#/$defs/Display-AggregationEvent"
        },
        {
          "title": "TransactionEvent",
          "$ref": "#/$defs/Display-TransactionEvent"
        },
        {
          "title": "TransformationEvent",
          "$ref": "#/$defs/Display-TransformationEvent"
        },
        {
          "title": "AssociationEvent",
          "$ref": "#/$defs/Display-AssociationEvent"
        },
        {
          "title": "Extension event",
          "$ref": "#/$defs/Display-Extended-Event",
          "not": {
            "required": ["type"],
            "properties": {
              "type": {
                "enum": [
                  "ObjectEvent",
                  "AggregationEvent",
                  "TransactionEvent",
                  "TransformationEvent",
                  "AssociationEvent"
                ]
              }
            }
          }
        }
      ]
    },
    "CredentialIssuer": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": ["CredentialIssuer"],
          "items": { "type": "string" },
          "allOf": [
            { "contains": { "const": "CredentialIssuer", "minContains": 1 } }
          ]
        },
        "id": {
          "example": "did:web:identifiers.example-company.com:12345",
          "type": "string",
          "format": "uri",
          "description": "The W3C DID of the issuer. did:web and did:webvh are the RECOMMENDED methods."
        },
        "name": {
          "example": "Example Company Pty Ltd",
          "type": "string",
          "description": "The name of the issuer person or organisation"
        },
        "issuerAlsoKnownAs": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "array",
                "readOnly": true,
                "default": ["Party"],
                "items": { "type": "string" },
                "allOf": [
                  { "contains": { "const": "Party", "minContains": 1 } }
                ]
              },
              "id": {
                "example": "https://sample-business-register.gov/123456789",
                "type": "string",
                "format": "uri",
                "description": "Globally unique identifier of this party. Typically represented as a URI identifierScheme/Identifier URI"
              },
              "name": {
                "example": "Sample Company Ltd",
                "type": "string",
                "description": "Legal registered name of this party."
              },
              "registeredId": {
                "example": 90664869327,
                "type": "string",
                "description": "The registration number (alphanumeric) of the Party within the register. Unique within the register."
              },
              "idScheme": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "array",
                    "readOnly": true,
                    "default": ["IdentifierScheme"],
                    "items": { "type": "string" },
                    "allOf": [
                      {
                        "contains": {
                          "const": "IdentifierScheme",
                          "minContains": 1
                        }
                      }
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uri",
                    "description": "The URI of this identifier scheme"
                  },
                  "name": {
                    "example": "Global Identifier Scheme Name",
                    "type": "string",
                    "description": "The name of the identifier scheme. "
                  }
                },
                "required": ["id", "name"],
                "description": "The identifier scheme of the registeredId - eg the register that issued this identifier."
              }
            },
            "required": ["id", "name"]
          },
          "description": "An optional list of other registered identifiers for this credential issuer "
        }
      },
      "description": "The issuer party (person or organisation) of a verifiable credential.",
      "required": ["id", "name"]
    },
    "BitstringStatusListEntry": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": ["BitstringStatusListEntry"],
          "example": "BitstringStatusListEntry",
          "description": "The type of status list - must be set to \"The type property MUST be BitstringStatusListEntry.\""
        },
        "id": {
          "example": "https://example-cab.com/credentials/status/3#94567",
          "type": "string",
          "format": "uri",
          "description": "optional identifier of this status list entry."
        },
        "statusPurpose": {
          "type": "string",
          "examples": ["refresh", "revocation", "suspension", "message"],
          "description": "Status purpose drawn from a standard list but extensible as per w3c bitstring status list specification."
        },
        "statusListIndex": {
          "example": "94567",
          "type": "string",
          "pattern": "^[0-9]+$",
          "description": "The statusListIndex property MUST be an arbitrary size integer greater than or equal to 0, expressed as a string in base 10. The value identifies the position of the status of the verifiable credential."
        },
        "statusListCredential": {
          "example": "https://example-cab.com/credentials/status/4",
          "type": "string",
          "format": "uri",
          "description": "The statusListCredential property MUST be a URL to a verifiable credential. When the URL is dereferenced, the resulting verifiable credential MUST have type property that includes the BitstringStatusListCredential value."
        },
        "statusSize": { "type": "integer", "minimum": 1 },
        "statusMessage": {
          "type": "array",
          "minItems": 2,
          "items": {
            "type": "object",
            "required": ["status", "message"],
            "properties": {
              "status": { "type": "string", "pattern": "^0x[0-9a-fA-F]+$" },
              "message": { "type": "string" }
            }
          }
        },
        "statusReference": {
          "oneOf": [
            { "type": "string", "format": "uri" },
            { "type": "array", "items": { "type": "string", "format": "uri" } }
          ]
        }
      },
      "description": "A privacy-preserving, space-efficient, and high-performance mechanism for publishing status information such as suspension or revocation of Verifiable Credentials through use of bitstrings.  See https://www.w3.org/TR/vc-bitstring-status-list/ for full details.",
      "required": [
        "type",
        "statusPurpose",
        "statusListIndex",
        "statusListCredential"
      ],
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": ["statusSize"],
            "properties": { "statusSize": { "type": "integer", "minimum": 2 } }
          },
          "then": {
            "type": "object",
            "required": ["statusMessage"],
            "properties": { "statusMessage": { "type": "array" } }
          }
        },
        {
          "if": {
            "type": "object",
            "properties": { "statusSize": { "type": "integer", "const": 1 } }
          },
          "then": {
            "type": "object",
            "properties": {
              "statusMessage": { "type": "array", "maxItems": 2 }
            }
          }
        }
      ]
    },
    "RenderTemplate2024": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": ["RenderTemplate2024"],
          "items": { "type": "string" },
          "allOf": [
            { "contains": { "const": "RenderTemplate2024", "minContains": 1 } }
          ]
        },
        "name": {
          "type": "string",
          "description": "Human facing display name for selection"
        },
        "mediaQuery": {
          "type": "string",
          "description": "Media query as defined in https://www.w3.org/TR/mediaqueries-4/"
        },
        "template": {
          "type": "string",
          "description": "An inline template field for use cases where remote retrieval of a render method is suboptimal"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL for remotely hosted template"
        },
        "mediaType": {
          "type": "string",
          "description": "media type of the rendered output (eg text/html)"
        },
        "digestMultibase": {
          "type": "string",
          "description": "Used for resource integrity and/or validation of the inline `template`"
        }
      },
      "description": "A single template format focused render method where the content/media type decision becomes secondary (and is expressed separately).See https://github.com/w3c-ccg/vc-render-method/issues/9"
    },
    "IssuingSoftware": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "example": "https://example.com/.well-known/untp/software/yourproduct/2026.04.1",
          "type": "string",
          "format": "uri",
          "description": "A resolvable identifier for the specific version of the software product that issued this credential."
        },
        "name": {
          "example": "Your Product Name",
          "type": "string",
          "description": "The name of the software product that issued this credential."
        },
        "version": {
          "example": "2026.04.1",
          "type": "string",
          "description": "The version of the software product that issued this credential."
        },
        "vendor": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "id": {
              "example": "did:web:example.com",
              "type": "string",
              "format": "uri",
              "description": "The decentralised identifier (DID) or other resolvable identifier of the software vendor."
            },
            "name": {
              "example": "Your Vendor Name",
              "type": "string",
              "description": "The name of the software vendor."
            }
          },
          "required": ["id", "name"],
          "description": "The vendor of the software product that issued this credential."
        }
      },
      "required": ["id", "name", "version", "vendor"],
      "description": "Optional metadata identifying the software product (and its vendor) that issued the parent credential. When present, all listed sub-properties MUST be populated; when absent, the credential is still valid (verifiers MUST treat the property as optional)."
    },
    "@context": {
      "anyOf": [
        { "type": "string", "format": "uri" },
        { "type": "object" },
        {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "anyOf": [
              { "type": "string", "format": "uri" },
              { "type": "object" }
            ]
          }
        }
      ]
    },
    "AggregationEvent": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": {
            "type": { "type": "string", "enum": ["AggregationEvent"] },
            "parentID": { "$ref": "#/$defs/uri" },
            "childEPCs": {
              "type": "array",
              "items": { "$ref": "#/$defs/uri" }
            },
            "childQuantityList": {
              "type": "array",
              "items": { "$ref": "#/$defs/quantityElement" }
            },
            "action": { "$ref": "#/$defs/action" },
            "bizStep": { "$ref": "#/$defs/bizStep" },
            "disposition": { "$ref": "#/$defs/disposition" },
            "readPoint": { "$ref": "#/$defs/readPoint" },
            "bizLocation": { "$ref": "#/$defs/bizLocation" },
            "bizTransactionList": {
              "type": "array",
              "items": { "$ref": "#/$defs/bizTransaction" }
            },
            "sourceList": {
              "type": "array",
              "items": { "$ref": "#/$defs/source" }
            },
            "destinationList": {
              "type": "array",
              "items": { "$ref": "#/$defs/destination" }
            },
            "sensorElementList": {
              "type": "array",
              "items": { "$ref": "#/$defs/sensorElement" }
            }
          },
          "required": ["type", "action"],
          "propertyNames": {
            "anyOf": [
              { "$ref": "#/$defs/common-event-properties" },
              {
                "type": "string",
                "enum": [
                  "parentID",
                  "childEPCs",
                  "childQuantityList",
                  "action",
                  "bizStep",
                  "disposition",
                  "persistentDisposition",
                  "readPoint",
                  "bizLocation",
                  "bizTransactionList",
                  "sourceList",
                  "destinationList",
                  "sensorElementList"
                ]
              }
            ]
          }
        },
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "childEPCs": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/id" }
                }
              },
              "required": ["childEPCs"]
            },
            {
              "type": "object",
              "properties": {
                "childQuantityList": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/quantityElement" }
                }
              },
              "required": ["childQuantityList"]
            },
            {
              "type": "object",
              "properties": {
                "action": { "type": "string", "pattern": "^DELETE$" }
              }
            }
          ]
        }
      ]
    },
    "AssociationEvent": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": {
            "type": { "type": "string", "enum": ["AssociationEvent"] },
            "parentID": { "$ref": "#/$defs/uri" },
            "childEPCs": {
              "type": "array",
              "items": { "$ref": "#/$defs/uri" }
            },
            "childQuantityList": {
              "type": "array",
              "items": { "$ref": "#/$defs/quantityElement" }
            },
            "action": { "$ref": "#/$defs/action" },
            "bizStep": { "$ref": "#/$defs/bizStep" },
            "disposition": { "$ref": "#/$defs/disposition" },
            "readPoint": { "$ref": "#/$defs/readPoint" },
            "bizLocation": { "$ref": "#/$defs/bizLocation" },
            "bizTransactionList": {
              "type": "array",
              "items": { "$ref": "#/$defs/bizTransaction" }
            },
            "sourceList": {
              "type": "array",
              "items": { "$ref": "#/$defs/source" }
            },
            "destinationList": {
              "type": "array",
              "items": { "$ref": "#/$defs/destination" }
            },
            "sensorElementList": {
              "type": "array",
              "items": { "$ref": "#/$defs/sensorElement" }
            }
          },
          "required": ["type", "action", "parentID"],
          "propertyNames": {
            "anyOf": [
              { "$ref": "#/$defs/common-event-properties" },
              {
                "type": "string",
                "enum": [
                  "parentID",
                  "childEPCs",
                  "childQuantityList",
                  "action",
                  "bizStep",
                  "disposition",
                  "persistentDisposition",
                  "readPoint",
                  "bizLocation",
                  "bizTransactionList",
                  "sourceList",
                  "destinationList",
                  "sensorElementList"
                ]
              }
            ]
          }
        },
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "childEPCs": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/id" }
                }
              },
              "required": ["childEPCs"]
            },
            {
              "type": "object",
              "properties": {
                "childQuantityList": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/quantityElement" }
                }
              },
              "required": ["childQuantityList"]
            },
            {
              "type": "object",
              "properties": {
                "action": { "type": "string", "pattern": "^DELETE$" }
              }
            }
          ]
        }
      ]
    },
    "EPCIS-Document-Event": {
      "type": "object",
      "required": ["type"],
      "allOf": [
        {
          "if": {
            "type": "object",
            "properties": { "type": { "enum": ["ObjectEvent"] } }
          },
          "then": { "$ref": "#/$defs/ObjectEvent" }
        },
        {
          "if": {
            "type": "object",
            "properties": { "type": { "enum": ["AggregationEvent"] } }
          },
          "then": { "$ref": "#/$defs/AggregationEvent" }
        },
        {
          "if": {
            "type": "object",
            "properties": { "type": { "enum": ["TransactionEvent"] } }
          },
          "then": { "$ref": "#/$defs/TransactionEvent" }
        },
        {
          "if": {
            "properties": { "type": { "enum": ["TransformationEvent"] } }
          },
          "then": { "$ref": "#/$defs/TransformationEvent" }
        },
        {
          "if": {
            "type": "object",
            "properties": { "type": { "enum": ["AssociationEvent"] } }
          },
          "then": { "$ref": "#/$defs/AssociationEvent" }
        },
        {
          "if": {
            "not": {
              "type": "object",
              "properties": {
                "type": {
                  "enum": [
                    "AssociationEvent",
                    "ObjectEvent",
                    "AggregationEvent",
                    "TransactionEvent",
                    "TransformationEvent"
                  ]
                }
              }
            }
          },
          "then": { "$ref": "#/$defs/Extended-Event" }
        }
      ],
      "properties": { "type": { "type": "string" } }
    },
    "Event": {
      "type": "object",
      "properties": {
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" }
      },
      "required": ["eventTime", "eventTimeZoneOffset"]
    },
    "Extended-Event": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": { "type": { "$ref": "#/$defs/vocab-uri" } },
          "required": ["type"]
        }
      ]
    },
    "ObjectEvent": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": {
            "type": { "type": "string", "enum": ["ObjectEvent"] },
            "epcList": { "$ref": "#/$defs/epcList" },
            "quantityList": { "$ref": "#/$defs/quantityList" },
            "action": { "$ref": "#/$defs/action" },
            "bizStep": { "$ref": "#/$defs/bizStep" },
            "disposition": { "$ref": "#/$defs/disposition" },
            "persistentDisposition": {
              "$ref": "#/$defs/persistentDisposition"
            },
            "readPoint": { "$ref": "#/$defs/readPoint" },
            "bizLocation": { "$ref": "#/$defs/bizLocation" },
            "bizTransactionList": {
              "type": "array",
              "items": { "$ref": "#/$defs/bizTransaction" }
            },
            "sourceList": {
              "type": "array",
              "items": { "$ref": "#/$defs/source" }
            },
            "destinationList": {
              "type": "array",
              "items": { "$ref": "#/$defs/destination" }
            },
            "sensorElementList": {
              "type": "array",
              "items": { "$ref": "#/$defs/sensorElement" }
            },
            "ilmd": { "$ref": "#/$defs/ilmd" }
          },
          "required": ["type", "action"],
          "propertyNames": {
            "anyOf": [
              { "$ref": "#/$defs/common-event-properties" },
              {
                "type": "string",
                "enum": [
                  "action",
                  "epcList",
                  "quantityList",
                  "bizStep",
                  "disposition",
                  "persistentDisposition",
                  "readPoint",
                  "bizLocation",
                  "bizTransactionList",
                  "sourceList",
                  "destinationList",
                  "sensorElementList",
                  "ilmd"
                ]
              }
            ]
          }
        },
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "epcList": {
                  "type": "array",
                  "minItems": 0,
                  "items": { "$ref": "#/$defs/id" }
                }
              },
              "required": ["epcList"]
            },
            {
              "type": "object",
              "properties": {
                "quantityList": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/quantityElement" }
                }
              },
              "required": ["quantityList"]
            },
            {
              "allOf": [
                {
                  "type": "object",
                  "properties": {
                    "sensorElementList": {
                      "type": "array",
                      "items": { "$ref": "#/$defs/sensorElement" },
                      "minItems": 1
                    }
                  },
                  "required": ["sensorElementList"]
                },
                {
                  "type": "object",
                  "properties": {
                    "readPoint": { "$ref": "#/$defs/readPoint" }
                  },
                  "required": ["readPoint"]
                }
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "ilmd": { "not": {} },
                "action": { "type": "string", "pattern": "^OBSERVE$" }
              }
            },
            {
              "type": "object",
              "properties": {
                "ilmd": { "not": {} },
                "action": { "type": "string", "pattern": "^DELETE$" }
              }
            },
            {
              "type": "object",
              "properties": {
                "action": { "type": "string", "pattern": "^ADD$" }
              }
            }
          ]
        }
      ]
    },
    "TransactionEvent": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": {
            "type": { "type": "string", "enum": ["TransactionEvent"] },
            "bizTransactionList": {
              "type": "array",
              "items": { "$ref": "#/$defs/bizTransaction" },
              "minItems": 1
            },
            "parentID": { "$ref": "#/$defs/uri" },
            "epcList": { "type": "array", "items": { "$ref": "#/$defs/uri" } },
            "quantityList": {
              "type": "array",
              "items": { "$ref": "#/$defs/quantityElement" }
            },
            "action": { "$ref": "#/$defs/action" },
            "bizStep": { "$ref": "#/$defs/bizStep" },
            "disposition": { "$ref": "#/$defs/disposition" },
            "readPoint": { "$ref": "#/$defs/readPoint" },
            "bizLocation": { "$ref": "#/$defs/bizLocation" },
            "sourceList": {
              "type": "array",
              "items": { "$ref": "#/$defs/source" }
            },
            "destinationList": {
              "type": "array",
              "items": { "$ref": "#/$defs/destination" }
            },
            "sensorElementList": {
              "type": "array",
              "items": { "$ref": "#/$defs/sensorElement" }
            }
          },
          "required": ["type", "bizTransactionList", "action"],
          "propertyNames": {
            "anyOf": [
              { "$ref": "#/$defs/common-event-properties" },
              {
                "type": "string",
                "enum": [
                  "bizTransactionList",
                  "parentID",
                  "epcList",
                  "quantityList",
                  "action",
                  "bizStep",
                  "disposition",
                  "persistentDisposition",
                  "readPoint",
                  "bizLocation",
                  "sourceList",
                  "destinationList",
                  "sensorElementList"
                ]
              }
            ]
          }
        },
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "epcList": {
                  "type": "array",
                  "minItems": 0,
                  "items": { "$ref": "#/$defs/id" }
                }
              },
              "required": ["epcList"]
            },
            {
              "type": "object",
              "properties": {
                "quantityList": {
                  "type": "array",
                  "minItems": 1,
                  "items": { "$ref": "#/$defs/quantityElement" }
                }
              },
              "required": ["quantityList"]
            },
            {
              "type": "object",
              "properties": {
                "action": { "type": "string", "pattern": "^DELETE$" }
              }
            }
          ]
        }
      ]
    },
    "TransformationEvent": {
      "allOf": [
        { "$ref": "#/$defs/Event" },
        {
          "type": "object",
          "properties": {
            "type": { "type": "string", "enum": ["TransformationEvent"] },
            "inputEPCList": { "$ref": "#/$defs/epcList" },
            "inputQuantityList": { "$ref": "#/$defs/quantityList" },
            "outputEPCList": { "$ref": "#/$defs/epcList" },
            "outputQuantityList": { "$ref": "#/$defs/quantityList" },
            "transformationID": { "$ref": "#/$defs/uri" },
            "bizStep": { "$ref": "#/$defs/bizStep" },
            "disposition": { "$ref": "#/$defs/disposition" },
            "persistentDisposition": {
              "$ref": "#/$defs/persistentDisposition"
            },
            "readPoint": { "$ref": "#/$defs/readPoint" },
            "bizLocation": { "$ref": "#/$defs/bizLocation" },
            "bizTransactionList": {
              "type": "array",
              "items": { "$ref": "#/$defs/bizTransaction" }
            },
            "sourceList": {
              "type": "array",
              "items": { "$ref": "#/$defs/source" }
            },
            "destinationList": {
              "type": "array",
              "items": { "$ref": "#/$defs/destination" }
            },
            "sensorElementList": {
              "type": "array",
              "items": { "$ref": "#/$defs/sensorElement" }
            },
            "ilmd": { "$ref": "#/$defs/ilmd" }
          },
          "required": ["type"],
          "propertyNames": {
            "anyOf": [
              { "$ref": "#/$defs/common-event-properties" },
              {
                "type": "string",
                "enum": [
                  "inputEPCList",
                  "inputQuantityList",
                  "outputEPCList",
                  "outputQuantityList",
                  "transformationID",
                  "bizStep",
                  "disposition",
                  "persistentDisposition",
                  "readPoint",
                  "bizLocation",
                  "bizTransactionList",
                  "sourceList",
                  "destinationList",
                  "sensorElementList",
                  "ilmd"
                ]
              }
            ]
          }
        },
        {
          "anyOf": [
            {
              "allOf": [
                {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "inputEPCList": {
                          "type": "array",
                          "minItems": 1,
                          "items": { "type": "string" }
                        }
                      },
                      "required": ["inputEPCList"]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "inputQuantityList": {
                          "type": "array",
                          "minItems": 1,
                          "items": { "type": "object" }
                        }
                      },
                      "required": ["inputQuantityList"]
                    }
                  ]
                },
                {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "outputEPCList": {
                          "type": "array",
                          "minItems": 1,
                          "items": { "type": "string" }
                        }
                      },
                      "required": ["outputEPCList"]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "outputQuantityList": {
                          "type": "array",
                          "minItems": 1,
                          "items": { "type": "object" }
                        }
                      },
                      "required": ["outputQuantityList"]
                    }
                  ]
                }
              ]
            },
            {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "inputEPCList": {
                      "type": "array",
                      "minItems": 1,
                      "items": { "type": "string" }
                    }
                  },
                  "required": ["inputEPCList"]
                },
                {
                  "type": "object",
                  "properties": {
                    "inputQuantityList": {
                      "type": "array",
                      "minItems": 1,
                      "items": { "type": "object" }
                    }
                  },
                  "required": ["inputQuantityList"]
                },
                {
                  "type": "object",
                  "properties": {
                    "outputEPCList": {
                      "type": "array",
                      "minItems": 1,
                      "items": { "type": "string" }
                    }
                  },
                  "required": ["outputEPCList"]
                },
                {
                  "type": "object",
                  "properties": {
                    "outputQuantityList": {
                      "type": "array",
                      "minItems": 1,
                      "items": { "type": "object" }
                    }
                  },
                  "required": ["outputQuantityList"]
                }
              ],
              "type": "object",
              "required": ["transformationID"]
            }
          ]
        }
      ]
    },
    "action": { "type": "string", "enum": ["OBSERVE", "ADD", "DELETE"] },
    "bizLocation": {
      "type": "object",
      "properties": { "id": { "$ref": "#/$defs/uri" } },
      "required": ["id"]
    },
    "bizStep": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        {
          "type": "string",
          "enum": [
            "accepting",
            "arriving",
            "assembling",
            "collecting",
            "commissioning",
            "consigning",
            "creating_class_instance",
            "cycle_counting",
            "decommissioning",
            "departing",
            "destroying",
            "disassembling",
            "dispensing",
            "encoding",
            "entering_exiting",
            "holding",
            "inspecting",
            "installing",
            "killing",
            "loading",
            "other",
            "packing",
            "picking",
            "receiving",
            "removing",
            "repackaging",
            "repairing",
            "replacing",
            "reserving",
            "retail_selling",
            "shipping",
            "staging_outbound",
            "stock_taking",
            "stocking",
            "storing",
            "transporting",
            "unloading",
            "unpacking",
            "void_shipping",
            "sensor_reporting",
            "sampling"
          ]
        }
      ]
    },
    "bizTransaction": {
      "type": "object",
      "properties": {
        "type": { "$ref": "#/$defs/bizTransaction-type" },
        "bizTransaction": { "$ref": "#/$defs/uri" }
      },
      "required": ["bizTransaction"],
      "additionalProperties": false
    },
    "bizTransaction-type": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        {
          "type": "string",
          "enum": [
            "bol",
            "cert",
            "desadv",
            "inv",
            "pedigree",
            "po",
            "poc",
            "prodorder",
            "recadv",
            "rma",
            "testprd",
            "testres",
            "upevt"
          ]
        }
      ]
    },
    "boolean": { "type": "boolean" },
    "certificationInfo": {
      "anyOf": [
        { "type": "array", "items": { "$ref": "#/$defs/uri" } },
        { "$ref": "#/$defs/uri" }
      ]
    },
    "common-event-properties": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "@context",
            "type",
            "eventTime",
            "recordTime",
            "eventTimeZoneOffset",
            "eventID",
            "certificationInfo",
            "errorDeclaration"
          ]
        },
        { "$ref": "#/$defs/vocab-uri" }
      ]
    },
    "component": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        {
          "type": "string",
          "enum": [
            "x",
            "y",
            "z",
            "axial_distance",
            "azimuth",
            "height",
            "spherical_radius",
            "polar_angle",
            "elevation_angle",
            "easting",
            "northing",
            "latitude",
            "longitude",
            "altitude"
          ]
        }
      ]
    },
    "decimal": { "type": "number" },
    "destination": {
      "type": "object",
      "properties": {
        "type": { "$ref": "#/$defs/source-dest-type" },
        "destination": { "$ref": "#/$defs/uri" }
      },
      "required": ["type", "destination"],
      "additionalProperties": false
    },
    "disposition": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        {
          "type": "string",
          "enum": [
            "active",
            "container_closed",
            "damaged",
            "destroyed",
            "dispensed",
            "disposed",
            "encoded",
            "expired",
            "in_progress",
            "in_transit",
            "inactive",
            "no_pedigree_match",
            "non_sellable_other",
            "partially_dispensed",
            "recalled",
            "reserved",
            "retail_sold",
            "returned",
            "sellable_accessible",
            "sellable_not_accessible",
            "stolen",
            "unknown",
            "available",
            "completeness_verified",
            "completeness_inferred",
            "conformant",
            "container_open",
            "mismatch_instance",
            "mismatch_class",
            "mismatch_quantity",
            "needs_replacement",
            "non_conformant",
            "unavailable"
          ]
        }
      ]
    },
    "epcList": {
      "type": "array",
      "items": { "$ref": "#/$defs/uri" },
      "uniqueItems": true
    },
    "error-reason": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        { "type": "string", "enum": ["did_not_occur", "incorrect_data"] }
      ]
    },
    "errorDeclaration": {
      "type": "object",
      "properties": {
        "declarationTime": { "$ref": "#/$defs/time" },
        "reason": { "$ref": "#/$defs/error-reason" },
        "correctiveEventIDs": {
          "type": "array",
          "items": { "$ref": "#/$defs/eventID" }
        }
      },
      "required": ["declarationTime"],
      "propertyNames": {
        "anyOf": [
          { "$ref": "#/$defs/vocab-uri" },
          {
            "type": "string",
            "enum": ["declarationTime", "reason", "correctiveEventIDs"]
          }
        ]
      }
    },
    "eventID": { "$ref": "#/$defs/uri" },
    "hexBinary": { "type": "string", "pattern": "^[A-Fa-f0-9]+$" },
    "id": { "type": "string", "format": "uri" },
    "ilmd": {
      "type": "object",
      "propertyNames": { "type": "string", "format": "uri" }
    },
    "measurementType": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-nonGS1WebVoc-uri" },
        {
          "type": "string",
          "enum": [
            "AbsoluteHumidity",
            "AbsorbedDose",
            "AbsorbedDoseRate",
            "Acceleration",
            "Radioactivity",
            "Altitude",
            "AmountOfSubstance",
            "AmountOfSubstancePerUnitVolume",
            "Angle",
            "AngularAcceleration",
            "AngularMomentum",
            "AngularVelocity",
            "Area",
            "Capacitance",
            "Conductance",
            "Conductivity",
            "Count",
            "Density",
            "Dimensionless",
            "DoseEquivalent",
            "DoseEquivalentRate",
            "DynamicViscosity",
            "ElectricCharge",
            "ElectricCurrent",
            "ElectricCurrentDensity",
            "ElectricFieldStrength",
            "Energy",
            "Exposure",
            "Force",
            "Frequency",
            "Illuminance",
            "Inductance",
            "Irradiance",
            "KinematicViscosity",
            "Length",
            "LinearMomentum",
            "Luminance",
            "LuminousFlux",
            "LuminousIntensity",
            "MagneticFlux",
            "MagneticFluxDensity",
            "MagneticVectorPotential",
            "Mass",
            "MassConcentration",
            "MassFlowRate",
            "MassPerAreaTime",
            "MemoryCapacity",
            "MolalityOfSolute",
            "MolarEnergy",
            "MolarMass",
            "MolarVolume",
            "Power",
            "Pressure",
            "RadiantFlux",
            "RadiantIntensity",
            "RelativeHumidity",
            "Resistance",
            "Resistivity",
            "SolidAngle",
            "SpecificVolume",
            "Speed",
            "SurfaceDensity",
            "SurfaceTension",
            "Temperature",
            "Time",
            "Torque",
            "Voltage",
            "Volume",
            "VolumeFlowRate",
            "VolumeFraction",
            "VolumetricFlux",
            "Wavenumber"
          ]
        }
      ]
    },
    "persistentDisposition": {
      "allOf": [
        {
          "type": "object",
          "properties": {
            "set": {
              "type": "array",
              "items": { "$ref": "#/$defs/disposition" },
              "minItems": 1,
              "uniqueItems": true
            },
            "unset": {
              "type": "array",
              "items": { "$ref": "#/$defs/disposition" },
              "minItems": 1,
              "uniqueItems": true
            }
          },
          "additionalProperties": false
        },
        {
          "anyOf": [
            { "type": "object", "required": ["set"] },
            { "type": "object", "required": ["unset"] }
          ]
        }
      ]
    },
    "quantityElement": {
      "type": "object",
      "properties": {
        "epcClass": { "$ref": "#/$defs/uri" },
        "quantity": { "$ref": "#/$defs/decimal" },
        "uom": { "$ref": "#/$defs/uom" }
      },
      "required": ["epcClass"],
      "additionalProperties": false
    },
    "quantityList": {
      "type": "array",
      "items": { "$ref": "#/$defs/quantityElement" }
    },
    "readPoint": {
      "type": "object",
      "properties": { "id": { "$ref": "#/$defs/uri" } },
      "required": ["id"]
    },
    "sensorAlertType": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-nonGS1WebVoc-uri" },
        { "type": "string", "enum": ["ALARM_CONDITION", "ERROR_CONDITION"] }
      ]
    },
    "sensorElement": {
      "type": "object",
      "properties": {
        "sensorMetadata": { "$ref": "#/$defs/sensorMetadata" },
        "sensorReport": { "$ref": "#/$defs/sensorReportList" }
      },
      "required": ["sensorReport"],
      "propertyNames": {
        "anyOf": [
          { "$ref": "#/$defs/vocab-uri" },
          { "type": "string", "enum": ["sensorMetadata", "sensorReport"] }
        ]
      }
    },
    "sensorMetadata": {
      "type": "object",
      "properties": {
        "time": { "$ref": "#/$defs/time" },
        "deviceID": { "$ref": "#/$defs/uri" },
        "deviceMetadata": { "$ref": "#/$defs/uri" },
        "rawData": { "$ref": "#/$defs/uri" },
        "startTime": { "$ref": "#/$defs/time" },
        "endTime": { "$ref": "#/$defs/time" },
        "dataProcessingMethod": { "$ref": "#/$defs/uri" },
        "bizRules": { "$ref": "#/$defs/uri" }
      },
      "propertyNames": {
        "anyOf": [
          { "$ref": "#/$defs/vocab-uri" },
          {
            "type": "string",
            "enum": [
              "time",
              "deviceID",
              "deviceMetadata",
              "rawData",
              "startTime",
              "endTime",
              "dataProcessingMethod",
              "bizRules"
            ]
          }
        ]
      }
    },
    "sensorReport": {
      "type": "object",
      "properties": {
        "type": { "$ref": "#/$defs/measurementType" },
        "exception": { "$ref": "#/$defs/sensorAlertType" },
        "deviceID": { "$ref": "#/$defs/uri" },
        "deviceMetadata": { "$ref": "#/$defs/uri" },
        "rawData": { "$ref": "#/$defs/uri" },
        "dataProcessingMethod": { "$ref": "#/$defs/uri" },
        "bizRules": { "$ref": "#/$defs/uri" },
        "time": { "$ref": "#/$defs/time" },
        "microorganism": { "$ref": "#/$defs/uri" },
        "chemicalSubstance": { "$ref": "#/$defs/uri" },
        "coordinateReferenceSystem": { "$ref": "#/$defs/uri" },
        "value": { "$ref": "#/$defs/decimal" },
        "component": { "$ref": "#/$defs/component" },
        "stringValue": { "$ref": "#/$defs/string" },
        "booleanValue": { "$ref": "#/$defs/boolean" },
        "hexBinaryValue": { "$ref": "#/$defs/hexBinary" },
        "uriValue": { "$ref": "#/$defs/uri" },
        "minValue": { "$ref": "#/$defs/decimal" },
        "maxValue": { "$ref": "#/$defs/decimal" },
        "meanValue": { "$ref": "#/$defs/decimal" },
        "sDev": { "$ref": "#/$defs/decimal" },
        "percRank": { "$ref": "#/$defs/decimal" },
        "percValue": { "$ref": "#/$defs/decimal" },
        "uom": { "$ref": "#/$defs/string" }
      },
      "required": ["type"],
      "propertyNames": {
        "anyOf": [
          { "$ref": "#/$defs/vocab-uri" },
          {
            "type": "string",
            "enum": [
              "type",
              "exception",
              "deviceID",
              "deviceMetadata",
              "rawData",
              "dataProcessingMethod",
              "bizRules",
              "time",
              "microorganism",
              "chemicalSubstance",
              "coordinateReferenceSystem",
              "value",
              "component",
              "stringValue",
              "booleanValue",
              "hexBinaryValue",
              "uriValue",
              "minValue",
              "maxValue",
              "meanValue",
              "sDev",
              "percRank",
              "percValue",
              "uom"
            ]
          }
        ]
      }
    },
    "sensorReportList": {
      "type": "array",
      "items": { "$ref": "#/$defs/sensorReport" },
      "minItems": 1
    },
    "source": {
      "type": "object",
      "properties": {
        "type": { "$ref": "#/$defs/source-dest-type" },
        "source": { "$ref": "#/$defs/uri" }
      },
      "required": ["type", "source"],
      "additionalProperties": false
    },
    "source-dest-type": {
      "anyOf": [
        { "$ref": "#/$defs/vocab-other-uri" },
        {
          "type": "string",
          "enum": ["owning_party", "possessing_party", "location"]
        }
      ]
    },
    "string": { "type": "string" },
    "time": { "type": "string", "format": "date-time" },
    "uom": { "type": "string", "pattern": "^[A-Z0-9]{2,3}$" },
    "uri": { "type": "string", "format": "uri" },
    "vocab-nonGS1WebVoc-uri": {
      "type": "string",
      "format": "uri",
      "pattern": "^(?!(https?:\\/\\/gs1\\.org\\/voc\\/|https?:\\/\\/www\\.gs1\\.org\\/voc\\/))"
    },
    "vocab-other-uri": {
      "type": "string",
      "format": "uri",
      "pattern": "^(?!(urn:epcglobal:cbv|https?:\\/\\/ns\\.gs1\\.org/cbv\\/))"
    },
    "vocab-uri": { "type": "string", "format": "uri" },
    "Display-ObjectEvent": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "type": "string", "enum": ["ObjectEvent"] },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" },
        "epcList": { "$ref": "#/$defs/epcList" },
        "quantityList": { "$ref": "#/$defs/quantityList" },
        "action": { "$ref": "#/$defs/action" },
        "bizStep": { "$ref": "#/$defs/bizStep" },
        "disposition": { "$ref": "#/$defs/disposition" },
        "persistentDisposition": { "$ref": "#/$defs/persistentDisposition" },
        "readPoint": { "$ref": "#/$defs/readPoint" },
        "bizLocation": { "$ref": "#/$defs/bizLocation" },
        "bizTransactionList": {
          "type": "array",
          "items": { "$ref": "#/$defs/bizTransaction" }
        },
        "sourceList": {
          "type": "array",
          "items": { "$ref": "#/$defs/source" }
        },
        "destinationList": {
          "type": "array",
          "items": { "$ref": "#/$defs/destination" }
        },
        "sensorElementList": {
          "type": "array",
          "items": { "$ref": "#/$defs/sensorElement" }
        },
        "ilmd": { "$ref": "#/$defs/ilmd" }
      },
      "required": ["eventTime", "eventTimeZoneOffset", "type", "action"],
      "if": {},
      "then": { "$ref": "#/$defs/ObjectEvent" }
    },
    "Display-AggregationEvent": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "type": "string", "enum": ["AggregationEvent"] },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" },
        "parentID": { "$ref": "#/$defs/uri" },
        "childEPCs": { "type": "array", "items": { "$ref": "#/$defs/uri" } },
        "childQuantityList": {
          "type": "array",
          "items": { "$ref": "#/$defs/quantityElement" }
        },
        "action": { "$ref": "#/$defs/action" },
        "bizStep": { "$ref": "#/$defs/bizStep" },
        "disposition": { "$ref": "#/$defs/disposition" },
        "readPoint": { "$ref": "#/$defs/readPoint" },
        "bizLocation": { "$ref": "#/$defs/bizLocation" },
        "bizTransactionList": {
          "type": "array",
          "items": { "$ref": "#/$defs/bizTransaction" }
        },
        "sourceList": {
          "type": "array",
          "items": { "$ref": "#/$defs/source" }
        },
        "destinationList": {
          "type": "array",
          "items": { "$ref": "#/$defs/destination" }
        },
        "sensorElementList": {
          "type": "array",
          "items": { "$ref": "#/$defs/sensorElement" }
        }
      },
      "required": ["eventTime", "eventTimeZoneOffset", "type", "action"],
      "if": {},
      "then": { "$ref": "#/$defs/AggregationEvent" }
    },
    "Display-TransactionEvent": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "type": "string", "enum": ["TransactionEvent"] },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" },
        "bizTransactionList": {
          "type": "array",
          "items": { "$ref": "#/$defs/bizTransaction" },
          "minItems": 1
        },
        "parentID": { "$ref": "#/$defs/uri" },
        "epcList": { "type": "array", "items": { "$ref": "#/$defs/uri" } },
        "quantityList": {
          "type": "array",
          "items": { "$ref": "#/$defs/quantityElement" }
        },
        "action": { "$ref": "#/$defs/action" },
        "bizStep": { "$ref": "#/$defs/bizStep" },
        "disposition": { "$ref": "#/$defs/disposition" },
        "readPoint": { "$ref": "#/$defs/readPoint" },
        "bizLocation": { "$ref": "#/$defs/bizLocation" },
        "sourceList": {
          "type": "array",
          "items": { "$ref": "#/$defs/source" }
        },
        "destinationList": {
          "type": "array",
          "items": { "$ref": "#/$defs/destination" }
        },
        "sensorElementList": {
          "type": "array",
          "items": { "$ref": "#/$defs/sensorElement" }
        }
      },
      "required": [
        "eventTime",
        "eventTimeZoneOffset",
        "type",
        "bizTransactionList",
        "action"
      ],
      "if": {},
      "then": { "$ref": "#/$defs/TransactionEvent" }
    },
    "Display-TransformationEvent": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "type": "string", "enum": ["TransformationEvent"] },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" },
        "inputEPCList": { "$ref": "#/$defs/epcList" },
        "inputQuantityList": { "$ref": "#/$defs/quantityList" },
        "outputEPCList": { "$ref": "#/$defs/epcList" },
        "outputQuantityList": { "$ref": "#/$defs/quantityList" },
        "transformationID": { "$ref": "#/$defs/uri" },
        "bizStep": { "$ref": "#/$defs/bizStep" },
        "disposition": { "$ref": "#/$defs/disposition" },
        "persistentDisposition": { "$ref": "#/$defs/persistentDisposition" },
        "readPoint": { "$ref": "#/$defs/readPoint" },
        "bizLocation": { "$ref": "#/$defs/bizLocation" },
        "bizTransactionList": {
          "type": "array",
          "items": { "$ref": "#/$defs/bizTransaction" }
        },
        "sourceList": {
          "type": "array",
          "items": { "$ref": "#/$defs/source" }
        },
        "destinationList": {
          "type": "array",
          "items": { "$ref": "#/$defs/destination" }
        },
        "sensorElementList": {
          "type": "array",
          "items": { "$ref": "#/$defs/sensorElement" }
        },
        "ilmd": { "$ref": "#/$defs/ilmd" }
      },
      "required": ["eventTime", "eventTimeZoneOffset", "type"],
      "if": {},
      "then": { "$ref": "#/$defs/TransformationEvent" }
    },
    "Display-AssociationEvent": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "type": "string", "enum": ["AssociationEvent"] },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" },
        "parentID": { "$ref": "#/$defs/uri" },
        "childEPCs": { "type": "array", "items": { "$ref": "#/$defs/uri" } },
        "childQuantityList": {
          "type": "array",
          "items": { "$ref": "#/$defs/quantityElement" }
        },
        "action": { "$ref": "#/$defs/action" },
        "bizStep": { "$ref": "#/$defs/bizStep" },
        "disposition": { "$ref": "#/$defs/disposition" },
        "readPoint": { "$ref": "#/$defs/readPoint" },
        "bizLocation": { "$ref": "#/$defs/bizLocation" },
        "bizTransactionList": {
          "type": "array",
          "items": { "$ref": "#/$defs/bizTransaction" }
        },
        "sourceList": {
          "type": "array",
          "items": { "$ref": "#/$defs/source" }
        },
        "destinationList": {
          "type": "array",
          "items": { "$ref": "#/$defs/destination" }
        },
        "sensorElementList": {
          "type": "array",
          "items": { "$ref": "#/$defs/sensorElement" }
        }
      },
      "required": [
        "eventTime",
        "eventTimeZoneOffset",
        "type",
        "action",
        "parentID"
      ],
      "if": {},
      "then": { "$ref": "#/$defs/AssociationEvent" }
    },
    "Display-Extended-Event": {
      "type": "object",
      "description": "Shown as a flat list of properties. The GS1 EPCIS JSON Schema also constrains how properties combine, for example which lists must be present and which properties depend on `action`; those constraints are enforced here but not displayed.",
      "properties": {
        "type": { "$ref": "#/$defs/vocab-uri" },
        "@context": { "$ref": "#/$defs/@context" },
        "eventTime": { "$ref": "#/$defs/time" },
        "recordTime": { "$ref": "#/$defs/time" },
        "eventTimeZoneOffset": {
          "type": "string",
          "pattern": "^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$"
        },
        "eventID": { "$ref": "#/$defs/eventID" },
        "certificationInfo": { "$ref": "#/$defs/certificationInfo" },
        "errorDeclaration": { "$ref": "#/$defs/errorDeclaration" }
      },
      "required": ["eventTime", "eventTimeZoneOffset", "type"],
      "if": {},
      "then": { "$ref": "#/$defs/Extended-Event" }
    }
  },
  "$comment": "Self-contained rendering of DigitalTraceabilityEvent.json with the GS1 EPCIS 2.0 JSON Schema definitions (https://ref.gs1.org/standards/epcis/2.0.0/epcis-json-schema.json) embedded in $defs. Generated by .claude/scripts/embed-dte-epcis-schema.mjs; do not edit. DigitalTraceabilityEvent.json is normative."
}
