diff --git a/docs/getting-started/sending/get-destination.mdx b/docs/getting-started/sending/get-destination.mdx index 0a11c745c2874412dc3ff7457d118679724f0676..35e023232b65ca26109b7f44e13fdefd583d1c60 100644 --- a/docs/getting-started/sending/get-destination.mdx +++ b/docs/getting-started/sending/get-destination.mdx @@ -3,27 +3,129 @@ sidebar_position: 2 title: Zustellpunkt ermitteln --- +import ApiLink from '@site/src/components/ApiLink' import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem' ## Zustellpunkt und `destinationId` ermitteln -Um eine Einreichung an die fachlich korrekte Stelle sicherzustellen und die technischen Parameter des richtigen Zustellpunkts zu ermitteln, muss die `destinationId` der zuständigen Stelle ermittelt werden. Zukünftig wird die Ermittlung der `destinationId` und die Ermittlung der technischen Parameter über die FIT-Connect Routing API möglich sein. Sobald die Routing API umgesetzt ist (voraussichtlich Ende Q3 2021), wird diese Möglichkeit hier beschrieben. +Um eine Einreichung an die fachlich korrekte Stelle sicherzustellen und die technischen Parameter des richtigen Zustellpunkts zu ermitteln, muss die `destinationId` der zuständigen Stelle und die Adresse des zuständigen Zustelldienstes ermittelt werden. +Die Ermittlung der `destinationId` und die Ermittlung der technischen Parameter erfolgt über einen GET Request auf den Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) des FIT-Connect Routingdienstes. -## Informationen des Zustellpunktes erhalten +Der Endpunkt erwartet genau zwei Parameter: +- Einen Identifikator einer Verwaltungsleistung. Als Identifikator der Verwaltungsleistung muss ein Leistungsschlüssel aus dem FIM-Baustein Leistungen (ehemals *LeiKa-Schlüssel*, siehe [Leistungskatalog im FIM-Portal](https://fimportal.de/kataloge#download-leistungen)) verwendet werden. +- Einen Identifikator eines verwaltungspolitischen Gebietes. Für den Identifikator des verwaltungspolitischen Gebietes kann entweder der [amtliche Gemeindeschlüssel (AGS)](https://www.destatis.de/DE/Themen/Laender-Regionen/Regionales/Gemeindeverzeichnis/Glossar/amtlicher-gemeindeschluessel.html), der [amtliche Regionalschlüssel (ARS)](https://www.destatis.de/DE/Themen/Laender-Regionen/Regionales/_FAQ/regionalschluessel.html) oder die [Id eines Gebietes](#verwaltungspolitische-gebiete-ermitteln) aus der Suche über den Endpunkt [/areas](../../apis/routing-api.mdx#get-/areas) verwendet werden. + +Der Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) implementiert Pagination. +Das Ergebnis der Anfrage enthält daher neben der eigentlichen (Teil-)Ergebnismenge der Routing-Informationen (`routes`) auch Informationen wie Anzahl (`count`), Gesamtanzahl (`totalCount`) und Startpunkt der Ergebnismenge (`offset`). +Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limitiert und kann über den GET-Parameter `limit` auf maximal 500 Einträge erweitert werden. +Über den GET-Paramter `offset` können weitere Teilmengen der Ergebnismenge ermittelt werden. + +Beispiele für das Ermitteln der benötigten Daten: + +<Tabs + defaultValue="curl" + values={[ + { label: 'curl', value: 'curl', }, + ] + }> +<TabItem value="curl"> + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/routes?leika-key=99010003001006&ags=15085055 +``` + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/routes?leika-key=99010003001006&ars=150850055055 +``` + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/routes?leika-key=99010003001006&area-id=15529 +``` + +</TabItem> +</Tabs> + +Beispiel für die Response: + +```json +{ + "count": 500, + "offset": 0, + "totalCount": 0, + "routes": [ + { + "destinationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "destinationSignature": "eyJ0eXAiOiJKT1NFIiwiYWxnIjoiUFM1MTIiLCJraWQiOiJlOWJjMDk3YS1jZTUxLTQwMzYtOTU2Mi1kMmFkZTg4MmRiMGQiLCJjdHkiOiJhcHBsaWNhdGlvbi9qb3NlIn0.eyJkZXN0aW5hdGlvbklEIjoiOGNlYjJmOTktMTJmMC00OGQxLWE0OTctYzkzMjBiM2M2MTY5IiwiZ2ViaWV0SURzIjpbInVybjpkZTpidW5kOmRlc3RhdGlzOmJldm9lbGtlcnVuZ3NzdGF0aXN0aWs6c2NobHVlc3NlbDpyczowODQyNTUwMTAwNTUiXSwibGVpc3R1bmdJRHMiOlsidXJuOmRlOmZpbTpsZWlrYTpsZWlzdHVuZzo5OTExMDA0NDAwMDAwMCJdLCJzdWJtaXNzaW9uSG9zdCI6Inp1c3RlbGxkaWVuc3QtMDEuZnJlaXN0YWF0LmJheWVybiJ9.g5DXbNfsm4n8Gsohbon-fNxvxF2DSff9hq2nG3iPxFAiOhNAp9rxnayuBgUJwwv5IYPH_Bk-LF87p-DkQFpiUP9ZxfXTsjQOmJAL-LOVtvXcALRwiz5zMZW3FfiuWNu2ECE34uZluHZOYd57LoeJhudlPdD_5tRYOD4ch4W6QbDjLx_CYa7Q3WFOQxHgcWbournwq-eAW9YhDVnT2Ofolz79-oN6tDtHlF94u8z2iwz01fIfko55X6L23ukMX0qlf8yiA31tXdmWwCIi7qobJB13NsvjlszfYc5CiU2mGcDgx5kX8gW1GEoHvG_yDxQyTqArEH4D7kfw12AJWpqgubKZLawQLMUgAH9tvC8bhMVUsek51NRSc7XB3KXJ_ljIgFpRPZFViWhY2dZ5QhdMLxdH1BSSLms2ZkSVLmx43DpH9WvECBc6CfWpA3Ir59I54aR2HAaSWq_EInYMK2Wnlz6ckQuhulEMUdgE2c6nVENYn8kjJBD3gG5GF8ofJFaLKtqDK6bylvD07ndiQ6r36spDtN1r-hteTGxDB7ZczJL-W6dYaFWDqdKQGHqnlYKqp2l2cxX0uQYiL9Zk1wY_4RwjoKzYw-rRrcU-RsKVsxhfqPe2qHKvPDs3OVhPgkEtnE-mG-sY7GXSbOds7N34aeqrW0ifiOEnOEvqgFq4NuE", + "destinationParameters": { + "submissionUrl": "https://submission-api.fit-connect.example.org/v1", + "status": "active", + "submissionSchemas": [ + { + "schemaURI": "urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.antrag.0200", + "mimeType": "application/xml" + } + ], + "encryptionKid": "NFNb7k84r61G9ayAAJItJCNGl7wKWif9HyBAgicJq_8", + "publicKeys": { + "keys": [ + { + "kty": "RSA", + "key_ops": [ + "wrapKey" + ], + "alg": "RSA-OAEP-256", + "x5c": [ + "...(base64 encoded cert)...", + "...(base64 encoded intermediate cert)...", + "...(base64 encoded root cert)..." + ], + "kid": "NFNb7k84r61G9ayAAJItJCNGl7wKWif9HyBAgicJq_8", + "n": "1f1070XZ4NpHN2WqdH5c8dBUBPH99TJEvVXSP_jjZdOEzRJztUwSpIabtAvgDnNGmPTLs-jLlVR3NQCyKwOwpHVi3FmudKmIPplBFpsEpZ9JYBGpg8_ZbDN9fwJhob0KjAlsSY9mBOTfqLCqqVIJrk4fxBjwNaroCLkSbS2RrfMtUEW5T5Vo1uw2lnYTKq1uyhr1PG02mvDCBb0LMAqcMXRR6bdme8GN55S3UNWhsaonpq04aa8_baVdjoJYTk03VLORMojnnrJjxyPPiHRs2Re9JQoaVPy6TUrbFV63zvt30XM8ZJnla09yhMmuBJXpdtyWXKnKyqj8m9D5Vg68xksQVeJozpCAoBlsJeAheE31XPQwCBvamy46K669ZCkfkdhQgoIJMt1AVSef0qcLDg__nQ-rfIuYxHrtn7jgI0NeCGFbscxmzl08_LSj3nlj2-ag2uVq4bbdH3tziNxy_rr84N-6AA5iQe5v1L_zYXYWxGzaAOUWzJt0QRiEC9pF6Zqfrn4mPHn5lm2jtdM9AlmgkZtmK92rByfcMzo5-yEK37K96NtqpDCsoABUkvC1TLiqaCkGkQd1DmGnfNyGJV_eNMwmZyotom8WLS-icbQD913F9YlSTRsQYhFzw78pDJHHo4AtldMiQcpUY4qoVVpfpPZlMWTq7idnq6iO4MM", + "e": "AQAB" + } + ] + }, + "metadataVersions": [ + "string" + ], + "replyChannels": { + "eMail": { + "usePgp": true + }, + "deMail": {}, + "fink": {}, + "elster": {} + } + }, + "destinationParametersSignature": "eyJ0eXAiOiJKT1NFIiwiYWxnIjoiUFM1MTIiLCJraWQiOiJlOWJjMDk3YS1jZTUxLTQwMzYtOTU2Mi1kMmFkZTg4MmRiMGQiLCJjdHkiOiJhcHBsaWNhdGlvbi9qb3NlIn0..g9xgjWf-_3JjMAFwPgBB4iXFrkrsRS-Ois3pxWWcFzdZuu_I8jH9Bd4FAQpf6nJwPtytJgoWYkm7gTCMwKiQH7JknXXrdYcnHRrlU2aT9thjaK5uYKYvuDfvklvQvKTYtfqowkMtk3pl91TfB1Pyxbprx6u5qut_pI-z2E7SC8gJ6V8u1rT1wDHOp-xrvMHUQiH7Ugmyb7Tg_Dc55AL0FrZ2wmurdPK46iAZBfIpzNJgUbqrlKvKQkwbs11Bc2qRzrFIG8yMyuN-qhGxibokMoq1U3FjlxtNgwWQJJOYlMiCbMibkINsmZ5mGZDS_Dra89TVMz0_rZagj-mxJ5-DlIE7E1LsvUKXYBHhPFoCJTGH1Lla7AEWtZ59HNSalMjvgcGWTgp-xTbqo8Ej6PwUM9j7_lNH1kT0iSvuCTYktVJEmovmpT0gB9c0AaGbQfiZFk8UUiBSAVFoD2B-0EP8CkEDAxsL0xlDdSAeK4Zrvg2nnck8NjdDQa68KfW4Fp32cfdkWYhGJ13xNG889P0aofCv7Joj4zxVEsPGfvqe6b78i8oZOe_Tn2lIVBwxZ6phtvEmZ8w_aS4zGSuYXoXx1DOjwatvCuH3rKicbQpJwEX3Bbcmv-NSgVZDae4dntgc89zbPbAg1zsqZDyHublVSK8m7i5CVLKiDvXdoWidNbY", + "destinationName": "Einwohnermeldeamt", + "destinationLogo": "https://einwohnermeldeamt.beispielstadt.example.org/logo.png" + } + ] +} +``` + +:::note Hinweis +Sofern eine Destination-ID und die Adresse des zuständigen Zustelldienstes bereits bekannt sind, können die in einem Zustellpunkt hinterlegten technischen Parameter auch über den Endpunkt <ApiLink to="/v1/destinations/{destinationId}" /> der Submission API des zuständigen Zustelldienstes angefragt werden. +::: -Um an einen Zustellpunkt eine Einreichung korrekt zu übermitteln, ist es notwendig, die im Zustellpunkt hinterlegten technischen Parameter für die Einreichung zu ermitteln. Diese Informationen sind: - Der Status (`status`) gibt an, ob der Zustellpunkt aktiv ist. Nur im Status `active` können neue Einreichungen versendet werden. - Die Verwaltungsleistungen (`services`), die über diesen Zustellpunkt abgebildet werden, bestehend aus: - - einem Identifikator der Verwaltungsleitung (`identifier`): Typischerweise entspricht dieser einem LeiKa-Schlüssel (siehe [Leistungskatalog im FIM-Portal](https://fimportal.de/kataloge#download-leistungen)). + - einem Identifikator der Verwaltungsleitung (`identifier`): Typischerweise entspricht dieser einem Leistungsschlüssel aus dem FIM-Baustein Leistungen (ehemals *LeiKa-Schlüssel*, siehe [Leistungskatalog im FIM-Portal](https://fimportal.de/kataloge#download-leistungen)). - einer Liste an zulässigen Fachdatenschemata (`submissionSchemas`): Hiermit legt das empfangende System fest, welchem Schema die übergebenen Fachdatensätze entsprechen müssen. Welches der angegebenen Schemata verwendet werden muss, bestimmt das sendende System aus dem eigenen fachlichen Kontext heraus. Wenn bspw. ein Antrag für einen Schwerbehindertenausweis gestellt wird, muss der Fachdatensatz aus den dort hinterlegten Schemata gemäß dem dortigen Schema für den Schwerbehindertenausweis (bspw. ein FIM/XFall Schema) entsprechen. - einer Liste an Regionen (`regions`), für die die Verwaltungsleistung angeboten wird. -- Schlüssel-ID des öffentlichen Verschlüsselungsschlüssels (`encryptionKid`): Empfangende Systeme veröffentlichen die Schlüssel-ID ihres Verschlüsselungsschlüssels für die Verschlüsselung von Einreichungen. Der dazugehörige JSON Web Key (JWK) kann anschließend über den Endpunkt <ApiLink to="/v1/destinations/{destinationId}/keys/{keyId}" /> abgefragt werden. - -:::caution Hinweis -Der Mechanismus zum Abruf der Verschlüsselungsschlüssel wird sich bis zur Veröffentlichung der finalen API-Spezifikation noch einmal ändern. -::: +- Schlüssel-ID (Key-ID, `kid`) des öffentlichen Verschlüsselungsschlüssels (`encryptionKid`): Empfangende Systeme veröffentlichen die Schlüssel-ID ihres Verschlüsselungsschlüssels für die Verschlüsselung von Einreichungen. Der dazugehörige JSON Web Key (JWK) ist in einer Antwort des Routingdienstes im Attribut `publicKeys` enthalten und kann auch über den Endpunkt <ApiLink to="/v1/destinations/{destinationId}/keys/{keyId}" /> abgefragt werden. Zum Abruf der Zustellpunkt-Informationen stellt die Submission API einen Endpunkt bereit, der über Angabe des Parameters `destinationId` die technischen Parameter der Einreichung für den jeweiligen Zustellpunkt ausgibt. @@ -35,7 +137,7 @@ Zum Abruf der Zustellpunkt-Informationen stellt die Submission API einen Endpunk }> <TabItem value="curl"> -Über `curl` können diese Information mit dem Folgenden Aufruf erhalten werden. +Über `curl` können diese Information mit dem folgenden Aufruf abgerufen werden. ```bash $ export SERVICE_URL=... @@ -68,3 +170,83 @@ $ curl \ ``` </TabItem> </Tabs> + +### Verwaltungspolitische Gebiete ermitteln + +Falls für die Abfrage der `destinationId` kein amtlicher Gemeindeschlüssel oder ein amtlicher Regionalschlüssel bekannt ist, kann über den Endpunkt [/areas](../../apis/routing-api.mdx#get-/areas) nach passenden verwaltungspolitischen Gebieten gesucht werden. + +Der Endpunkt [/areas](../../apis/routing-api.mdx#get-/areas) implementiert Pagination. +Das Ergebnis der Anfrage enthält daher neben der eigentlichen (Teil-)Ergebnismenge der Gebiet-Informationen (`areas`) auch Informationen wie Anzahl (`count`), Gesamtanzahl (`totalCount`) und Startpunkt der Ergebnismenge (`offset`). +Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limitiert und kann über den GET-Parameter `limit` auf maximal 500 Einträge erweitert werden. +Über den GET-Paramter `offset` können weitere Teilmengen der Ergebnismenge ermittelt werden. + +Die `id` eines Gebietes aus der Ergebnismenge kann im Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) als Identifikator (`area-id`) eines verwaltungspolitischen Gebietes verwendet werden. + +Beispiele für die Suche: + + +<Tabs + defaultValue="curl" + values={[ + { label: 'curl', value: 'curl', }, + ] + }> +<TabItem value="curl"> + +Suche mit Postleitzahlanfang + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/areas?area-searchexpression=061* +``` + +Suche mit Name + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/areas?area-searchexpression=Halle +``` + +Suche mit Name und Postleitzahl + +```bash +$ export SERVICE_URL=... +$ curl \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/v1/areas?area-searchexpression=06108&area-searchexpression=Halle +``` + +</TabItem> +</Tabs> + + +Beispiel für die Response + +```json +{ + "count": 3, + "offset": 0, + "totalCount": 3, + "areas": [ + { + "id": "16688", + "name": "Halle (Saale)", + "type": "kreisfreie Stadt" + }, + { + "id": "16707", + "name": "Halle (Saale) - OT Altstadt", + "type": "Gemeindeteil" + }, + { + "id": "16725", + "name": "Halle (Saale) - OT Nördliche Innenstadt", + "type": "Gemeindeteil" + } + ] +} +```