{ "$schema":                  "https://json-schema.org/draft/2020-12/schema",
  "$id":                      "https://schemas.mpai.community/MMM4/V2.2/data/Capabilities.json",
  "title":                    "Capabilities V2.2",
  "type":                     "object",
  "additionalProperties":     false,
  "required":                 [ "Header", "MInstanceID", "MEnvironmentID", "CapabilitiesID", "WalletID", "ItemCapabilities",
                                 "MInstanceCapabilities",
                                "ProcessCapabilities", "DataExchangeMetadata" ],
  "properties":               {

    "Header":                 { "type": "string", "pattern": "^MMM-CPB-V[0-9],{1,2},[.][0-9],{1,2}$" },
    "MInstanceID":            { "type": "string" },
    "MEnvironmentID":         { "type": "string" },
    "CapabilitiesID":         { "type": "string" },
    "CapabilitiesTime":       { "$ref": "https://schemas.mpai.community/OSD/V1.5/data/BasicTime.json" },

    "WalletID":               { "type": "string" },

    "ItemCapabilities":       { "$ref": "#/$defs/ItemCapabilities" },
    "MInstanceCapabilities":  { "$ref": "#/$defs/MInstanceCapabilities" },
    "ProcessCapabilities":    { "$ref": "#/$defs/ProcessCapabilities" },

    "DataXMData":             { "$ref": "https://schemas.mpai.community/PTF/V1.0/data/DataExchangeMetadata.json" },
    "DescrMetadata":          { "type": "string", "maxLength": 2048 } },

  "$defs":                    {

    "Rights":                 { "type": "array", "minItems": 1, "items": { "oneOf": [
                              { "type": "object", "additionalProperties": false, "required": [ "Right" ], "properties": {
      "Right":                { "$ref": "https://schemas.mpai.community/MMM4/V2.2/data/Right.json" } } },
                              { "type": "object", "additionalProperties": false, "required": [ "RightID" ], "properties": {
      "RightID":              { "type": "string" } } } ] } },

    "Rules":                  { "type": "array", "minItems": 1, "items": { "oneOf": [
                              { "type": "object", "additionalProperties": false, "required": [ "Right" ], "properties": {
      "Rule":                 { "$ref": "https://schemas.mpai.community/MMM4/V2.2/data/Right.json" } } },
                              { "type": "object", "additionalProperties": false, "required": [ "RightID" ], "properties": {
      "RuleID":               { "type": "string" } } } ] } },

    "ItemCapabilities":       { "type": "object", "additionalProperties": false,
                                "required": [ "Processes", "ProcessActions", "ItemMetadata" ], "properties": {

      "Processes":            { "type": "array",
                                "description": "Processes with the Rights they hold.",
                                "items": { "type": "object", "additionalProperties": false,
                                          "required": [ "ProcessID", "Rights" ], "properties": {
        "ProcessID":          { "type": "string" },
        "Rights":             { "$ref": "#/$defs/Rights" } } } },

      "ProcessActions":       { "type": "array", "description": "Actions each Process can perform on the Item.",
                                "items": { "$ref": "https://schemas.mpai.community/MMM4/V2.2/data/AnyProcessAction.json" } },

      "ItemMetadata":         { "type": "array", "description": "Metadata used by Rights and Rules.",
                                "items": { "type": "string" } } } },

    "MInstanceCapabilities":  { "type": "object", "additionalProperties": false,
                                "required": [ "CoordinateType", "Profile", "Actions", "Items", "Qualifiers",
                                              "Rules", "Rights", "PMetadata", "IMetadata" ], "properties": {
      "CoordinateType":       { "$ref": "https://schemas.mpai.community/OSD/V1.5/data/CoordinateTypes.json" },
      "Profile":              { "type": "string", "enum": [ "Baseline", "Finance", "Management", "High" ] },
      "Actions":              { "type": "array", "items": { "type": "string" } },
      "ItemTypes":            { "type": "array", "items": { "$ref": "https://schemas.mpai.community/MMM4/V2.2/data/AnyItem.json" } },
      "QualifierTypes":       { "type": "array", "items": { "$ref": "https://schemas.mpai.community/TFA/V1.5/data/AnyQualifier.json" } },
      "Rules":                { "type": "array", "description": "Applicable Rules.",
                                "items": { "type": "string" } },
      "PMetadata":            { "type": "array", "items": { "type": "string" } },
      "IMetadata":            { "type": "array", "items": { "type": "string" } } } },

    "ProcessCapabilities":    { "type": "object", "additionalProperties": false,
                                "required": [ "HumanID", "SupportedApps", "Actions", "ProcessMetadata", "Processes", "Items",
                                              "ItemMetadata", "ItemQualifiers", "TransactionInfo", "CapabilityChange",
                                              "MInstances" ], "properties": {

      "HumanID":              { "type": "string" },
      "SupportedApps":        { "type": "array", "items": { "type": "string" } },
      "Actions":              { "type": "array", "items": { "type": "string" } },
      "ProcessMetadata":      { "type": "array", "items": { "type": "string" } },
        "Processes":          { "type": "array", "description": "Processes with the Rights they hold.",
                                "items": { "type": "object", "additionalProperties": false, "required": [ "ProcessID", "Rights" ], "properties": {
          "ProcessID":        { "type": "string" },
          "Rights":           { "$ref": "#/$defs/Rights" } } } },

      "ItemsTypes":           { "type": "array", "items": { "$ref": "https://schemas.mpai.community/MMM4/V2.2/data/AnyItem.json" } },
      "ItemMetadata":         { "type": "array", "items": { "type": "string" } },
      "ItemQualifiers":       { "type": "array", "items": { "$ref": "https://schemas.mpai.community/TFA/V1.5/data/AnyQualifier.json" } },

      "TransactionInfo":      { "type": "object", "description": "Information available before transaction execution.",
                                "additionalProperties": true },

      "CapabilityChange":     { "type": "string", "description": "Process followed when capabilities change." },

      "MInstances":           { "type": "array", "description": "M-Instances with mutual recognition.",
                                "items": { "type": "string" } } } } } }
