Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • fit-connect/submission-api
  • Lilith_Wittmann/FIT-Connect-PoC
2 results
Show changes
Showing
with 0 additions and 1514 deletions
# Testen mit Postman
Für Tests kann auch SoapUI oder jeder andere REST Client mit OAuth 2.0 Unterstützung eingesetzt werden.
Unter diesen beiden Adressen können Sie eine Postman Collection und eine Postman Environment herunterladen:
- [Collection](https://raw.githubusercontent.com/fiep-poc/assets/master/postman/FIT-Connect.postman_collection.json)
- [Environment](https://raw.githubusercontent.com/fiep-poc/assets/master/postman/FIT-Connect.postman_environment.json)
## API Aufruf mit Postman OAuth 2.0 Konfiguration
Mit diesen Angaben können Sie das API z.B. via Postman nutzen. Dazu wählen sie zunächst den Bereich "Authorization" aus. Danach kann der Button "Get New Access Token" genutzt werden.
![Authorization konfigurieren](https://raw.githubusercontent.com/fiep-poc/assets/master/images/oauth/14_authorization.png)
![Token holen](https://raw.githubusercontent.com/fiep-poc/assets/master/images/oauth/15_request_token.png)
![Use Token](https://raw.githubusercontent.com/fiep-poc/assets/master/images/oauth/16_use_token.png)
Mit diesem Token kann das API erfolgreich aufgerufen werden.
![API Aufruf](https://raw.githubusercontent.com/fiep-poc/assets/master/images/oauth/17_api_call.png)
In diesem Beispiel wurde eine neue Destination angelegt.
# Release Notes
## Version 0.7
### Umgesetzte Change Requests
#### #13 API Specification: Method of Acknowledge Application endpoint of Subscriber API should be PUT instead of POST
Die Operationen "Send Application" und "Acknowledge Application" wurden auf PUT umgestellt.
Bitte beachten Sie, dass die PUT-Operationen jetzt auf die Status-Resource wirken.
#### #19 contentStructure.data.size entfernen
Aufgrund verschiedener Codierungen kann die Größe der Fachdaten (JSON oder XML) in Bytes nicht einfach und verlässlich vorhergesagt werden. Daher wurde die Angabe der Größe der Fachdaten aus den Metadaten entfernt.
#### #23 Pattern nicht referenzieren
Im Dokument (document.json) wurde bei der Property "signature" als Pattern eine Referenz auf base64url.json gesetzt:
```json
"signature": {
"pattern": {
"$ref": "../common/base64url.json#/pattern"
},
"type": "string",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet"
}
```
Dies führt beim Swagger-Codegen und dem OpenAPI-Generator zu Fehlern. Um die Codegenerierung zu erleichtern wurde das Pattern dorthin kopiert.
```json
"signature": {
"type": "string",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet",
"pattern": "^[a-zA-Z0-9-_=]+$"
}
```
#### #24 Keine mehrfachen Typen
Im Modell address-national.json wurde für die Hausnummer (houseNumber) die Typen `integer` und `string` definiert. Die Hausnummer sollte eigentlich vom Typ `integer` sein und Zusätze in den Hausnummerzusatz (houseNumberSuffix) kommen. Um etwas flexibler zu sein, wurde aber alternativ auch ein `string` für die Hausnummer zugelassen. In FIM wurde die Hausnummer auch als Text-Feld definiert (F00000016).
```json
"houseNumber": {
"type": [
"string",
"integer"
],
"description": "Hausnummer",
"maxLength": 9,
"pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$",
"minimum": 1
}
```
Die Verwendung von mehr als einem Typen führt bei Codegeneratoren zu Problemen. Daher wird nur noch der Typ `string` verwendet.
```json
"houseNumber": {
"type": "string",
"description": "Hausnummer",
"maxLength": 9,
"pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$"
}
```
#### #25 Rechtsgrundlage der Verwaltungsleistung
Das Modell "Public Service Type" (public-service-type.json) wurde in "Verwaltungsleistung" umbenannt und hat ein zusätzliches Feld "Rechtsgrundlage" (legalBasis) erhalten.
#### #33 Antragsdatum
Unter `additionalReferenceInfo` wurde eine optionale Property `applicationDate` (Antragsdatum) hinzugefügt.
#### #34 Status History und aktuellen Status verschieben
Die Pfade für den aktuellen Status und die Statushistorie sind jetzt:
- `/destinations/{destinationId}/applications/{applicationId}/status` - aktueller Status
- `/destinations/{destinationId}/applications/{applicationId}/status/history` - Statushistorie
#### #35 Info/Test Resource hinzufügen
Es wurde in beiden APIs eine Resource `/info` hinzugefügt, die aktuell die API-Version ausgibt. Dies kann genutzt werden, um die Grundsätzliche Erreichbarkeit der API zu testen und um sicherzustellen, dass eine kompatible Version der API verwendet wird.
#### #43 AuthentificationInfo um Liste von verifizierten Feldern ergänzen
Die `authentificationInfo` wurde um ein Array `authenticatedFields` ergänzt, das die Felder aus der `identityInfo`auflistet, für die die Authentifkation gilt. Zusätzlich wurde `authentificationMethod` zu einem Enum umgewandelt.
#### #45 Mime-Types
Die Mime-Types in Application Schema wurden gemäß RFC abgebildet werden:
- `application/json` statt `json`
- `application/xml` statt `xml`
#### #49 JSON Web Key Set durch JSON Web Key ersetzt
Die Destination enthält nun einen JWK statt einem JWK Set.
## Version 0.6
### Dokumentation
- [Fehlercodes](../5_Status-_und_Fehlercodes.md) dokumentiert
- [Erste Schritte](../1_Getting_Started.md) überarbeitet
### Umgesetzte Change Requests
#### #3 Sematic error of the OAS in editor.swagger.io
Das Security Schema darf keine Leerzeichen enthalten und wurde deswegen von "OAuth 2.0" in "OAuth20" umbenannt.
#### #4 academicTitle -> doctoralDegrees
Alle Vorkommen von "academicTitle" wurden durch "doctoralDegrees" ersetzt.
#### #5 telephone -> telephones
Da Arrays mit einem Plural bezeichnet werden sollen wurde "telephone" durch "telephones" ersetzt.
#### #7 Regex für Hausnummernzusatz ist falsch
Das Pattern für den Hasnummernzusatz `^[\\p{L}0-9. ]*$` war inkorrekt da die Zeichenklassen `\p{L}` nicht zulässig ist. Es wurde daher zu `^[A-Za-z0-9. ]*$` korrigiert.
#### #10 API Specification: senderId and subscriberId in URIs
Die Sender- und Subscriber-ID muss nicht mehr über den Pfad mitgegeben werden sondern wird automatisch über das Token ermittelt. Damit entfallen die IDs als Pfadangabe.
#### #11 API Specification: Missing nouns in Sender API URIs endpoints
Die Pfade auf in der Sender API enthielten vor den IDs kein beschreibendes Nomen. Dies wurde korrigiert. Zum Beispiel:
- vorher: `/{destinationId}/{applicationId}/data`
- nachher: `/destinations/{destinationId}/applications/{applicationId}/data`
#### #12 API Specification: Missing destinationId in Get Status endpoint of Sender
Die Operation "Get Status" wies im Gegensatz zu den anderen Operationen keine vorangestellte Destination-ID auf.
- vorher: `/{applicationId}/status`
- nachher: `/destinations/{destinationId}/applications/{applicationId}/status`
#### #16 Fachdaten optional
Das Element "data" in der "contentStructure" war verpflichtend. Damit mussten Fachdaten übertragen werden. Das Element ist jetzt optional.
## Version 0.5
### Übergreifende Änderungen
#### Basis-URLs
Die Basis-URLs werden ab sofort mit jeder neuen Version geändert, damit ein paralleler Betrieb mehrerer API-Versionen möglich ist.
Die Basis-URLs für diese Version sind:
- https://sender.fiep-poc.de/beta5/
- https://subscriber.fiep-poc.de/beta5/
#### CR-1: Diversen Modellen den Discriminator "type" hinzugefügt:
- models/application/applicant-contact-info.json
- models/application/applicant-contact-info.json
- models/application/applicant-person.json
- models/application/applicant.json
- models/common/address-international.json
- models/common/address-national.json
- models/common/address-postbox.json
- models/common/individual.json
- models/destination-no-id.json
#### CR-3: Source in Sender ändern
In der Dokumentation werden die Begriffe "Source" und "Sender" synonym verwendet. Um die Dokumentation klarer zu machen, wurden alle Vorkommen von "Source" in "Sender" geändert.
<!-- theme: warning -->
> **Hinweis:** Dies wirkt sich auch auf die OAuth-Scopes aus. Der Scope `{senderId}:source:manage` wurde in `{senderId}:sender:manage` geändert.
#### CR-5: Zusätzliche Properties verbieten
- Wo möglich wurde `"additionalProperties": false` gesetzt um weitere Properties zu verbieten.
- Bei den Metadaten und der Destination ohne ID musste `"additionalProperties": false` wieder entfernt werden da sonst keine Ableitung mit `allOf` möglich ist.
### Dokumentation
- Release Notes mit aufgenommen
- Dokumentation zu OAuth integriert
- Token-URL eingetragen
- Postman Collection & Environment integriert
### Modelle
#### Destination
models/destination-no-id.json
#### eID
- eID-org-acting-person.json aufgelöst und in eID-natural-person.json integriert.
#### Postfachadresse
models/common/address-national.json
models/common/address-postbox.json
- Um ein doppeltes `oneOf` zu vermeiden wurde die Postfach Adresse aus der nationalen Adresse herausgelöst.
#### Application Document
models/application/document.json
- Regex Pattern für SHA-256/512 Hash präzisiert: "`[0-9A-F]{64,128}`" -> "`^[A-Fa-f0-9]{64}([A-Fa-f0-9]{64})?$`"
### Application Sender API
#### Add Application Data
- Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Add Application Document
- Im Erfolgsfall enthält der Body `{"result":"success"}`
### Application Subscriber API
#### Update Destination
- Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Delete Destination
- Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Acknowledge Application
- Bugfix: Property `final-delivery` auf Camelcase umgestellt.
- Bugfix: Angaben von `finalDelivery` in Acknowledge Application ist verpflichtend.
## Version 0.4
### Modelle
- Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst.
#### Application Metadata
models/application/metadata-no-id.json
- data/mimeType entfernt, da redundant zu data/schema/mimeType
### Application Sender API
- Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst.
### Application Subscriber API
- Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst.
## Version 0.3
### Modelle
#### Application Metadata
models/application/metadata-no-id.json
- Property "data/size" ergänzt
#### eID
models/common/eID-org-acting-person.json
- Property "artictic-name" in "artistic-name" umbenannt
#### Internationale Adresse
models/common/address-international.json
- Property "lines":
- Es müssen mindestens zwei Zeilen angegeben werden
- Maximallänge 35 Zeichen
#### Nationale Adresse
models/common/address-national.json
- Alle Propertys mit weiteren Einschränkungen wir Maximallänge oder Pattern versehen
#### eID
models/common/eID-org-acting-person.json
- Property "academic-title" in "doctoral-degrees" umbenannt
#### Phone
models/common/phone.json
- Property "number": Formatbeschränkung gelockert
- Property "type" entfernt
- Property "description" hinzugefügt
#### Phone Number
models/common/phonenr.json
- Unbenutztes Modell gelöscht
## Version 0.2
Veröffentlicht 2020-03-31
### Modelle
#### Antragsteller - Organisation
models/application/applicant-organization.json
- Property "role" entfernt
- Property "org-validation/validated" entfernt
- Property "legal-representatives" ist jetzt eine $ref auf models/common/individual.json
#### Antragsteller - Natürliche Person
models/application/applicant-person.json
- Property "role" entfernt
#### Application Schema
Das Schema wurde umgebaut und enthält jetzt drei Angaben:
- mime-type: ist entweder "json" oder "xml"
- schema-source: Quelle für das Schema. Kann "fim" oder "none" sein. Bei "none" dürfen beliebige Datenstrukturen übertragen werden.
- schema-id: ID des Schemas, ist von der Schema Quelle (schema-source) abhängig.
#### Person
Die Person (Verzeichnis models/person/) wurde weitestgehend entfernt. Es gibt nur noch das Modell models/common/individual.json für eine natürliche Person.
#### Phone
models/common/phone.json
- Properties "number" und "type" sind jetzt verpflichtend
#### Destination
Die Destination wurde in mehrere Modelle zerlegt, um dem Sender einen anderen Umfang zu zeigen als dem Subscriber.
#### Statusübersicht
models/status-overview.json
- Umbenannt: models/status.json → models/status-overview.json
- Enum Wert "sending" entfernt
- Property "since" in "timestamp" umbenannt
- Property "number" ergänzt
#### Error Body
models/error-body.json
- Umbenannt: models/error.json → models/error-body.json
- Enthält jetzt ein Array von Fehlern, statt nur einem.
#### Neue Modelle
- base64: models/common/base64.json
- JSON Web Encryption (JWE): models/common/jwe.json
- JSON Web Key (JWK): models/common/jwk.json
### Application Sender API
reference/sender.json
- Vorkommen von "Transfer" in "Application" umbenannt
- Dadurch sind auch Operation-IDs geändert worden (siehe unten)
- OAuth2 Scopes ergänzt
- Operation "Get Status Entry" (get-application-status-entry) entfernt
- Operation "Get Application Upload Status"
- Property "docs/doc-id" ergänzt
- Operation "Create Application": ID in create-application geändert
- Operation "Send Application" (früher "Commit Application"): ID in commit-application geändert
### Application Subscriber API
- OAuth2 Scopes ergänzt
- Operation "Acknowledge Application" (früher "Commit Application"): ID in ack-application geändert
### Dokumentation
Die Dokumentation im Verzeichnis "docs" wurde erstellt.
# Überblick über die XFall API
Willkommen auf der API Dokumentation für die XFall REST API von FIT-Connect. Die XFall API baut auf dem bestehenden IT-Planungsrat Standard XFall auf und bietet Lösungsverantwortlichen von antragssendenden und antragsempfangenden Systemen eine einfache Möglichkeit, ihre Software schnell und wirtschaftlich in länder- und ebenenübergreifende Antragsprozesse zu integrieren.
## Was ist die XFall API und was unterscheidet diese API vom bisherigen XFall Standard?
Die XFall API baut auf den bisherigen Konzepten und Erfahrungen des bestehenden IT-Planungsrats Standards XFall auf.
> Die übergreifende Zielstellung des Standards XFall besteht darin, Anträge und Berichte, die aus vorgelagerten Systemen (bspw. Onlineantragsdienste, Fachportale oder Berichtssysteme) erstellt werden, in die unterschiedlichen Systeme der elektronischen Verfahrensbearbeitung (bspw. Fachverfahren, Dokumentenmanagementsystem oder Prozessplattformen) zu übergeben.
Bei der Entwicklung der XFall API wurden viele Konzepte mit Hinblick auf die neuen Erfordernisse des Onlinezugangsgesetzes, der SDG-Verordnung sowie den Anforderungen digitaler Geschäftsmodelle weiterentwickelt. Technisch nutzt die XFall API auf einen leichtgewichtigen RESTful-Architekturstil und baut auf der föderalen Antragsübertragungsarchitektur von FIT-Connect auf.
## Was macht die XFall API und wie kann diese genutzt werden?
Die XFall API besteht aus zwei getrennt nutzbaren APIs:
- Für antragsempfangende Systeme wird eine `Application Subscriber API` für den Empfang von Anträgen sowie eine `Callback` / Webhook Funktion für die technische Benachrichtigung über vorliegende Anträge angeboten.
- Für antragssendende Systeme wird eine `Application Sender API` angeboten, um an beliebige antragsempfangende Systeme Anträge zu senden, die sich mit einem Zustellpunkt registriert haben.
Diese beiden APIs werden durch einen zentralen Intermediär (`XFall Zustelldienst`) bereitgestellt. Um auf diese APIs zuzugreifen, müssen interessierte Entwickler ihre Anwendungen beim FIT-Connect Autorisierungsdienst vorab registrieren.
### Zusammenspiel der APIs in der Antragsübermittlung
![Applicationtransfer_Architecture](../assets/images/api_overview/XFall_Integration_Architecture.png "Antragsübertragungsarchitektur FIT-Connect")
Über die `Application Subscriber API` können die zuständigen Stellen für ihre Systeme einen Zustellpunkt eröffnen, der über eine `destination-Id` eindeutig adressierbar ist. Für diese Zustellpunkte legen die zuständigen Stellen alle fachlichen Vorgaben (Zulässige Fachstandards, Verschlüsselung, Datenformate etc.) fest, damit eine medienbruchfreie Weiterverarbeitung in ihren Systemen gewährleistet ist. Über die Angabe der `destination-Id` in der `Application Sender API` können beliebige antragssendende Systemen Anträge an die zuständige Stelle senden.
Dieser Zustellpunkt ist jedoch vorab für eine Verwaltungsleistung und den jeweiligen örtlichen Antragskontext (bspw. Ort der Antragsstellung) korrekt zu ermitteln. Damit die Ermittlung des korrekten Zustellpunkts skalierbar für das ganze Bundesgebiet funktioniert, ist langfristig vorgesehen, die `destination-Id` in den Leistungs- und Zuständigkeitsinformationen des jeweils bekannten Zuständigkeitsfinders zu hinterlegen. Diese dezentral gepflegten Informationen sollen durch das Online-Gateway (https://www.onlinezugangsgesetz.de/Webs/OZG/DE/umsetzung/portalverbund/online-gateway/online-gateway-node.html) gebündelt und über eine offene API im XZuFi Format (https://www.xrepository.de/details/urn:xoev-de:fim:standard:xzufi) nutzbar gemacht werden.
![Applicationtransfer_Architecture](https://raw.githubusercontent.com/fiep-poc/assets/master/images/api_overview/Pflege%20und%20Ermittlung%20destination-Id.jpg "Pflege und Ermittlung der destination-Id")
## Für wen ist die XFall API gedacht und warum sollte ich sie nutzen?
Die XFall API ist für alle Hersteller, Entwickler und Verfahrensverantwortliche von antragssendenden und antragsempfangenden Systemen gedacht. Insbesondere folgende Systeme mit bundesweiten Nutzungsszenarien sollen mit der XFall API unterstützt werden:
- **Einer für alle (EfA) Verfahren**: Länderübergreifend entwickelte Antragsverfahren für eine bestimmte Verwaltungsleistung oder ein Leistungsbündel, die entweder in verschiedenen Ländern nachnutzbar betrieben werden oder länderübergreifend als gemeinsamer Antragsdienst für alle zuständigen Stellen betrieben werden.
- **Antragsgeneratoren / Antragsmanagementsysteme**: Standardsoftware zur Erstellung und dem Betrieb von direkt nutzbaren Onlineantragsdiensten, die im ganzen Bundesgebiet bei einzelnen Stellen oder Gebietskörperschaften (bspw. als Basiskomponente) im Einsatz sind.
- **Als Standardsoftware bereitgestellte Fachverfahrenssoftware, Prozessplattformen oder Dokumentenmanagementsysteme**: Bundesweit angebotene und eingesetzte Standardsoftware, die von den zuständigen Stellen für die Antragsbearbeitung eingesetzt wird.
Für diese Systeme bietet die XFall bei der schnellen und wirtschaftlichen Realisierung medienbruchfreier Antragsprozesse eine Reihe von Mehrwerten:
- **Plug and Play Anbindung an die föderale Antragsübermittlung**: Durch die zentral bereitgestellten APIs und die Nutzung der bestehenden Zuständigkeitsfinderinfrastruktur können Systeme schnell an eine föderale Antragsübermittlungsinfrastruktur angebunden werden, ohne eigene Infrastrukturen hierfür zu beauftragen oder aufzubauen.
- **Leichgewichtige APIs und Industriestandards**: Die XFall API baut auf leichgewichtigen RESTful API Ansätzen auf und nutzt verbreitete Industriestandards wie die OpenAPI Specification und OAuth 2.0, sodass kein spezialisiertes Know-How und spezifische Softwarekomponenten für die Anbindung erforderlich sind.
- **Flexibilität in der Antragsübermittlung**: Die XFall API verbindet Flexibilität und Standardisierung. Während die XFall API eine einheitliche Metadatenstruktur festlegt, um Anträge strukturiert zu verarbeiten, können beliebige Fachstandards und Anhänge übertragen werden. Auch die Übertragung von Anträgen im PDF Format ist möglich, solange für die Antragsdaten noch kein FIM Schema vorhanden ist.
**Nutzung bestehender Prozesse und Strukturen für die Pflege von Adressierungsinformationen**: Langjährig erprobte Prozesse und Strukturen zur Pflege der Zuständigkeitsinformationen, können in den zuständigen Stellen beibehalten werden. Technische Adressierungsparameter der XFall API werden über die gleichen Systeme und Prozesse gepflegt, die schon heute bei Informationen zu Anschriften, Rufnummern, E-Mail-Adressen oder Ansprechpartnern genutzt werden.
- **Machine2Machine Ready**: Die XFall API und die FIT-Connect Antragsübertragungsarchitektur sind von Grund auf als offene API-Plattform konzipiert. Dadurch können auch verwaltungsexterne Antrags- und Berichtssysteme wie Drittsoftware oder Unternehmenssysteme direkt eingebunden werden, ohne das hierfür eine gesonderte Infrastruktur notwendig ist.
### Ist die XFall API nur für länder- und behördenübergreifende Antragskontexte gedacht?
Durch die einfache Anbindung und Nutzung bietet sich die XFall API auch dort an, wo das behördeneigene Antragsverfahren mit dem behördeneigenen Fachverfahren verbunden wird. Durch die Nutzung der XFall API werden diese Systeme standardisiert verbunden, ohne das die Behörde in Abhängigkeiten zu proprietären Technologien und Schnittstellen gerät. Dies ermöglicht es der Behörde, ihre Systeme auf beiden Seiten flexibel auszutauschen und weiterzuentwickeln, um somit auf neue technische Trends und Möglichkeit schnell zu reagieren.
## In welchem Stand befindet sich XFall REST API und wann kann man die API nutzen?
Die Entwicklung und Bereitstellung der XFall REST API erfolgt im Rahmen eines Proof of Concepts für die geplante föderale Integrations- und Entwicklungsplattform FIT-Connect. Seit dem zweiten Quartal 2020 ist es interessierten Parteien möglich, einen Zugang zur XFall API zu bekommen und eine prototypische Anbindung von Verfahren umzusetzen.
{
"type": "object",
"title": "Applicant Contact Info",
"description": "Kontaktdaten des Antragstellers",
"additionalProperties": false,
"x-examples": {
"example-1": {
"electronicAdresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAdress": {
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
},
"properties": {
"physicalAddress": {
"oneOf": [
{
"$ref": "../common/address-national.json"
},
{
"$ref": "../common/address-postbox.json"
},
{
"$ref": "../common/address-international.json"
}
],
"description": "Physikalische (Post-)Adresse",
"discriminator": {
"propertyName": "type",
"mapping": {
"national": "../common/address-national.json",
"postbox": "../common/address-postbox.json",
"international": "../common/address-international.json"
}
}
},
"telephones": {
"type": "array",
"description": "Liste der Telefonnummern, außer Fax",
"items": {
"$ref": "../common/phone.json"
}
},
"electronicAddresses": {
"type": "array",
"description": "Elektronische Kontaktmöglkichkeiten, z.B. E-Mail",
"items": {
"type": "object",
"description": "",
"additionalProperties": false,
"properties": {
"channelType": {
"type": "string",
"enum": [
"Service-Account-Mailbox",
"De-Mail",
"E-Mail",
"Fax"
],
"description": "Art der Kommunikationsmöglichkeit"
},
"address": {
"type": "string",
"description": "Kommunikationsadresse"
}
}
}
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Applicant Organisation",
"description": "Antragsteller in Form von einer Organisation, z.B. einem Unternehmen",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "array",
"description": "IDs für diese Organisation",
"items": {
"$ref": "../common/identifier.json"
}
},
"contactInfo": {
"$ref": "./applicant-contact-info.json"
},
"actingPerson": {
"type": "array",
"description": "Im Namen der Organisation auftretende natürliche Personen, wie z.B. Geschäftsführer, Vorstände oder Prokuristen",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"identityInfo": {
"$ref": "../common/natural-person.json"
},
"authentificationInfo": {
"$ref": "../common/authentification-info.json"
}
}
}
},
"organizationInfo": {
"type": "object",
"description": "Informationen über die Organisation",
"additionalProperties": false,
"properties": {
"legalName": {
"type": "string",
"description": "Name oder Bezeichnung - Der rechtliche Name einer Organisation. Der Name ist nicht zwingend eindeutig, um die Organisation zu identifizieren."
},
"organizationType": {
"type": "string",
"description": "Rechtsform der Organisation"
},
"registryCourt": {
"type": "string",
"description": "Registergericht"
},
"registryType": {
"type": "string",
"description": "Registerart - Die Registerart macht die Registernummer zur Identifizierung der Organisation innerhalb des Registergerichts eindeutig (z. B. HRA und HRB als Registerarten für das Handelsregister)."
},
"registryNumber": {
"type": "string",
"description": "Registernummer, z.B. vom Handelsregister"
},
"legalAddress": {
"oneOf": [
{
"$ref": "../common/address-national.json"
},
{
"$ref": "../common/address-postbox.json"
},
{
"$ref": "../common/address-international.json"
}
],
"description": "Offizielle Adresse",
"discriminator": {
"propertyName": "type",
"mapping": {
"national": "../common/address-national.json",
"postbox": "../common/address-postbox.json",
"international": "../common/address-international.json"
}
}
},
"legalRepresentatives": {
"type": "array",
"description": "Namen der Mitglieder des Vertretungsorgans oder der gesetzlichen Vertreter",
"items": {
"$ref": "../common/individual.json"
}
}
}
},
"orgValidation": {
"type": "object",
"description": "Informationen, ob diese Organisation vom sendenden System identifiziert wurde",
"additionalProperties": false,
"properties": {
"method": {
"type": "string",
"description": "Identifizierungsmethode"
}
},
"required": [
"method"
]
},
"type": {
"type": "string",
"enum": [
"organization"
]
}
},
"required": [
"type"
]
}
{
"type": "object",
"title": "Applicant Person",
"description": "Antragstellerdaten für eine natürliche Person",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "array",
"description": "IDs der natürlichen Person",
"items": {
"$ref": "../common/identifier.json"
}
},
"authentificationInfo": {
"$ref": "../common/authentification-info.json"
},
"identityInfo": {
"$ref": "../common/natural-person.json"
},
"contactInfo": {
"$ref": "./applicant-contact-info.json"
},
"type": {
"type": "string",
"enum": [
"person"
]
}
},
"required": [
"type"
],
"x-examples": {
"example-1": {
"type": "person",
"authentificationInfo": {
"assuranceLevel": "high",
"authentificationMethod": "eID",
"timestamp": "2020-03-03T12:38:23Z"
},
"identityInfo": {
"dateOfBirth": "1970-09-13",
"gender": "m",
"givenName": "WERNER",
"familyName": "MUSTERMANN",
"placeOfResidence": {
"type": "national",
"street": "KURZER WEG 7",
"postalCode": "12345",
"city": "ANKH-MORPORK"
}
},
"contactInfo": {
"electronicAddresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAddress": {
"type": "national",
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
}
}
}
{
"title": "Applicant",
"description": "Ein Antragsteller, entweder eine Organisation oder eine natürliche Person",
"oneOf": [
{
"$ref": "./applicant-person.json"
},
{
"$ref": "./applicant-organization.json"
}
],
"discriminator": {
"propertyName": "type",
"mapping": {
"person": "./applicant-person.json",
"organization": "./applicant-organization.json"
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Application Document",
"description": "Ein im Antrag (Application) enthaltenes Dokument (z.B. Antragsformular oder hochgeladene Anlage)",
"additionalProperties": false,
"x-examples": {
"example-1": {
"docId": "1",
"purpose": "form",
"size": 13046,
"mimeType": "application/pdf",
"filename": "test.pdf",
"description": "Das Antragsformular",
"lang": {
"lang": "de",
"region": "DE"
},
"hash": {
"algorithm": "SHA-256",
"digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
}
}
},
"properties": {
"purpose": {
"type": "string",
"enum": [
"form",
"attachment",
"report"
],
"description": "Zweck/Art des Dokuments\n- form: Antragsformular\n- attachment: Anlage (Upload)\n- report: Vom System erzeugte Unterlage"
},
"size": {
"type": "integer",
"description": "Größe des Dokuments in Bytes"
},
"filename": {
"type": "string",
"description": "Ursprünglicher Dateiname bei Erzeugung oder Upload"
},
"description": {
"type": "string",
"description": "Optionale Beschreibung des Dokuments"
},
"lang": {
"$ref": "../common/language.json"
},
"hash": {
"type": "object",
"description": "Prüfsumme über den Inhalt des Dokuments zur Absicherung auf dem Transportweg",
"additionalProperties": false,
"properties": {
"algorithm": {
"type": "string",
"description": "Verwendeter Algorithmus",
"enum": [
"SHA-256",
"SHA-512"
]
},
"digest": {
"type": "string",
"description": "Prüfsumme, hexadezimal codiert",
"pattern": "^[A-Fa-f0-9]{64}([A-Fa-f0-9]{64})?$"
}
},
"required": [
"algorithm",
"digest"
]
},
"signature": {
"type": "string",
"pattern": "^[a-zA-Z0-9-_=]+$",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet"
},
"mimeType": {
"$ref": "../common/mime-type.json"
},
"docId": {
"type": "string",
"pattern": "^[-_.A-Za-z0-9]+$",
"description": "ID des Dokuments. Diese muss nur innerhalb des Antrags (Application) eindeutig sein. Es wird daher empfohlen, die IDs fortlaufend (1, 2 etc.) zu vergeben."
}
},
"required": [
"purpose",
"size",
"mimeType"
]
}
\ No newline at end of file
{
"type": "object",
"title": "Application Metadata without ID",
"description": "Metadaten eines Antrags noch ohne ID, zum Anlegen eines neuen Antrags. Nach dem Zuweisen der `application-id` wird das Modell [Application Metadata](metadata.json) verwendet.",
"x-examples": {
"example-1": {
"additionalReferenceInfo": {
"subject": "Anmeldung eines Gewerbes in Musterstadt",
"caseId": "DF/8923"
},
"contentStructure": {
"data": {
"schema": {
"mimeType": "application/json",
"schemaSource": "none"
}
},
"docs": [
{
"docId": "1",
"purpose": "form",
"size": 13046,
"mimeType": "application/pdf",
"filename": "test.pdf",
"description": "Das Antragsformular",
"lang": {
"lang": "de",
"region": "DE"
},
"hash": {
"algorithm": "SHA-256",
"digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
}
}
]
},
"publicServiceType": {
"name": "Gewerbeanmeldung",
"description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
"leikaId": "99050012104000",
"otherIdentifiers": [
{
"id": "8664844",
"schemeID": "service.niedersachsen.de",
"schemeName": "Serviceportal Niedersachsen"
},
{
"id": "354824",
"schemeID": "buerger.thueringen.de",
"schemeName": "Zuständigkeitsfinder Thüringen"
}
]
},
"applicants": [
{
"type": "person",
"authentificationInfo": {
"assuranceLevel": "high",
"authentificationMethod": "eID",
"timestamp": "2020-03-03T12:38:23Z"
},
"identityInfo": {
"dateOfBirth": "1970-09-13",
"gender": "m",
"givenName": "WERNER",
"familyName": "MUSTERMANN",
"placeOfResidence": {
"type": "national",
"street": "KURZER WEG 7",
"postalCode": "12345",
"city": "ANKH-MORPORK"
}
},
"contactInfo": {
"electronicAdresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAdress": {
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
}
],
"paymentInfo": {
"reference": "TP/93/GDP",
"usage": "Gewerbeanmeldung",
"amount": 17.3,
"timestamp": "2020-03-03T12:38:23Z",
"status": "success",
"transaction": "1f77c5f9b759db9cdce59988b24974d465c7be5e462a6185485559ff6e2dea82"
}
}
},
"properties": {
"applicants": {
"type": "array",
"items": {
"$ref": "./applicant.json"
}
},
"paymentInfo": {
"$ref": "./payment-info.json"
},
"publicServiceType": {
"$ref": "./public-service-type.json"
},
"contentStructure": {
"type": "object",
"additionalProperties": false,
"required": [
"docs"
],
"properties": {
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"schema": {
"$ref": "./schema.json"
}
},
"required": [
"schema"
]
},
"docs": {
"type": "array",
"items": {
"$ref": "./document.json"
}
}
}
},
"additionalReferenceInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"subject": {
"type": "string"
},
"caseId": {
"type": "string"
},
"applicationDate": {
"type": "string",
"format": "date",
"description": "Antragsdatum"
}
}
}
},
"required": [
"contentStructure"
]
}
\ No newline at end of file
{
"title": "Application Metadata",
"allOf": [
{
"type": "object",
"properties": {
"applicationId": {
"type": "string",
"pattern": "^[-_.A-Za-z0-9]+$",
"description": "ID des Antrags"
}
},
"required": [
"applicationId"
]
},
{
"$ref": "./metadata-no-id.json"
}
],
"description": "Metadaten zu einem Antrag.",
"x-examples": {
"example-1": {
"additionalReferenceInfo": {
"subject": "Anmeldung eines Gewerbes in Musterstadt",
"caseId": "DF/8923"
},
"contentStructure": {
"data": {
"schema": {
"mimeType": "application/json",
"schemaSource": "none"
}
},
"docs": [
{
"docId": "1",
"purpose": "form",
"size": 13046,
"mimeType": "application/pdf",
"filename": "test.pdf",
"description": "Das Antragsformular",
"lang": {
"lang": "de",
"region": "DE"
},
"hash": {
"algorithm": "SHA-256",
"digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
}
}
]
},
"publicServiceType": {
"name": "Gewerbeanmeldung",
"description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
"leikaId": "99050012104000",
"otherIdentifiers": [
{
"id": "8664844",
"schemeID": "service.niedersachsen.de",
"schemeName": "Serviceportal Niedersachsen"
},
{
"id": "354824",
"schemeID": "buerger.thueringen.de",
"schemeName": "Zuständigkeitsfinder Thüringen"
}
]
},
"applicants": [
{
"type": "person",
"authentificationInfo": {
"assuranceLevel": "high",
"authentificationMethod": "eID",
"timestamp": "2020-03-03T12:38:23Z"
},
"identityInfo": {
"dateOfBirth": "1970-09-13",
"gender": "m",
"givenName": "WERNER",
"familyName": "MUSTERMANN",
"placeOfResidence": {
"type": "national",
"street": "KURZER WEG 7",
"postalCode": "12345",
"city": "ANKH-MORPORK"
}
},
"contactInfo": {
"electronicAdresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAdress": {
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
}
],
"paymentInfo": {
"reference": "TP/93/GDP",
"usage": "Gewerbeanmeldung",
"amount": 17.3,
"timestamp": "2020-03-03T12:38:23Z",
"status": "success",
"transaction": "1f77c5f9b759db9cdce59988b24974d465c7be5e462a6185485559ff6e2dea82"
},
"applicationId": "ce75a6b8-d72f-4b94-b09e-af6be35bc2ae"
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Payment Info",
"description": "Informationen über eine im Antragsprozess erfolgte Bezahlung.",
"additionalProperties": false,
"properties": {
"reference": {
"type": "string",
"description": "Bezahlreferenz, z.B. ein Kassenzeichen"
},
"usage": {
"type": "string",
"description": "Verwendungszweck",
"maxLength": 27
},
"amount": {
"type": "number",
"minimum": 0.01,
"multipleOf": 0.01,
"description": "Geldbetrag"
},
"timestamp": {
"type": "string",
"description": "Zeitpunkt der Bezahlung",
"format": "date-time"
},
"status": {
"type": "string",
"description": "Status der Bezahlung",
"enum": [
"success",
"failed",
"open"
]
},
"transaction": {
"type": "string",
"description": "Informationen zur Bezahltransaktion, z.B. eine Transaktions-ID"
}
},
"required": [
"usage",
"amount",
"status"
],
"x-examples": {
"example-1": {
"reference": "TP/93/GDP",
"usage": "Gewerbeanmeldung",
"amount": 17.3,
"timestamp": "2020-03-03T12:38:23Z",
"status": "success",
"transaction": "1f77c5f9b759db9cdce59988b24974d465c7be5e462a6185485559ff6e2dea82"
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Verwaltungsleistung",
"description": "Beschreibung der Art der Verwaltungsleistung. Eine Verwaltungleistung sollte immer mit einer LeiKa-ID beschrieben werden. Ist für die gegebene Verwaltungsleistung keine LeiKa-ID vorhanden, kann die Verwaltungsleistung übergangsweise über die Angabe eines Schemas (`otherIdentifiers`) beschrieben werden.",
"additionalProperties": false,
"x-examples": {
"example-1": {
"name": "Gewerbeanmeldung",
"description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
"leikaId": "99050012104000",
"otherIdentifiers": [
{
"id": "8664844",
"schemeID": "service.niedersachsen.de",
"schemeName": "Serviceportal Niedersachsen"
},
{
"id": "354824",
"schemeID": "buerger.thueringen.de",
"schemeName": "Zuständigkeitsfinder Thüringen"
}
]
},
"example-2": {
"name": "Gewerbeanmeldung",
"leikaId": "99050012104000"
}
},
"properties": {
"name": {
"type": "string",
"description": "Name/Bezeichnung der behördlichen Leistung"
},
"description": {
"type": "string",
"description": "(Kurz-)Beschreibung der behördlichen Leistung"
},
"otherIdentifiers": {
"type": "array",
"description": "Weitere Identifikatioren. Die ID wird in `content` abgelegt, zusätzlich sollten die Schema-Attribute zur Spezifikation des Gültigkeitsraumes verwendet werden.",
"items": {
"$ref": "../common/identifier.json"
}
},
"leikaId": {
"type": "string",
"pattern": "^[0-9]{2}([0-9]{3}){1,4}$",
"description": "ID aus dem Leistungskatalog (Leika)"
},
"legalBasis": {
"type": "string",
"description": "Rechtsgrundlage der Verwaltungsleistung. Dieses Feld dient zur Information für Verwaltungsmitarbeiter:innen und stellt insbesondere keine rechtsverbindliche Aussage dar."
}
},
"required": [
"name"
]
}
\ No newline at end of file
{
"type": "object",
"title": "Application Schema",
"description": "Strukturinformationen zu übertragbaren oder übertragenen Daten.",
"additionalProperties": false,
"x-examples": {
"example-1": {
"mimeType": "application/json",
"schemaSource": "none"
},
"example-2": {
"mimeType": "application/xml",
"schemaSource": "none"
},
"example-3": {
"mimeType": "application/xml",
"schemaSource": "fim",
"schemaId": "S99000001V1.0"
}
},
"properties": {
"schemaId": {
"type": "string",
"description": "ID des Schemas, abhängig von der ausgewählten Quelle."
},
"schemaSource": {
"type": "string",
"enum": [
"fim",
"none"
],
"description": "Quelle, von der das Schema bezogen werden kann."
},
"mimeType": {
"type": "string",
"enum": [
"application/json",
"application/xml"
],
"description": "Gibt das zulässige Format (JSON oder XML) der Fachdaten an."
},
"encoding": {
"type": "string",
"enum": [
"plain",
"base64",
"jwe"
],
"description": "Übertragungscodierung:\n- `plain`: kein Encoding\n- `base64`: Inhalt base64-codieren\n- `jwe`: Inhalt mit JSON Web Encryption verschlüsseln"
}
},
"required": [
"schemaSource",
"mimeType",
"encoding"
]
}
\ No newline at end of file
{
"type": "object",
"title": "International Address",
"description": "Eine internationale Adresse, bestehend aus ein bis fünf Adresszeilen.",
"additionalProperties": false,
"x-examples": {
"example-1": {
"type": "international",
"lines": [
"760 United Nations Plaza",
"Manhattan, New York City, New York 10017"
],
"country": "368"
},
"example-2": {
"type": "international",
"lines": [
"Threadneedle Street",
"London EC2R 8AH"
],
"country": "168"
}
},
"properties": {
"lines": {
"type": "array",
"maxItems": 5,
"minItems": 2,
"description": "Anschriftzeile",
"items": {
"type": "string",
"maxLength": 35
}
},
"country": {
"type": "string",
"description": "Staat gemäß Codeliste [https://www.xrepository.de/details/urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:staat](Codeliste Staat aus der Staats- und Gebietssystematik des Statistischen Bundesamtes)",
"minLength": 3,
"maxLength": 3,
"pattern": "^[0-9]{3}$"
},
"type": {
"type": "string",
"enum": [
"international"
]
}
},
"required": [
"lines",
"country",
"type"
]
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.