Skip to content

About

Testsuite for Primärsysteme. This contains all mandatory testcases to pass the KOB (Konformitätsbestätigung) plus optional testcases meant to help during development.

Resources

Code of conduct

Contributing

Security policy

Stars

14 stars

Watchers

7 watching

Forks

Einführung

Dies ist die Testsuite, mit welcher die Konformitätsbestätigung der gematik für EPA 3.1.3 erreicht werden kann.

Important

Stellen Sie sicher, dass keine anderen Testsuites oder Mock-Services parallel laufen, die die gleichen Ports verwenden (siehe Port-Tabelle unten). Dies kann zu Portkonflikten führen und die Testausführung verhindern.

Table 1. Verwendete Ports
Service Port Protokoll

Tiger Testsuite (WorkflowUI)

9020

http

Tiger-Proxy Admin Port

9021

http

Tiger-Proxy Proxy Port

443

http / https

1. Vorbereitung

Setup (technische Voraussetzungen)

Die grundsätzlichen technischen Voraussetzungen sehen wie folgt aus:

Setup
  • Die Testsuite wird auf einem Tester-PC ausgeführt.

  • Auf diesem läuft auch das Primärsystem.

  • Der Konnektor ist korrekt konfiguriert und erreichbar.

  • Auf diesem Testrechner kann nun die KOB-Testsuite gestartet werden, ebenso wie der Tiger-Proxy.

  • Die Kommunikation zwischen Primärsystem und der TI muss nun über den Tiger-Proxy geleitet werden.

  • Dieser kann die Kommunikation aufzeichnen und analysieren.

  • Die Testsuite kann Artefakte von Maven Central aus dem Internet beziehen.

Testvorbedingungen

Die grundsätzlichen fachlichen Voraussetzungen sehen wie folgt aus:

  • Die Aktenkonten bei beiden Aktensystemen sind eingerichtet worden.

  • Die Aktenlokalisierung der Aktenkonten kann bei beiden Aktensystemen erfolgreich durchgeführt werden.

  • Für die genutzte LEI (SMCB) kann eine Befugnis (Entitlement) für die Aktenkonten bei den beiden Aktensystemen eingestellt werden.

  • In Nicht-PU-Umgebungen muss der Client (das Primärsystem) die verwendeten Schlüssel (K2_c2s_app_data und K2_s2c_app_data) Base64 kodiert im Header "VAU-nonPU-Tracing" übertragen. Dies ist nur für die Testumgebungen (z.B. KOB-Testfall) vorgesehen und MUSS für die produktive Umgebung (PU) zwingend wieder entfernt und dürfen dort NICHT übertragen werden. (siehe A_24477)

Konfiguration

Warning

Für eine ordnungsgemäße Ausführung der KOB-Testsuite dürfen nur bestimmte Dateien angepasst werden. Diese sind:

  • kob.yaml (Konfiguration der Testsuite)

  • dc-testsuite.yml (Konfiguration des Docker-Containers)

  • .env (Konfiguration des Docker-Containers)

Alle übrigen Dateien dürfen nicht verändert werden!

Die folgenden, relevanten Konfigurationen der KOB-Testsuite müssen wie folgt in kob.yaml vorgenommen werden:

  • kvnrIbm - die für die KOB gegen das IBM Aktensystem verwendete KVNR

  • kvnrRise - die für die KOB gegen das RISE Aktensystem verwendete KVNR

TLS

Der Tiger-Proxy unterstützt TLSv1.2 und gibt Server Zertifikate zurück, welche den Zertifikaten der Aktensysteme entsprechen. Zusätzlich wurden die unterstützen CipherSuiten wie folgt eingeschränkt (GS-A_4384-*):

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

Git

Bei dem Checkout für eine lokale Kopie von dem Repository ist darauf zu achten, dass die Dateien nicht verändert werden durch ein Checkout selbst. Hierzu ist zu prüfen, dass folgenden Git Einstellungen (.gitconfig) für den Checkout des Repos genutzt werden:

[core]
  autocrlf = false

Dies kann mit folgenden Befehlen erreicht werden, je nachdem auf welcher Ebene die Einstellung getroffen werden soll:

git config --system core.autocrlf false   # per-system solution
git config --global core.autocrlf false   # per-user solution
git config --local core.autocrlf false    # per-project solution

Proxy Konfiguration für Maven (Docker)

