ELGA e-Medikation (R4) DRAFT
0.1.1 - ci-build

Zugriffsarten auf den Medikationsplan

Im Folgenden werden standardisierte Interaktionen für den lesenden und schreibenden Zugriff auf den Medikationsplan erläutert, die für alle technischen Use Cases relevant sind.

Read-only-Zugriff

Beim Read-only-Zugriff wird der aktuelle Medikationsplan (zuletzt gespeichertes Collection Bundle) von der Fachanwendung unverändert bereitgestellt.

Das Collection Bundle enthält:

  • die List-Ressource des Medikationsplans
  • alle referenzierten Ressourcen (z.B. MedicationRequest, Patient, Practitioner) vollständig (inline)
  • Es erfolgt keine Veränderung von Flags, Status oder Inhalten.
  • Der Zugriff dient ausschließlich der Anzeige bzw. Information.

Ist zum Zeitpunkt der Abfrage kein Medikationsplan für den/die Patient:in vorhanden, liefert die Fachanwendung ein leeres Ergebnis zurück.

Ablauf

 GDA 1 e-Med Fachanwendung GDA 2 Patiente-Med FAGDA 1e-Med FAGDA 2PatientGDA 1GDA 1e-Med FAe-Med FAGDA 2GDA 2PatientPatiente-Med FARead1GET Medikationsplan2Prüfung auf bestehendenMedikationsplan3Collection Bundle (unverändert)Fachanwendung liefert Medikationsplan zurück.Read-only-Zugriff


Abruf aktueller Medikationsplan:

  • Aktuelle Planversion mit dem Suchparameter Patient abrufen: GET [base]/Bundle?type=collection&_count=1&_sort=-timestamp&list.subject={bPK-GH}
  • Alle Planversionen mit dem Suchparameter Patient abrufen: GET [base]/Bundle?type=collection&_sort=-timestamp&list.subject={bPK-GH}

Abruf historischer Medikationsplanversionen mit Suchkriterien:

  • Abfrage alle historischen collections zu dem Patienten, die nach dem angegebenen Datum gespeichert wurden und list.entry.flag=removed haben:
    • GET [base]/Bundle?type=collection&_sort=-timestamp&timestamp=ge2025-01-01&list.subject={bPK-GH}&list.entry.flag=removed (TODO query prüfen)

Read-to-Write-Zugriff

Der Read-to-Write-Zugriff dient der Vorbereitung einer Änderung des Medikationsplans:

  • Bei einem Read-to-Write-Zugriff prüft die Fachanwendung zunächst, ob bereits ein Medikationsplan vorhanden ist. Ist dies nicht der Fall, wird dieser erstellt (siehe Sub_UC_06_01 - Initial erstellter Medikationsplan) und zurückgeliefert.

  • Existiert bereits ein Medikationsplan (d.h. es wurde bereits ein Collection Bundle persistiert), wird von der Fachanwendung aus diesem ein Collection Bundle zur Auslieferung erstellt:

    • mit einem neuen List.identifier (wird von der Fachanwendung zur späteren Schreibintegritätsprüfung gespeichert)
    • die Inhalte werden von der Fachanwendung wie folgt aufbereitet:
      • Wenn List.entry.flag newunchanged
      • Wenn List.entry.flag changedunchanged
      • Wenn List.entry.flag removed → Einträge werden aus der Liste entfernt
      • Einträge mit abgelaufenem Behandlungszeitraum bleiben erhalten
    • die Fachanwendung liefert diese zurück an den GDA:
      • inkl. List und aller referenzierten Ressourcen (inline)
      • ergänzt um den List.identifier
      • Ziel ist ein neutraler, weiterbearbeitbarer Zustand für den nächsten GDA

Custom Operations

$readtowrite

Write-Zugriff

Der Write-Zugriff ist eine eigenständige Operation, die ausschließlich im Kontext eines vorherigen Read-to-Writes erfolgen darf:

  • Der GDA übermittelt den aktualisierten Medikationsplan als Transaction Bundle:
    • Inline enthalten: neue und geänderte Ressourcen
    • Referenziert: unveränderte Ressourcen
  • Die Fachanwendung prüft u.a. ob der übermittelte List.identifier mit dem List.identifier der temporär gespeicherten Medikationsplanversion übereinstimmt (d.h. es wurde zwischenzeitlich kein anderer Schreibvorgang durchgeführt)
    • Stimm der List.identifier nicht überein, lehnt die Fachanwendung die Aktualisierung des Medikationsplans ab. Es muss erneut ein Read-to-Write ausgeführt werden und die Aktualisierungen übernommen werden, bevor ein neuerlicher Speicherversuch gestartet werden kann.
  • Bei erfolgreicher Prüfung:
    • werden die übermittelten Änderungen in die Ressourcen übernommen und
    • der neue Medikationsplan persistiert (Collection Bundle)

