Implementation Guide
ePA Medication Service
Version 1.0.5-ballot.1 - draft

Auslesen der FHIR-Elemente zur Darstellung der eML

Der Medication Service stellt die elektronische Medikationsliste (eML) über die FHIR API bereit. Primärsysteme können diese Schnittstelle nutzen, um die eML-Daten in ihre Systemumgebung zu integrieren.

Diese Beschreibung fokussiert sich auf die Datenstruktur und den Abruf der eML, ohne spezifische Vorgaben für die Darstellung in der Benutzeroberfläche der Primärsysteme zu machen.

Zur Generierung der aufbereiteten eML in den Formaten PDF/A und xHTML MUSS der Medication Service die Daten aus den FHIR-Ressourcen heranziehen. Diese Daten sollten entsprechend der definierten Logik aggregiert und strukturiert aufbereitet werden.

Auslesen des Verordnungsdatums

Die Ressource MedicationRequest enthält ein Element namens authoredOn (MedicationRequest.authoredOn). Der Wert dieses Elements gibt das Ausstellungsdatum der Verordnung an und soll für die Darstellung des Verordnungsdatums verwendet werden.

{
    "resourceType": "MedicationRequest",
    ...
    "authoredOn": "2025-01-22",
    ...
}

Auslesen des Dispensierdatums

Die Ressource MedicationDispense enthält ein Element namens whenHandedOver (MedicationDispense.whenHandedOver). Der Wert dieses Elements gibt das Datum der Abgabe an und soll für die Darstellung des Dispensierdatums verwendet werden.

{
    "resourceType": "MedicationDispense",
    ...
    "whenHandedOver": "2025-01-22",
    ...
}

Prüfen, ob eine Substitution vorliegt

In der Resource MedicationDispense gibt es das boolesche Element substitution.wasSubstituted, das anzeigt, ob bei der Abgabe ein anderes Medikament als das ursprünglich verschriebene verwendet wurde. Ein Wert von true bedeutet, dass eine Substitution stattgefunden hat, während false zeigt, dass das verschriebene Medikament abgegeben wurde.

Im Profil EPAMedicationDispense wird der Bereich substitution mit “Must Support” markiert, was bedeutet, dass dieses Element beim Lesen des Datensatzes berücksichtigt und interpretiert werden muss, um sicherzustellen, dass Substitutionen korrekt erfasst werden.

{
    "resourceType": "MedicationDispense",
    ...
    "substitution": {
        "wasSubstituted": false
    },
    ...
}

Einfach- und Mehrfachverordnungen

Das Profil EPAMedicationRequest enthält die Erweiterung MultiplePrescription, deren Struktur der Extension KBV_EX_ERP_Multiple_Prescription aus dem eRezept MedicationRequest Profil KBV_PR_ERP_Prescription der KBV entspricht.

Innerhalb der MultiplePrescription-Erweiterung befindet sich das Element indicator, das als Boolean definiert ist. Dieses Element gibt an, ob die betreffende MedicationRequest-Instanz Teil einer Mehrfachverordnung ist. Beim Auslesen des Datensatzes muss das indicator-Element zwingend interpretiert werden. Es reicht nicht aus, lediglich das Vorhandensein der Extension-Elemente zu prüfen.

{
    "extension":  [
        {
            "url": "indicator",
            "valueBoolean": true
        }
    ],
    "url": "https://gematik.de/fhir/epa-medication/StructureDefinition/multiple-prescription-extension"
}

Die Erweiterung MultiplePrescription

Die Erweiterung MultiplePrescription umfasst zusätzlich weitere Elemente wie counter, period und id.

Das Element counter zeigt an, die wievielte Verordnung einer Mehrfachverordnung gemeint ist. Zum Beispiel: Bei “2 von 4” steht der numerator für die 2 und der denominator für die 4.

{
    "url": "counter",
    "valueRatio": {
        "numerator": {
            "value": 2
        },
        "denominator": {
            "value": 4
        }
    }
},

Das Element period gibt den Zeitraum der Einlösefrist an. Der Wert start markiert den Beginn der Frist, während der Wert end das Ende der Frist beschreibt.

{
    "url": "period",
    "valuePeriod": {
        "start": "2024-06-15"
    }
},

Das Element id steht für die ID der Mehrfachverordnung. Diese ID ist bei allen Teilverordnungen einer Mehrfachverordnung identisch und wird als UUID angegeben.

{
    "url": "id",
    "valueIdentifier": {
        "system": "urn:ietf:rfc:3986",
        "value": "urn:uuid:33bff9fb-75dc-43b4-8593-f6c7937fc10e"
    }
}
Vollständiges Beispiel
{
    "extension":  [
        {
            "url": "indicator",
            "valueBoolean": true
        },
        {
            "url": "counter",
            "valueRatio": {
                "numerator": {
                    "value": 2
                },
                "denominator": {
                    "value": 4
                }
            }
        },
        {
            "url": "period",
            "valuePeriod": {
                "start": "2024-06-15"
            }
        },
        {
            "url": "id",
            "valueIdentifier": {
                "system": "urn:ietf:rfc:3986",
                "value": "urn:uuid:33bff9fb-75dc-43b4-8593-f6c7937fc10e"
            }
        }
    ],
    "url": "https://gematik.de/fhir/epa-medication/StructureDefinition/multiple-prescription-extension"
}

Auslesen der Dosierungsangaben

In der aktuellen Version soll ausschließlich der String text innerhalb des Dosage-Elements aus der eML ausgelesen werden, da nur dieses Element berücksichtigt werden muss. Das Dosage.text-Element enthält die textuellen Dosieranweisungen, wie sie in dem aktuellen Verordnungssatz üblich sind, beispielsweise in der Form “1-0-1-0” oder ähnliche Darstellungen wie “2mal tägl. 5ml”.

Strukturierte Unterelemente innerhalb des Dosage-Elements, wie doseQuantity, timing oder route, sollen ignoriert werden und müssen nicht verarbeitet werden.

Das Dosage-Element wird in den folgenden Datensätzen der eML verwendet:

  • MedicationRequest.dosageInstruction
  • MedicationDispense.dosageInstruction

"dosageInstruction": [
    {
      "text": "2mal tägl. 5ml"
    }
]

Die Dosierungsangaben erscheinen in den Dispensierinformationen des AVS nur dann, wenn der Apotheker diese im Vergleich zu den Dosierinformationen in der Verordnung konkretisiert, verbessert oder angepasst hat.

Daraus ergibt sich, dass in der eML die Dosierungsangaben aus dem Verordnungsdatensatz (MedicationRequest.dosageInstruction.text) genutzt werden, wenn keine spezifischen Dosierungsinformationen im Dispensierdatensatz (MedicationDispense.dosageInstruction.text) vorliegen.

Prüfe Dosierungsangaben imDispensierdatensatz (MedicationDispense.dosageInstruction.text)Dosierungsangaben vorhanden?JaNeinDosierungsangaben aus demDispensierdatensatz(MedicationDispense.dosageInstruction.text)Dosierungsangaben aus demVerordnungsdatensatz(MedicationRequest.dosageInstruction.text)
Abbildung: Ausleselogik für Dispensierinformationen

Auslesen der Arzneimittelbezeichnung

Um die Arzneimittelbezeichnung auszulesen, muss das Element Medication.code.text aus der Medication-Ressourceninstanz verwendet werden. Sollte das text-Element nicht vorhanden sein, sollte der Wert aus Medication.code.coding.display für das System http://fhir.de/CodeSystem/ifa/pzn ausgelesen werden.

Wichtig: Die Medication aus dem Abgabedatensatz (MedicationDispense.medicationReference) hat Vorrang gegenüber der Medication, die in der MedicationRequest referenziert wird und sollte für die Darstellung verwendet werden, wenn die Abgabe durchgeführt wurde.

Medication.code.text vorhanden?JaNeinArzneimittelbezeichnung aus demtext-Element verwenden(Medication.code.text)Medication.code.coding vorhanden?JaNeinMedication.code.coding[x].system == http://fhir.de/CodeSystem/ifa/pznJaNeinMedication.code.coding[x].display vorhanden?JaNeinArzneimittelbezeichnung aus demDisplaynamen verwenden(Medication.code.coding[x].display)Displayname nicht vorhanden,keine Arzneimittelbezeichnung verfügbarSystem ist nicht PZN, nächsten Code prüfenÜberprüfen der Elemente in Medication.code.codingWeitere Medication.code Codierungen vorhanden?Keine gültige Arzneimittelbezeichnung gefundenKeine Codierungen vorhanden,keine Arzneimittelbezeichnung verfügbar
Abbildung: Ausleselogik für die Arzneimittelbezeichnung

Beispiel

{
  "resourceType": "Medication",
  "code": {
    "coding": [
      {
        "code": "03852301",
        "system": "http://fhir.de/CodeSystem/ifa/pzn"
      }
    ],
    "text": "Tamoxifen AL 20 Tabletten N1"
  },
 ...
}

Beispiel ohne code.text

{
  "resourceType": "Medication",
  "code": {
    "coding": [
      {
        "code": "03852301",
        "system": "http://fhir.de/CodeSystem/ifa/pzn",
        "display": "TAMOXIFEN AL 20 Tabletten 30 St Tabletten"
      }
    ],
  },
 ...
}

Auslesen der Pharmazentralnummer (PZN)

Zum Auslesen der Pharmazentralnummer (PZN) muss das Element Medication.code.coding:pzn verwendet werden. Dabei ist zu beachten, dass PZN-Codes immer das System http://fhir.de/CodeSystem/ifa/pzn nutzen. Wenn dieses System nicht in Medication.code.coding angegeben ist, liegt kein PZN-Code vor.

Wichtig: Die Medication aus dem Abgabedatensatz (MedicationDispense.medicationReference) hat Vorrang gegenüber der Medication, die in der MedicationRequest referenziert wird und sollte für die Darstellung verwendet werden, wenn die Abgabe durchgeführt wurde.

Medication.code.coding vorhanden?JaNeinMedication.code.coding[x].system == http://fhir.de/CodeSystem/ifa/pznJaNeinMedication.code.coding[x].code vorhanden?JaNeinPZN aus dem Code verwenden(Medication.code.coding[x].code)Code nicht vorhanden,keine PZN verfügbarSystem ist nicht PZN, nächsten Code prüfenÜberprüfen der Elemente in Medication.code.codingWeitere Medication.code Codierungen vorhanden?Keine gültige PZN gefundenKeine Codierungen vorhanden,keine PZN verfügbar
Abbildung: Ausleselogik für die Pharmazentralnummer (PZN)

Beispiel

{
    "resourceType": "Medication",
    ...
    "code": {
        "coding":  [
            {
                "system": "http://fhir.de/CodeSystem/ifa/pzn",
                "code": "08545331",
                "display": "IBU-ratiopharm 800mg akut Schmerztabletten"
            },
            {
                "system": "http://fhir.de/CodeSystem/bfarm/atc",
                "code": "M01AE01",
                "display": "Ibuprofen",
                "version": "2022"
            }
        ]
    },
    ...
}

Abrufen der Darreichungsform (Form)

Für die Darstellung der Darreichungsform wird das Element Medication.form.coding aus der Medication-Ressourceninstanz verwendet. Dabei sollte primär der Displayname (Medication.form.coding.display) für die Darstellung herangezogen werden. Ist kein Displayname verfügbar, wird der Code (Medication.form.coding.code) verwendet.

Falls mehrere Codierungen in unterschiedlichen Systemen für die Darreichungsform angegeben sind, ist die Codierung mit dem System https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM zu bevorzugen.

Wichtig: Die Medication aus dem Abgabedatensatz (MedicationDispense.medicationReference) hat Vorrang gegenüber der Medication, die in der MedicationRequest referenziert wird und sollte für die Darstellung verwendet werden, wenn die Abgabe durchgeführt wurde.

Medication.form.coding vorhanden?JaNeinMedication.form.coding[x].system == https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORMJaNeinMedication.form.coding[x].display vorhanden?JaNeinDarreichungsform aus dem Displaynamen verwenden(Medication.form.coding[x].display)Displayname nicht vorhanden,Darreichungsform aus dem Code verwenden(Medication.form.coding[x].code)System nicht bevorzugt, nächste Codierung prüfenÜberprüfen der Codierungen in Medication.form.codingWeitere Codierungen vorhanden?Keine Codierungen mit bevorzugtem System gefundenMedication.form.coding[x].display vorhanden?JaNeinDarreichungsform aus dem Displaynamen verwenden(Medication.form.coding[x].display)Displayname nicht vorhanden,Darreichungsform aus dem Code verwenden(Medication.form.coding[x].code)Überprüfen der verbleibenden CodierungenWeitere Codierungen vorhanden?Keine Darreichungsform verfügbarKeine Codierungen vorhanden,keine Darreichungsform verfügbar
Abbildung: Ausleselogik für die Darreichungsform

Beispiel

{
    "resourceType": "Medication",
    ...
    "form": {
        "coding": [
            {
                "display": "Tabletten",
                "code": "TAB",
                "system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM"
            }
        ]
    }
    ...
}

Beispiel ohne “display”

{
    "resourceType": "Medication",
    ...
    "form": {
        "coding": [
            {
                "code": "TAB",
                "system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM"
            }
        ]
    }
    ...
}

Beispiel mehrere Codierungen

{
    "resourceType": "Medication",
    ...
    "form": {
        "coding":  [
            {
                "system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM",
                "code": "TAB",
                "display": "Tabletten",
            },
            {
                "system": "http://standardterms.edqm.eu",
                "code": "12200",
                "display": "Tablet"
            },
            {
                "system": "http://snomed.info/sct",
                "code": "385055001",
                "display": "Tablet (basic dose form)",
            }
        ]
    },
    ...
}

Auslesen der Wirkstoffnamen und Wirkstärke

Die Wirkstoffnamen werden über das Element Medication.ingredient.itemCodeableConcept.text ausgelesen. Ist das text-Element nicht vorhanden, wird stattdessen der Displayname aus Medication.ingredient.itemCodeableConcept.coding.display verwendet. Dabei hat das text-Element stets Vorrang.

Die Wirkstärke wird aus dem Element Medication.ingredient.strength ausgelesen und setzt sich aus dem Wert (strength.value) sowie der Einheit zusammen. Wenn das Element strength.unit vorhanden ist, wird dieses für die Einheit verwendet. Ist strength.unit nicht angegeben, wird stattdessen der Code (strength.code) genutzt. Der Code gibt die Codierung für die Einheit an, beispielsweise “mg”.

Wichtig: Die Medication aus dem Abgabedatensatz (MedicationDispense.medicationReference) hat Vorrang gegenüber der Medication, die in der MedicationRequest referenziert wird und sollte für die Darstellung verwendet werden, wenn die Abgabe durchgeführt wurde.

Medication.ingredient vorhanden?JaNeinMedication.ingredient[x].itemCodeableConcept.text vorhanden?JaNeinWirkstoffname aus dem Text-Element extrahieren(Medication.ingredient[x].itemCodeableConcept.text)Medication.ingredient[x].itemCodeableConcept.coding vorhanden?JaNeinMedication.ingredient[x].itemCodeableConcept.coding[y].display vorhanden?JaNeinWirkstoffname aus dem Displaynamen extrahieren(Medication.ingredient[x].itemCodeableConcept.coding[y].display)Keine gültigen Namen in deraktuellen Codierung gefundenÜberprüfen der Codierungen inMedication.ingredient[x].itemCodeableConcept.codingWeitere Codierungen vorhanden?Keine Codierungen vorhanden,Wirkstoffname für dieses Ingredientnicht verfügbarMedication.ingredient[x].strength vorhanden?JaNeinMedication.ingredient[x].strength.unit vorhanden?JaNeinWirkstärke aus Wert und Einheit (unit) extrahierenMedication.ingredient[x].strength.valueMedication.ingredient[x].strength.unitWirkstärke aus Wert und Code (code) extrahierenMedication.ingredient[x].strength.valueMedication.ingredient[x].strength.codeKeine Wirkstärke fürdieses Ingredient angegebenÜberprüfen der Ingredientsin Medication.ingredientWeitere Ingredients vorhanden?Alle Wirkstoffnamen undWirkstärken wurden extrahiertKeine Ingredients vorhanden,keine Wirkstoffnamen oderWirkstärken verfügbar
Abbildung: Ausleselogik für die Wirkstoffnamen und Wirkstärken

Beispiel

{
    "resourceType": "Medication",
    ...
    "ingredient":[
        {
            "itemCodeableConcept": {
                "text": "Tamoxifen"
            },
            ...
        }
    ],
    ...
}

Beispiel mit itemCodeableConcept.coding

{
  "resourceType": "Medication",
  ...
  "ingredient": [
    {
      "itemCodeableConcept": {
        "coding": [
          {
            "code": "387207008",
            "system": "http://snomed.info/sct",
            "display": "Ibuprofen (substance)"
          }
        ]
      },
      ...
    }
  ]
}

Beispiel mit Medication.ingredient.strength

{
    "resourceType": "Medication",
    ...
    "ingredient":
    [
        {
            "itemCodeableConcept":
            {
                "coding":
                [
                    {
                        "code": "387207008",
                        "system": "http://snomed.info/sct",
                        "display": "Ibuprofen (substance)"
                    }
                ],
                "text": "Ibuprofen"
            },
            "strength":
            {
                "numerator":
                {
                    "value": 400,
                    "code": "mg",
                    "system": "http://unitsofmeasure.org",
                },
                "denominator":
                {
                    "value": 1,
                    "code": "{Tablet}",
                    "system": "http://unitsofmeasure.org",
                }
            }
        }
    ]
}

Auslesen der Wirkstoffe mit PZN-Arzneimitteln (Medication-Instanz) als Zutaten (Ingredients)

Die Arzneimittelbezeichnung und die PZN werden aus der referenzierten Medication-Instanz im contained-Element ausgelesen (Medication.contained), die über das Element Medication.ingredient.itemReference.reference angegeben ist.

Die Arzneimittelbezeichnung wird zuerst über das Element Medication.code.text extrahiert. Ist das text-Element nicht vorhanden, wird stattdessen der Displayname aus Medication.code.coding.display verwendet. Dabei hat das text-Element stets Vorrang.

Die PZN wird aus dem Element Medication.code.coding extrahiert. Hierbei wird die Codierung mit dem System http://fhir.de/CodeSystem/ifa/pzn verwendet. Der Wert wird aus Medication.code.coding.code entnommen und stellt die Pharmazentralnummer (PZN) dar.

Medication.ingredient vorhanden?JaNeinReferenzierte Medication suchenaus contained anhand itemReference.referenceReferenzierte Medication gefunden?JaNeincontained.code.text vorhanden?JaNeinArzneimittelbezeichnung auscontained.code.text extrahierencontained.code.coding.display vorhanden?JaNeinArzneimittelbezeichnung auscontained.code.coding.display extrahierenKeine Arzneimittelbezeichnung verfügbarcontained.code.coding[system=http://fhir.de/CodeSystem/ifa/pzn].code vorhanden?JaNeinPZN aus contained.code.coding extrahieren(System: http://fhir.de/CodeSystem/ifa/pzn)Keine PZN verfügbarKeine referenzierte Medication gefundenfür dieses IngredientMedication.ingredient[x].strength vorhanden?JaNeinMedication.ingredient[x].strength.numerator.unit vorhanden?JaNeinWirkstärke aus strength.numerator extrahieren(value + unit)Wirkstärke aus strength.numerator extrahieren(value + code)Keine Wirkstärke fürdieses Ingredient angegebenÜberprüfen der Ingredients inMedication.ingredientWeitere Ingredients vorhanden?Alle PZN, Arzneimittelbezeichnungen undWirkstärken wurden extrahiertKeine Ingredients vorhanden,keine Daten verfügbar
Abbildung: Ausleselogik für die PZN-Arzneimittel-Wirkstoffe und Wirkstärken (Medication-Instanz)

Beispiel für eine Medication mit Wirkstoffen als PZN-Arzneimittel

{
  "resourceType": "Medication",
  ...
  "form": {
    "coding": [
      {
        "system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_KBV_DARREICHUNGSFORM",
        "code": "SAL",
        "display": "Salbe"
      }
    ]
  },
  "contained": [
    {
      "resourceType": "Medication",
      "id": "MedicationHydrocortison",
      "meta": {
        "profile": [
          "https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-pzn-ingredient"
        ]
      },
      "extension": [
        {
          "url": "https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-type-extension",
          "valueCoding": {
            "code": "781405001",
            "system": "http://snomed.info/sct",
            "display": "Medicinal product package (product)"
          }
        }
      ],
      "code": {
        "coding": [
          {
            "system": "http://fhir.de/CodeSystem/ifa/pzn",
            "code": "03424249",
            "display": "Hydrocortison 1% Creme"
          }
        ]
      },
      "batch": {
        "lotNumber": "56498416854"
      }
    },
    {
      "resourceType": "Medication",
      "id": "MedicationDexpanthenol",
      "meta": {
        "profile": [
          "https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-pzn-ingredient"
        ]
      },
      "extension": [
        {
          "url": "https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-type-extension",
          "valueCoding": {
            "code": "781405001",
            "system": "http://snomed.info/sct",
            "display": "Medicinal product package (product)"
          }
        }
      ],
      "code": {
        "coding": [
          {
            "system": "http://fhir.de/CodeSystem/ifa/pzn",
            "code": "16667195",
            "display": "Dexpanthenol 5% Creme"
          }
        ]
      },
      "batch": {
        "lotNumber": "0132456"
      }
    }
  ],
  "code": {
    "text": "Hydrocortison-Dexpanthenol-Salbe"
  },
  "ingredient": [
    {
      "itemReference": {
        "reference": "#MedicationHydrocortison"
      },
      "isActive": true,
      "strength": {
        "numerator": {
          "value": 50,
          "system": "http://unitsofmeasure.org",
          "code": "g",
          "unit": "g"
        },
        "denominator": {
          "value": 100,
          "system": "http://unitsofmeasure.org",
          "code": "g",
          "unit": "g"
        }
      }
    },
    {
      "itemReference": {
        "reference": "#MedicationDexpanthenol"
      },
      "isActive": true,
      "strength": {
        "numerator": {
          "value": 50,
          "system": "http://unitsofmeasure.org",
          "code": "g",
          "unit": "g"
        },
        "denominator": {
          "value": 100,
          "system": "http://unitsofmeasure.org",
          "code": "g",
          "unit": "g"
        }
      }
    }
  ]
}