Galileo Protocol · MMXXVI
Back to Schemas

Galileo Decommission Event Schema

Standard
v1.0.0
https://schemas.galileoprotocol.io/events/decommission.schema.json
JSON Schema
Galileo Decommission Event Schema

ObjectEvent for end-of-life tracking. Captures product decommissioning due to destruction, recycling, theft, loss, or recall. Terminates the active lifecycle of the product identifier while preserving provenance history.

https://schemas.galileoprotocol.io/events/decommission.schema.json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://schemas.galileoprotocol.io/events/decommission.schema.json",
  "title": "Galileo Decommission Event Schema",
  "description": "ObjectEvent for end-of-life tracking. Captures product decommissioning due to destruction, recycling, theft, loss, or recall. Terminates the active lifecycle of the product identifier while preserving provenance history.",
  "allOf": [
    {
      "$ref": "event-base.schema.json"
    }
  ],
  "type": "object",
  "required": [
    "@context",
    "type",
    "eventID",
    "eventTime",
    "eventTimeZoneOffset",
    "action",
    "bizStep",
    "disposition",
    "readPoint",
    "epcList",
    "ilmd"
  ],
  "properties": {
    "type": {
      "const": "ObjectEvent"
    },
    "action": {
      "const": "DELETE",
      "description": "DELETE indicates removal of product from active circulation"
    },
    "bizStep": {
      "const": "cbv:BizStep-decommissioning",
      "description": "Decommissioning step marks end of product lifecycle"
    },
    "disposition": {
      "type": "string",
      "description": "Final disposition state",
      "enum": [
        "cbv:Disp-destroyed",
        "cbv:Disp-recalled",
        "cbv:Disp-stolen"
      ]
    },
    "epcList": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^https://id\\.gs1\\.org/01/\\d{14}/21/[A-Za-z0-9\\-\\.]{1,20}$"
      },
      "minItems": 1,
      "maxItems": 1,
      "description": "Single EPC for the decommissioned product"
    },
    "ilmd": {
      "type": "object",
      "description": "Instance Master Data capturing decommission context",
      "required": [
        "galileo:decommissionReason"
      ],
      "properties": {
        "galileo:decommissionReason": {
          "type": "string",
          "description": "Reason for product decommissioning",
          "enum": [
            "end_of_life_recycling",
            "theft",
            "loss",
            "destruction",
            "recall",
            "counterfeit_discovered",
            "irreparable_damage",
            "customer_request"
          ]
        },
        "galileo:recyclingPartner": {
          "type": "string",
          "description": "Recycling partner DID if applicable",
          "pattern": "^did:galileo:recycler:[a-z0-9\\-]{1,80}$"
        },
        "galileo:materialsRecovered": {
          "type": "array",
          "description": "Materials recovered during recycling/destruction",
          "items": {
            "type": "object",
            "required": [
              "material",
              "weight"
            ],
            "properties": {
              "material": {
                "type": "string",
                "description": "Material type recovered"
              },
              "weight": {
                "type": "number",
                "description": "Weight in grams",
                "minimum": 0
              },
              "weightUnit": {
                "type": "string",
                "default": "g",
                "enum": [
                  "g",
                  "kg",
                  "oz"
                ]
              },
              "disposition": {
                "type": "string",
                "description": "What happened to recovered material",
                "enum": [
                  "recycled",
                  "repurposed",
                  "disposed",
                  "donated",
                  "stored"
                ]
              },
              "recyclingCertificate": {
                "type": "string",
                "description": "Certificate reference for verified recycling"
              }
            }
          }
        },
        "galileo:destructionCertificate": {
          "type": "string",
          "description": "Certificate of destruction reference"
        },
        "galileo:destructionWitness": {
          "type": "string",
          "description": "DID of authorized witness to destruction",
          "pattern": "^did:galileo:(verifier|official):[a-z0-9\\-]{1,80}$"
        },
        "galileo:policeReport": {
          "type": "object",
          "description": "Police report details for theft/loss",
          "properties": {
            "reportNumber": {
              "type": "string"
            },
            "jurisdiction": {
              "type": "string"
            },
            "reportDate": {
              "type": "string",
              "format": "date"
            },
            "contactAuthority": {
              "type": "string"
            }
          }
        },
        "galileo:recallInfo": {
          "type": "object",
          "description": "Product recall information if applicable",
          "properties": {
            "recallId": {
              "type": "string"
            },
            "recallReason": {
              "type": "string"
            },
            "recallDate": {
              "type": "string",
              "format": "date"
            },
            "regulatoryAuthority": {
              "type": "string"
            },
            "publicNoticeUrl": {
              "type": "string",
              "format": "uri"
            }
          }
        },
        "galileo:lastKnownOwner": {
          "type": "string",
          "description": "Anonymized hash of last known owner for stolen/lost items",
          "pattern": "^did:galileo:customer:anon-[a-f0-9]{64}$"
        },
        "galileo:lastKnownLocation": {
          "type": "object",
          "description": "Last known location (city level for privacy)",
          "properties": {
            "city": {
              "type": "string"
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            },
            "date": {
              "type": "string",
              "format": "date"
            }
          }
        },
        "galileo:productAge": {
          "type": "string",
          "description": "Product age at decommission in ISO 8601 duration",
          "pattern": "^P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?$"
        },
        "galileo:totalOwners": {
          "type": "integer",
          "description": "Total number of owners over product lifetime",
          "minimum": 1
        },
        "galileo:totalRepairs": {
          "type": "integer",
          "description": "Total number of repair events over product lifetime",
          "minimum": 0
        }
      },
      "additionalProperties": true
    },
    "galileo:productDID": {
      "type": "string",
      "description": "The Galileo DID being decommissioned (DID remains for provenance, marked inactive)",
      "pattern": "^did:galileo:(01|8006|8010|253):\\d{8,14}(:21:[A-Za-z0-9\\-\\.]{1,20})?$"
    },
    "galileo:didDeactivated": {
      "type": "boolean",
      "description": "Whether the DID was marked as deactivated (not deleted per provenance requirements)",
      "default": true
    },
    "galileo:nfcDisabled": {
      "type": "boolean",
      "description": "Whether embedded NFC was disabled/destroyed"
    }
  },
  "examples": [
    {
      "@context": [
        "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
        "https://vocab.galileoprotocol.io/context/galileo.jsonld"
      ],
      "type": "ObjectEvent",
      "eventID": "ni:///sha-256;d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2?ver=CBV2.0",
      "eventTime": "2034-06-20T11:00:00.000Z",
      "eventTimeZoneOffset": "+01:00",
      "action": "DELETE",
      "bizStep": "cbv:BizStep-decommissioning",
      "disposition": "cbv:Disp-destroyed",
      "readPoint": {
        "id": "urn:epc:id:sgln:3014178.00010.0",
        "galileo:facilityDID": "did:galileo:facility:hermes-recycling-center"
      },
      "epcList": [
        "https://id.gs1.org/01/09506000134352/21/HK2024A001"
      ],
      "ilmd": {
        "galileo:decommissionReason": "end_of_life_recycling",
        "galileo:recyclingPartner": "did:galileo:recycler:maison-recycle",
        "galileo:materialsRecovered": [
          {
            "material": "Togo Leather",
            "weight": 450,
            "weightUnit": "g",
            "disposition": "repurposed",
            "recyclingCertificate": "MREC-2034-08472"
          },
          {
            "material": "Gold-Plated Hardware",
            "weight": 120,
            "weightUnit": "g",
            "disposition": "recycled",
            "recyclingCertificate": "MREC-2034-08473"
          }
        ],
        "galileo:destructionCertificate": "HDEST-2034-0042",
        "galileo:destructionWitness": "did:galileo:verifier:hermes-quality",
        "galileo:productAge": "P10Y3M",
        "galileo:totalOwners": 3,
        "galileo:totalRepairs": 2
      },
      "galileo:productDID": "did:galileo:01:09506000134352:21:HK2024A001",
      "galileo:didDeactivated": true,
      "galileo:nfcDisabled": true
    },
    {
      "@context": [
        "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
        "https://vocab.galileoprotocol.io/context/galileo.jsonld"
      ],
      "type": "ObjectEvent",
      "eventID": "ni:///sha-256;e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3?ver=CBV2.0",
      "eventTime": "2025-09-15T16:30:00.000Z",
      "eventTimeZoneOffset": "+02:00",
      "action": "DELETE",
      "bizStep": "cbv:BizStep-decommissioning",
      "disposition": "cbv:Disp-stolen",
      "readPoint": {
        "id": "urn:epc:id:sgln:3014178.00020.0"
      },
      "epcList": [
        "https://id.gs1.org/01/09506000134999/21/KE2024B042"
      ],
      "ilmd": {
        "galileo:decommissionReason": "theft",
        "galileo:policeReport": {
          "reportNumber": "PO-75-2025-84721",
          "jurisdiction": "Paris Police Prefecture",
          "reportDate": "2025-09-15",
          "contactAuthority": "Brigade de Repression du Banditisme"
        },
        "galileo:lastKnownOwner": "did:galileo:customer:anon-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
        "galileo:lastKnownLocation": {
          "city": "Paris",
          "country": "FRA",
          "date": "2025-09-14"
        }
      },
      "galileo:productDID": "did:galileo:01:09506000134999:21:KE2024B042",
      "galileo:didDeactivated": true
    }
  ]
}