Da der KOB-Testsuite Container während der Ausführung Maven-Artefakte bezieht, muss das Internet für den Container erreichbar sein. Sollte das Internet nur über einen Proxy-Server erreichbar sein, müssen die Einstellungen in der [./settings.xml](./settings.xml) für die Ausführung des PS-Testsuite Containers angepasst werden. Bitte beachten Sie, dass der Parameter <active>true</active> gesetzt werden muss, um die Einstellungen zu aktivieren und das Docker-Volume kob-testsuite-maven gelöscht werden muss, um die Änderungen zu übernehmen.

Dazu müssen die folgenden Einträge angepasst werden:

  <proxy>
    <id>optional</id>
    <active>true</active>
    <protocol>https</protocol>
    <host>proxy.example.com</host>
    <port>8080</port>
    <username>user</username>
    <password>password</password>
    <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
  </proxy>

2. Routing einrichten

Es muss das Routing der Nachrichten über Tiger-Proxy der KOB-Testsuite erfolgen, um eine Auswertung dieser zu ermöglichen. Der Tiger-Proxy leitet die Anfragen an die korrekten Aktensysteme weiter. Wichtig ist hierbei auch, dass in dem äußeren HTTP-Request auch der HTTP-Header "Host" für die Anfrage an das entsprechende Aktensystem gesetzt ist, damit Tiger-Proxy die Anfrage entsprechend nach dem Mitschnitt weiterleiten kann.

Beispiel für den HTTP-Header, damit Tiger-Proxy korrekt routen kann.

Host: epa-as-1.ref.epa4all.de

Es gibt keine Vorgabe WIE diese Umleitung erfolgen muss, zwei Wege scheinen jedoch sinnvoll:

Forward Proxy (Variante 1)

In dieser Konfiguration kann die KOB-Testsuite als Forward-Proxy für das Primärsystem eingerichtet werden. Die Routen sind entsprechend konfiguriert, damit der Verkehr hier an die korrekten Aktensysteme weitergeleitet wird.

Hierbei sind folgende Punkte zu beachten:

  • Primärsystem seitig wird die KOB-Testsuite als Proxy konfiguriert (e.g. localhost:443). Hiermit werden die Requests über die KOB-Testsuite an die Aktensysteme gesendet. Ein Request an https://epa-as-1.ref.epa4all.de/foobar, via KOB-Testsuite mit localhost:443 entspricht somit curl -x localhost:443 epa-as-1.ref.epa4all.de/foobar)

  • Dabei ist darauf zu achten, dass der HTTP Header im (äußeren) HTTP Request dennoch den FQDN des Aktensystems enthält (e.g Host: epa-as-1.ref.epa4all.de), damit das Routing an das gewünschte Aktensystem erfolgen kann.

  • Eine zusätzliche Manipulation der DNS Auflösung (Variante 2) in der hosts Datei ist nicht notwendig.

DNS Manipulation (Variante 2)

Alternativ kann die DNS-Auflösung beeinflusst werden, z.B. über das Editieren der Host-Einträge im Testsystem selbst (e.g. /etc/hosts). Hier werden die Hostnamen der Aktensysteme auf die IP-Adresse des Testrechners, wo der Tiger-Proxy mit dem Port 443 läuft, umgeleitet.

Beispiel, wenn das Primärsystem auf dem gleichen Rechner läuft, wie die Testsuite mit dem Tiger-Proxy.

# Zur Durchfuehrung der KOB und/oder optionalen Testfällen
127.0.0.1    epa-as-1.ref.epa4all.de
127.0.0.1    epa-as-2.ref.epa4all.de
Important

Diese Einträge sollten nach der Durchführung der KOB-Testsuite wieder entfernt werden, da es ansonsten zu einem unbeabsichtigten Fehlverhalten führt, wenn die KOB-Testsuite nicht mehr aktiv läuft und somit die Nachrichten nicht mehr an die Aktensysteme weitergeleitet werden.

Proxy für die Erreichbarkeit der Aktensysteme

Sollten sich die Aktensysteme nicht direkt erreichen lassen, sondern nur über einen (Forward) Proxy (z.B. in einem unternehmensinternen VPN), dann müssen in der Datei tiger.yml folgende Zeilen entsprechen aktiviert und angepasst werden:

  # proxy configuration
  forwardToProxy:
    hostname: <PROXY_IP_OR_FQDN>
    port: <PROXY_PORT>

3. Tests konfigurieren

In der Datei .env (Root-Verzeichnis) ist über die Variable TESTSUITE_TESTS festgelegt, dass die KOB-Testsuite standardmäßig alle verpflichtenden Testfälle einbezieht, die mit dem Tag @KOB versehen sind.

