Skip to content
Snippets Groups Projects
Verified Commit 50b9df89 authored by Jonas Gröger's avatar Jonas Gröger :palm_tree:
Browse files

docs: add description and code examples for metadata validation (planning#239)

parent 10efbd34
No related branches found
No related tags found
1 merge request!156Doku: Dokumentation zur Sicherstellung der Integrität des Gesamtantrags (planning#239)
...@@ -2,6 +2,271 @@ ...@@ -2,6 +2,271 @@
title: Schemavalidierung title: Schemavalidierung
--- ---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
## Sicherstellung der Integrität einer Submission
<!-- Allgemeine Beschreibung für Sender + Subscriber -->
Es muss sichergestellt sein, dass Zwischensysteme, wie z. B. auch FIT-Connect selbst, Fachdaten
oder Anhänge von Submissions nicht austauschen. Hierfür wird eine Hashfunktion verwendet, welche
die Integrität der Datensätze prüfbar macht. Die so berechneten Hashes werden in den Metadaten
verschlüsselt abgelegt und können bei Abruf vom Subscriber validiert werden.
Nur wenn sowohl der Sender als auch der Subscriber Ihre Aufgaben übernehmen, ist die Integrität
einer Submission sichergestellt.
Wie diese Aufgaben im Detail aussehen, soll im Folgenden beschrieben werden.
### Aufgaben des Senders
Vor dem Versenden des Antrags muss der Sender sowohl für die Fachdaten als auch für jeden einzelnen Anhang den Hashwert berechnen.
Starten wir mit den **Fachdaten**:
1. Prüfen, ob **Fachdaten** vorhanden sind. Wenn nein, können die Schritte 2. und 3. übersprungen werden.
2. Berechnen eines mit dem Metadatenschema kompatiblen Hashes (aktuell: SHA-512) aus den Fachdaten.
3. Schreiben des Hashtyps sowie des Hashwertes in die Metadaten unter `.data.hash`.
Nun zu den **Anhängen**:
1. Prüfen, ob **Anhänge** vorhanden sind. Wenn nein, können die Schritte 2. und 3. übersprungen werden.
2. Für jeden Anhang: Berechnen eines mit dem Metadatenschema kompatiblen Hashes (aktuell: SHA-512).
3. Für jeden Anhang: Schreiben des Hashtyps sowie des Hashwertes in die Metadaten unter `.attachments.*.hash`.
<Tabs
defaultValue="java"
groupId="code-examples"
values={[
{ label: 'CLI', value: 'cli', },
{ label: 'Java', value: 'java', },
{ label: 'Python', value: 'python', },
{ label: '.NET', value: 'dotnet', },
]
}>
<TabItem value="cli">
```bash
# Ohne Dateinamen am Ende
➜ sha512sum fachdaten.json | cut -d' ' -f1
92aae16fa71f045b482dafdfa12aed8dc502945444367e78600bb48df32d2b4be01e805c923cc8de11992616666cc80e9e133b73b1f234f8a27688a61ab065a9
```
</TabItem>
<TabItem value="java">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/java/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/java/metadata-verifier)
gefunden werden.
```java
MetadataVerifier metadataVerifier = new MetadataVerifier();
byte[] exampleFileContent = MetadataVerifier.class.getResourceAsStream("/example.pdf").readAllBytes();
// Sender: create hash of data (Fachdaten) or attachments (Anhänge) for Metadata
byte[] hash = metadataVerifier.createHash(exampleFileContent);
String hexHash = MetadataVerifier.toHexString(hash); // Optional
System.out.printf("Sender: {\"type\": \"sha512\", \"content\": \"%s\"}\n", hexHash);
```
</TabItem>
<TabItem value="python">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/python/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/python/metadata-verifier)
gefunden werden.
```python
import hashlib
import json
def create_hash(data: bytes):
return hashlib.sha512(data)
def sender(example_pdf):
with open(example_pdf, "rb") as file_to_send:
file_to_send_bytes = file_to_send.read()
file_to_send_hash = create_hash(file_to_send_bytes)
print(
json.dumps(
{"type": "sha512", "content": file_to_send_hash.hexdigest()}, indent=4
)
)
```
</TabItem>
<TabItem value="dotnet">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/dotnet/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/dotnet/metadata-verifier)
gefunden werden.
```csharp
using System;
using System.Security.Cryptography;
using System.Reflection;
using System.Text.Json;
using (Stream? inputData = Assembly.GetExecutingAssembly().GetManifestResourceStream("example.pdf"))
{
if (inputData == null)
{
Console.Error.WriteLine("Error reading file from assembly.");
return;
}
using (var hashFunction = SHA512.Create())
{
byte[] hash = hashFunction.ComputeHash(inputData);
String hashAsString = BitConverter.ToString(hash)
.Replace("-", "")
.ToLowerInvariant();
Console.WriteLine("Sender: " + JsonSerializer.Serialize(new
{
type = "sha512",
content = hashAsString
}, new JsonSerializerOptions { WriteIndented = true }));
}
}
```
</TabItem>
</Tabs>
### Aufgaben des Subscribers
<!-- Aufgaben des Subscribers -->
Nachdem ein Antrag empfangen wurde und **vor** dessen Weiterverwendung, muss die Integrität der Fachdaten und Anhänge sichergestellt werden.
Starten wir mit den **Fachdaten**:
1. Prüfen, ob **Fachdaten** vorhanden sind. Wenn nein, können die Schritte 2. und 3. übersprungen werden.
2. Berechnen eines mit dem Metadatenschema kompatiblen Hashes (aktuell: SHA-512) aus den Fachdaten.
3. Prüfen, ob dieser Hash mit dem aus den Metadaten übereinstimmt (Feld `.data.hash.content`).
a. Wenn ja: Die Integrität der Fachdaten ist sichergestellt.
b. Wenn nein: Die Integrität der Fachdaten ist nicht gestellt. Die Fachdaten wurden durch ein Zwischensystem verändert!
<!-- TODO: Beschreibung, was im Fall einer Integritätsverletzung getan werden sollte. -->
Nun zu den **Anhängen**:
1. Prüfen, ob **Anhänge** vorhanden sind. Wenn nein, können die Schritte 2. und 3. übersprungen werden.
2. Für jeden Anhang: Berechnen eines mit dem Metadatenschema kompatiblen Hashes (aktuell: SHA-512).
3. Für jeden Anhang: Prüfen, ob dieser Hash mit dem aus den Metadaten übereinstimmt (Feld `.attachments.*.hash.content`).
a. Wenn ja: Die Integrität des Anhangs ist sichergestellt.
b. Wenn nein: Die Integrität des Anhangs ist nicht gestellt. Der Anhang wurden durch ein Zwischensystem verändert!
<!-- TODO: Beschreibung, was im Fall einer Integritätsverletzung getan werden sollte. -->
<Tabs
defaultValue="java"
groupId="code-examples"
values={[
{ label: 'CLI', value: 'cli', },
{ label: 'Java', value: 'java', },
{ label: 'Python', value: 'python', },
{ label: '.NET', value: 'dotnet', },
]
}>
<TabItem value="cli">
```bash
➜ HASH="92aae16fa71f045b482dafdfa12aed8dc502945444367e78600bb48df32d2b4be01e805c923cc8de11992616666cc80e9e133b73b1f234f8a27688a61ab065a9"
# Erfolgreiche Hashvalidierung. Integrität der Fachdaten sichergestellt.
➜ echo "$HASH fachdaten.json" | sha512sum --check
fachdaten.json: OK
# Fehlgeschlagene Hashvalidierung. Integrität der Fachdaten fehlerhaft.
# Der Hash wurde manuell modifiziert (und dadurch ungültig gemacht).
➜ INVALID_HASH=00000000001f045b482dafdfa12aed8dc502945444367e78600bb48df32d2b4be01e805c923cc8de11992616666cc80e9e133b73b1f234f8a27688a61ab065a8
➜ echo "$INVALID_HASH fachdaten.json" | sha512sum --check
fachdaten.json: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
```
</TabItem>
<TabItem value="java">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/java/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/java/metadata-verifier)
gefunden werden.
```java
MetadataVerifier metadataVerifier = new MetadataVerifier();
byte[] exampleFileContent = MetadataVerifier.class.getResourceAsStream("/example.pdf").readAllBytes();
// Subscriber: verify Hash of data (Fachdaten) or attachments (Anhänge)
String hashFromSender = "bf85bd96831e5df2200b76a8c7e3c74044e96bc30d1ffc3d1c4b05d4ee5b258714ab28a4ee12c9eb7f7cec1878d49036f4ccaf809a6c9545707fb1b91f2676ae";
boolean verify = metadataVerifier.verify(metadataVerifier.fromHexString(hashFromSender), exampleFileContent);
System.out.printf("Subscriber: Verification %s\n", verify ? "OK" : "FAILED");
```
</TabItem>
<TabItem value="python">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/python/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/python/metadata-verifier)
gefunden werden.
```python
import hashlib
import json
def create_hash(data: bytes):
return hashlib.sha512(data)
def verify_hash(original_hash: bytes, data: bytes) -> bool:
new_hash = create_hash(data).digest()
return original_hash == new_hash
hash_from_sender = "bf85bd96831e5df2200b76a8c7e3c74044e96bc30d1ffc3d1c4b05d4ee5b258714ab28a4ee12c9eb7f7cec1878d49036f4ccaf809a6c9545707fb1b91f2676ae"
with open(example_pdf, "rb") as data_from_sender:
data_from_sender_bytes = data_from_sender.read()
verify_ok = verify_hash(bytes.fromhex(hash_from_sender), data_from_sender_bytes)
print(f"Subscriber: Verification {'OK' if verify_ok else 'FAILED'}")
```
</TabItem>
<TabItem value="dotnet">
Der vollständige Beispielcode kann [im Beispielcoderepository unter `/dotnet/metadata-verifier`](https://git.fitko.de/fit-connect/fit-connect-tools/-/tree/main/dotnet/metadata-verifier)
gefunden werden.
```csharp
using System;
using System.Security.Cryptography;
using System.Reflection;
string hashFromSender = "bf85bd96831e5df2200b76a8c7e3c74044e96bc30d1ffc3d1c4b05d4ee5b258714ab28a4ee12c9eb7f7cec1878d49036f4ccaf809a6c9545707fb1b91f2676ae";
using (Stream? inputData = Assembly.GetExecutingAssembly().GetManifestResourceStream("example.pdf"))
{
if (inputData == null)
{
Console.Error.WriteLine("Error reading file from assembly.");
return;
}
using (var hashFunction = SHA512.Create())
{
byte[] hash = hashFunction.ComputeHash(inputData);
byte[] comparisonHash = Convert.FromHexString(hashFromSender);
Console.Write("Subscriber: Verification ");
if (hash.SequenceEqual(comparisonHash))
{
Console.WriteLine("OK");
}
else
{
Console.WriteLine("FAILED");
}
}
}
```
</TabItem>
</Tabs>
## Validierung des Metadatensatzes ## Validierung des Metadatensatzes
:::caution :::caution
...@@ -11,7 +276,7 @@ Die Dokumentation wird noch um eine Validierung des Metadatenschema anhand eines ...@@ -11,7 +276,7 @@ Die Dokumentation wird noch um eine Validierung des Metadatenschema anhand eines
Im Metadatensatz muss mindestens eine Struktur der übermittelten Inhalte einer Einreichung (Fachdaten, Anlagen) im Feld `contentStructure` angegeben werden. Im Metadatensatz muss mindestens eine Struktur der übermittelten Inhalte einer Einreichung (Fachdaten, Anlagen) im Feld `contentStructure` angegeben werden.
Zusätzlich können noch die Felder `authenticationInformation`, `paymentInformation`, `publicServiceType` und `replyChannel` mit entsprechenden Unterobjekten angegeben werden, um den Weg einer Antwort bzw. die Bezahlinformationen der Einreichung genauer zu definieren. Zusätzlich können noch die Felder `authenticationInformation`, `paymentInformation`, `publicServiceType` und `replyChannel` mit entsprechenden Unterobjekten angegeben werden, um den Weg einer Antwort bzw. die Bezahlinformationen der Einreichung genauer zu definieren.
Die gültigen Formate, die die Felder des Schemas annehmen können, sind im [Metadatenschema selbst](../metadata/schema.mdx) definiert und können mithilfe von Bibliotheken validiert werden. Die gültigen Formate, die die Felder des Schemas annehmen können, sind im [Metadatenschema selbst](../metadata/schema.mdx) definiert und können mithilfe von Bibliotheken validiert werden.
Eine Liste der zur Verfügung stehenden [Schmema-Validatoren](https://json-schema.org/implementations.html#validators) sowie [Code-Generatoren](https://json-schema.org/implementations.html#generators-from-schemas) für verschiedenste Programmiersprachen findet sich auf der offiziellen Seite von JSON-Schema. Eine Liste der zur Verfügung stehenden [Schema-Validatoren](https://json-schema.org/implementations.html#validators) sowie [Code-Generatoren](https://json-schema.org/implementations.html#generators-from-schemas) für verschiedenste Programmiersprachen findet sich auf der offiziellen Seite von JSON-Schema.
## Validierung des Fachdatensatz ## Validierung des Fachdatensatz
...@@ -21,7 +286,7 @@ Danach erfolgt eine Prüfung des Fachdatensatzes: ...@@ -21,7 +286,7 @@ Danach erfolgt eine Prüfung des Fachdatensatzes:
Hierbei kann die [im Metadatensatz enthaltene Fachschemareferenz](../metadata/contentStructure.mdx) genutzt werden, um das zu validierende Schema zu identifizieren, wenn im Zustellpunkt mehrere Schemata für Fachdatensätze unterstützt werden. Hierbei kann die [im Metadatensatz enthaltene Fachschemareferenz](../metadata/contentStructure.mdx) genutzt werden, um das zu validierende Schema zu identifizieren, wenn im Zustellpunkt mehrere Schemata für Fachdatensätze unterstützt werden.
Das Validierungsvorgehen wird im folgenden Anhand von Bespielen für FIM- und XÖV-Fachdatensätzen gezeigt. Das Validierungsvorgehen wird im Folgenden Anhand von Bespielen für FIM- und XÖV-Fachdatensätzen gezeigt.
### Details zur Prüfung eines FIM-Fachdatensatzes (JSON Schema) {#fim-json} ### Details zur Prüfung eines FIM-Fachdatensatzes (JSON Schema) {#fim-json}
......
...@@ -2,57 +2,75 @@ ...@@ -2,57 +2,75 @@
title: Metadatensatz title: Metadatensatz
--- ---
Die Antragsmetadaten beschreiben die Struktur der Einreichung und dessen Inhalte, wie beispielsweise Anhänge oder die Fachdaten. Die Antragsmetadaten beschreiben die Struktur der Einreichung und deren Inhalte, wie Anhänge oder Fachdaten.
Zusätzlich können weitere Informationen über Verwaltungskund:innen hinterlegt werden. Zusätzlich können weitere Informationen über Verwaltungskund:innen hinterlegt werden.
Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/schema.mdx) zu finden. Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/schema.mdx) zu finden.
Im Folgenden wird nun beschrieben, wie für das Versenden einer Einreichung das Schema aufgebaut und befüllt wird. Im Folgenden wird beschrieben, wie für das Versenden einer Einreichung das Schema aufgebaut und befüllt wird.
Das Minimum, was an Information in den Metadaten vorhanden sein muss, ist der Abbschnitt `contentStructure`. Das Minimum, was an Information in den Metadaten vorhanden sein muss, ist der Abschnitt `contentStructure`.
In der Beschreibung der Struktur der Einreichung (`contentStructure`) muss angegeben werden, ob und in welchem Format ein Fachdatensatz mit versendet wird. In diesem muss angegeben werden, ob und in welchem Format ein Fachdatensatz mit versendet wird.
Des Weiteren können Anhänge mit ihren Metainformationen beschrieben werden, die der Einreichung Des Weiteren können Anhänge beschrieben werden, die der Einreichung beigefügt sind.
beigefügt sind.
Sollte ein Rückkanal gewünscht sein oder Bezahlinformationen notwendig sein, können die weiteren Felder, die im Metadatenschema definiert sind, befüllt und mitversendet werden. Sollten weitere Informationen notwendig sein (z.B. Rückkanal, Bezahlinformationen, ...), können weitere
Ob diese jedoch ausgewertet werden oder nicht hängt u. a. von der vom Empfängers unterstützten Version des Metadatenschemas ab. im Metadatenschema definierte Felder befüllt und mitversendet werden.
Ob diese jedoch ausgewertet werden, hängt vom Empfänger bzw. dessen unterstützter Metadatenschemaversion ab.
:::tip Hinweis :::tip Hinweis
Die einzelnen Abschnitte des Metadatensatzes werden im eigenständigen Abschnitt [Metadatensatz](../../metadata/overview.mdx) näher beschrieben. Die einzelnen Abschnitte des Metadatensatzes werden [hier](../../metadata/overview.mdx)
näher beschrieben.
::: :::
Ein Beispiel für das Metadatenschema eines Kindergeldantrags ist unten dargestellt: Hier ein Beispiel für das Metadatenschema eines Kindergeldantrags:
<!-- https://git.fitko.de/fit-connect/metadata-schema/-/blob/main/examples/kindergeld.example.json -->
```json ```json
{ {
"$schema": "https://schema.fitko.de/fit-connect/metadata/1.0.0/metadata.schema.json", "$schema": "https://schema.fitko.de/fit-connect/metadata/1.0.0/metadata.schema.json",
"authenticationInformation": [ "authenticationInformation": [
{ {
"type": "identificationReport", "type": "identificationReport",
"version": "1.0.1",
"content": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBvcnRJRCI6ImJlNGY5ODA2LTBiNWYtNDVjMy1hMDA4LTk2ZmQyNzUwZjhjYiIsInNlcnZlcklkZW50aXR5IjoiaHR0cHM6Ly90ZXN0LmdvdmVybmlrdXMtZWlkLmRlL2dvdl9hdXRlbnQvYXN5bmMiLCJyZXBvcnRUaW1lIjoiMjAyMC0wNi0yNVQxMDoyMDozOSswMjowMCIsImlkZW50aWZpY2F0aW9uRGF0ZSI6IjIwMjAtMDYtMjVUMTA6MTk6NTQrMDI6MDAiLCJpZFN0YXR1cyI6InN1Y2Nlc3MiLCJzdWJqZWN0UmVmIjp7ImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSJ9LCJjb250ZXh0SW5mb3JtYXRpb24iOlsiQW50cmFnIGF1ZiBLaW5kZXJnZWxkOiAwODE1Lzc2Mzc2MyJdLCJpZFN0YXRlbWVudCI6InN1Y2Nlc3NmdWwgaWRlbnRpZmljYXRpb24gc2VudCBieSBTQU1MLUFzc2VydGlvbiIsImRvY3VtZW50UmVmZXJlbmNlcyI6W3siZG9jdW1lbnROYW1lIjoidGVzdC5wZGYiLCJoYXNoQWxnbyI6IlNIQS0yNTYiLCJkaWdlc3QiOiIwYzI3MjA2MzFiOTI3ZTI1ZDVjYjhiNWNhMmI5NDA4YzU1MmVhNzY3OTdlMzQxOTI0NTkzMTI5NjczMmZkMGQyIn1dLCJsb2FTZW50IjoiaHR0cDovL2VpZGFzLmV1cm9wYS5ldS9Mb0EvbG93In0.t4meB51GeSPSSlQ_tvamSE9FmMD5O9HBJw0oo6iTaSjEsq4rLJ27uqcEp9l4VBleH5JW7p-Tu0qf0DuySdznTxj7iSbl43h0geLMzy2NgwMlBhu4U1-sorlqAsxRjIFDvY2z-RD1D1kqqVTtf2FJWQ5tOJ70hHEiZOtVYNjKdn_tZe2nD54KbzujIg4jW36P17wivZ6vCjagk6VjJk4LWhCO-T5L13RXR5jgq14TMCu5DFhdPA8b7v4iShD5j12Z3WBCqRCb2UWCoLtHs7nPDQ8facxymFMDGm8RQineU18OtgTClkmq4JyifNRWN6jYlPMmvQN499wfkf7VlJ8_OQ" "content": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBvcnRJRCI6ImJlNGY5ODA2LTBiNWYtNDVjMy1hMDA4LTk2ZmQyNzUwZjhjYiIsInNlcnZlcklkZW50aXR5IjoiaHR0cHM6Ly90ZXN0LmdvdmVybmlrdXMtZWlkLmRlL2dvdl9hdXRlbnQvYXN5bmMiLCJyZXBvcnRUaW1lIjoiMjAyMC0wNi0yNVQxMDoyMDozOSswMjowMCIsImlkZW50aWZpY2F0aW9uRGF0ZSI6IjIwMjAtMDYtMjVUMTA6MTk6NTQrMDI6MDAiLCJpZFN0YXR1cyI6InN1Y2Nlc3MiLCJzdWJqZWN0UmVmIjp7ImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSJ9LCJjb250ZXh0SW5mb3JtYXRpb24iOlsiQW50cmFnIGF1ZiBLaW5kZXJnZWxkOiAwODE1Lzc2Mzc2MyJdLCJpZFN0YXRlbWVudCI6InN1Y2Nlc3NmdWwgaWRlbnRpZmljYXRpb24gc2VudCBieSBTQU1MLUFzc2VydGlvbiIsImRvY3VtZW50UmVmZXJlbmNlcyI6W3siZG9jdW1lbnROYW1lIjoidGVzdC5wZGYiLCJoYXNoQWxnbyI6IlNIQS0yNTYiLCJkaWdlc3QiOiIwYzI3MjA2MzFiOTI3ZTI1ZDVjYjhiNWNhMmI5NDA4YzU1MmVhNzY3OTdlMzQxOTI0NTkzMTI5NjczMmZkMGQyIn1dLCJsb2FTZW50IjoiaHR0cDovL2VpZGFzLmV1cm9wYS5ldS9Mb0EvbG93In0.t4meB51GeSPSSlQ_tvamSE9FmMD5O9HBJw0oo6iTaSjEsq4rLJ27uqcEp9l4VBleH5JW7p-Tu0qf0DuySdznTxj7iSbl43h0geLMzy2NgwMlBhu4U1-sorlqAsxRjIFDvY2z-RD1D1kqqVTtf2FJWQ5tOJ70hHEiZOtVYNjKdn_tZe2nD54KbzujIg4jW36P17wivZ6vCjagk6VjJk4LWhCO-T5L13RXR5jgq14TMCu5DFhdPA8b7v4iShD5j12Z3WBCqRCb2UWCoLtHs7nPDQ8facxymFMDGm8RQineU18OtgTClkmq4JyifNRWN6jYlPMmvQN499wfkf7VlJ8_OQ"
}, },
{ {
"type": "identificationReport", "type": "identificationReport",
"version": "1.0.1",
"content": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBvcnRJRCI6ImJlNGY5ODA2LTBiNWYtNDVjMy1hMDA4LTk2ZmQyNzUwZjhjYiIsInNlcnZlcklkZW50aXR5IjoiaHR0cHM6Ly90ZXN0LmdvdmVybmlrdXMtZWlkLmRlL2dvdl9hdXRlbnQvYXN5bmMiLCJyZXBvcnRUaW1lIjoiMjAyMC0wNi0yNVQxMDoyMDozOSswMjowMCIsImlkZW50aWZpY2F0aW9uRGF0ZSI6IjIwMjAtMDYtMjVUMTA6MTk6NTQrMDI6MDAiLCJpZFN0YXR1cyI6InN1Y2Nlc3MiLCJzdWJqZWN0UmVmIjp7ImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSJ9LCJjb250ZXh0SW5mb3JtYXRpb24iOlsiQW50cmFnIGF1ZiBLaW5kZXJnZWxkOiAwODE1Lzc2Mzc2MyJdLCJpZFN0YXRlbWVudCI6InN1Y2Nlc3NmdWwgaWRlbnRpZmljYXRpb24gc2VudCBieSBTQU1MLUFzc2VydGlvbiIsImRvY3VtZW50UmVmZXJlbmNlcyI6W3siZG9jdW1lbnROYW1lIjoidGVzdC5wZGYiLCJoYXNoQWxnbyI6IlNIQS0yNTYiLCJkaWdlc3QiOiIwYzI3MjA2MzFiOTI3ZTI1ZDVjYjhiNWNhMmI5NDA4YzU1MmVhNzY3OTdlMzQxOTI0NTkzMTI5NjczMmZkMGQyIn1dLCJsb2FTZW50IjoiaHR0cDovL2VpZGFzLmV1cm9wYS5ldS9Mb0EvbG93In0.t4meB51GeSPSSlQ_tvamSE9FmMD5O9HBJw0oo6iTaSjEsq4rLJ27uqcEp9l4VBleH5JW7p-Tu0qf0DuySdznTxj7iSbl43h0geLMzy2NgwMlBhu4U1-sorlqAsxRjIFDvY2z-RD1D1kqqVTtf2FJWQ5tOJ70hHEiZOtVYNjKdn_tZe2nD54KbzujIg4jW36P17wivZ6vCjagk6VjJk4LWhCO-T5L13RXR5jgq14TMCu5DFhdPA8b7v4iShD5j12Z3WBCqRCb2UWCoLtHs7nPDQ8facxymFMDGm8RQineU18OtgTClkmq4JyifNRWN6jYlPMmvQN499wfkf7VlJ8_OQ" "content": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXBvcnRJRCI6ImJlNGY5ODA2LTBiNWYtNDVjMy1hMDA4LTk2ZmQyNzUwZjhjYiIsInNlcnZlcklkZW50aXR5IjoiaHR0cHM6Ly90ZXN0LmdvdmVybmlrdXMtZWlkLmRlL2dvdl9hdXRlbnQvYXN5bmMiLCJyZXBvcnRUaW1lIjoiMjAyMC0wNi0yNVQxMDoyMDozOSswMjowMCIsImlkZW50aWZpY2F0aW9uRGF0ZSI6IjIwMjAtMDYtMjVUMTA6MTk6NTQrMDI6MDAiLCJpZFN0YXR1cyI6InN1Y2Nlc3MiLCJzdWJqZWN0UmVmIjp7ImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSJ9LCJjb250ZXh0SW5mb3JtYXRpb24iOlsiQW50cmFnIGF1ZiBLaW5kZXJnZWxkOiAwODE1Lzc2Mzc2MyJdLCJpZFN0YXRlbWVudCI6InN1Y2Nlc3NmdWwgaWRlbnRpZmljYXRpb24gc2VudCBieSBTQU1MLUFzc2VydGlvbiIsImRvY3VtZW50UmVmZXJlbmNlcyI6W3siZG9jdW1lbnROYW1lIjoidGVzdC5wZGYiLCJoYXNoQWxnbyI6IlNIQS0yNTYiLCJkaWdlc3QiOiIwYzI3MjA2MzFiOTI3ZTI1ZDVjYjhiNWNhMmI5NDA4YzU1MmVhNzY3OTdlMzQxOTI0NTkzMTI5NjczMmZkMGQyIn1dLCJsb2FTZW50IjoiaHR0cDovL2VpZGFzLmV1cm9wYS5ldS9Mb0EvbG93In0.t4meB51GeSPSSlQ_tvamSE9FmMD5O9HBJw0oo6iTaSjEsq4rLJ27uqcEp9l4VBleH5JW7p-Tu0qf0DuySdznTxj7iSbl43h0geLMzy2NgwMlBhu4U1-sorlqAsxRjIFDvY2z-RD1D1kqqVTtf2FJWQ5tOJ70hHEiZOtVYNjKdn_tZe2nD54KbzujIg4jW36P17wivZ6vCjagk6VjJk4LWhCO-T5L13RXR5jgq14TMCu5DFhdPA8b7v4iShD5j12Z3WBCqRCb2UWCoLtHs7nPDQ8facxymFMDGm8RQineU18OtgTClkmq4JyifNRWN6jYlPMmvQN499wfkf7VlJ8_OQ"
} }
], ],
"contentStructure": { "contentStructure": {
"data": { "data": {
"submissionSchema": { "submissionSchema": {
"schemaUri": "https://schema.fitko.de/fim/S00000092_1.0.schema.json", "schemaUri": "urn:de:fim:leika:leistung:a38",
"mimeType": "application/json" "mimeType": "application/json"
},
"hash": {
"type": "sha512",
"content": "db6e06452fd56c06e3b98b2af69393b7619672868f38ec4a185cc2b440d7e2b536858209f79253f2802a5899e49aee80a2a405b77e02de25dd08a837fe901d72"
} }
}, },
"attachments": [ "attachments": [
{ {
"attachmentId": "8a603c7a-ce54-45d1-90a7-bbeae09c5e50", "attachmentId": "8a603c7a-ce54-45d1-90a7-bbeae09c5e50",
"purpose": "form", "purpose": "form",
"mimeType": "application/pdf" "mimeType": "application/pdf",
"hash": {
"type": "sha512",
"content": "c02b84b1cde00211f61d484cfc69feaf7f51878aa75c59e6948093942ea5164026ed4daadc5c2c57a15acbda9e09ec51690f80f5b2152d1c0e4ca37cd53a023a"
}
}, },
{ {
"attachmentId": "706f5a33-c019-4062-bd21-23b3e72a4d09", "attachmentId": "706f5a33-c019-4062-bd21-23b3e72a4d09",
"purpose": "attachment", "purpose": "attachment",
"mimeType": "application/pdf", "mimeType": "application/pdf",
"filename": "Kopie Personalausweis Ezb 1", "filename": "Kopie Personalausweis Ezb 1",
"hash": {
"type": "sha512",
"content": "8a6fa8ea7674be23b7c6ccad9dda0b7a5e974e4eb7d657ea1a23df006823b9e7bbec604aba7ba64fa45c6dea4a3da37e445dcb4228c4e52db025d2e040c6b5d7"
},
"signature": { "signature": {
"type": "cms" "signatureFormat": "cms",
"detachedSignature": false
} }
}, },
{ {
...@@ -60,7 +78,11 @@ Ein Beispiel für das Metadatenschema eines Kindergeldantrags ist unten dargeste ...@@ -60,7 +78,11 @@ Ein Beispiel für das Metadatenschema eines Kindergeldantrags ist unten dargeste
"purpose": "attachment", "purpose": "attachment",
"mimeType": "application/pdf", "mimeType": "application/pdf",
"description": "Eine Kopie eines Personalausweises, Vorder- und Rückseite.", "description": "Eine Kopie eines Personalausweises, Vorder- und Rückseite.",
"filename": "Personalausweis Ezb 2" "filename": "Personalausweis Ezb 2",
"hash": {
"type": "sha512",
"content": "4feebc7e0c5017d1e3d4a6f69589f8925c484b3e19ba981d669ec3f3be0e3166e19a4e74934c94b58e4e0170ae6d729e66bd53a2329953bf4f70dd810004a2ac"
}
} }
] ]
}, },
......
...@@ -3,14 +3,19 @@ ...@@ -3,14 +3,19 @@
Im Objekt der Inhaltsstruktur werden alle zusätzlichen Inhalte, die zu der Einreichung gehören, wie Anlagen oder Im Objekt der Inhaltsstruktur werden alle zusätzlichen Inhalte, die zu der Einreichung gehören, wie Anlagen oder
Fachdaten, beschrieben. Fachdaten, beschrieben.
<!-- https://git.fitko.de/fit-connect/metadata-schema/-/blob/main/examples/schwerbehindertenausweis.example.json -->
```json ```json
{ {
..., ...,
"contentStructure": { "contentStructure": {
"data": { "data": {
"schema": { "submissionSchema": {
"schemaUri": "https://schema.fitko.de/fim/s00000143_1.0.schema.json", "schemaUri": "urn:de:fim:leika:leistung:99015004037000",
"mimeType": "application/json" "mimeType": "application/json"
},
"hash": {
"type": "sha512",
"content": "145d2d45b6e3ad0db6b8a7ebfc302928adbb87dcbed650970c2a639feb66f09b2d8d43c966b854788c2a83b653fe9d17a23daa4b2a20d1098ba766a8f0c1dc3a"
} }
}, },
"attachments": [ "attachments": [
...@@ -19,14 +24,22 @@ Fachdaten, beschrieben. ...@@ -19,14 +24,22 @@ Fachdaten, beschrieben.
"purpose": "attachment", "purpose": "attachment",
"attachmentId": "82050376-a506-4d25-8fad-ebfbb74e2f10", "attachmentId": "82050376-a506-4d25-8fad-ebfbb74e2f10",
"description": "Passbild (F99000582)", "description": "Passbild (F99000582)",
"mimeType": "image/jpeg" "mimeType": "image/jpeg",
"hash": {
"type": "sha512",
"content": "49487dba4fd7aae515894b5b687110cdcd547d3aa845c2f1b6fed1557608ecc9f6e582fccfafa70354283eaf66386b463976eaa979be400811b1022b7f1f2f72"
}
}, },
{ {
"filename": "file_403672D5970CD33C9E0AE12D2B38FE07393.png", "filename": "file_403672D5970CD33C9E0AE12D2B38FE07393.png",
"purpose": "attachment", "purpose": "attachment",
"attachmentId": "45413e64-6635-4836-a46f-162e5abe6731", "attachmentId": "45413e64-6635-4836-a46f-162e5abe6731",
"description": "Nachweis über vorherige Antragsstellungen bei Berufsgenossenschaften oder Behörden (G03000159.G03000161.G03000158.F99000393)", "description": "Nachweis über vorherige Antragsstellungen bei Berufsgenossenschaften oder Behörden (G03000159.G03000161.G03000158.F99000393)",
"mimeType": "image/png" "mimeType": "image/png",
"hash": {
"type": "sha512",
"content": "4c788237b3efe1807ac0a9ab159be4f2c544040e1c0e8ca9aa0e20206405d146a5fe3382c6ee08225101f7aa7e69f846d83d0b1baaa700f0c2c5db12bc5fb3fc"
}
}, },
{ {
"filename": "file_846E243838246ADCD66E4372EE60616D374.pdf", "filename": "file_846E243838246ADCD66E4372EE60616D374.pdf",
...@@ -34,8 +47,13 @@ Fachdaten, beschrieben. ...@@ -34,8 +47,13 @@ Fachdaten, beschrieben.
"attachmentId": "36a6f99b-b251-40b3-b20f-d32af8108351", "attachmentId": "36a6f99b-b251-40b3-b20f-d32af8108351",
"description": "Nachweis/Kopie Unterschriebene Schweigepflichtsentbindung (G03000221.G99000373.F99000374)", "description": "Nachweis/Kopie Unterschriebene Schweigepflichtsentbindung (G03000221.G99000373.F99000374)",
"mimeType": "application/pdf", "mimeType": "application/pdf",
"hash": {
"type": "sha512",
"content": "8ea2decd812f253936370129afcf57443bd4b1aa30ff0e14115dc522b1bd551ba386c35c66bd5814f0dd5dbec2fcf55b026759a585c38cfc06777ad7ef26ce65"
},
"signature": { "signature": {
"type": "pdf" "signatureFormat": "pdf",
"detachedSignature": false
} }
}, },
{ {
...@@ -44,8 +62,13 @@ Fachdaten, beschrieben. ...@@ -44,8 +62,13 @@ Fachdaten, beschrieben.
"attachmentId": "653dc130-305d-49a7-983f-c757e37f820a", "attachmentId": "653dc130-305d-49a7-983f-c757e37f820a",
"description": "Antragsformular", "description": "Antragsformular",
"mimeType": "application/pdf", "mimeType": "application/pdf",
"hash": {
"type": "sha512",
"content": "c63e3ac35f6b8c2ca019b9f1bc95b0a9f9e4b11a5adcf4c772b3f02213acac0953318af1a18f7fa6865e0cf5645d0d4b5756bf14c471f7dd1e58ee404069d611"
},
"signature": { "signature": {
"type": "pdf-detached", "signatureFormat": "pdf",
"detachedSignature": true,
"content": "TG9yZW1JcHN1bVNpbmVEb2xvckFtZXRIaXBzZXIgU2F5IFdPT1AgQk9PUGJpQmFtCg==" "content": "TG9yZW1JcHN1bVNpbmVEb2xvckFtZXRIaXBzZXIgU2F5IFdPT1AgQk9PUGJpQmFtCg=="
} }
}, },
...@@ -54,7 +77,11 @@ Fachdaten, beschrieben. ...@@ -54,7 +77,11 @@ Fachdaten, beschrieben.
"purpose": "report", "purpose": "report",
"attachmentId": "383cc3e6-9c9b-41fb-a8e7-57160197ac3d", "attachmentId": "383cc3e6-9c9b-41fb-a8e7-57160197ac3d",
"description": "Deckblatt mit Antrags-Metadaten", "description": "Deckblatt mit Antrags-Metadaten",
"mimeType": "application/pdf" "mimeType": "application/pdf",
"hash": {
"type": "sha512",
"content": "d2719532bc4e0f57e23df9564816995c3e0a1c106371d4d02edcd10ea111e812b2042099e4d8ac447d68f626c4279601992efc9a7876e6882401d1df5ce9952d"
}
} }
] ]
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment