{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": true,
  "properties": {
    "type": {
      "type": "array",
      "readOnly": true,
      "default": [
        "RecognizedEntity",
        "RegisteredIdentity"
      ],
      "items": {
        "type": "string"
      },
      "allOf": [
        {
          "contains": {
            "const": "RecognizedEntity",
            "minContains": 1
          }
        },
        {
          "contains": {
            "const": "RegisteredIdentity",
            "minContains": 1
          }
        }
      ],
      "description": "MUST include both `RecognizedEntity` (W3C Recognized Entities v1.0) and `RegisteredIdentity` (UNTP), so that a DIA is processable by a conforming W3C recognized-entity processor."
    },
    "id": {
      "example": "did:web:samplecompany.com/123456789",
      "type": "string",
      "format": "uri",
      "description": "The subject identifier of the DIA. This is the `RecognizedEntity` identifier in W3C Recognized Entities v1.0. SHOULD be a DID controlled by the registered member — where it is a DID, the registrar MUST have proved control of it before issuing. MAY be the register's own authoritative URI for the entity, in which case the DIA attests to the registration without anchoring any DID."
    },
    "registeredName": {
      "example": "Sample business Ltd",
      "type": "string",
      "description": "The registered name of the entity within the identifier scheme.  Examples: product - EV battery 300Ah, Party - Sample Company Pty Ltd,  Facility - Green Acres battery factory "
    },
    "registeredId": {
      "example": 123456789,
      "type": "string",
      "description": "The registration number (alphanumeric) of the entity within the register. Unique within the register."
    },
    "registeredDate": {
      "type": "string",
      "format": "date",
      "description": "The date on which this identity was first registered with the registrar."
    },
    "publicInformation": {
      "type": "string",
      "format": "uri",
      "description": "A link to further information about the registered entity on the authoritative registrar site."
    },
    "idScheme": {
      "$ref": "#/$defs/IdentifierScheme",
      "description": "The identifier scheme operated by the registrar"
    },
    "registrar": {
      "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."
        }
      },
      "required": [
        "id",
        "name"
      ],
      "description": "The registrar party that operates the register."
    },
    "registerType": {
      "type": "string",
      "enum": [
        "product",
        "facility",
        "business",
        "trademark",
        "land",
        "accreditation"
      ],
      "example": "product",
      "description": "The thematic purpose of the register - organisations, facilities, products, trademarks, etc"
    },
    "recognitionScope": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RecognitionScope"
      },
      "description": "What the registrar recognises this entity as, and under what mandate - its legal form, class or licence category, the standards or schemes the recognition rests on, the actions it covers, and any territorial limit. Each entry references a definition the registrar itself publishes. Replaces the v0.8.0 `registrationScope`, which conflated these."
    },
    "recognizedIn": {
      "$ref": "#/$defs/EntityList",
      "description": "OPTIONAL reference to a list of recognised entities that contains this entity, for a recognition that also rests on a trust framework outside the Verifiable Credentials ecosystem such as a public key infrastructure. SHOULD be omitted where the entity is discoverable from its own DID through a service endpoint, which is the mechanism UNTP uses; it is not a second route to the same anchor."
    }
  },
  "description": "The identity anchor binds a registered identity to one or more decentralised identifiers controlled by the registered member. It is a profile of the W3C Recognized Entities v1.0 `RecognizedEntity`, adding the register-managed identifier and scheme that W3C does not yet define.",
  "required": [
    "id",
    "registeredName",
    "registeredId",
    "registeredDate",
    "idScheme",
    "registerType"
  ],
  "$defs": {
    "Coordinate": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "maximum": 90,
          "minimum": -90,
          "example": -33.87,
          "type": "number",
          "description": "latitude: Angular distance north or south of the equator, expressed in decimal degrees.Valid range: −90.0 to +90.0."
        },
        "longitude": {
          "maximum": 180,
          "minimum": -180,
          "example": -151.21,
          "type": "number",
          "description": "longitude: Angular distance east or west of the Prime Meridian, expressed in decimal degrees.Valid range: −180.0 to +180.0."
        }
      },
      "description": "A geographic point defined by latitude and longitude using the WGS84 geodetic coordinate reference system (EPSG:4326). Latitude and longitude are expressed in decimal degrees as floating-point numbers. Coordinates follow the conventional order (latitude, longitude) and represent a point on the Earth’s surface.",
      "required": [
        "latitude",
        "longitude"
      ]
    },
    "IdentifierScheme": {
      "type": "object",
      "additionalProperties": false,
      "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. "
        }
      },
      "description": "An identifier registration scheme for products, facilities, or organisations. Typically operated by a state, national or global authority.",
      "required": [
        "id",
        "name"
      ]
    },
    "RecognitionScope": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "array",
          "readOnly": true,
          "default": [
            "RecognitionScope"
          ],
          "items": {
            "type": "string"
          },
          "allOf": [
            {
              "contains": {
                "const": "RecognitionScope",
                "minContains": 1
              }
            }
          ]
        },
        "scopeCode": {
          "type": "string",
          "enum": [
            "legal-form",
            "entity-class",
            "assessed-against",
            "action",
            "territory"
          ],
          "example": "legal-form",
          "description": "OPTIONAL discoverability hint identifying which aspect of the recognition this entry expresses, from the UN/CEFACT [recognition-scope code list](https://test.uncefact.org/vocabulary/recognition-scope/). Omit when no value fits; there is no 'other' value. The `id` remains the authoritative meaning."
        },
        "id": {
          "type": "string",
          "format": "uri",
          "example": "https://abr.business.gov.au/Help/EntityTypeDescription?Id=19",
          "description": "The registrar's own definition of this class, mandate, action or territory, as a resolvable URI. Authority stays with the register; UNTP maintains no list of the world's legal forms."
        },
        "name": {
          "type": "string",
          "example": "Australian Private Company",
          "description": "The value as the register names it, in the register's own language."
        },
        "scheme": {
          "$ref": "#/$defs/IdentifierScheme",
          "description": "OPTIONAL reference to the controlled list this value is drawn from. Useful because one registrar commonly publishes several lists and the value URI alone does not say which."
        },
        "geoBoundary": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Coordinate"
          },
          "description": "The ordered coordinates that define a closed polygon bounding this recognition scope. The first and last coordinates must match, closing the boundary. Only meaningful where the scope is territorial: it bounds what the registrar recognises, such as the area a land title covers or the territory a licence is valid in, rather than where the entity is located."
        }
      },
      "required": [
        "id",
        "name"
      ],
      "description": "One aspect of what a registrar recognises about an entity."
    },
    "EntityList": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "description": "The JSON-LD type of the referenced list, not a code value. `ExternalEntityList` is a list published outside the Verifiable Credentials ecosystem, such as an X.509 certificate authority list or an ETSI trusted list, where the origin of the list URL is the root of trust. `RecognizedEntityCredential` is a list that itself conforms to W3C Recognized Entities. W3C states these as a SHOULD over an open type space; UNTP restricts the value to the two it can interpret. A plain string or a single-element array are equivalent.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "ExternalEntityList",
                "RecognizedEntityCredential"
              ]
            },
            {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "ExternalEntityList",
                  "RecognizedEntityCredential"
                ]
              }
            }
          ],
          "example": "ExternalEntityList"
        },
        "id": {
          "type": "string",
          "format": "uri",
          "example": "https://ec.europa.example/tsl/lotl.xml",
          "description": "The URL of the list. A verifier fetches it to determine which list specification it complies with and whether it supports that specification."
        }
      },
      "required": [
        "type",
        "id"
      ],
      "description": "A list of recognised entities that contains this entity, as defined by the W3C Recognized Entities `recognizedIn` property."
    }
  }
}
