{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.fitko.de/fit-connect/metadata/dataset/reply-channel-1.0.0.json",
  "title": "FIT-Connect Reply Channel Schema 1.0.0",
  "description": "Informationen zu den durch die Antragsteller:in gewünschten Rückkanälen. Die gewählten Rückkanäle sollten eine Untermenge der in einem Zustellpunkt hinterlegten Rückkanäle (`replyChannels`) entsprechen. Wenn zum Beispiel in einem Zustellpunkt die Rückkanäle `eMail` und `elster` hinterlegt sind, dann kann der Sender E-Mail oder Elster wählen oder aber keinen Rückkanal. Falls kein Rückkanal gewählt wird, wird der Briefweg verwendet.",
  "type": "object",
  "minProperties": 1,
  "properties": {
    "eMail": {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "format": "email"
        },
        "pgpPublicKey": {
          "type": "string",
          "description": "Hilfe zur Erstellung gibt es in der Dokumentation unter https://docs.fitko.de/fit-connect/docs/metadata/replyChannel",
          "pattern": "^-----BEGIN PGP PUBLIC KEY BLOCK-----\\n\\n"
        }
      },
      "required": [
        "address"
      ]
    },
    "deMail": {
      "type": "object",
      "description": "Akkreditierte Anbieter siehe https://www.bsi.bund.de/DE/Themen/Oeffentliche-Verwaltung/Moderner-Staat/De-Mail/Akkreditierte-DMDA/akkreditierte-dmda_node.html",
      "properties": {
        "address": {
          "type": "string",
          "format": "email"
        }
      },
      "required": [
        "address"
      ]
    },
    "fink": {
      "deprecated": true,
      "type": "object",
      "description": "Postfachadresse in einem interoperablen Servicekonto (FINK.PFISK)",
      "properties": {
        "finkPostfachRef": {
          "type": "string",
          "description": "FINK Postfachadresse",
          "examples": [
            "hh/by/12345"
          ],
          "maxLength": 150,
          "pattern": "^[-._a-z0-9~/]+$"
        },
        "host": {
          "type": "string",
          "description": "URL des Servicekontos, in dem das Ziel-Postfach liegt",
          "format": "uri",
          "examples": [
            "https://servicekonto1.example.com/"
          ]
        }
      },
      "required": [
        "finkPostfachRef"
      ]
    },
    "elster": {
      "type": "object",
      "description": "Siehe https://www.elster.de/elsterweb/infoseite/elstertransfer_hilfe_schnittstellen",
      "properties": {
        "accountId": {
          "type": "string"
        },
        "lieferTicket": {
          "type": "string"
        },
        "geschaeftszeichen": {
          "type": "string",
          "maxLength": 10
        }
      },
      "required": [
        "accountId"
      ]
    },
    "fitConnect": {
      "type": "object",
      "description": "Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für Einreichungen an diesen Zustellpunkt eine Rückkanalkommunikation per FIT-Connect unterstützt.",
      "required": [
        "supportedSchemas",
        "encryptionPublicKey",
        "destinationId"
      ],
      "properties": {
        "supportedSchemas": {
          "description": "Hier ist eine eindeutige Referenz auf den zu verwendenden Datenaustauschstandard (einschließlich der Version) mittels der offiziellen URI des Datenaustauschstandards zu hinterlegen.",
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "schemaUri",
              "mimeType"
            ],
            "properties": {
              "schemaUri": {
                "type": "string",
                "format": "uri",
                "description": "URI des Datenaustauschformats"
              },
              "mimeType": {
                "enum": [
                  "application/json",
                  "application/xml"
                ],
                "description": "MIME Type des Schemas"
              }
            }
          }
        },
        "destinationId": {
          "type": "string",
          "format": "uuid",
          "description": "Eindeutige UUID des Zustellpunkts",
          "minLength": 32,
          "maxLength": 36
        },
        "encryptionPublicKey": {
          "title": "JSON Web Key (JWK)",
          "type": "object",
          "description": "JSON Web Key - RFC 7517",
          "required": [
            "kty",
            "key_ops",
            "alg",
            "kid",
            "n",
            "e"
          ],
          "properties": {
            "kty": {
              "type": "string",
              "description": "Der Parameter \"kty\" (Schlüsseltyp) identifiziert die kryptografische Algorithmus Familie, die mit dem Schlüssel verwendet wird, z. B. \"RSA\" oder \"EC\". In FIT-Connect sind aktuell nur RSA-Schlüssel erlaubt.",
              "enum": [
                "RSA"
              ]
            },
            "key_ops": {
              "type": "array",
              "description": "Der Parameter \"key_ops\" (Schlüsseloperationen) identifiziert die Operation(en) für die der Schlüssel verwendet werden soll. Die Bedeutung der Erlaubten Operationen sind:  - `verify`: Digitale Signatur oder MAC überprüfen  - `wrapKey`: Verschlüsselungsschlüssel",
              "items": {
                "type": "string",
                "enum": [
                  "wrapKey"
                ]
              }
            },
            "alg": {
              "type": "string",
              "description": "Der Parameter \"alg\" (Algorithmus) identifiziert den Algorithmus, der für Verwendung mit dem Schlüssel vorgesehen ist. In FIT-Connect wird `PS512` für Signaturschlüssel und `RSA-OAEP-256` für Verschlüsselungsschlüssel genutzt.",
              "enum": [
                "RSA-OAEP-256"
              ]
            },
            "kid": {
              "type": "string",
              "description": "Der Parameter \"kid\" (Schlüssel-Id) wird verwendet, um einen bestimmten Schlüssel zu identifizieren.",
              "minLength": 8,
              "maxLength": 64
            },
            "n": {
              "type": "string",
              "description": "Modulus des Schlüssels. Die minimale Länge von 683 Zeichen repräsentiert eine Schlüssellange von mindestens 4096 Bit.",
              "minLength": 683
            },
            "e": {
              "type": "string",
              "description": "Öffentliche Exponent des Schlüssels",
              "enum": [
                "AQAB"
              ]
            }
          }
        }
      }
    },
    "idBundDeMailbox": {
      "type": "object",
      "description": "Hiermit signalisiert der Onlinedienst, dass die zuständige Stelle für Antworten das Postfach der DeutschlandID verwenden soll.",
      "required": [
        "mailboxUuid"
      ],
      "properties": {
        "mailboxUuid": {
          "type": "string",
          "description": "Das Postkorb-Handle aus dem SAML-Token (legacyPostkorbHandle).",
          "format": "uuid",
          "minLength": 32,
          "maxLength": 36
        }
      }
    },
    "messageFlows": {
      "type": "array",
      "description": "Eine Struktur, die ein Mapping zwischen Prozessdefinition, Nachrichtenfluss und Rückkanal herstellt.",
      "items": {
        "type": "object",
        "description": "Pro Nachrichtenfluss kann hier ein Rückkanal definiert werden.",
        "required": [
          "processDefinitionId",
          "messageFlowId",
          "replyChannel"
        ],
        "properties": {
          "processDefinitionId": {
            "type": "string",
            "format": "uri",
            "description": "Eindeutige URI einer Prozessdefinition inkl. der Version"
          },
          "messageFlowId": {
            "type": "string",
            "description": "Identifikator eines Nachrichtenflusses",
            "maxLength": 255
          },
          "replyChannel": {
            "enum": [
              "deMail",
              "elster",
              "eMail",
              "fitConnect",
              "idBundDeMailbox"
            ],
            "description": "Auswahl des Rückkanals für den Nachrichtenfluss"
          }
        }
      }
    }
  }
}