Implementation Guide
E-T-Rezept Datenaustausch
Version 1.1.0-ballot-1 - ballot

Trezept

Übertragen des digitalen Durchschlags zum T-Rezept

Nach geltenden gesetzlichen Regelungen ist dem BfArM nach Abgabe einer Verordnung eines Arzneimittels nach §3a Abs. 1 Satz 1 AMVV, also die teratogenen Wirkstoffe Lenalidomid, Pomalidomid oder Thalidomid, ein digitaler Durchschlag des E-T-Rezepts zu übermitteln.

Nach erfolgreichem Abschluss eines E-T-Rezept-Workflows – konkret durch den Aufruf der FHIR-Operation $close am E-Rezept-Fachdienst durch die Apotheke – erstellt der E-Rezept-Fachdienst für das betroffene E-T-Rezept ein Dokument gemäß dem Profil digitaler Durchschlag T-Rezept und überträgt dieses automatisiert und asynchron an den Webdienst des BfArM. Bei einer temporären Nicht-Erreichbarkeit des BfArM wird die zuverlässige Übertragung durch Backoff-Retry-Mechanismen sichergestellt.

Hintergründe zum Datenmodell und zu den Designentscheidungen finden sich unter Informationen zum Datenmodell.

Erstellen des digitalen Durchschlags

Der E-Rezept-Fachdienst erstellt ein Artefakt mit dem Profil „digitaler Durchschlag T-Rezept“. Dabei werden Informationen aus der Verordnung, der Dispensierung (Abgabe) und dem FHIR-VZD (Verzeichnisdienst) genutzt. Die fachlichen Inhalte, die hierbei übertragen werden, sind im Logisches Modell digitaler Durchschlag E-T-Rezept abgebildet.

Der E-Rezept-Fachdienst erzeugt diesen Datensatz aus den Eingangsdaten, die nach abschliessender Bereitstellung der Dispensierinformation im E-Rezept-Workflows zur Verfügung stehen. Der relevante Workflow-Typ ist der Flowtype 166 („Flowtype für Arzneimittel nach § 3a AMVV“), der speziell für diesen Anwendungsfall eingeführt wurde.

Mapping des digitalen Durchschlags E-T-Rezept

Zur Unterstützung der Implementierung stehen in diesem Projekt StructureMaps bereit, mit denen das Mapping der Eingangsdaten automatisiert erfolgen kann. Die Vorgehensweise ist wie folgt:

Grundlegender Mapping-Ansatz

  • Es werden alle vorhandenen Quellinformationen in den digitalen Durchschlag übernommen, sofern sie im Zielprofil erlaubt und nicht verboten sind.
  • KBV-Extensions werden in Extensions gemappt, die im Packge de.gematik.epa.* definiert wurden.
  • Die jeweiligen Zielprofile enthalten Mapping-Tabellen, die aufzeigen, welche Daten aus der Quelle übernommen und wie sie im Ziel abgebildet werden.

Vorgehen zur Nutzung der StructureMaps

Die zentrale Mappingdefinition von Quelldaten zum digitalen Durchschlag ist in der StructureMap für digitalen Durchschlag beschrieben. Diese importiert alle projektrelevanten Mappingdaten. Als Eingangsartefakt wird ein FHIR-Bundle benötigt, das folgende Elemente enthält:

Bundle zum Mapping

Die für das Mapping erforderlichen Informationen können im Mapping-Bundle mit type: collection wie folgt zusammengefasst und erstellt werden:

Bundletype: collectionTaskMedicationRequestMedicationDispenseVZDSearchBundlePrescribedMedicationDispensedMedicationHealthcareServiceOrganizationLocation1111111*1111111111

Im Folgenden wird beschrieben, wie das Mapping mit StructureMaps umgesetzt werden kann.

Anwendung der StructureMap

Die StructureMap ERP-TPrescription-StructureMap-CarbonCopy kann mittels Java HAPI-FHIR auf ein Mapping-Bundle angewendet werden.

Das Mapping sieht im Wesentlichen die folgende Übertragung vor:

Mapping-BundleVZD_SearchSet_BundleBfArM ParametersGEM_Taskidentifier: E-Rezept-IDKBV_PrescriptionKBV_MedicationGEM_MedicationDispenseGEM_MedicationVZD_OrganisationVZD_HealthcareServiceVZD_LocationE-Rezept-IDSignaturzeitpunktMedicationRequestPrescribed MedicationDispensed MedicationMedicationDispenseOrganisationQES

Der Signaturzeitpunkt als Quelle ist in den Mappingartefakten nicht enthalten, da dieser nicht aus einer FHIR-Struktur hervorgeht, sondern aus der QES am Element 1.2.840.113549.1.9.5 signingTime extrahiert werden muss. Der E-Rezept-Fachdienst transformiert diesen Wert in den FHIR-Datentyp instant mit maximaler Sekundengenauigkeit (Format: YYYY-MM-DDThh:mm:ss+zz:zz, z.B. 2026-01-01T00:00:00Z).

Die StructureMap überführt das Mapping-Bundle in den digitalen Durchschlag und ruft dabei selbst weitere StructureMaps auf, die die jeweiligen Unterprofile mappen. Diese können auch entwicklungsunterstützend genutzt werden:

Quellartefakt Zielprofil StructureMap
KBV_Prescription (MedicationRequest) E-T-Rezept Medication Request StructureMap-MedicationRequest
KBV_Medication_PZN E-T-Rezept Medication StructureMap-StructureMap-KBV-PZN-Medication
KBV_Medication_Ingredient E-T-Rezept Medication StructureMap-StructureMap-KBV-Ingredient-Medication
KBV_Medication_Compounding E-T-Rezept Medication StructureMap-StructureMap-KBV-Compounding-Medication
KBV_Medication_FreeText E-T-Rezept Medication StructureMap-StructureMap-KBV-FreeText-Medication
GEM_ERP_PR_Medication E-T-Rezept Medication StructureMap-StructureMap-GEM-Medication
GEM_MedicationDispense E-T-Rezept Medication Dispense StructureMap-StructureMap-MedicationDispense
VZD Searchset E-T-Rezept Organization StructureMap-StructureMap-Organization

HAPI FHIR Transformation

Um HAPI FHIR zur Transformation zu nutzen, müssen FHIR-Version, die verwendeten FHIR-Packages für das Mapping sowie der Output-Pfad angegeben werden. Zum Test kann der folgende Befehl auf der Root Ebene des GitHub Repositories ausgeführt werden (Lokaler Pfad zum HAPI FHIR muss angegeben werden):

sushi && \
java -jar <path-to>/fhir_hapi.jar fsh-generated/resources/Bundle-Mapping-Bundle.json \
-transform https://gematik.de/fhir/erp-t-prescription/StructureMap/ERPTPrescriptionStructureMapCarbonCopy \
-version 4.0.1 \
-ig ./fsh-generated/resources \
-ig de.gematik.erezept-workflow.r4 \
-ig kbv.ita.erp \
-ig de.gematik.fhir.directory \
-ig de.gematik.ti \
-output ./digitaler_durchschlag_e_t_rezept.json

Die Mapping-Engine im FHIR-HAPI transformiert das Bundle in einen digitalen Durchschlag E-T-Rezept.

Die folgenden Beispiele können als Referenz herangezogen werden:

Beispiel Beschreibung
Bundle-Mapping-Bundle Beispiel eines Mapping-Bundles zur Erzeugung eines digitalen Durchschlags E-T-Rezept
TRP-Carbon-Copy Manuell erzeugter digitaler Durchschlag E-T-Rezept
Mapped CarbonCopy Von der HAPI Transformation Engine erzeugtes JSON

Übertragen des digitalen Durchschlags

Nachdem der digitale Durchschlag E-T-Rezept erzeugt wurde, wird dieser RESTful über das Internet an den BfArM Webdienst übertragen.

Vorgaben zur Authentifizierung des E-Rezept-Fachdienstes gegenüber dem Webdienst sind in der Spezifikation des E-Rezept-Fachdienst beschrieben.

Die folgende OpenAPI-Definition dient als Hilfestellung bei der Implementierung des Aufrufs am BfArM Webdienst:

Fehlerbehandlung der Übertragung

Im Falle, dass der BfArM Webdienst die übertragene Instanz abweist, z.B. aufgrund von invaliden Datenfeldern, wird ein Fehlercode 400 Bad Request, sowie eine FHIR-OperationOutcome bereitgestellt. Diese enthält wesentliche Angaben dazu, was für eine Art von Fehler aufgetreten ist. Es gibt keine enummerierte Liste von Fehlerkategorien, sondern jeweils eine Freitextangabe der Fehlerauswertung.

Folgende Instanz dient als Beispiel für eine Response mit Fehlercode 400:

{
  "resourceType" : "OperationOutcome",
  "id" : "ERP-TPrescription-OperationOutcome-1",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: OperationOutcome ERP-TPrescription-OperationOutcome-1</b></p><a name=\"ERP-TPrescription-OperationOutcome-1\"> </a><a name=\"hcERP-TPrescription-OperationOutcome-1\"> </a><blockquote><p><b>issue</b></p><p><b>severity</b>: Error</p><p><b>code</b>: Invalid Content</p><p><b>details</b>: <span title=\"Codes:\">Invalid request payload</span></p><p><b>diagnostics</b>: This field is required</p><p><b>expression</b>: parameter[rxPrescription].part[prescriptionId].value</p></blockquote><blockquote><p><b>issue</b></p><p><b>severity</b>: Error</p><p><b>code</b>: Element value invalid</p><p><b>details</b>: <span title=\"Codes:\">Invalid format for field</span></p><p><b>diagnostics</b>: Value must be a date</p><p><b>expression</b>: parameter[rxPrescription].part[medicationRequest].resource.authoredOn</p></blockquote></div>"
  },
  "issue" : [
    {
      "severity" : "error",
      "code" : "invalid",
      "details" : {
        "text" : "Invalid request payload"
      },
      "diagnostics" : "This field is required",
      "expression" : [
        "parameter[rxPrescription].part[prescriptionId].value"
      ]
    },
    {
      "severity" : "error",
      "code" : "value",
      "details" : {
        "text" : "Invalid format for field"
      },
      "diagnostics" : "Value must be a date",
      "expression" : [
        "parameter[rxPrescription].part[medicationRequest].resource.authoredOn"
      ]
    }
  ]
}