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

​Technische Use Cases für Medikationsplan lesen (UC_eMed_05)

Ein berechtigter GDA kann den Medikationsplan eines ELGA-Teilnehmers lesen.

Ein ELGA-Teilnehmer kann seinen Medikationsplan über das Zugangsportal einsehen.

Für den lesenden Zugriff werden zwei Zugriffsarten unterschieden:

  • Plan-Read zum Abruf des aktuellen Medikationsplans. Hierfür wird aus dem persistierten Medikationsplan ein temporäres Auslieferungs-Medikationsplan-Collection-Bundle erzeugt, das für eine mögliche Bearbeitung aufbereitet ist. Der Abruf erfolgt mit der Custom Operation $plan-read.
  • Plan-History-Read zum Abruf historischer, unveränderlicher Versionen eines persistierten Medikationsplans.

Sub_UC_eMed_05_01 - Aktuellen Medikationsplan lesen (Plan-Read)

Plan-Read dient dem Abruf des Medikationsplans in einem für die Bearbeitung durch den GDA aufbereiteten Zustand. Hierfür erzeugt die Fachanwendung aus dem zuletzt persistierten Medikationsplan ein Auslieferungs-Medikationsplan-Collection-Bundle. Der Abruf erfolgt über die Custom Operation $plan-read.

Ablauf
  1. Der Client führt einen POST $plan-read aus.
  2. Die Fachanwendung prüft, ob bereits ein Medikationsplan für den Patienten existiert.
  3. Existiert dieser (persistiertes Medikationsplan-Collection-Bundle) und ist nicht leer (nicht mit einem emptyReason gekennzeichnet), wird daraus ein Auslieferungs-Medikationsplan-Collection-Bundle erzeugt. Dabei werden folgende Transformationen durchgeführt:
    • List.entry.flag = new und changed werden auf unchanged gesetzt.
    • Einträge mit List.entry.flag = removed werden aus der List.entry und aus dem Bundle entfernt.
    • Einträge mit abgelaufenem Behandlungszeitraum bleiben erhalten.
    • Das persistierte Medikationsplan-Collection-Bundle bleibt unverändert.
  4. Die Fachanwendung prüft, ob nach dem Entfernen aller mit removed gekennzeichneten Listeneinträge noch Planeinträge vorhanden sind.
  5. Sind noch Einträge vorhanden, liefert die Fachanwendung das Auslieferungs-Medikationsplan-Collection-Bundle zurück. Dieses enthält:
    • im HTTP-Header den ETag der zugrunde liegenden persistierten Version für Optimistic Locking
    • die List-Ressource
    • sämtliche in der List-Ressource referenzierten Ressourcen
  6. Wurden sämtliche Einträge entfernt, wird List.emptyReason = nilknown gesetzt und dasAuslieferungs-Medikationsplan-Collection-Bundle mit einer leeren Liste List.emptyReason = nilknown zurückgeliefert.
  7. Wurde ein leerer Medikationsplan persistiert (List.emptyReason = nilknown) (siehe Sub_UC_eMed_06_02 - Leerer Medikationsplan (keine Medikation)) oder nach derm initialen Abruf keine Planänderung vorgenommen (List.emptyReason = notstarted), ist keine Transformation erforderlich und das erzeugte Auslieferungs-Medikationsplan-Collection-Bundle wird unverändert inkl. ETag im Header zurückgeliefert.
  8. Existiert kein Medikationsplan, wird dieser gemäß Sub_UC_eMed_05_03 - Initial erstellter Medikationsplan automatisch initial erstellt und wie oben beschrieben ausgeliefert.

Nachfolgend kann der Medikationsplan vom GDA bearbeitet werden und ein Plan-Write erfolgen.

Custom Operations

$plan-read

Sequenzdiagramm
Plan-ReadGDA 1GDA 1e-Med FAe-Med FAAktuellen Medikationsplan lesen1POST $plan-readAbruf des Medikationsplanszur Bearbeitung2Existiert ein persistierterMedikationsplan?alt: Medikationsplan persistiert?[ja: Planeinträge vorhanden (kein emptyReason)]3Erzeugt Auslieferungs-Collection BundleTransformation:- new|changed → unchanged- removed -> aus List und Bundle entfernenDas persistierte Medikationsplan-Collection Bundle bleibt unverändert.4Sind nach der TransformationListeneinträge vorhanden?alt: Planeinträge vorhanden?[ja]5Auslieferungs-Collection Bundle+ ETag[nein: Leerer Medikationsplan]6List.emptyReason = nilknown setzen7Auslieferungs-Collection Bundlemit List.emptyReason = nilknown+ ETag[ja: leerer Medikationsplan (mit emptyReason = notstarted | nilknown)]8Erzeugt Auslieferungs-Collection BundleKeine Transformation erforderlich.List.emptyReason bleibt unverändert.9Auslieferungs-Collection Bundle(mit List.emptyReason)+ ETag[nein: kein Medikationsplan persistiert]refSiehe Sub_UC_eMed_05_03 -Initial erstellter MedikationsplanNachfolgend kann derMedikationsplan bearbeitet werdenund ein Plan-Write erfolgen.


Sub_UC_eMed_05_02 - Historische Medikationsplanversion lesen (Plan-History-Read)

Beim Plan-History-Read stellt die Fachanwendung eine persistierte Version des Medikationsplan-Collection-Bundles einschließlich aller referenzierten Ressourcen unverändert bereit.

