DEMIS Wissensdatenbank

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:

Inhaltsverzeichnis:

Erregernachweise mithilfe des DEMIS Adapters melden: https://www.youtube.com/watch?v=xpYgVTCisD4

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:

  1. 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)
Format: IP:Port (z.B. idp.lab.proxy=192.168.0.1:1234)

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)
(z.B. idp.lab.proxy.host=192.168.0.1)

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)
(z.B. idp.lab.proxy.port=1234)

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)
(z.B. idp.lab.proxy.username=proxyUser)

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)
(z.B. idp.lab.proxy.password=proxyPassword)

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.folderZiel-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.
Muss eine Zahl sein!

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
(ab Adapter 2.x)

  • alle Bezeichnungen, die einer positiven SARS-CoV-2-Diagnose entsprechen
  • diese Werte werden herangezogen, um den Wert im Feld „4207“ (Diagnose/ Verdachtsdiagnose) der LDT-Datei bzw. den Wert für „diagnose“ in der JSON-Datei auszuwerten und auf den zugehörigen ConclusionCode „pathogenDetected“ oder „pathogenNotDetected“ zu mappen → entspricht der Wert einem der festgelegten Werte in der Laborkonfiguration (bzw. einem der Standardwerte, wenn keine Werte in der Laborkonfiguration hinterlegt sind), wird auf „pathogenDetected“ gemappt

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/demisLabIdDEMIS-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

Betriebsstättennummer

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 und deststorepass 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"
    }
}