Abkündigung zum 31.12.2022
Ab dem 31.12.2022 wird es keinen Support mehr für den DEMIS-Adapter geben. Eine einwandfreie Funktionsweise über diesen Zeitpunkt hinaus kann nicht garantiert werden.
Der DEMIS-Adapter stellte eine Übergangslösung dar. Softwarehersteller sind daher angehalten, direkt die FHIR Schnittstelle von DEMIS verwenden. Zur Integration in die Laborsoftware stellen wir auf Anfrage gern die Sourcen des DEMIS-Adapters zur Verfügung.
Abkündigung von Adapterversionen kleiner 2.x zum 01.04.2023
Adapterversionen kleiner 2.x werden ab dem 01.04.2023 nicht mehr unterstützt werden.
Wir empfehlen Ihnen, zeitnah auf die Nutzung der FHIR-Schnittstelle umzustellen.
Wenn Sie dies derzeit nicht realisieren können, möchten wir Sie bitten zumindest die neueste Version des DEMIS-Adapters (ab Version 2.0.1) zu implementieren. Da es ab dem 31.12.2022 keinen Support mehr für den DEMIS-Adapter (alte und neue Version) geben wird, kann nur bis Jahresende eine entsprechende Unterstützung bei der Umstellung auf die neuste Adapterversion gewährleistet werden. Wir empfehlen Ihnen daher unbedingt noch in diesem Jahr die Umstellung auf die neueste Version vorzunehmen. Bitte wenden Sie sich bei Fragen zur technischen Umsetzung direkt an die gematik: demis@gematik.de
Unterseiten:
- Systemanforderungen des DEMIS-Adapter
- LDTv2 als Inputformat
- JSON als Inputformat
- Mapping Labor JSON/LDT -> FHIR
Inhaltsverzeichnis:
Erregernachweise mithilfe des DEMIS Adapters melden: https://www.youtube.com/watch?v=xpYgVTCisD4
- Systemanforderungen des DEMIS-Adapter
- LDTv2 als Inputformat
- JSON als Inputformat
- Mapping Labor JSON/LDT -> FHIR
Der Demis-Adapter besteht aus zwei Teilkomponenten:
demis-adapter - parst JSON/LDTv2-Dateien und generiert Logdateien in entsprechenden Verzeichnissen
demis-adapter-api - parst Laborkonfigurationsdateien, bildet die HL7 FHIR Nachrichten, ruft den Identity Provider für Tokengenerierung und die Notification-API für die Nachrichtenmeldung auf
Die beiden Teilkomponenten werden in einer JAR Datei mit dem Namen demis-adapter-{VERSION}.jar verpackt.
1. Starten des DEMIS-Adapters
Der Aufruf des DEMIS-Adapters erfolgt über das jeweilige Startskript (start.sh im Ordner linux bzw. start.cmd im Ordner windows).
1.2 Starten für einmalige Ausführung: -runOnlyOnce
Im Startskript kann zusätzlich zu den bereits angegebenen Pflichtparametern beim Start (-apiConf=... -conf=...
) ein weiterer, optionaler Parameter angegeben werden, -runOnlyOnce
. In diesem Fall liest der Adapter das Queue- und Input-Verzeichnis beim Start genau einmal ein und beendet sich, sobald die Verarbeitung der gefundenen Dateien abgeschlossen und die Informationen an das Backend weitergegeben wurden. Falls das Backend sich im Wartungsmodus befindet, wartet der Adapter und beendet sich erst dann, sobald das Backend wieder verfügbar und die Verarbeitung aller Dateien abgeschlossen ist.
2. Loggen und Ablauf
Nach dem Start wird eine Logdatei im Hintergrund gebaut. Die Logdatei logFile.log
wird in dem Verzeichnis abgelegt, in dem auch das Startkommando ausgeführt wurde.
Zuerst werden die Konfigurationsdateien verarbeitet. Wenn ein Konfigurationsfehler entsteht, wird der Demis-Adapter die Fehler in die Logdatei logFile.log
schreiben und sich beenden.
Nach erfolgreicher Konfiguration, werden die JSON/LDTv2-Dateien in den Verzeichnissen für die vorverarbeiteten Dateien (siehe unten in Konfigurationparameter queued.lab.results.folder) und für die neu hinzugefügten Dateien (siehe unten in Konfigurationparameter queued.lab.results.folder) vom Demis-Adapter verarbeitet. Im Debug-Modus kann man in der Logdatei zuerst die Mitteilung “checking folder queued.lab.results.folder“
und danach die Mitteilung “starting loop for checking folder incoming.lab.results.folder”
sehen.
Jede 2 Sekunden wird der incoming.lab.results.folder auf neu vorliegende Dateien überprüft. Die neuen Dateien werden vorverarbeitet und in dem queued.lab.results.folder verschoben, womit sie für die Weiterverarbeitung vorgesehen sind. Wenn während des Parsens ein Fehler entsteht (z.B. ein LDT2 joker Feld fehlt oder der Wert von Feld 8300/8320 passt nicht zu einem Laborkonfigurationparameter indentifikator), wird der Fehler in eine separate Logdatei gespeichert und zusammen mit der Datei im Verzeichnis error.lab.results.folder abgelegt.
Für jede Erregernachweismeldung wird der Identity Provider zur Tokengenerierung aufgerufen. Der Token wird mit der Erregernachweismeldung an die Notification-API gesendet und dient der Authentifizierung.
Wenn beide Dienste mit 200 OK antworten, wird die Quittung in einer separaten Logdatei zusammen mit der JSON/LDTv2-Datei in dem konfigurierten submitted.lab.results.folder Verzeichnis gespeichert.
Wenn einer der beiden Dienste mit HTTP 503 antwortet, ist dies das Zeichen für serverseitige Wartungsarbeiten. Der DEMIS-Adapter geht dann in eine Ruhephase (keine Dateien werden verarbeitet), deren Dauer durch maintenance.waitnbminutes konfiguriert werden kann.
Wenn einer der Dienste mit einem anderen Code antwortet, wird ein entsprechender Fehler in einer separaten Logdatei gespeichert und zusammen mit der JSON/LDTv2-Datei im Verzeichnis error.lab.results.folder abgelegt.
Bekannte Fehler:
Internetverbindungsprobleme erkennen - behoben in Version 1.6.2
Internetverbindungsprobleme werden in dieser Version nicht erkannt und die gesendete LDTv2-Datei wird deshalb nach error.lab.results.folder verschoben. Seit Version 1.6.2 werden Internetverbindungsprobleme erkannt und nach einer Ruhephase ein erneutes Versenden der Nachrichten versucht, genauso wie beim Erkennen des Maintenance State.
2. Falsch konfigurierte URLs erkennen - wurde behoben in Version 1.0.1
Im Fall eines falsch konfigurierten Identity Provider- oder Notification-API URL Konfigurationsparameters, wird der entsprechende Dienst (Identity Provider oder Notification-API) mit 404 Not Found antworten. Momentan werden 4xx Antworten als Reaktion auf falschen LDTv2-Datei Inhalt betrachtet und die betroffenen Dateien nach error.lab.results.folder verschoben. Seit Version 1.0.1 wird einfach die LDTv2-Dateien Verarbeitung abgebrochen und den Fehler in der entsprechenden URL geloggt.
3. Konfiguration
Die Software-Komponente demis-adapter erhält zum Starten zwei Konfigurationsdateien demis-adapter-api.properties sowie app.properties über das folgende Kommando:
„java -jar {PFAD}/demis-adapter-{VERSION}.jar -apiConf={PFAD}/demis-adapter-api.properties -conf={PFAD}/app.properties“
Für die Konfiguration, die im Folgenden beschrieben wird, kann auch diese Benutzeroberfläche verwendet werden. Alternativ Download und Sourcecode im GitHub
Weitere Informationen finden Sie hier: DEMIS Adapter Konfigurationsoberfläche
3.1. Konfigurationsdatei demis-adapter-api.properties
3.1.1. Erläuterungen zu den Konfigurationsparametern
Folgende Konfigurationsparameter in der Datei demis-adapter-api.properties sind anzugeben:
Sie müssen hier keine Konfigurationsparameter anpassen, wenn Sie den Adapter in der ausgelieferten Form nutzen.
Parameter | Beschreibung |
---|---|
debuginfo.enabled | Schalter, ob Debug-Informationen ausgegeben werden sollen |
fhir.basepath | URL der Serverkomponente DEMIS Notification-API (bitte nicht verändern) Hinweis: Zur Nutzung der Testumgebung müssen Sie diesen Parameter anpassen Informationen zur DEMIS-Livetestumgebung |
idp.lab.tokenendpoint | URL der Serverkomponente DEMIS Identity Provider (bitte nicht verändern) Hinweis: Zur Nutzung der Testumgebung müssen Sie diesen Parameter anpassen Informationen zur DEMIS-Livetestumgebung |
idp.lab.clientid | HTTP Client-Identität, welche dem DEMIS Identity Provider bekannt ist (bitte nicht verändern) |
idp.lab.secret | HTTP Client-Geheimnis, welches dem DEMIS Identity Provider bekannt ist (bitte nicht verändern) |
idp.lab.proxy | optional für individuelle Proxy/Firewall-Einstellungen (deprecated, veraltet) |
idp.lab.proxy.host | ab DEMIS-Adapter V1.6.3 (Parameter idp.lab.proxy darf dann nicht genutzt werden) Host für Proxy Einstellungen (optional) |
idp.lab.proxy.port | ab DEMIS-Adapter V1.6.3 (Parameter idp.lab.proxy darf dann nicht genutzt werden) Port für Proxy Einstellungen (optional) |
idp.lab.proxy.username | ab DEMIS-Adapter V1.6.3 (Parameter idp.lab.proxy darf dann nicht genutzt werden) Username für Proxy Einstellungen (optional) |
idp.lab.proxy.password | ab DEMIS-Adapter V1.6.3 (Parameter idp.lab.proxy darf dann nicht genutzt werden) Passwort für Proxy Einstellungen (optional) |
idp.lab.truststore | Vorkonfigurierter nginx Truststore für eine gesicherte Vertrauensbasis zu demis.rki.de (bitte nicht verändern) |
idp.lab.truststorepassword | Vorkonfiguriertes Passwort für den nginx Truststore (bitte nicht verändern) |
labor.configfile | Kommaseparierter Pfad zu ein oder mehreren Laborkonfigurationen (Namen beliebig vergebbar), Vorkonfiguriert ist hier die labor1.json im config Ordner |
3.1.2. Beispiel demis-adapter-api.properties
debuginfo.enabled=true fhir.basepath=https://demis.rki.de/notification-api/fhir/ idp.lab.tokenendpoint=https://demis.rki.de/auth/realms/LAB/protocol/openid-connect/token idp.lab.clientid=demis-adapter idp.lab.secret=secret_client_secret # Optional Proxy: use idp.lab.proxy (deprecated) OR idp.lab.proxy.host, idp.lab.proxy.port, idp.lab.proxy.username (optional), idp.lab.proxy.password (optional) #idp.lab.proxy=192.168.0.1:1234 # OR #idp.lab.proxy.host=192.168.0.1 #idp.lab.proxy.port=1234 #idp.lab.proxy.username=proxyUser #idp.lab.proxy.password=proxyPassword # mtls idp.lab.truststore=../config/nginx.truststore idp.lab.truststorepassword=secret # comma separated file locations for lab configuration (e.g. laborConfigs/labor1.json,laborConfigs/labor2.json) labor.configfile=../config/labor1.json
3.2. Konfigurationsdatei app.properties
3.2.1 Erläuterungen zu den Konfigurationsparametern
Folgende Konfigurationsparameter in der Datei app.properties sind anzugeben:
Sie müssen hier keine Konfigurationsparameter anpassen, wenn Sie den Adapter in der ausgelieferten Form nutzen.
Parameter | Beschreibung |
---|---|
debuginfo.enabled | Schalter, ob Debug-Informationen ausgegeben werden sollen |
incoming.lab.results.folder | Pfad zum Übergabeverzeichnis für JSON/LDTv2-Dateien, Unterordner werden nicht gesucht. Der Prozessbenutzer muss ein Leserecht in dem Ordner haben. Vorkonfiguriert ist hier der /data/input Ordner. |
submitted.lab.results.folder | Pfad für erfolgreich verarbeitete JSON/LDTv2-Dateien. Der Prozessbenutzer muss ein Leserecht und Schreiben (Modifizieren) in dem Ordner haben. Vorkonfiguriert ist hier der /data/done Ordner. |
error.lab.results.folder | Pfad für fehlerhaft verarbeitete JSON/LDTv2-Dateien. Der Prozessbenutzer muss ein Leserecht und Schreiben (Modifizieren) in dem Ordner haben. Vorkonfiguriert ist hier der /data/error Ordner. |
queued.lab.results.folder | Pfad für die JSON/LDTv2-Dateien, die in dem ersten oder einem erneuten Zustellungsversuch unterliegen. Die Dateien werden hier während der Vorbearbeitungsphase hin verschoben , sodass eine Differenzierung gegenüber neu angekommene Dateien entsteht. Der Prozessbenutzer muss ein Leserecht und Schreiben (Modifizieren) in dem Ordner haben. Vorkonfiguriert ist hier der /data/queue Ordner. |
labor.ldt.valid9901 | Liste der unterstützten DEMIS Joker in einer JSON/LDTv2-Datei (bitte nicht verändern) |
sendretry.nbseconds | Sekunden zwischen zwei Versuchen, die Meldung an DEMIS zu übermitteln |
sendretry.nbattempts | Maximale Anzahl der Versuche, bevor die Datei in den Ordner für fehlerhafte Verarbeitung verschoben wird. |
sendretry.nbthreads | Anzahl gleichzeitiger Übertragungen der erneuten Zustellungsversuche. |
maintenance.waitnbminutes | Anzahl Minuten bevor ein neuer Versuch gestartet wird, die JSON/LDTv2-Datei zu verarbeiten, wenn Demis sich im Wartungsmodus befindet ist (angekündigte Wartungsfenster). |
labor.ldt.geburtsdatum.format | Format des BetroffenePerson Geburtsdatum. Vorkonfiguriert mit der Wert yyyyMMdd. |
quittung.lab.results.folder | Ziel-Verzeichnis, in dem PDF-Quittungen nach dem Senden an das Backend abgelegt werden |
3.2.2. Beispiel app.properties
debuginfo.enabled=true # input/output folders for LDTv2 files incoming.lab.results.folder=../data/input submitted.lab.results.folder=../data/done error.lab.results.folder=../data/error queued.lab.results.folder=../data/queue # valid DEMIS jokers in LDTv2 files labor.ldt.valid9901=demis_einsender_ansprechpartner,demis_einsender_telefon,demis_einsender_fax,demis_einsender_email,demis_test_code,demis_betroffeneperson_strasse,demis_betroffeneperson_hausnummer,demis_betroffeneperson_plz,demis_betroffeneperson_ort,demis_betroffeneperson_laendercode,demis_betroffeneperson_telefon # retry configuration sendretry.nbseconds=60 sendretry.nbattempts=10 sendretry.nbthreads=10 #maintenance mode - Processing will be stopped for a configurable time span when server responds with 503 maintenance.waitnbminutes=30 #target directory for PDF receipts quittung.lab.results.folder=C:\\quittungen\\pdf
3.3. Laborkonfigurationsdatei
3.3.1. Erläuterungen zu den Konfigurationsparametern
Parameter | Beschreibung |
---|---|
identifikator | Entspricht den angegebenen Feldern 8300/8320 in der JSON/LDTv2-Datei. Wird für die Zuordnung zu einer Labor Konfiguration benutzt, da mehrere Labor Konfigurationen unterstützt werden. |
positiveTestergebnisBezeichnungen | Liste möglicher Bezeichner für positive SARS-CoV-2 Erregernachweistests gemäß des Felds 8480. (Es dürfen keine Negativtests über DEMIS gemeldet werden!) |
positiveSarsCov2DiagnoseBezeichnungen |
Standardwerte: "Severe-Acute-Respiratory-Syndrome-Coronavirus-2 (SARS-CoV-2)", "Severe-Acute-Respiratory-Syndrome-Coronavirus-2", "SARS-CoV-2" |
melderPerson/nachname | Nachname des Leiters der entsprechenden Einrichtung |
melderPerson/vorname | Vorname des Leiters der entsprechenden Einrichtung |
melderPerson/anschriftenzeile | Anschriftenzeile zur Adresse des Leiters der entsprechenden Einrichtung |
melderPerson/postleitzahl | Postleitzahl zur Adresse des Leiters der entsprechenden Einrichtung |
melderPerson/stadt | Stadt zur Adresse des Leiters der entsprechenden Einrichtung |
melderPerson/telefonnummer | Telefonnummer/Kontaktdaten des Leiters der entsprechenden Einrichtung |
melderPerson/erreichbarkeit | Hinweistext zur Erreichbarkeit des Leiters der entsprechenden Einrichtung |
melderEinrichtung/demisLabId | DEMIS-Labornummer, die dem Melder bei der Anmeldung an DEMIS zugewiesen wird. Es handelt sich um eine eindeutige 5-stellige Nummer im NamingSystem https://demis.rki.de/fhir/NamingSystem/DemisLaboratoryId. |
melderEinrichtung/BSNR | |
melderEinrichtung/name | Wenn das Feld 8320 in einer JSON/LDTv2-Datei angeben wird, erfolgt mit diesem Namen die Zuordnung zu dieser Konfiguration. |
melderEinrichtung/einrichtungsArt | Für Labore ein fester Wert (hier laboratory) (bitte nicht verändern) |
melderEinrichtung/ansprechspartnerNachname | Nachname des Ansprechpartners |
melderEinrichtung/ansprechspartnerVorname | Vorname des Ansprechpartners |
melderEinrichtung/postleitzahl | PLZ/Kontaktdaten der meldenden Einrichtung |
melderEinrichtung/stadt | Stadt/Kontaktdaten der meldenden Einrichtung |
melderEinrichtung/telefonnummer | Telefonnummer/Kontaktdaten der meldenden Einrichtung |
melderEinrichtung/faxnummer | Faxnummer/Kontaktdaten der meldenden Einrichtung |
melderEinrichtung/email | Email-Adresse/Kontaktdaten der meldenden Einrichtung |
melderEinrichtung/website | Webseite/Kontaktdaten der meldenden Einrichtung |
idp/username | Credential für die Anmeldung am DEMIS Identity Provider entspricht Ihrer individuellen DEMIS-Laborkennung ohne das Präfix “DEMIS-”, also z.B. “12345” (s. Kapitel 3.3.2 Zertifikate) |
idp/authcertkeystore | Pfad zum Java Keystore, welcher das Client-Zertifikat für die Anmeldung am DEMIS Identity Provider beinhaltet entspricht Ihrer p12-Datei bzw. dem jks-Keystore (s. Kapitel 3.3.2 Zertifikate) |
idp/authcertpassword | Passwort zum Öffnen des Java Keystore ‚authcertkeystore‘ entspricht dem SMS-Passwort bzw. einem neu vergebenen Passwort (s. Kapitel 3.3.2 Zertifikate) |
idp/authcertalias | Alias des Client-Zertifikats im Java Keystore ‚authcertkeystore‘ entspricht Ihrer individuellen DEMIS-Laborkennung in Kleinschreibung, also z.B. “demis-12345“ (s. Kapitel 3.3.2 Zertifikate) |
Die voranstehenden Angaben gehen in die Erregernachweismeldung ein.
3.3.2 Zertifikate
Der Zugriff auf DEMIS erfolgt mit einem Labor-individuellen Zertifikat, welches durch das Robert-Koch-Institut (RKI) als p12-Datei bereitgestellt wird.
Mit der Demis-Adapter Version 1.1.0 und höheren Versionen ist es möglich, die bereitgestellte p12-Datei direkt zu nutzen und die Umwandlung in einen jks-Keystore muss nicht mehr erfolgen! Der folgende Schritt kann übersprungen werden (Umwandlung des p12-Zertifikats in einen jks-Keystore).
Umwandlung des p12-Zertifikats in einen jks-Keystore
Aus dem p12-Zertifikat muss ein jks-Keystore erzeugt werden, der in der jeweiligen Labor-spezifischen Konfigurationsdatei angegeben werden muss (siehe unten).
Mit folgenden Befehlen können Sie sich einen solchen Keystore über die Kommandozeile erstellen:
keytool -importkeystore -srckeystore DEMIS-12345_CSM012345678.p12 -srcstoretype PKCS12 -destkeystore DEMIS-12345_CSM012345678.jks -deststoretype JKS -destkeypass NEWPASSWORD -deststorepass NEWPASSWORD -srcstorepass SMSPASSWORD
Bitte wechseln Sie in das Verzeichnis in dem sich die p12-Datei befindet oder geben sie den Ablageort als absoluten Pfad an.
Die für
destkeypass
unddeststorepass
gewählten Werte müssen identisch sein
Konfiguration und Parameter des Zertifikats (idp Properties)
Bitte entnehmen Sie Ihre individuelle DEMIS-Laborkennung aus der Informationsmail des Robert Koch-Instituts zur DEMIS-Registrierung und Zertifikatsbereitstellung (z.B. DEMIS-12345).
Im authcertkeystore geben Sie bitte den Pfad zu der p12-Datei bzw. zu dem jks-Keystore an. Es bietet sich an, die Datei vorher in den Ordner /config zu schieben und so ergibt sich authcertkeystore=../config/DEMIS-12345_CSM012345678-p12.
Das authcertpasswort entspricht bei der Nutzung der p12-Datei dem Passwort, welches Sie per SMS erhalten haben. Bei Nutzung des jks-Keystores entspricht es dem Passwort, welches Sie vergeben haben.
Die individuelle DEMIS-Laborkennung entspricht dem authcertalias in der Konfigurationsdatei. In der Konfigurationsdatei müssen Sie darauf achten, dass Sie Kleinschreibung verwenden (z.B. authcertalias=demis-12345).
Eine weitere Möglichkeit zur Ermittlung des authcertalias ist der folgendem Befehl:
keytool -list -v -keystore DEMIS-12345_CSM012345678.p12
Nach Eingabe des Passworts findet sich der Alias ganz oben in den angezeigten Informationen. Dieser muss exakt wie angezeigt in die Konfigurationsdatei übernommen werden (z.B. authcertalias=demis-12345).
Der username in der Konfiguration entspricht dem CN des Zertifikats ohne das vorgestellte "DEMIS-", also z.B. bei individueller DEMIS-Laborkennung bzw. CN=DEMIS-12345 lautet der username "12345". Dies muss so in die json-Konfigurationsdatei eingetragen werden.
3.3.3. Laborkonfiguration Beispiel
Als Beispiel für eine Laborkonfiguration mit dem Dateinamen labor1.json dient die folgende Vorlage:
{ "identifikator":"123456789", "positiveTestergebnisBezeichnungen": ["schwach nachweisbar", "positiv", "POSITIV", "P O S I T I V"], "melderPerson":{ "nachname":"MelderPersonTestNachname", "vorname":"MelderPersonTesVorname", "anschriftenzeile":"MelderPerson Strasse nr 123 Drittenhinterhof", "postleitzahl":"13055", "stadt":"Berlin", "telefonnummer":"030 1234", "erreichbarkeit":"montag-freitag 8:00-16:00" }, "melderEinrichtung":{ "BSNR":"123456789", "name":"Labor von Froreich/Schmidt und Partner", "einrichtungsArt":"laboratory", "ansprechspartnerNachname":"MelderEinrichtung Ansp. Nachname", "ansprechspartnerVorname":"MelderEinrichtung Ansp. Vorname", "anschriftenzeile":"MelderEinrichtung Strasse nr 123 Drittenhinterhof", "postleitzahl":"13055", "stadt":"Berlin", "telefonnummer":"030 1234", "faxnummer":"030 1234", "email":"office@meldereinrichtung.de", "webseite":"meldereinrichtung.de" }, "idp": { "username":"12345", "authcertkeystore":"../config/DEMIS-12345_CSM012345678.p12", "authcertpassword":"password", "authcertalias":"demis-12345" } }