{ "$schema":          "https://json-schema.org/draft/2020-12/schema",
  "$comment":         "https://schemas.mpai.community/AIF/V3.0/data/AIMMetadata.json",
  "$id":              "https://schemas.mpai.community/AIH1/V1.1/AIMs/HealthBackEnd.json",
  "title":            "Health Back End V1.1",

  "Identifier":       {"ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-HBE-V1.1-I01", "AIMName": "AIH-HBE-V1.1"},
  "Header":           "AIH-HBE-V1.1",

  "APIProfile":       "Basic",
  "Description":      "This AIM implements the AIH-HSP Health Back End.",

  "InternalTypes":  [{"Name": "AIHData", "DataType": "AIH-AHD-V1.1"},
                     {"Name": "ARAData", "DataType": "AIH-ARD-V1.1"}],

  "ExternalPorts":  [{"Name": "FederatedLearnResponseEN",    "Direction": "Input",  "DataType": "AIH-FDL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AuditRequestEN",              "Direction": "Input",  "DataType": "AIH-ADT-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "LicenceConfirmResponseENT",   "Direction": "Input",  "DataType": "AIH-LCF-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "DeIDAndAnonymRequestEN",      "Direction": "Input",  "DataType": "AIH-DIA-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "BlockchainLicenceResponseEN", "Direction": "Input",  "DataType": "AIH-BCL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "LicenceConfirmResponseENH",   "Direction": "Input",  "DataType": "AIH-LCF-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessRequestENH",    "Direction": "Input",  "DataType": "AIH-AHP-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "RegisterRequestEN",           "Direction": "Input",  "DataType": "AIH-REG-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessRequestENS",    "Direction": "Input",  "DataType": "AIH-AHP-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "NNModelNE",                   "Direction": "Output", "DataType": "AIP-MLO-V1.0",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "FederatedLearnRequestNE",     "Direction": "Output", "DataType": "AIH-FDL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AuditResponseNE",             "Direction": "Output", "DataType": "AIH-ADT-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "LicenceConfirmRequestNET",    "Direction": "Output", "DataType": "AIH-LCF-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "DeIDAndAnonymResponseNE",     "Direction": "Output", "DataType": "AIH-DIA-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "BlockchainLicenceRequestNE",  "Direction": "Output", "DataType": "AIH-BCL-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "LicenceConfirmRequestNEH",    "Direction": "Output", "DataType": "AIH-LCF-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessResponseNEH",   "Direction": "Output", "DataType": "AIH-AHP-V1.1", "PortNumber": 1, "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "RegisterResponseNE",          "Direction": "Output", "DataType": "AIH-REG-V1.1",                  "Technology": "", "Protocol": "", "IsRemote": ""},
                     {"Name": "AIHDataProcessResponseNES",   "Direction": "Output", "DataType": "AIH-AHP-V1.1", "PortNumber": 2, "Technology": "", "Protocol": "", "IsRemote": ""}],

  "SubAIMs":        [{ "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-HFL-V1.1-I01", "AIMName": "AIH-HFL-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-ADT-V1.1-I01", "AIMName": "AIH-ADT-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-DIA-V1.1-I01", "AIMName": "AIH-DIA-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-HDP-V1.1-I01", "AIMName": "AIH-HDP-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-ARA-V1.1-I01", "AIMName": "AIH-ARA-V1.1", "Relation": "" } },
                     { "Identifier": { "ImplementerID": "IIDRA-assigned", "ImplementationID": "AIH-STR-V1.1-I01", "AIMName": "AIH-STR-V1.1", "Relation": "" } }],

  "Topology":       [{ "Output": { "AIMName": "",             "PortName": "FederatedLearnResponseEN"                   },  "Input": { "AIMName": "AIH-HFL-V1.1", "PortName": "FederatedLearnResponseEN" } },
                     { "Output": { "AIMName": "AIH-HFL-V1.1", "PortName": "NNModelNE"                                  },  "Input": { "AIMName": "",             "PortName": "NNModelNE" } },
                     { "Output": { "AIMName": "AIH-HFL-V1.1", "PortName": "FederatedLearnRequestNE"                    },  "Input": { "AIMName": "",             "PortName": "FederatedLearnRequestNE" } },
                     { "Output": { "AIMName": "",             "PortName": "AuditRequestEN"                             },  "Input": { "AIMName": "AIH-ADT-V1.1", "PortName": "AuditRequestEN" } },
                     { "Output": { "AIMName": "",             "PortName": "LicenceConfirmResponseENT", "PortNumber": 1 },  "Input": { "AIMName": "AIH-ADT-V1.1", "PortName": "LicenceConfirmResponseENT" } },
                     { "Output": { "AIMName": "AIH-ADT-V1.1", "PortName": "AuditResponseNE"                            },  "Input": { "AIMName": "",             "PortName": "AuditResponseNE" } },
                     { "Output": { "AIMName": "AIH-ADT-V1.1", "PortName": "LicenceConfirmRequestNET"                   },  "Input": { "AIMName": "",             "PortName": "LicenceConfirmRequestNET", "PortNumber": 1 } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData"                                    },  "Input": { "AIMName": "AIH-ADT-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "",             "PortName": "DeIDAndAnonymRequestEN"                     },  "Input": { "AIMName": "AIH-DIA-V1.1", "PortName": "DeIDAndAnonymRequestEN" } },
                     { "Output": { "AIMName": "AIH-DIA-V1.1", "PortName": "DeIDAndAnonymResponseNE"                    },  "Input": { "AIMName": "",             "PortName": "DeIDAndAnonymResponseNE" } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData"                                    },  "Input": { "AIMName": "AIH-DIA-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "AIH-DIA-V1.1", "PortName": "AIHData"                                    },  "Input": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "",             "PortName": "BlockchainLicenceResponseEN"                },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "BlockchainLicenceResponseEN" } },
                     { "Output": { "AIMName": "",             "PortName": "LicenceConfirmResponseENH", "PortNumber": 2 },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "LicenceConfirmResponseENH" } },
                     { "Output": { "AIMName": "",             "PortName": "AIHDataProcessRequestENH", "PortNumber": 1  },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessRequestENH", "PortNumber": 2 } },
                     { "Output": { "AIMName": "",             "PortName": "RegisterRequestEN"                          },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "RegisterRequestEN", "PortNumber": 1 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "BlockchainLicenceRequestNE"                 },  "Input": { "AIMName": "",             "PortName": "BlockchainLicenceRequestNE" } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "LicenceConfirmRequestNEH"                   },  "Input": { "AIMName": "",             "PortName": "LicenceConfirmRequestNEH", "PortNumber": 2 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHDataProcessResponseNEH", "PortNumber": 2 },  "Input": { "AIMName": "",             "PortName": "AIHDataProcessResponseNEH", "PortNumber": 1 } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "RegisterResponseNE", "PortNumber": 2        },  "Input": { "AIMName": "",             "PortName": "RegisterResponseNE" } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHData"                                    },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "AIH-HDP-V1.1", "PortName": "AIHData"                                    },  "Input": { "AIMName": "AIH-ARA-V1.1", "PortName": "AIHData" } },
                     { "Output": { "AIMName": "AIH-ARA-V1.1", "PortName": "ARAData"                                    },  "Input": { "AIMName": "AIH-HDP-V1.1", "PortName": "ARAData" } },
                     { "Output": { "AIMName": "",             "PortName": "AIHDataProcessRequestENS", "PortNumber": 2  },  "Input": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHDataProcessRequestENS" } },
                     { "Output": { "AIMName": "AIH-STR-V1.1", "PortName": "AIHDataProcessResponseNES"                  },  "Input": { "AIMName": "",             "PortName": "AIHDataProcessResponseNES", "PortNumber": 2 } }],

  "Implementations":[{"ImplementationURI": "/* URI storing Implementation */", "BinaryName": "/* BinaryName */", "Architecture": "/* x86 | x86-64 | ARM | ARM64 | MIPS | RISC-V */", "OperatingSystem": "/* Windows | Linux | MacOS | Debian | Ubuntu | RedHat | Android | Zephyr | RTOS | Oniro | iOS */", "Version": "/* Version */", "Source": "/* AIMStorage | MPAIStore | AIMURL */", "Destination": "/* Destination URI */"}],

  "ResourcePolicies":[{"Name": "Memory",               "Minimum": "/* GB */",                                                                                                                 "Maximum": "/* GB */",                                                                                                                 "Request": "/* GB */"},
                     {"Name": "CPU:Number",           "Minimum": "/* integer, 0=all */",                                                                                                     "Maximum": "/* integer, 0=all */",                                                                                                     "Request": "/* integer, 0=all */"},
                     {"Name": "CPU:Class",            "Minimum": "/* Low | Medium | High */",                                                                                                "Maximum": "/* Low | Medium | High */",                                                                                                "Request": "/* Low | Medium | High */"},
                     {"Name": "GPU:Number",           "Minimum": "/* integer, 0=all */",                                                                                                     "Maximum": "/* integer, 0=all */",                                                                                                     "Request": "/* integer, 0=all */"},
                     {"Name": "GPU:CUDA:Class",       "Minimum": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */", "Maximum": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */", "Request": "/* SM10|SM11|SM12|SM13|SM20|SM21|SM30|SM32|SM35|SM37|SM50|SM52|SM53|SM60|SM61|SM62|SM70|SM72|SM75|SM80|SM86|SM87|SM90 */"},
                     {"Name": "GPU:CUDA:FrameBuffer", "Minimum": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */",                                                          "Maximum": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */",                                                          "Request": "/* float_GB_GDDR|GDDR2|GDDR3|GDDR4|GDDR5|GDDR5X|GDDR6|GDDR6X */"},
                     {"Name": "GPU:CUDA:MemorySpeed", "Minimum": "/* float_GHz */",                                                                                                          "Maximum": "/* float_GHz */",                                                                                                          "Request": "/* float_GHz */"}],

  "DataXMData":       {},

  "Documentation":  [{"Type": "Tutorial", "URI": "https://mpai.community/standards/mpai-aih/hsp/v1-0/"}]}