Ablauf
  1. Der Client führt einen POST $plan-history-read aus.
  2. Die Fachanwendung prüft, ob Medikationspläne (persistierte Medikationsplan-Collection-Bundles) entsprechend den Suchparametern existieren.
  3. Existieren ein oder mehrere Medikationsplan-Collection-Bundles, werden diese als Bundle (type=searchset) zurückgeliefert. Jedes Medikationsplan-Collection-Bundle enthält:
    • die List-Ressource des Medikationsplans
    • alle referenzierten Ressourcen vollständig (inline).
  4. Existiert kein Medikationsplan-Collection-Bundle, wird ein leeres Bundle (type=searchset) zurückgegeben.
  5. Im Fehlerfall erfolgt eine entsprechende Meldung an den Client.

Beim Plan-History-Read erfolgt keine Änderung der Medikationspläne durch die Fachanwendung. Insbesondere werden keine Inhalte, Statusinformationen oder Kennzeichnungen (Flags) verändert.
Der Zugriff dient ausschließlich der Anzeige bzw. Informationsabfrage persistierter Medikationsplanversionen.

Custom Operations

$plan-history-read: in Arbeit.

Sequenzdiagramm
Plan-History-ReadGDA 1GDA 1e-Med FAe-Med FAHistorische Medikationspläne lesen1POST $plan-history-read2Prüfung auf existierendeMedikationsplan-Collection-Bundlesalt: Medikationsplan-Collection-Bundles gefunden?[ja: Collection-Bundles entsprechend Suchparametern]3Bundle (type=searchset) mit zumindest einemMedikationsplan-Collection-Bundle[nein: kein Medikationsplan-Collection-Bundle entsprechend Suchparametern]4Bundle (type=searchset) ohne Einträge[Fehler]5OperationOutcomeDie Fachanwendung liefert die den Suchparamenternentsprechenden, persistierten Medikationspläne(unverändert, inkl. aller referenzierten Ressourcen)oder ein leeres Bundle zurück.


Beispiele für Zugriffe

In Arbeit <!–TODO: wenn plan-history-read eine Operation bleibt stimmt dieser Teil nicht mehr -> dann würden Operation IN Parameter zum Einsatz kommen

  • 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}
  • Abfrage aller historischen Medikationsplan-Versionen eines Patienten, die nach dem angegebenen Datum persistiert wurden und Plan-Einträge enthalten, die als storniert, beendet oder abgesetzt gekennzeichnet sind: GET [base]/Bundle?type=collection&_sort=-timestamp&timestamp=ge2025-01-01&list.subject={bPK-GH}&list.entry.flag=removed –>

Sub_UC_eMed_05_03 - Initial erstellter Medikationsplan

Die initiale Erstellung eines Medikationsplans erfolgt ausschließlich durch die e-Medikation-Fachanwendung. Sie wird ausgelöst, wenn im Rahmen eines erstmaligen Aufrufs von $plan-read noch kein Medikationsplan für den ELGA-Teilnehmer existiert.

Der dabei erzeugte initiale Medikationsplan besitzt den Wert List.emptyReason = notstarted. Dieser kennzeichnet ausschließlich den Initialzustand des Medikationsplans. Er bedeutet, dass bisher noch keine Medikationsplaneinträge erfasst wurden, trifft jedoch keine Aussage darüber, ob der Patient Medikamente einnimmt.

Die Initialisierung kann sowohl durch ein GDA-System als auch durch den ELGA-Teilnehmer über das Portal ausgelöst werden, indem erstmals ein $plan-read aufgerufen wird.

Ablauf
  1. Ein Client führt für einen ELGA-Teilnehmer erstmalig ein POST $plan-read aus.
  2. Die Fachanwendung prüft, ob bereits ein Medikationsplan für den Patienten existiert.
  3. Existiert noch kein persistierter Medikationsplan, erstellt die Fachanwendung ein persistiertes Medikationsplan-Collection-Bundle mit:
    • einer List Ressource, welche den Wert emptyReason = notstarted besitzt und keine List.entry Einträge enthält
    • einer Patient Ressource
  4. Das erzeugte Medikationsplan-Collection-Bundle wird als initialer Medikationsplan persistiert.
  5. Für das Plan-Read erzeugt die Fachanwendung daraus ein Auslieferungs-Medikationsplan-Collection-Bundle.
  6. Dieses wird mit demselben List.emptyReason = notstarted sowie dem zugehörigen ETag an den Client zurückgeliefert.
Sequenzdiagramm
Initial erstellter MedikationsplanGDA 1GDA 1e-Med FAe-Med FAErstmaliges Plan-Read1POST $plan-readAbruf des Medikationsplanszur Bearbeitung2Existiert ein persistierterMedikationsplan?alt[nein: kein Medikationsplan persistiert]3Erzeugt leeren MedikationsplanList mit emptyReason = "notstarted"4PersistiertMedikationsplan-Collection Bundle5Erzeugt Auslieferungs-Collection BundleKeine Transformationerforderlich.6Auslieferungs-Collection Bundle(List.emptyReason = notstarted)+ ETag[ja: Medikationsplan persistiert]refSiehe Ablauf Plan-Read.
Relevante Elemente (List)
AtElgaEmedListMedikationsplan
    identifier: von der Fachanwendung übermittelt (Integritätsprüfung) 
    status: current
    mode: working
    date: Datum der Erstellung durch die Fachanwendung
    source: Intitiale Erstellung durch die Fachanwendung
    emptyReason: notstarted    // noch keine Medikationsplaneinträge erfasst