diff --git a/docs/details/encryption.mdx b/docs/details/encryption.mdx index 2f5ef2ef50cad38d59741f635ba23dfba07431a2..36a1779ee3d6ed08ce5fd62d5088dcc369877ef9 100644 --- a/docs/details/encryption.mdx +++ b/docs/details/encryption.mdx @@ -8,7 +8,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; ## Einleitung -FIT-Connect verwendet zur Übertragung von Antragsdaten und Antragsmetadaten (abgesehen von den für die Übermittlung zwingend notwendigen Daten, z.B. Destination-ID) eine Ende-zu-Ende-Verschlüsselung. Diese ist auf Basis der Standards [JSON Web Encryption (JWE)](https://tools.ietf.org/html/rfc7516) und [JSON Web Keys (JWK)](https://tools.ietf.org/html/rfc7517) umgesetzt. Bei der Implementierung der Ende-zu-Ende-Verschlüsselung MÜSSEN die [Vorgaben für kryptographische Verfahren](./crypto.md) beachtet werden. +FIT-Connect verwendet zur Übertragung von Antragsdaten und Antragsmetadaten (abgesehen von den für die Übermittlung zwingend notwendigen Daten, z.B. Destination-ID) eine Ende-zu-Ende-Verschlüsselung. Diese ist auf Basis der Standards [JSON Web Encryption (JWE)](https://tools.ietf.org/html/rfc7516) und [JSON Web Keys (JWK)](https://tools.ietf.org/html/rfc7517) umgesetzt. Bei der Implementierung der Ende-zu-Ende-Verschlüsselung MÜSSEN die [Vorgaben für kryptographische Verfahren](crypto.md) beachtet werden. Die Informationen auf dieser Seite sind relevant, wenn man: diff --git a/docs/details/schema-reference.md b/docs/details/schema-reference.md new file mode 100644 index 0000000000000000000000000000000000000000..e85c35ae28742bad3e0975abc3d102d73710fbdd --- /dev/null +++ b/docs/details/schema-reference.md @@ -0,0 +1,435 @@ +# Fachschemareferenz +## Zielsetzung +### Wie ist eine Einreichung aufgebaut? + + + +Eine Einreichung über FIT-Connect besteht aus einem obligatorischen Metadatensatz, der die Einreichung beschreibt. +Der Metadatensatz gibt an, wie viele Anlagen beigefügt werden. +Zusätzlich zu den allgemeinen Anlagen kann ein Fachdatensatz im JSON- oder XML-Format beigefügt werden. +Im Zustellpunkt wird definiert, ob für die gewählte Verwaltungsleistung ein Fachdatensatz beigefügt wird und welchem Format er entsprechen muss. + +### Warum sollte eine Fachschemareferenz angegeben werden? + +Empfangende Stellen in FIT-Connect definieren im Zustellpunkt Schemata für Einreichungen wie Anträge oder Berichte, die diese Stellen im Empfang akzeptieren. +Durch die Angabe des verwendeten Fachschemas in den Metadaten der Einreichung signalisiert das sendende System, welches der angegeben Schemata verwendet wird und erlaubt eine schnelle und einfache Validierung auf der Empfangsseite. +Durch die standardisierte Nutzung von Fachschemareferenzen in den Metadaten der Einreichung und dem Zustellpunkt der Empfangsstelle wird eine Interoperabilität über viele unterschiedliche Fachstandards und Fachdatenformate hinweg gewährleistet. + +## Technische Beschreibung +### Aufbau Fachschemareferenz + +Eine Fachschemareferenz besteht aus zwei Angaben. +- Die `schemaURI` referenziert das zu verwendende Fachschema. +- Der `mimeType` gibt den Datentyp (JSON oder XML) der Fachdaten vor. + +Bitte beachten Sie, dass manche Fachschema nur JSON oder XML als Datentyp zulassen. + +### FIM Fachschemareferenz + +Um ein FIM Fachschema eindeutig zu referenzieren sind folgende Angaben notwendig: + +- **ID** des Stammdatenschemas mit kleinem "S" ("s00000000009" im Beispiel) +- **Version** des Stammdatenschemas ("1.0.0" im Beispiel) +- **Art** des Schemas (JSON oder XML Schema) + +Für ein JSON Schema wird die schemaURI wird wie folgt gebildet: +`https://schema.fitko.de/fim/{ID}_{Version}.schema.json` + +Für ein XML Schema wird die schemaURI wird wie folgt gebildet: +`https://schema.fitko.de/fim/{ID}_{Version}.xsd` + +#### Beispiel für eine FIM Fachschemareferenz + +JSON Schema: +```json + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + } +``` + +XML Schema: +```json + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.xsd", + "mimeType": "application/xml" + } +``` + +### XÖV Fachschemareferenz + +Ein XÖV Fachschema wird über folgende Angaben referenziert: +- **Kennung** (ID) des Fachschemas ("urn:xoev-de:bmk:standard:xbau" im Beispiel) +- **Version** des Fachschemas ("2.2" im Beispiel) +- Verwendete **Nachricht** aus dem Fachschema ("baugenehmigung.antrag.0200" im Beispiel) + +Beispiel: `urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200` + +Die schemaURI wird wie folgt gebildet: +`{Kennung}_{Version}#{Nachricht}` + +#### Beispiel für eine XÖV Fachschemareferenz + +```json + { + "schemaURI": "urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200", + "mimeType": "application/xml" + } +``` + +### Fachschemareferenz(en) im Zustellpunkt + +Der Zustellpunkt enthält ein Array "schemas", das eine Liste von Fachschemareferenzen enthält. + +```json + "schemas": [ + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + }, + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.1.0.schema.json", + "mimeType": "application/json" + } + { + "schemaURI": "https://schema.fitko.de/fim/s00000000010_1.0.0.schema.json", + "mimeType": "application/json" + }, + { + "schemaURI": "https://schema.fitko.de/fim/s00000000010_1.1.0.schema.json", + "mimeType": "application/json" + } + ], +``` + +### Fachschemareferenz im Metadatensatz + +Sofern der Zustellpunkt mindestens eine Fachschemareferenz enthält, muss der Metadatensatz genau eine davon enthalten. + +```json + "contentStructure": { + "data": { + "schema": { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + } + }, +``` + +## Anwendung + +Im folgenden wird das oben beschriebene Zusammenspiel einmal in der üblichen zeitlichen Reihenfolge durchgespielt. +Es wird vorausgesetzt, dass bereits ein Fachschema vorliegt. +Weiterführende Informationen enthält der [OZG-Leitfaden](https://leitfaden.ozg-umsetzung.de/) im Kapitel [8.6 Föderales Informationsmanagement (FIM)](https://leitfaden.ozg-umsetzung.de/pages/viewpage.action?pageId=4621502). + +### Zustellpunkt anlegen + +Beim [Anlegen des Zustellpunktes](../apis/delivery-service#post-/destinations) wird eine Liste von Fachschemareferenzen angegeben. +Diese wird i.d.R. aus genau einem Eintrag bestehen. +Sofern mehrere unterschiedliche Verfahren über einen Zustellpunkt abgewickelt werden, kann die Liste auch mehrere Fachschemareferenzen enthalten. + +```http +POST /destinations +``` + +```json +{ + "contactInformation": { + "legalName": "Max", + "address": "Musterstr. 31, 10000 Berlin, Deutschland", + "phone": "+49170123456789", + "email": "max@mustermann.not", + "unit": "Department XYZ" + }, + "schemas": [ + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + }, + { + "schemaURI": "urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200", + "mimeType": "application/xml" + } + ], + "callback": "https://www.example.com/webhook/beispiel", + "encryptionKid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "publicKeys": { + "keys": [ + { + "kty": "RSA", + "key_ops": [ + "verify", + "wrapKey" + ], + "alg": "RSA-OAEP-256", + "x5c": [ + "...(base64 encoded cert)...", + "...(base64 encoded intermediate cert)...", + "...(base64 encoded root cert)..." + ], + "kid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "n": "sS_HZU9sYgMFhqv5fyCn8Y1dQ91lO8JfsWsG3OwREKgfRyso1brjcYO2aT1EWdGF6L7836R9otyIHJLhPOfn-D6pV8LYeoSnsDNqU8QdGR3yyDhfaZprWJkBDXfMMlpSJdNFZWeQ0oqEHcd37yowKYPBEE8UqTKMYAuhZ6YuouH8zjM2VoyYtZJMjja4ZcgXoPesBFkVUdzr3HpD2wJjvXXqLFROsw4HpAiFgR6iccmMb7i93sG5dro2XS-0RjWYbO2RcP5ClJD7-s0kvhO7_KAXDkacVvRV275UWttjDNAok9FHvFgBIzYAMNBGKxPFZxEaT3J5FM9XIzsk6AcqJw", + "e": "AQAB" + } + ] + } +} +``` + +### Zustellpunkt abfragen + +Das antragsendende System [fragt den Zustellpunkt ab](../apis/delivery-service#get-/destinations/-destinationId-) und erhält einen Teil der hinterlegten Informationen. +Diese enthalten die Liste der Fachschemareferenzen. + +```http +GET /destinations/{destinationId} +``` + +```json +{ + "schemas": [ + { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + }, + { + "schemaURI": "urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200", + "mimeType": "application/xml" + } + ], + "encryptionKid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "publicKeys": { + "keys": [ + { + "kty": "RSA", + "key_ops": [ + "verify", + "wrapKey" + ], + "alg": "RSA-OAEP-256", + "x5c": [ + "...(base64 encoded cert)...", + "...(base64 encoded intermediate cert)...", + "...(base64 encoded root cert)..." + ], + "kid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "n": "sS_HZU9sYgMFhqv5fyCn8Y1dQ91lO8JfsWsG3OwREKgfRyso1brjcYO2aT1EWdGF6L7836R9otyIHJLhPOfn-D6pV8LYeoSnsDNqU8QdGR3yyDhfaZprWJkBDXfMMlpSJdNFZWeQ0oqEHcd37yowKYPBEE8UqTKMYAuhZ6YuouH8zjM2VoyYtZJMjja4ZcgXoPesBFkVUdzr3HpD2wJjvXXqLFROsw4HpAiFgR6iccmMb7i93sG5dro2XS-0RjWYbO2RcP5ClJD7-s0kvhO7_KAXDkacVvRV275UWttjDNAok9FHvFgBIzYAMNBGKxPFZxEaT3J5FM9XIzsk6AcqJw", + "e": "AQAB" + } + ] + } +} +``` + +### Fachschema aussuchen + +Aus der Liste der Fachschemareferenzen muss das antragsendende System eine aussuchen. + +### Metdadatensatz generieren + +Im Metadatensatz wird die ausgewählte Fachschemareferenz unter `contentStructure.data.schema` benannt. + +```json +{ + "contentStructure": { + "data": { + "schema": { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + } + }, + "attachments": [ + { + "attachmentId": "8f482392-43ad-418c-9185-30e4e350e76b", + "purpose": "form", + "size": 13046, + "mimeType": "application/pdf", + "filename": "test.pdf", + "description": "Das Antragsformular" + } + ] + } +} +``` + +### Fachdatensatz generieren + +Es muss ein zur Referenz passender Fachdatensatz generiert und [mitgesendet](../apis/delivery-service#post-/submissions/-submissionId-) werden. + +```json +{ + "F00000152": "Kirchheim bei München", + "G00000246": { + "F00000457": "091840131131" + }, + "G00000091": [ + { + "F60000319": "Beispiel GmbH", + "F00000103": "350" + } + ] +} +``` + +### Einreichung empfangen + +Der Empfänger [holt die Einreichung ab](../apis/delivery-service#get-/submissions/-submissionId-). + +```http +GET /submissions/{submissionId} +``` + +Diese enthält unter anderem den verschlüsselten Metadaten- sowie Fachdatensatz. + +```json +{ + "destinationId": "879ee109-a690-4db8-ab32-424284184d7d", + "submissionId": "ce75a6b8-d72f-4b94-b09e-af6be35bc2ae", + "attachments": [ + "879ee109-a690-4db8-ab32-424284184d7d", + "2046f9f1-dc89-4440-9c24-c76a8f40d668" + ], + "encryptedMetadata": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g", + "encryptedData": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g", + "currentStatus": "queued", + "statusHistory": [ + { + "sourceState": "incomplete", + "targetState": "queued", + "timestamp": "2021-01-30T08:30:00Z" + } + ] +} +``` + +### Metadatensatz prüfen + +Der Empfänger [entschlüsselt mit seinem privaten Schlüssel](../getting-started/receiving/decrypt.mdx) den Metadatensatz. +Nach der Entschlüsselung des Metadatensatzes prüft der Empfänger, ob eine Fachdatenreferenz vorhanden ist und diese einer der im Zustellpunkt definierten Fachschemareferenz entspricht. +Sofern dies nicht der Fall ist, [wird die Einreichung zurückgewiesen](./status.md#ereignisse-einer-einreichung-submission-events) (siehe Event `https://schema.fitko.de/fit-connect/events/reject-submission`). + +### Fachdatensatz prüfen + +Nach erfolgter Prüfung des Metadatensatzes entschlüsselt der Empfänger den Fachdatensatz. +Danach erfolgt eine Prüfung des Fachdatensatzes: +- Entspricht der Fachdatensatz dem vereinbarten Medientyp (JSON oder XML)? +- Entspricht der Fachdatensatz dem vereinbarten Schema? + +**Hinweis:** Dieses Dokument beschreibt nur den Ablauf und die Prüfungen, die sich auf die Fachdatenreferenz beziehen. Beim Empfang von Übertragungen sind noch weitere Prüfungen durchzuführen. + +### Details zur Prüfung eines FIM Fachdatensatzes (JSON Schema) + +:::caution +Das FITKO Schemarepository ist derzeit noch in Vorbereitung. +Daher können die Fachschemata noch nicht wie beschrieben heruntergeladen werden. +::: + +Die FIM-Fachschemata werden im FITKO Schemarepository (`https://schema.fitko.de/`) abgelegt. +Die Fachschemareferenz gibt an, welches Schema zu beziehen ist. + +```json + "contentStructure": { + "data": { + "schema": { + "schemaURI": "https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json", + "mimeType": "application/json" + } +``` + +- Prüfen Sie, dass die `schemaURI` mit `https://schema.fitko.de/fim/` beginnt. Dies stellt sicher, dass das Fachschema aus dem FITKO Repository bezogen wird. +- Laden Sie das Fachschema herunter + +``` +➜ wget -nv https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json +``` + +- Nun können Sie den Fachdatensatz gegen das vorliegende Fachschema "s00000000009_1.0.0.schema.json" prüfen. + +### Details zur Prüfung eines FIM Fachdatensatzes (XML Schema) + +Die Fachschemata von XFall können über das FIM-Portal bezogen werden. +Zukünftig werden sie auch über das FITKO Schemarepository zur Verfügung stehen. + +```json + "contentStructure": { + "data": { + "schema": { + "schemaURI": "https://schema.fitko.de/fim/s00000092_1.0.xsd", + "mimeType": "application/xml" + } +``` + +- Prüfen Sie, dass die `schemaURI` mit `https://schema.fitko.de/fim/` beginnt. +- Entnehmen Sie der URI die ID des Fachschemas (hier: "s00000092"). +- Öffnen Sie das FIM-Portal (https://fimportal.de/) und loggen Sie sich ein. +- Öffnen Sie Sie Adresse `https://fimportal.de/detail/D/{ID}`, also z.B. https://fimportal.de/detail/D/S00000092. +- Klicken Sie rechts auf den Downloadlink, der auf "_xfall.xsd" endet (hier: `S00000092V1.0_xfall.xsd`). +- Das XFall-Schema wird Ihnen angezeigt und kann abgespeichert werden. +- Nun können Sie den Fachdatensatz gegen das vorliegende Fachschema "S00000092V1.0_xfall.xsd" prüfen. + +### Details zur Prüfung eines XÖV Fachdatensatzes + +Die XÖV Standards werden im [XRepository](https://www.xrepository.de/) abgelegt. +Auf die Inhalte des XRepository kann über eine [REST-API](https://www.xrepository.de/cms/hilfe.html#rest-api) zugegriffen werden. +Entnehmen Sie der Fachschemareferenz die Angabe `schemaURI`. Diese besteht aus zwei durch ein Doppelkreuz (#) getrennten Teilen. Vor dem Doppelkreuz steht die Kennung, dahinter der Name der Nachricht. +Um z.B. einen Bauantrag zu prüfen, gehen Sie wie folgt vor. +- Im Metadatensatz finden Sie folgende Fachschemareferenz. + +```json + "contentStructure": { + "data": { + "schema": { + "schemaURI": "urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200", + "mimeType": "application/xml" + } +``` + +- Die `schemaURI` enthält folgende Angaben: + - Kennung: `urn:xoev-de:bmk:standard:xbau_2.2` + - Nachrichtenname `baugenehmigung.antrag.0200` +- Laden Sie das XML Schema herunter und entpacken Sie es. + +``` +➜ wget -nv -O xmlschema.zip https://www.xrepository.de/api/version_standard/urn:xoev-de:bmk:standard:xbau_2.2/xmlschema +2021-06-25 15:17:54 URL:https://www.xrepository.de/api/version_standard/urn:xoev-de:bmk:standard:xbau_2.2/xmlschema [278585] -> "xmlschema.zip" [1] +``` + +``` +➜ unzip xmlschema.zip +Archive: xmlschema.zip + inflating: xsd.zip + inflating: xsd_dev.zip +``` + +- Im Falle von XBau 2.2 enthält das XML-Schema zwei Dateien. Enpacken Sie die Datei `xsd.zip`. Dieser Schritt ist XBau-spezifisch und muss bei anderen Standards angepasst werden. + +``` +➜ unzip xsd.zip +Archive: xsd.zip + inflating: xbau-basisdatentypen.xsd + inflating: xbau-baukasten.xsd + inflating: xbau-codes.xsd + inflating: xbau-nachrichten-abweichung.xsd + inflating: xbau-nachrichten-anzeige.xsd + inflating: xbau-nachrichten-baugenehmigung.xsd + inflating: xbau-nachrichten-baulasten.xsd + inflating: xbau-nachrichten-bautechnischeNachweise.xsd + inflating: xbau-nachrichten-bauzustand.xsd + inflating: xbau-nachrichten-beteiligung.xsd + inflating: xbau-nachrichten-genehmigungsfreistellung.xsd + inflating: xbau-nachrichten-informationsempfaenger.xsd + inflating: xbau-nachrichten-kammernverzeichnis.xsd + inflating: xbau-nachrichten-teilbaugenehmigung.xsd + inflating: xbau-nachrichten-ueberwachungspflichtigeAnlagen.xsd + inflating: xbau-nachrichten-vorbescheid.xsd + inflating: xbau-prozessnachrichten.xsd +``` + +- Suchen Sie nun nach der Datei, die die Elementdefinition der geforderten Nachricht enthält. + +``` +➜ grep -l 'name=.baugenehmigung.antrag.0200' *.xsd +xbau-nachrichten-baugenehmigung.xsd +``` + +- Nun können Sie den Fachdatensatz gegen das vorliegende Fachschema "xbau-nachrichten-baugenehmigung.xsd" prüfen. diff --git a/docs/details/status.md b/docs/details/status.md index 18196a3e357fee77da9c413051377866bb1e8edd..bfd86b6ea082d9a9f0aee43e0552ca5eceb84844 100644 --- a/docs/details/status.md +++ b/docs/details/status.md @@ -20,8 +20,6 @@ Gründe für technische Rückweisungen wären beispielsweise Probleme bei der En ## Ereignisse (Events) -<a name="submission-events"/> - ### Ereignisse einer Einreichung (Submission Events) | Event | Bedeutung | Erstellt und signiert durch | | ----- | --------- | --------------------------- | diff --git a/docs/more/glossary.md b/docs/more/glossary.md index 0eedd9f49a247386ea9efa3d797175da212950a2..28b761eb8de2a75165aeac1b1c0107a7ee0478be 100644 --- a/docs/more/glossary.md +++ b/docs/more/glossary.md @@ -15,7 +15,10 @@ hide_table_of_contents: true | Angekündige Anlage | Angabe gegenüber den Zustelldienst, was übermittelt wird. Teilmenge der Angaben in der contentStructure im verschlüsselten Metadatensatz. | | Einreichung (submission) | Ist eine Einreichung bei einer zuständigen Stelle über die FIT-Connect Übermittlungsinfrastruktur. Eine solche Einreichung kann ein Antrag (bspw. ein Antrag nach dem Onlinezugangsgesetz), ein Bericht (bspw. Statistikmeldung eines Unternehmens) oder eine sonstige Einreichung für die Initiierung eines Bearbeitungsvorgangs in einem Verwaltungsverfahren sein. Eine Einreichung besteht aus mindestens aus einem Metadatensatz und einem Fachdatensatz und / oder einem oder mehreren Anlagen. Eine Einreichung besitzt immer eine systemübergreifend eindeutige ID (submissionId), um dauerhaft den Einreichungsvorgang zu referenzieren oder zu dokumentieren. Diese ID wird bei jedem Einreichungsvorgang durch ein sendendes System vergeben. | | Einreichungsstatus (submission status) | Beschreibt den fachlichen Status einer Einreichung für das einreichende System. | +| Ereignis (event) | Als [Security Event Token](https://datatracker.ietf.org/doc/html/rfc8417) aufgezeichnetes Ereignis eines im Zustelldienst abgelegten Objekts. Dies kann z.B. das Absenden einer Einreichung sein. | +| Ereignisprotokoll (event log) | Der Zustelldienst bündelt alle einem Object zugeordneten Ereignisse in einem Ereignisprotokoll. | | Fachdatensatz (data) | Ist ein strukturierter Fachdatensatz im Rahmen der Einreichung. Kann JSON, XML oder ein anderes in verwaltungseigenen Datenstandards genutztes Datenformat sein. | +| Fachschemareferenz (schema) | Das referenzierte Fachschema aus FIM oder XÖV. Eine Liste der möglichen Fachschemata wird im Zustellpunkt angegeben. Das verwendete Fachschema steht im Metadatensatz. | | Kommunikationskanal (communication channel) | Beschreibt einen Kommunikationskanal, um zwischen der zuständigen Stelle und dem Autor der Einreichung (bspw. dem Verwaltungskund:in) zu digital zu kommunizieren.<br/>Kommunikationskanäle können sein:<br/>- E-Mail<br/>- De-Mail<br/>- FIT-Connect Rückkanal<br/>- Interoperable Postfächer FINK (AS4)<br />- Elster Transfer des einheitlichen Unternehmenskontos<br />- Postfachplus (OSCI) des einheitlichen Unternehmenskontos<br />Eine zuständige Stelle kommuniziert über die Destination, welche Kommunikationskanäle unterstützt werden und der Autor der Einreichung legt fest, welche Kommunikationskanäle er sich hierfür wünscht. Für die Adressierung des Autors werden alle für den Kommunikationskanal notwendigen Verbindungs- und Adressparameter (einschließlich ggf. notwendiger Schlüssel/Zertifikate) im Metadatensatz mitgeliefert.| | Metadatensatz (metadata) | Ein Metadatensatz beschreibt:<br/>- Fachunabhängige Metadaten der Einreichung: Authentifizierung des Autors einer Einreichung oder Berichts (bspw. über einen eID-Laufzettel, Identifikation Report, Informationen über Signaturnutzung einschließlich Angabe des Signaturformats und ggf. separater Signaturdateien.), Ergebnisse eines Bezahlvorgangs oder digitale Verbindungs- und Adressparameter für die Verfahrensinformationen (falls vom Verwaltungskund:in gewünscht).<br/>- Strukturbeschreibung der Einreichung: Art der Leistung oder Einreichungsbestandteile. | | Autorisierungsdienst | Der Autorisierungsdienst / OAuth-Dienst stellt via Client-Credentials-Flow OAuth-Tokens an API-Clients aus, mit denen diese sich anschließend gegenüber den Zustelldienst APIs (d.h. gegenüber dem API-Gateway) authentifizieren können. | @@ -24,6 +27,3 @@ hide_table_of_contents: true | Vorgangsreferenz (caseID) | Systemübergreifend eindeutige ID für einen langlaufenden Kommunikationsvorgang zwischen dem einreichenden System und der Empfangsseite, wenn über die FIT-Connect kommuniziert werden sollen. Innerhalb einem Kommunikationsvorgang können weitere Fachdatensätze und Anlagen zwischen beiden Parteien ausgetauscht werden. | | Zustellberechtigungs-Scope | Beschreibt die Scopes aus den OAuth-Tokens (JWT), die im Zustelldienst dazu dienen, um zu überprüfen, ob ein Onlinedienst Einreichungen bei einer Destination vornehmen darf. | | Zustellpunkt (Destination) | Technisch eindeutig adressierbarer Endpunkt zur digitalen Einreichung von Anträgen oder Berichten an die Verwaltung über die FIT-Connect Übermittlungsinfrastruktur. Ein Zustellpunkt repräsentiert typischerweise ein konkretes empfangendes System (Fachverfahren oder virtuelle Poststelle). Für ein empfangendes System können jedoch multiple Zustellpunkte angelegt werden. In der Konfiguration eines Zustellpunkts sind interne und öffentliche Teile hinterlegt. Interne Angaben sind solche, die zu Administrationszwecken dienen. Öffentliche Angaben legen z. B. fest, in welcher Form der Empfänger Einreichungen akzeptiert. Die öffentlichen Angaben sind:<br/>- Zulässige Schemata für einen Fachdatensatz (und die Pflicht, einen Fachdatensatz mit dem definierten Fachdatensatz in einer Einreichung zu nutzen)<br />- Öffentlicher Schlüssel zur Verschlüsselung von Fachdatensatz, Anlage und Metadatensatz | -| Ereignis (event) | Als [Security Event Token](https://datatracker.ietf.org/doc/html/rfc8417) aufgezeichnetes Ereignis eines im Zustelldienst abgelegten Objekts. Dies kann z.B. das Absenden einer Einreichung sein. | -| Ereignisprotokoll (event log) | Der Zustelldienst bündelt alle einem Object zugeordneten Ereignisse in einem Ereignisprotokoll. | -| Fachschemareferenz (schema) | Das referenzierte Fachschema aus FIM oder XÖV. Eine Liste der möglichen Fachschemata wird im Zustellpunkt angegeben. Das verwendete Fachschema steht im Metadatensatz. | diff --git a/sidebars.js b/sidebars.js index a00c483fca9cb8d3991103d57a453681bb9e1d17..ec3eb546f586e08e8ce4dc869dd6861163557807 100644 --- a/sidebars.js +++ b/sidebars.js @@ -77,6 +77,7 @@ module.exports = { 'details/crypto', 'details/status', 'details/event-log', + 'details/schema-reference', 'details/pgp-export', { type: 'category', diff --git a/static/images/schema_reference/submission_structure.svg b/static/images/schema_reference/submission_structure.svg new file mode 100644 index 0000000000000000000000000000000000000000..f5e7cd9853b65dec280c9c07702c14deb2af7ec4 --- /dev/null +++ b/static/images/schema_reference/submission_structure.svg @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="260" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="265" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"> + <!--Generated by ySVG 2.5--> + <defs id="genericDefs"/> + <g> + <defs id="defs1"> + <linearGradient x1="60" gradientUnits="userSpaceOnUse" x2="140" y1="140" y2="140" id="linearGradient1" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(217,230,255)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(194,214,255)" offset="100%"/> + </linearGradient> + <linearGradient x1="-50" gradientUnits="userSpaceOnUse" x2="30" y1="-45" y2="-45" id="linearGradient2" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(217,230,255)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(194,214,255)" offset="100%"/> + </linearGradient> + <linearGradient x1="55" gradientUnits="userSpaceOnUse" x2="135" y1="15" y2="15" id="linearGradient3" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(217,230,255)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(194,214,255)" offset="100%"/> + </linearGradient> + <linearGradient x1="55" gradientUnits="userSpaceOnUse" x2="135" y1="75" y2="75" id="linearGradient4" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(217,230,255)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(194,214,255)" offset="100%"/> + </linearGradient> + <linearGradient x1="55" gradientUnits="userSpaceOnUse" x2="135" y1="135" y2="135" id="linearGradient5" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(217,230,255)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(194,214,255)" offset="100%"/> + </linearGradient> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"> + <path d="M0 0 L260 0 L260 265 L0 265 L0 0 Z"/> + </clipPath> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"> + <path d="M-105 -60 L155 -60 L155 205 L-105 205 L-105 -60 Z"/> + </clipPath> + </defs> + <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(105,60)" stroke="white"> + <rect x="-105" width="260" height="265" y="-60" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,105,60)" stroke="url(#linearGradient1)"> + <rect x="20" width="120" height="45" y="140" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g stroke-linecap="butt" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,53,158)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="rgb(0,53,158)" stroke-width="2" stroke-miterlimit="1.45"> + <rect fill="none" x="20" width="120" height="45" y="140" clip-path="url(#clipPath2)"/> + </g> + <g fill="url(#linearGradient2)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,105,60)" stroke="url(#linearGradient2)"> + <rect x="-90" width="120" height="45" y="-45" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g stroke-linecap="butt" font-size="13px" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,32,97)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke="rgb(0,32,97)" font-weight="bold" stroke-miterlimit="1.45"> + <text x="-69.7173" xml:space="preserve" y="-17.5869" clip-path="url(#clipPath2)" stroke="none">Einreichung</text> + </g> + <g stroke-linecap="butt" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,53,158)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="rgb(0,53,158)" stroke-width="2" stroke-miterlimit="1.45"> + <rect fill="none" x="-90" width="120" height="45" y="-45" clip-path="url(#clipPath2)"/> + </g> + <g fill="url(#linearGradient3)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,105,60)" stroke="url(#linearGradient3)"> + <rect x="15" width="120" height="45" y="15" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g stroke-linecap="butt" font-size="13px" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,32,97)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke="rgb(0,32,97)" font-weight="bold" stroke-miterlimit="1.45"> + <text x="26.0247" xml:space="preserve" y="42.4131" clip-path="url(#clipPath2)" stroke="none">Metadatensatz</text> + </g> + <g stroke-linecap="butt" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,53,158)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="rgb(0,53,158)" stroke-width="2" stroke-miterlimit="1.45"> + <rect fill="none" x="15" width="120" height="45" y="15" clip-path="url(#clipPath2)"/> + </g> + <g fill="url(#linearGradient4)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,105,60)" stroke="url(#linearGradient4)"> + <rect x="15" width="120" height="45" y="75" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g stroke-linecap="butt" font-size="13px" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,32,97)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke="rgb(0,32,97)" font-weight="bold" stroke-miterlimit="1.45"> + <text x="26.907" xml:space="preserve" y="102.4131" clip-path="url(#clipPath2)" stroke="none">Fachdatensatz</text> + </g> + <g stroke-linecap="butt" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,53,158)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="rgb(0,53,158)" stroke-width="2" stroke-miterlimit="1.45"> + <rect fill="none" x="15" width="120" height="45" y="75" clip-path="url(#clipPath2)"/> + </g> + <g fill="url(#linearGradient5)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,105,60)" stroke="url(#linearGradient5)"> + <rect x="15" width="120" height="45" y="135" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g stroke-linecap="butt" font-size="13px" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,32,97)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke="rgb(0,32,97)" font-weight="bold" stroke-miterlimit="1.45"> + <text x="47.6448" xml:space="preserve" y="162.4131" clip-path="url(#clipPath2)" stroke="none">Anlagen</text> + </g> + <g stroke-linecap="butt" transform="matrix(1,0,0,1,105,60)" fill="rgb(0,53,158)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="rgb(0,53,158)" stroke-width="2" stroke-miterlimit="1.45"> + <rect fill="none" x="15" width="120" height="45" y="135" clip-path="url(#clipPath2)"/> + <path fill="none" d="M-30 0 L-30 37.5 L15 37.5" stroke-width="1" clip-path="url(#clipPath2)" stroke="black"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,105,60)" stroke-linecap="butt"> + <text x="-4.7129" xml:space="preserve" y="30.9688" clip-path="url(#clipPath2)" stroke="none">1</text> + <path fill="none" d="M-30 0 L-30 97.5 L15 97.5" clip-path="url(#clipPath2)"/> + <text x="-19.8945" xml:space="preserve" y="90.9688" clip-path="url(#clipPath2)" stroke="none">0..1</text> + <path fill="none" d="M-30 0 L-30 157.5 L15 157.5" clip-path="url(#clipPath2)"/> + <text x="-19.7539" xml:space="preserve" y="150.9688" clip-path="url(#clipPath2)" stroke="none">0..n</text> + </g> + </g> +</svg>