Testumfang nach Zielgruppe

Der Testumfang richtet sich nach dem Berechtigungsumfang des Primärsystems gemäß § 352 SGB V:

Zielgruppe Testfälle Berechtigungsumfang

PVS, ZPVS, KIS

TF 1–12

Vollständige Verarbeitungsrechte

AVS

TF 1–11

Ohne automatische eML-eMP-Verknüpfung über das E-Rezept

Pflegesysteme

TF 3, 4, 5 und 7

Nur lesende Zugriffe

Optionale Feature-Tags

Für spezifische Funktionsbereiche können zusätzliche Tags kombiniert werden:

  • @login – Aufbau einer User-Session

  • @information-record-status – Aktenkontolokalisierung

  • @information-consent-decisions – Abfrage der Zustimmung

  • @entitlement – Einstellen einer Befugnis

  • @eml_download – Download der eML

Beispiel: Zusätzliche Auswahlmöglichkeit des Login-Tests
TESTSUITE_TESTS=@KOB and @login

4. Testsuite starten

Die KOB-Testsuite kann entweder lokal per Maven oder in einem Docker-Container ausgeführt werden.

Lokal (Maven)

Für die lokale Ausführung werden folgende Software-Versionen empfohlen:

  • Maven Version >= 3.9

  • JAVA Version >= 21

Ist dies gegeben, reicht ein einfaches Kommando mvn clean verify im Root-Verzeichnis des Projekts.

Lokal (Docker)

Die Testsuite kann mit einem Docker-Compose gestartet werden.

docker compose -f dc-testsuite.yml up

5. Tests durchführen

Die Testdurchführung erfolgt über eine webbasierte Benutzeroberfläche (WorkflowUI), die sich automatisch im Browser öffnet.

WorkflowUI öffnen

Maven-Start:

  • Die WorkflowUI öffnet sich automatisch im Standard-Browser unter http://localhost:9020

  • Falls das automatische Öffnen fehlschlägt, rufen Sie die URL manuell auf

Docker-Start:

  • Die WorkflowUI öffnet sich nicht automatisch

  • Der aufrufbare Link wird im Log ausgegeben, sobald die Oberfläche bereit ist:

========================================================================================================================
  ____ _____  _    ____ _____ ___ _   _  ____  __        _____  ____  _  _______ _     _____        __  _   _ ___
 / ___|_   _|/ \  |  _ \_   _|_ _| \ | |/ ___| \ \      / / _ \|  _ \| |/ /  ___| |   / _ \ \      / / | | | |_ _|
 \___ \ | | / _ \ | |_) || |  | ||  \| | |  _   \ \ /\ / / | | | |_) | ' /| |_  | |  | | | \ \ /\ / /  | | | || |
  ___) || |/ ___ \|  _ < | |  | || |\  | |_| |   \ V  V /| |_| |  _ <| . \|  _| | |__| |_| |\ V  V /   | |_| || |   _ _ _
 |____/ |_/_/   \_\_| \_\|_| |___|_| \_|\____|    \_/\_/  \___/|_| \_\_|\_\_|   |_____\___/  \_/\_/     \___/|___| (_|_|_)

========================================================================================================================
09:21:12.065 [main ] INFO  d.g.t.t.l.TigerDirector - Waiting for workflow Ui to fetch status...
09:21:12.065 [main ] INFO  d.g.t.t.l.TigerDirector - Workflow UI http://localhost:9020

Zeitüberschreitung in der Workflow UI

Ein gestarteter und nicht weiter bedienter Testlauf wird von der Workflow UI nach fünf Stunden automatisch beendet. Die Ausführung endet dabei mit einer ConditionTimeoutException. Bei einem solchen Timeout werden keine Testberichte und kein Prüfnachweis-ZIP generiert. Um verwertbare Prüfnachweise zu erhalten, muss der Workflow daher innerhalb des Zeitlimits vollständig durchgeführt und regulär abgeschlossen werden.