Custom Operations

$write

Ablauf

 GDA 1 e-Med Fachanwendung GDA 2 PatientGDA 1e-Med FAe-Med FAGDA 1e-Med FAGDA 2PatientGDA 1GDA 1e-Med FAe-Med FAGDA 2GDA 2PatientPatientGDA 1e-Med FAe-Med FARead-to-Write1POST $readtowriteMedikationsplan abrufen,mit der Intention zu schreiben2Prüfung auf bestehendenMedikationsplan3Erstellt Collection Bundle zur Auslieferung(inkl. neuem List.identifier)für Read-to-Write:- new|changed → unchanged- removed → entfernen4Collection Bundle + List.identifier5Einträge hinzufügen/ändern/entfernenMedikationsplan bearbeitenWrite6PUT $write (Transaction Bundle + List.identifier)7TransactionBundle.List.identifier ==temporär gespeicherter List.identifier?alt[gültig]8Persistiert neue Version desMedikationsplansNeuer Medikationsplan gespeichert9OK[ungültig]10Fehler (Konflikt): ein anderer GDA hatzwischenzeitlich geschrieben -> neues Read-to-Write nötigRead-to-Write- / Write-Zugriff


Abgelehnter Write-Zugriff

  • Wenn weitere Akteure (hier GDA 2) ein Read-to-Write ausführen, während GDA 1 das von der Fachanwendung übermittelte Bundle bearbeitet, erhalten sie:
    • dasselbe Collection Bundle (mit dem selben List.identifier), das zuvor schon GDA 1 übermittelt wurde.
  • Nur bei jenem Akteur, der zuerst ein Write ausführt, wird der temporär in der Fachanwendung vorgehaltene List.identifier mit dem eigenen im TransactionBundle.List.identifier übereinstimmen, da der termporäre List.identifier danach gelöscht wird.
  • Bei einem späteren Schreibversuch eines anderen Akteurs mit dem ursprünglich gleichen List.identifier wird die Prüfung daher fehlschlagen und ein Speichern abgelehnt.
  • Erst ein weiteres Read-to-Write löst wieder das generieren eines zur Auslieferung bereitgestellten temporären Collection Bundles inkl. neuem List.identifier aus.

Ablauf

 GDA 1 e-Med Fachanwendung GDA 2 PatientGDA 1e-Med FAe-Med FAe-Med FAe-Med FAGDA 2GDA 1e-Med FAGDA 2PatientGDA 1GDA 1e-Med FAe-Med FAGDA 2GDA 2PatientPatientGDA 1e-Med FAe-Med FAe-Med FAe-Med FAGDA 2Read-to-Write durch GDA 11POST $readtowrite (Patient)2Prüfung auf bestehendenMedikationsplan3Erstellt Collection Bundle zur Auslieferung(inkl. neuem List.identifier "123")für Read-to-Write:- new|changed → unchanged- removed → entfernen4Collection Bundle + List.identifier "123"5Einträge hinzufügen/ändern/entfernenGDA 1 bearbeitet MedikationsplanRead-to-Write durch GDA 26POST $readtowrite (Patient)7Prüfung auf bestehendenMedikationsplan8Erstellt Collection Bundle zur Auslieferung(inkl. neuem List.identifier "123")für Read-to-Write:- new|changed → unchanged- removed → entfernen9Collection Bundle + List.identifier "123"10Einträge hinzufügen/ändern/entfernenGDA 2 bearbeitet MedikationsplanWrite durch GDA 211PUT $write (Transaction Bundle + List.identifier "123")12TransactionBundle.List.identifier "123" ==temporär gespeicherter List.identifier "123"13Persistiert neue Version desMedikationsplans mit List.identifier "123"14Löscht temporären List.identifier "123"15OKMedikationsplan wurde durch GDA 2 aktualisiert.Write-Error für GDA 116PUT $write (Transaction Bundle + List.identifier "123")17TransactionBundle.List.identifier "123" stimmt nichtmit temporär gespeicherten List.identifier überein(kein Eintrag vorhanden)18Fachanwendung lehnt Speichern ab19Fehler (Konflikt): ein anderer GDA hatzwischenzeitlich geschriebenSpeichern des Medikationsplans wurde abgelehnt, der GDA 1 muss ein neues Read-to-Write ausführen.Write-Error