TIFlow - Verordnungen für Arzneimittel
Version 2.0.0-ballot.1 - ci-build

Mapping von Verordnungsdaten

Nach Einstellen eines E-Rezepts durch ein verordnendes System müssen die Verordnungsdaten an den ePA Medication Service übermittelt werden.

Die Verordnung wird technisch als ein KBV_PR_ERP_Bundle eingestellt und muss an den ePA Medication Service in die EPAOpProvidePrescriptionERPInputParameters Struktur überführt werden.

Transformation des Bundles
Abbildung: Transformation des KBV_PR_ERP_Bundle in EPAOpProvidePrescriptionERPInputParameters


Hierbei werden verschiedene Quellen benötigt, um die Daten vollständig zu überführen:

  • Der Verordnungsdatensatz als KBV_PR_ERP_Bundle
  • Die Nutzerinformation (zeta-user-info) der Anfrage zur $activate-Operation

Übersicht des Mappingvorgehens

Für dieses Mapping wird ein FHIR-Bundle in eine FHIR-Parameters Struktur überführt. Ein FHIR Bundle enthält eine Liste von FHIR-Ressourcen (entries). Dort ist tabellarisch beschrieben, wie die einzelnen Elemente des KBV_PR_ERP_Bundle in die entsprechenden Elemente der Provide_Prescription_Parameters Struktur überführt werden und welche Mappings für die enthaltenen Ressourcen verwendet werden.

Die folgende Seite beschreibt das generelle Mapping des Bundles:

Diese Structuremap kann in Kombination mit den StructureMaps aus diesem Projekt verwendet werden, um die Verordnungsdaten in die von der ePA geforderten Formate zu überführen.

Die folgenden Seiten beschreiben die Mappings der einzelnen Ressourcen im Detail:

Transformationsregeln für Verordnungsdaten

Einige Daten müssen zusätzlich durch Transformationsregeln angepasst oder ergänzt werden. Die folgenden Transformationsregeln werden für das Mapping von Verordnungsdaten verwendet:

Organization für provide Prescription

ID F_006b
Beschreibung

Bei provide Prescription ist die Organization aus der KBV_PR_FOR_Organization zu mappen.

Der Transformator muss sicherstellen, dass bei Organization.identifier mindestens die TelematikID der Organisation enthalten, die auch im ACCESS_TOKEN der Anfrage angegeben ist. Dazu muss nach der A_25946 die TelematikId bei “identifier:TelematikID” durch die idNummer aus dem ACCESS_TOKEN des verwendeten Operationsaufrufes ersetzt werden bzw. erzeugt werden, wenn diese nicht vorhanden ist.

Folgende Operationen sind zusätzlich zum Mapping der StructureMaps durchzuführen:

Organization.identifier:TelematikID idNummer → aus dem ACCESS_TOKEN der Anfrage

Organization.name organizationName → aus dem ACCESS_TOKEN der Anfrage

Organization.type:profession professionOID → aus dem ACCESS_TOKEN der Anfrage

Profile
Referenzen

Address Slices in Organization

ID F_007
Beschreibung

Beim Mapping der Organization bei providePrescription (siehe 006b) sollen die Extensions der Adresse:

  • Organization.address:Strassenanschrift.line.extension:Adresszusatz
  • Organization.address:Strassenanschrift.line.extension:Hausnummer
  • Organization.address:Strassenanschrift.line.extension:Strasse in das OpenSlicing des Organization-Profils des VZD übernommen werden, auch wenn diese nicht explizit dort modelliert sind.
Profile
Referenzen

Eintrag für MedicationRequest.subject

ID F_010
Beschreibung

Das Befüllen des MedicationRequest.subject muss erfolgen, indem die Werte von

  • Patient.identifier.system
  • Patient.identifier.value

aus dem KbvBundle.patient.identifier übernommen werden und in der folgenden Form im ePA MedicationRequest angegeben werden:

  <subject>
    <identifier>
      <system value="http://fhir.de/sid/gkv/kvid-10" />
      <value value="X110411319" />
    </identifier>
  </subject>
Profile
Referenzen

Befüllung von Practitioner.name

ID F_011
Beschreibung

Der Practitioner.name.text ist ein Pflichtfeld und muss aus den Namensinformationen erzeugt werden.

Dabei ist folgende Bildungsregel anzuwenden:

def build_practitioner_name(practitioner):
  # Verknüpft Elemente einer Liste zu einem String, getrennt durch Leerzeichen
  def join_with_space(elements):
    return " ".join(elements)

  # Hilfsfunktion zum Abrufen des Werts einer Extension
  def get_extension_value(extensions, url):
    for ext in extensions:
      if ext.get("url") == url:
        return ext.get("valueString") or ext.get("valueCode", "")
    return ""

  # Namenszusätze und Präfix-Qualifier URLs
  namenszusatz_url = "http://hl7.org/fhir/StructureDefinition/humanname-namenszusatz"
  nachname_url = "http://hl7.org/fhir/StructureDefinition/humanname-own-name"
  vorsatzwort_url = "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix"
  prefix_qualifier_url = "http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier"

  # Zusätzliche Namenskomponenten aus den Extensions abrufen
  family_extensions = practitioner["name"][0]["family"]["extension"]
  namenszusatz = get_extension_value(family_extensions, namenszusatz_url)
  nachname = get_extension_value(family_extensions, nachname_url)
  vorsatzwort = get_extension_value(family_extensions, vorsatzwort_url)
  prefix_extensions = practitioner["name"][0].get("prefix", [{}])[0].get("extension", [])
  prefix_qualifier = get_extension_value(prefix_extensions, prefix_qualifier_url)

  # Zusammensetzung des Namens
  prefix = join_with_space([practitioner["name"][0].get("prefix", {}).get("value", "")])
  given_name = practitioner["name"][0].get("given", "")
  family_name = f"{vorsatzwort} {nachname} {namenszusatz}".strip()

  # Zusammensetzen des vollständigen Namens mit Leerzeichen dazwischen
  full_name = f"{prefix_qualifier} {prefix} {given_name} {family_name}".strip()

  return full_name


# Beispielhafte Verwendung
practitioner_example = {
  "name": [
    {
      "use": "official",
      "family": {
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/humanname-namenszusatz",
            "valueString": "von",
          },
          {
            "url": "http://hl7.org/fhir/StructureDefinition/humanname-own-name",
            "valueString": "Müller",
          },
          {
            "url": "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix",
            "valueString": "Dr.",
          },
        ],
        "family": "Müller",
      },
      "given": "Hans",
      "prefix": [
        {
          "extension": [
            {
              "url": "http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier",
              "valueCode": "AC",
            }
          ],
          "value": "Prof.",
        }
      ],
    }
  ]
}

print(build_practitioner_name(practitioner_example))
Profile
Referenzen

Befüllung der Telematik-ID des Arztes

ID F_013-01
Beschreibung

Die Telematik-ID des Arztes wird wie folgt ermittelt und gesetzt:

  • Primär: Aus der QES-Signatur des Zertifikats.
  • Fallback: Wenn keine Telematik-ID in der QES-Signatur vorhanden ist, wird die Seriennummer des Zertifikats (Subject Serial Number) ausgelesen und die zugehörige Telematik-ID über die Nachschlagetabelle ermittelt.
  • Fehlerfall: Kann die Telematik-ID nicht ermittelt werden, wird die Verordnung nicht übertragen
Profile
Referenzen

Mapping des korrekten Practitioners

ID F_016
Beschreibung

Im https://simplifier.net/erezept/kbv_pr_erp_bundle sind zwei Practitioner erlaubt (AusstellendeVerschreibendeVerantwortlichePerson). Beim Mapping für provide-prescription muss der Practitioner übernommen werden, welcher in der Composition (https://simplifier.net/erezept/kbvprerpcomposition) unter “author” referenziert wird:

  <author> 
    <reference value="Practitioner/667ffd79-42a3-4002-b7ca-6b9098f20ccb"/> 
    <type value="Practitioner"/> 
  </author> 
  <attester> 
    <mode value="legal"/> 
    <party> 
      <reference value="Practitioner/d6f3b55d-3095-4655-96dc-da3bec21271c"/> 
    </party> 
  </attester>
Profile
Referenzen

Mapping von KBV_PR_ERP_Medication_Compounding

ID F_017
Beschreibung

Handelt es sich bei der ingredient des QuellProfils um einen PZN Codierten Wirkstoff muss eine contained Medication vom Typ “EPA Medication Ingredient” hinzugefügt werden

Hinweis: F_009 findet hier auch Anwendung

Daher muss wenn Medication eine KBV_PR_ERP_Medication_Compounding ist:

Für jedes ingredient:

  1. Wenn ingredient.itemCodeableConcept.coding.system=http://fhir.de/CodeSystem/ifa/pzn dann weiter zu 2.
  2. Füge eine Medication (contained) hinzu vom Typ “EPA Medication Ingredient”:
  <Medication>
      <id value="MedicationHydrocortison-FD" />
      <meta>
          <profile value="https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-pzn-ingredient" />
      </meta>
      <!-- "EPA Medication Ingredients" haben haben immer diese Extension -->
      <extension url="https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-type-extension">
          <valueCoding>
              <system value="http://snomed.info/sct" />
              <version value="http://snomed.info/sct/900000000000207008/version/20240201" />
              <code value="781405001" />    
              <display value="Medicinal product package (product)" />
          </valueCoding>
      </extension>
      <code>
          <coding>
              <system value="http://fhir.de/CodeSystem/ifa/pzn" />
              <code value="03424249" />                       <!-- Wert von ingredient.itemCodeableConcept.coding.code -->
              <display value="Hydrocortison 1% Creme" />      <!-- Wert von ingredient.itemCodeableConcept.text -->
          </coding>
          <text value="Hydrocortison 1% Creme" />             <!-- Wert von ingredient.itemCodeableConcept.text -->
      </code>
  </Medication>
  1. In der Ziel Medication.ingredient setze die itemReference:
<itemReference>
    <reference value="#MedicationHydrocortison-FD" />
</itemReference>

Hinweise:

“EPA Medication Ingredients” haben haben immer die Extension:

  <extension url="https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-type-extension">
    <valueCoding>
        <system value="http://snomed.info/sct" />
        <version value="http://snomed.info/sct/900000000000207008/version/20240201" />
        <code value="781405001" />    
        <display value="Medicinal product package (product)" />            
    </valueCoding>
  </extension>

Die Werte in der EPA Medication Ingredients für <code> werden wie folgt gesetzt

  • code: Wert von ingredient.itemCodeableConcept.coding.code
  • display: Wert von ingredient.itemCodeableConcept.text
  • text: Wert von ingredient.itemCodeableConcept.text
Profile
Referenzen

Erzeugen von Medication.extension:type

ID F_020
Beschreibung

Bei der Erzeugung von

  • EPA Medication
  • EPA Medication Ingredient
  • EPA Pharmaceutical Product Medication

soll nach Möglichkeit Medication.extension:type erzeugt und mit dem korrekten Wert belegt werden.

Folgende Optionen stehen für ePA 3.0 zur Verfügung (s. EPAMedicationTypeVS):

Code Display Deutsche Entsprechung
781405001 Medicinal product package (product) Fertigarzneimittel
1208954007 Extemporaneous preparation (product) Rezeptur
373873005 Pharmaceutical / biologic product (product) Komponente einer Kombipackung

Für folgende Konstellationen sind die Codes entsprechend zu setzen:

# Konstellation Quellprofil Erkennung/Kriterium EPA Medication (type) EPA Medication Ingredient (type) EPA Pharmaceutical Product Medication (type)
1 PZN Verordnung KBV_PR_ERP_Medication_PZN .form.code != KPG Fertigarzneimittel (781405001, Medicinal product package (product)) n/a n/a
2 PZN Verordnung einer Kombipackung KBV_PR_ERP_Medication_PZN .form.code = KPG Extension nicht setzen (wird über .form.code erkannt) n/a n/a
3 Wirkstoffverordnung KBV_PR_ERP_Medication_Ingredient Fertigarzneimittel (781405001, Medicinal product package (product)) n/a n/a
4 Freitextverordnung KBV_PR_ERP_Medication_FreeText Extension nicht setzen n/a n/a
5 Rezeptur ohne PZNs in Rezepturbestandteilen KBV_PR_ERP_Medication_Compounding .ingredient.itemCodeableConcept.text Rezeptur (1208954007, Extemporaneous preparation (product)) n/a n/a
6 Rezeptur mit PZNs in Rezepturbestandteilen KBV_PR_ERP_Medication_Compounding .ingredient.itemCodeableConcept.coding.code:pzn Rezeptur (1208954007, Extemporaneous preparation (product)) Fertigarzneimittel (781405001, Medicinal product package (product)) n/a
Profile