Ablauf der Testdurchführung

  1. Testfall auswählen: In der WorkflowUI auf der linken Seite ganz oben auf das Tiger-Icon klicken und in der Übersicht den gewünschten Testfall auswählen

  2. Aktensystem wählen: IBM oder RISE Aktensystem als Testumgebung festlegen

  3. Test starten: Die Testsuite zeigt ein Dialogfenster mit der Testaufgabe und den erforderlichen Testdaten an (z.B. "Fügen Sie für den Patienten mit der KVNR <kvnr> einen neuen eMP-Eintrag im Aktensystem IBM hinzu: …​")

  4. Aktion im Primärsystem ausführen: Führen Sie die angeforderte Operation in Ihrem Primärsystem aus – die konkrete Bedienung ist systemabhängig

  5. Continue: Erst nachdem die Aktion vollständig ausgeführt wurde, klicken Sie auf "Continue"

  6. Automatische Validierung: Die Testsuite wertet nun die aufgezeichneten Requests aus und validiert diese gegen die KOB-Anforderungen

Important

Klicken Sie erst auf "Continue", wenn die angeforderte Aktion vollständig ausgeführt wurde. Die Testsuite prüft dann alle für den Test relevanten zwischenzeitlich aufgezeichneten Nachrichten.

Continue Dialog in Testsuite

6. Prüfnachweis für die KOB

Für die Beantragung des KOB Zertifikates bei der gematik benötigen Sie als Prüfnachweis den Testreport (zip file).

Note

Sollten ihr Primärsystem oder Middleware keine Verordnung oder abweichende Verordnungen ausstellen können, so ist bei der Beauftragung in TITUS über die Kommentarfunktion Bemerkung eine Begründung beizufügen.

Testreport aus Maven

Die Testergebnisse selbst sind unter target/site/serenity/index.html zu finden und können somit im Browser verifiziert werden. Der Testreport wird automatisch nach der Ausführung im target/kob-testsuite.*-test-report.zip abgelegt, wenn die Ausführung über den Quit Button in der WorkflowUI beendet wird.

Testreport aus Docker Container

Um diese Datei aus dem Docker Container in das lokale System zu kopieren, kann folgender Befehl genutzt werden:

docker cp kob-testsuite:/app/report/kob-testsuite-test-report.zip .

Eine weitere Möglichkeit ist, die Report ZIP Datei über die Anwendung DockerDesktop herunterzuladen.

Download Test Report ZIP über Docker Desktop

Upload bei TITUS

