Implementation Guide
TIFlow - Verordnungen für Arzneimittel
Version 2.0.0-ballot.2 - ballot

## Mapping des Verordnenden für Verordnungsdaten

Diese Seite beschreibt Anforderungen und Umsetzungsunterstützung für das Mapping vom

- KBV_FOR_PR_Practitioner
- zum PractitionerDirectory.

## Wichtige Punkte beim Mapping der Practitioner Ressource

Die folgenden Punkte sind relevant für das Mapping der Practitioner Ressource:

- Die Telematik-ID wird aus dem Accesstoken der Anfrage bezogen (F_013)
- Der Name des Practitioners muss aus Bestandteilen zusammengesetzt werden (F_011)
- Es muss überprüft werden, welcher Practitioner zu mappen ist (F_016)
- Die Qualifikation des Practitioners darf nicht übertragen werden

## Generelles Mapping des Profils

Die folgende Tabelle stellt generell das Mapping der beiden Profile gegenüber:

### Feld-Mappings

Quelle (Eingangsdaten) | Ziel (Ausgabedaten) | Aktion | Transformation & Beschreibung
--- | --- | --- | ---
`KBVPRFORPractitioner.meta` | `PractitionerDirectory.meta.profile` | Fester Wert | setzt festen Wert: `https://gematik.de/fhir/directory/StructureDefinition/PractitionerDirectory`
`KBVPRFORPractitioner.name` | `PractitionerDirectory.name` | Manuell | Zum Erzeugen von name.text siehe Transformationsregel F_011 | Quelle: Practitioner.name.text
`KBVPRFORPractitioner.qualification` | `PractitionerDirectory.qualification` | Nicht Übertragen | Feld wird nicht gemappt | Quelle: Practitioner.qualification:ASV-Fachgruppennummer
`KBVPRFORPractitioner.qualification` | `PractitionerDirectory.qualification` | Nicht Übertragen | Feld wird nicht gemappt | Quelle: Practitioner.qualification:Berufsbezeichnung
`KBVPRFORPractitioner.qualification` | `PractitionerDirectory.qualification` | Nicht Übertragen | Feld wird nicht gemappt | Quelle: Practitioner.qualification:Typ

## Transformationsregeln

Folgende zusätzliche Anmerkungen und Regeln sind für das Mapping zu umzusetzen:

#### 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 | KBV_PR_FOR_Practitioner PractitionerDirectory
Referenzen | ANFERP-2639

#### 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 | PractitionerDirectory
Referenzen | A_25946 - E-Rezept-Fachdienst - ePA Mapping

#### 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 | KBV_PR_ERP_Bundle EPAOpProvidePrescriptionERPInputParameters KBV_PR_FOR_Practitioner PractitionerDirectory
Referenzen | ANFERP-2780