Loggen Sie sich in Ihren Account auf dem Titus Bestätigungsportal (https://titus.gematik.solutions) und öffnen Sie den Dialog „Neue Bestätigung“. Wählen Sie dort:

  • als Bestätigungsmodul: ePA,

  • die passende Modulausprägung für den ePA Medication Service,

  • die zugehörige Version.

Klicken Sie anschließend auf „Bestätigungsauftrag anlegen“. Der Testreport soll als ZIP-Datei hochgeladen werden.

Upload Dialog in TITUS

Weitere Hinweise zur Handlungsanweisung für die Konformitätsbewertung (KOB) können im Service Desk nachgelesen werden: https://service.gematik.de/servicedesk/customer/kb/view/459882847

Fragen zum Titus-Bestätigungsportal und zur Durchführung des KOB Verfahrens können Sie ebenfalls über unseren Service Desk einstellen: https://service.gematik.de/servicedesk/customer/portal/26/group/36

7. FHIR-Dokumentation (Referenz)

Die FHIR-Strukturen, die in den KOB-Testfällen verwendet werden, basieren auf dem Implementation Guide ePA Medication Service in Version 1.3.4:

Note

Die nachfolgenden Abschnitte und Tabellen dienen als Hilfestellung zur Implementierung und zum Mapping der Testdaten. Maßgeblich sind stets die FHIR-Profile des oben verlinkten Implementation Guide ePA Medication Service Version 1.3.4.

FHIR-Profile für schreibende Operationen

Die FHIR-Profile legen die Struktur des Request-Bodys der jeweiligen FHIR-Operation fest.

Anwendungsfall FHIR-Operation FHIR-Profil

eML-Eintrag hinzufügen

$add-eml-entry

Profil öffnen

eMP-Eintrag hinzufügen

$add-emp-entry

Profil öffnen

eMP-Eintrag aktualisieren

$update-emp-entry

Profil öffnen

eML-eMP-Verknüpfung hinzufügen

$link-emp

Profil öffnen

eML-eMP-Verknüpfung entfernen

$unlink-emp

Profil öffnen

eML-Eintrag stornieren

$cancel-eml-entry

Profil öffnen

eMP-Eintrag stornieren

$update-emp-entry

Profil öffnen

Erstellung eines $add-eml-entry-Requests

Folgende Inhalte müssen im Request-Body der Operation $add-eml-entry gesetzt werden:

  • medicationStatement

  • medication

  • organization

  • format

Am Beispiel der Operation $add-eml-entry zeigt die folgende Tabelle, in welchen FHIR-Elementen die vorgegebenen Testdaten abzubilden sind.

MedicationStatement-Elemente

Element FHIRPath innerhalb der Ressource Wert

Dosierung (strukturiert)

dosage.timing.repeat + dosage.doseAndRate.doseQuantity

frequency: 4, period: 1, periodUnit: d, when: [MORN, NOON, EVE, NIGHT], Dosis: 1 Stück

Dosierung (Freitext)

dosage.text

1-1-1-1 Stück oder fachlich gleichwertig

Gerenderte Dosierung

extension.where(url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction').valueMarkdown

1-1-1-1 Stück

Medication-Elemente

Element FHIRPath innerhalb der Ressource Wert

Handelsname

code.text

Benazepril AL 5 mg Filmtabletten

Handelsname (PZN)

code.coding.where(system = 'http://fhir.de/CodeSystem/ifa/pzn').code

04351682

Wirkstoff (ASK)

ingredient.itemCodeableConcept.coding.where(system = 'http://fhir.de/CodeSystem/ask').code

23413

Wirkstoff

ingredient.itemCodeableConcept.text

Benazepril hydrochlorid

Wirkstärke (strukturiert)

ingredient.strength.numerator + ingredient.strength.denominator

numerator: 5 mg, denominator: 1 Tbl.

Wirkstärke (Freitext)

ingredient.strength.extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/medication-ingredient-amount-extension').valueString

5 mg

Darreichungsform

form.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM').code

FTA

Packungsgröße

amount.numerator.extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/medication-total-quantity-formulation-extension').valueString + amount.numerator.unit

valueString: 98, unit: Stück

Erstellung eines $add-emp-entry-Requests

Folgende Inhalte müssen im Request-Body der Operation $add-emp-entry gesetzt werden:

  • medicationRequest

  • medication

  • organization

  • format

  • chronologyId (kann weggelassen werden, wenn es sich um initialen eMP-Eintrag handelt.)

Am Beispiel der Operation $add-emp-entry zeigt die folgende Tabelle, in welchen FHIR-Elementen die vorgegebenen Testdaten abzubilden sind.

MedicationRequest-Elemente

Element FHIRPath innerhalb der Ressource Wert

Indikation (ICD-10-GM)

reasonCode.coding.where(system = 'http://fhir.de/CodeSystem/bfarm/icd-10-gm').code

I11

Grund

extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/reason-patient-instruction-extension').valueString

Bluthochdruck

Dosierung (strukturiert)

dosageInstruction.timing.repeat + dosageInstruction.doseAndRate.doseQuantity

frequency: 2, period: 1, periodUnit: d, when: [MORN, EVE], Dosis: 1 Stück

Dosierung (Freitext)

dosageInstruction.text

1-0-1-0 Stück oder 1x morgens, 1x abends je 1 Stück

Gerenderte Dosierung

extension.where(url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction').valueMarkdown

1-0-1-0 Stück

Hinweis für Versicherte

extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/patient-note-extension').valueAnnotation.text

Benazepril kann anfangs Schwindel verursachen (oder kann Schwindel verursachen)

Hinweis für Mitbehandelnde

note.text

Hinweis für LE

Status des eMP-Eintrags

status

active

Anwendungszeitraum (Start)

extension.where(url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.effectiveDosePeriod').valuePeriod.start

2026-12-01

Anwendungszeitraum (Ende)

extension.where(url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.effectiveDosePeriod').valuePeriod.end

2026-12-31

Medication-Elemente

Element FHIRPath innerhalb der Ressource Wert

Handelsname

code.text

Benazepril AL 20 mg Filmtabletten

Handelsname (PZN)

code.coding.where(system = 'http://fhir.de/CodeSystem/ifa/pzn').code

04351736

ATC-Code

code.coding.where(system = 'http://fhir.de/CodeSystem/bfarm/atc').code

C09AA07

Wirkstoff (ASK)

ingredient.itemCodeableConcept.coding.where(system = 'http://fhir.de/CodeSystem/ask').code

23413

Wirkstoff

ingredient.itemCodeableConcept.text

Benazepril hydrochlorid

Wirkstärke (strukturiert)

ingredient.strength.numerator + ingredient.strength.denominator

numerator: 20 mg, denominator: 1 Tbl.

Wirkstärke (Freitext)

ingredient.strength.extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/medication-ingredient-amount-extension').valueString

20 mg (oder 20 Mg)

Darreichungsform

form.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM').code

FTA

Packungsgröße

amount.numerator.extension.where(url = 'https://gematik.de/fhir/epa-medication/StructureDefinition/medication-total-quantity-formulation-extension').valueString + amount.numerator.unit

valueString: 98, unit: Stück

Erstellung eines $update-emp-entry-Requests

Note

Der zu aktualisierende eMP-Eintrag bzw. die dafür erforderlichen IDs müssen zuvor beispielsweise über $add-emp-entry angelegt oder über eine lesende Operation ermittelt worden sein.

Folgende Inhalte müssen im Request-Body der Operation $update-emp-entry gesetzt werden:

  • medicationRequest

  • medicationPlanId

  • chronologyId

  • organization

  • format

Am Beispiel der Operation $update-emp-entry zeigt die folgende Tabelle, in welchen FHIR-Elementen die vorgegebenen Testdaten abzubilden sind.

MedicationRequest-Elemente

Element FHIRPath innerhalb der Ressource Wert

Dosierung (strukturiert)

dosageInstruction.timing.repeat + dosageInstruction.doseAndRate.doseQuantity

frequency: 1, period: 1, periodUnit: d, timeOfDay: [08:00:00], Dosis: 1 Stück

Dosierung (Freitext)

dosageInstruction.text

täglich: 08:00 Uhr — je 1 Stück oder fachlich gleichwertig

Gerenderte Dosierung

extension.where(url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction').valueMarkdown

täglich: 08:00 Uhr — je 1 Stück

Status des eMP-Eintrags

status

on-hold

Note

Für das Hinzufügen einer eML-eMP-Verknüpfung müssen vorab über lesende Operationen (GET-Abfragen) die notwendigen IDs und Ressourcen ermittelt werden:

Folgende Inhalte müssen im Request-Body der Operation $link-emp gesetzt werden:

  • medicationPlanId

  • chronologyId

  • organization

  • format

Der Request wird an den jeweiligen eML-Eintrag unter Verwendung der zuvor ermittelten medicationStatementId gesendet (auf FHIR-Ebene als Operation MedicationStatement/{medicationStatementId}/$link-emp).

Am Beispiel der Operation $link-emp zeigt die folgende Tabelle die Zuordnung der Parameter:

Parameter / Element Bedeutung / FHIRPath Wert / Quelle

medicationStatementId

ID des zu verknüpfenden MedicationStatement (Pfad-Parameter)

MedicationStatement.id aus der eML

medicationPlanId

Identifier des Ziel-Eintrags im eMP

MedicationRequest.identifier.where(system = 'https://gematik.de/fhir/sid/emp-identifier').value

chronologyId

ID der aktuellen eMP-Chronologie

Provenance.where(meta.profile.contains('emp-chronology-provenance')).id

Note

Für das Entfernen einer eML-eMP-Verknüpfung müssen vorab die erforderlichen IDs ermittelt werden:

  • eML abrufen ($medication-list bzw. /medication/render/eml/fhir): Ermittlung der ID des verknüpften MedicationStatement (medicationStatementId). Ein verknüpfter Eintrag enthält in basedOn eine Referenz auf einen MedicationRequest mit der Extension https://gematik.de/fhir/epa-medication/StructureDefinition/is-emp-extension (valueBoolean = true).

  • eMP-Identifier (MedicationPlanIdentifier): Der Identifier des zugehörigen MedicationRequest im eMP (https://gematik.de/fhir/sid/emp-identifier).

  • Aktuelle Chronologie-ID (chronologyId): Die ID der aktuellen Chronologie-Provenance (chronologyProvenanceId aus der vorangegangenen Operation bzw. aus dem Abruf des eMP).

Folgende Inhalte müssen im Request-Body der Operation $unlink-emp gesetzt werden:

  • medicationPlanId

  • chronologyId

  • organization

  • format

Der Request wird an den jeweiligen eML-Eintrag unter Verwendung der zuvor ermittelten medicationStatementId gesendet (auf FHIR-Ebene als Operation MedicationStatement/{medicationStatementId}/$unlink-emp).

Am Beispiel der Operation $unlink-emp zeigt die folgende Tabelle die Zuordnung der Parameter:

Parameter / Element Bedeutung / FHIRPath Wert / Quelle

medicationStatementId

ID des verknüpften MedicationStatement (Pfad-Parameter)

MedicationStatement.id aus der eML

medicationPlanId

Identifier des zu entknüpfenden Eintrags im eMP

MedicationRequest.identifier.where(system = 'https://gematik.de/fhir/sid/emp-identifier').value

chronologyId

ID der aktuellen eMP-Chronologie

Provenance.where(meta.profile.contains('emp-chronology-provenance')).id

Erstellung eines $cancel-eml-entry-Requests

Note

Für das Stornieren eines eML-Eintrags muss vorab die ID des zu stornierenden Eintrags ermittelt werden:

  • eML abrufen ($medication-list bzw. /medication/render/eml/fhir) oder zuvor über $add-eml-entry anlegen: Ermittlung der ID des MedicationStatement (medicationStatementId).

Folgende Inhalte müssen im Request-Body der Operation $cancel-eml gesetzt werden:

  • organization

  • format

Der Request wird an den jeweiligen eML-Eintrag unter Verwendung der zuvor ermittelten medicationStatementId gesendet (auf FHIR-Ebene als Operation MedicationStatement/{medicationStatementId}/$cancel-eml-entry bzw. MedicationStatement/{medicationStatementId}/$cancel-eml).

Am Beispiel der Operation $cancel-eml zeigt die folgende Tabelle die Zuordnung der Parameter:

Parameter / Element Bedeutung / FHIRPath Wert / Quelle

medicationStatementId

ID des zu stornierenden MedicationStatement (Pfad-Parameter)

MedicationStatement.id aus der eML

Erstellung eines Requests zum Stornieren eines eMP-Eintrags

Note

Das Stornieren eines eMP-Eintrags erfolgt über die Operation $update-emp-entry unter Angabe des Status entered-in-error. Vorab müssen über eine lesende Operation (z. B. $medication-plan bzw. /medication-plan) die notwendigen IDs und Ressourcen ermittelt werden:

  • MedicationRequest-ID (MedicationRequestID): Die ID des zu stornierenden MedicationRequest.

  • Versions-ID (MedicationRequestVersionId): Die aktuelle Version (meta.versionId) des MedicationRequest.

  • eMP-Identifier (MedicationPlanIdentifier): Der Identifier des Eintrags im eMP (MedicationRequest.identifier mit dem System https://gematik.de/fhir/sid/emp-identifier).

  • Medication-ID (MedicationID): Die ID der referenzierten Medication (MedicationRequest.medicationReference).

  • Aktuelle Chronologie-ID (chronologyId): Die ID der aktuellen Chronologie-Provenance (chronologyProvenanceId aus der Provenance-Ressource mit dem Profil https://gematik.de/fhir/epa-medication/StructureDefinition/emp-chronology-provenance).

Folgende Inhalte müssen im Request-Body der Operation zum Stornieren eines eMP-Eintrags ($update-emp-entry) gesetzt werden:

  • medicationRequest (mit status: "entered-in-error")

  • medicationPlanId

  • chronologyId

  • organization

  • format

Am Beispiel des Stornierens eines eMP-Eintrags zeigt die folgende Tabelle die Zuordnung der Parameter:

Parameter / Element Bedeutung / FHIRPath Wert / Quelle

Status des eMP-Eintrags

medicationRequest.status

entered-in-error

medicationPlanId

Identifier des zu stornierenden Eintrags im eMP

MedicationRequest.identifier.where(system = 'https://gematik.de/fhir/sid/emp-identifier').value

chronologyId

ID der aktuellen eMP-Chronologie

Provenance.where(meta.profile.contains('emp-chronology-provenance')).id

8. Troubleshooting / FAQs

Maven Build-Fehler: Failed to delete target/kob-testsuite.jar

Problem: Beim erneuten Ausführen von mvn clean install erscheint die Fehlermeldung:

Failed to delete ...\kob-testsuite\target\kob-testsuite.jar

Ursache: Die Testsuite läuft noch im Hintergrund und blockiert die Datei.

Lösung:

  1. Öffnen Sie im Browser: http://localhost:9020

  2. Klicken Sie auf den roten "Quit Test Run" Button

  3. Warten Sie, bis die Testsuite vollständig beendet ist

  4. Führen Sie mvn clean install erneut aus

Tip

Beenden Sie die Testsuite immer über den "Quit Test Run" Button, bevor Sie einen neuen Maven-Lauf starten.

Starten der Testsuite (Docker)

java.nio.file.AccessDeniedException: /.m2/repository/org

Der Zugriff auf das Docker Volume schlägt fehl.

Variante 1

Das Volume mit der gleichen Bezeichnung schon existiert und wurde von einer anderen, möglicherweise älteren, Version der KOB-Testsuite erstellt wurde. Man muss das Volume einmal löschen und bei Start der neuen Testsuite wird es wieder angelegt.

$> docker compose -f dc-testsuite.yml rm
$> docker volume rm -f kob-testsuite-maven
$> docker compose -f dc-testsuite.yml up

Variante 2 (Linux)

Bitte prüfen Sie vor dem Start der Testsuite, ob Sie das .docker Verzeichnis löschen können und starten sie die Testsuite im Anschluss noch einmal.

Variante 3 (ohne Docker Volume)

Eine weitere Möglichkeit ist auf die Nutzung des Docker Volume zu verzichten. Der Nachteil hierbei ist, dass die Maven Artefakte bei jedem Start der Testsuite erneut heruntergeladen werden müssen, was mehr Zeit in Anspruch nimmt. Hierzu wird die Zeile - kob-testsuite-maven:/.m2 wie folgt mit einem Hash (#) auskommentiert.

    volumes:
      - ./tiger.yaml:/app/tiger.yaml
      - ./kob.yaml:/app/kob.yaml
      #- kob-testsuite-maven:/.m2
      # has to be 'copied' AFTER the volume is mounted
      - ./settings.xml:/.m2/settings.xml

Ausführen der Tests / fehlschlagende Tests

Im Falle eines fehlgeschlagenen Testlaufs und dem Schreiben eines Support-Tickets im gematik Service Desk ist es sinnvoll, die *.tgr-Datei mit den aufgezeichneten Nachrichten anzuhängen. Damit ist es möglich, die Traces in eine lokale Tiger-Anwendung zu importieren, um die Kommunikation und deren Meldungsdetails anzuzeigen.

Dazu müssen Sie den folgenden Befehl ausführen, um die *.tgr aus dem ps-testsuite Container in das lokale Verzeichnis zu kopieren.

docker cp ps-testsuite:/app/tiger-proxy.tgr .

9. Fehlertickets

Wenn Sie ein Fehlerticket eröffnen wollen für dieses Repository, nutzen Sie bitte den gematik Service Desk unter https://service.gematik.de/servicedesk/customer/portal/26.

Beiträge

Wenn Sie zu diesem Repository beitragen wollen, schauen Sie sich bitte die Datei CONTRIBUTING.MD an.

License

Copyright 2024-2026 gematik GmbH

Apache License, Version 2.0

See the LICENSE for the specific language governing permissions and limitations under the License.

Additional Notes and Disclaimer from gematik GmbH

  1. Copyright notice: Each published work result is accompanied by an explicit statement of the license conditions for use. These are regularly typical conditions in connection with open source or free software. Programs described/provided/linked here are free software, unless otherwise stated.

  2. Permission notice: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    1. The copyright notice (Item 1) and the permission notice (Item 2) shall be included in all copies or substantial portions of the Software.

    2. The software is provided "as is" without warranty of any kind, either express or implied, including, but not limited to, the warranties of fitness for a particular purpose, merchantability, and/or non-infringement. The authors or copyright holders shall not be liable in any manner whatsoever for any damages or other claims arising from, out of or in connection with the software or the use or other dealings with the software, whether in an action of contract, tort, or otherwise.

    3. The software is the result of research and development activities, therefore not necessarily quality assured and without the character of a liable product. For this reason, gematik does not provide any support or other user assistance (unless otherwise stated in individual cases and without justification of a legal obligation). Furthermore, there is no claim to further development and adaptation of the results to a more current state of the art.

  3. Gematik may remove published results temporarily or permanently from the place of publication at any time without prior notice or justification.

  4. Parts of this software and - in isolated cases - content such as text or images may have been developed using the support of AI tools. They are subject to the same reviews, tests, and security checks as any other contribution. The functionality of the software itself is not based on AI decisions.

  5. Please note: Parts of this code may have been generated using AI-supported technology. Please take this into account, especially when troubleshooting, for security analyses and possible adjustments.

Kontakt

gematik GmbH: [OSPO@gematik.de](mailto:OSPO@gematik.de)

About

Testsuite for Primärsysteme. This contains all mandatory testcases to pass the KOB (Konformitätsbestätigung) plus optional testcases meant to help during development.

Resources

Code of conduct

Contributing

Security policy

Stars

14 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages