ELGA e-Diagnose R4 (Draft)
0.1.0 - ci-build

Interaktionen mit Listenressourcen

ToDo: Wording Liste, eDiagnosenliste,…

Listenressourcen bilden die organisatorische Struktur der e-Diagnose und dienen der Zusammenstellung fachlicher Einzelressourcen zu den Kategorien Diagnosen, Prozeduren sowie Allergien und Intoleranzen. Die Zugehörigkeit zu einer Liste bestimmt die fachliche Relevanz einer Ressource (meta.tag=relevant). Die nachfolgenden Sub-Use-Cases beschreiben die Initialisierung und Verwaltung dieser Listen sowie das Aufnehmen, Entfernen und Umordnen von Einträgen. Fachliche Änderungen an Diagnosen, Prozeduren sowie Allergien und Intoleranzen erfolgen ausschließlich über die jeweiligen Einzelressourcen.

List-History-Read

Der History Read dient ausschließlich der Anzeige historischer Versionen einer Liste. Die Fachanwendung stellt bereits persistierte historische Collection Bundles unverändert bereit. Der Zugriff erfolgt lesend und ermöglicht keine nachfolgende Bearbeitung der Liste.

Ablauf

  1. Der GDA fürht ein GET (Suche) auf den List-Typ aus.
  2. Die Fachanwendung prüft, ob Listen entsprechend der Suchparameter vorhanden sind.
  3. Werden keine Listen gebunden, wird ein leeres Ergebnis zurückgeliefert.
  4. Wird zumindest eine Liste gefunden, liefert die Fachanwendung ein Search-Bundle zurück.
    Dieses Search-Bundle enthält:
    • die List-Ressource
    • alle referenzierten Ressourcen (Patient, Practitioner, Condition, Procedure, AllergyIntolerance)

Beim List History Read erfolgt keine Veränderung von Flags, Status oder Inhalten durch die Fachanwendung.
Der Zugriff dient ausschließlich der Anzeige bzw. Informationsabfrage von aktueller oder historischer Listversionen.

Sequenzdiagramm List History Read


Vergangene Versionen einer Liste abrufenGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose Fachanwendung1GET /List?_include=List:patient&_include=List:source&_include:iterate=List:item&criteria...2Auf bestehendeListe(n) prüfenalt: Liste(n) gefunden?[Liste(n) entsprechend der Suchparametern vorhanden]Die Fachanwendung liefert die gespeicherte Liste(unverändert, inkl. aller referenzierten Ressourcen) zurück.3Bundle (type=searchset) mit zumindest einer Liste[keine Liste entsprechend der Suchparameter vorhanden]4leeres Bundle (type=searchset)[Fehler]5OperationOutcome


Beispiele für Zugriffe mittels Suchparameter:

  • Aktuelle Listenversion der relevanten Diagnosen (Conditions) mit dem Suchparameter Patient abrufen: GET [base]/Patient/[id]/List?_include=List:patient&_include=List:source&_include:iterate=List:item&_count=1&_sort=-date&code=http://loinc.org|11450-4
  • Alle Listenversionen der relevanten Operationen (Procedures) mit dem Suchparameter Patient abrufen: GET [base]/Patient/[id]/List?_include=List:patient&_include=List:source&_include:iterate=List:item&_sort=-date&code=http://loinc.org|47519-4

List-Read

List Read dient dem Abruf der Liste und der Vorbereitung einer nachfolgenden Änderung.

Ablauf

  1. Der GDA führt einen POST $list-read auf das Search-Bundle aus, dass die Liste mit allen zugehörigen relevanten Ressourcen enthält.
  2. Die Fachanwendung prüft auf Existenz der Liste für die angegebene Patientin bzw. den angegebenen Patienten.
  3. Ist keine Liste vorhanden, wird dieser erstellt siehe Liste-initialisieren und
  4. eine leere Liste mit dem emptyReason notstarted wird zurückgeliefert.
  5. Existiert bereits eine Liste, wird von der Fachanwendung aus diesem ein Search-Bundle zur Auslieferung bereitgestellt. Die Inhalte werden von der Fachanwendung wie folgt aufbereitet:
    • Falls der vorherige GDA neue Listeneinträge hinzugefügt hat (List.entry.flag hat den Wert new), werden diese auf unchanged gesetzt.
    • Falls der vorherige GDA Listenneinträge beendet hat (deren List.entry.flag haben den Wert removed), werden diese Einträge aus der Liste entfernt.
    • Falls der vorherige GDA alle vorhandenen Einträge mit removed gekennzeichnet hat, wird List.emptyReason mit nilknown zurückgeliefert, um nachfolgenden GDA zu signalisieren, dass der Patient zum Zeitpunkt des letzten Schreibens keine Einträge hatte.
  6. Die Fachanwendung liefert an den GDA die Liste und alle referenzierten Ressourcen.
  7. Ziel ist ein neutraler, weiterbearbeitbarer Zustand für den abrufenden GDA.

Sequenzdiagramm List Read


Liste und zugehörige Ressourcen abrufen ($list-read)GDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose Fachanwendung1POST /[Condition|Procedure|AllergyIntolerance]/$list-read2Auf bestehende Liste(n) prüfenalt: Liste(n) vorhanden?[Liste(n) vorhanden]3Liste mit aktuellem List.date ermitteln4Prüfen, ob List.emptyReason vorhanden istalt: List.emptyReason vorhanden?[nein]5Flags der Listeneinträge aufbereitennew|changed → unchangedremoved → entfernen6Zählen der Listeneinträgealt: Anzahl Einträge?[zumindest ein Eintrag]7Collection-Bundle (List mit Einträgen) +ETag für Optimistic Locking[Liste leer]8List.emptyReason = nilknown setzen9Collection-Bundle (List ohne Einträge) +ETag für Optimistic Locking[ja]10Collection-Bundle (List ohne Einträge) +ETag für Optimistic Locking[Keine Liste vorhanden]11Leere Liste mit List.emptyReason = notstarted erzeugen12Collection-Bundle (List ohne Einträge) +ETag für Optimistic Locking


List-Write

List Write ist eine eigenständige Operation, die ausschließlich im Kontext eines zuvor ausgeführten List-Read erfolgen darf.

Ablauf

  1. Der GDA übermittelt via POST $ListWrite die aktualisierte Liste als List Bundle:
    • alle neuen und geänderten und zu entfernenden Ressourcen sind inline im Bundle enthalten,
    • alle unveränderten Ressourcen werden nur referenziert.
  2. Die Fachanwendung prüft, ob der übermittelte List.identifier mit dem List.identifier der temporär gespeicherten Listenversion übereinstimmt (d.h. es wurde zwischenzeitlich kein anderer Schreibvorgang durchgeführt).
  3. Stimmt der List.identifier nicht überein, lehnt die Fachanwendung das Speichern ab. Es muss erneut ein List Read ausgeführt werden. Die Änderungen sind anschließend auf Basis der aktuellen Listversion erneut vorzunehmen und zu speichern.
  4. Ist die Prüfung erfolgreich, validiert die Fachanwendung die neue Liste und stellt sicher, dass keine unzulässigen Zustandsübergänge vorgenommen wurden.
  5. Bei erfolgreicher Validierung:
    • werden die übermittelten Änderungen in die Ressourcen übernommen,
    • und auf Basis der aktualisierten Ressource erstellt die Fachanwendung ein neues Collection Bundle, das als neue Lsite persistiert wird.
  6. Der GDA erhält eine Meldung, dass die Liste erfolgreich aktualisiert wurde.

Sequenzdiagramm List Write


Liste aktualisieren ($list-write)GDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose FachanwendungVorbedingung: Nach einem $list-readwurde die Liste bearbeitet.1List.source = aktueller GDA2List.date = aktueller Zeitpunkt3POST /[Condition|Procedure|AllergyIntolerance]/$list-write (List + ETag)4ETag im Header ==ETag der Fachanwendung?alt: ETag stimmt überein?[ja]5Inhalte validieren(keine unzulässigen Zustandsübergänge)alt: Validierung erfolgreich[ja]6Neue Version persistierenNeue Version der Liste als eigene List-Instanz gespeichert.7HTTP 200 OK[nein]8HTTP 4xx Fehler / OperationOutcome[nein]9HTTP 4xx Fehler / OperationOutcome


Abgelehnter List Write

Ablauf

  1. GDA 1 führt einen POST $ListRead auf die Liste einer Patientin bzw. eines Patienten durch.
  2. Die Fachanwendung prüft, ob eine Liste existiert.
  3. Die Fachanwendung liefert die aktuelle Liste als Collection Bundl mit dem aktuellen List.identifier „123" an GDA 1 aus.
  4. GDA 1 beginnt mit der fachlichen Bearbeitung der Liste.
  5. Währenddessen führt GDA 2 ebenfalls ein List Read auf dieselbe Liste durch.
  6. Die Fachanwendung liefert auch an GDA 2 die aktuelle Liste mit dem List.identifier „123" aus.
  7. GDA 2 bearbeitet die Liste.
  8. GDA 2 sendet zuerst mittels POST $ListWrite ein Transaction Bundle mit den vorgenommenen Änderungen.
  9. Die Fachanwendung prüft, ob der im Transaction Bundle enthaltene List.identifier mit dem aktuellen List.identifier der zuletzt gespeicherten Liste übereinstimmt.
  10. Die Prüfung verläuft erfolgreich, da beide den Wert „123" besitzen.
  11. Die Fachanwendung validiert die übermittelten Änderungen und prüft insbesondere, ob keine unzulässigen Zustandsübergänge vorliegen.
  12. Die Änderungen werden übernommen und eine neue Version der Liste wird persistiert.
  13. Dabei wird ein neuer List.identifier erzeugt, beispielsweise „124".
  14. GDA 2 erhält eine Meldung, dass die Aktualisierung erfolgreich durchgeführt wurde.
  15. Anschließend sendet GDA 1 mittels POST $ListWrite seine ebenfalls auf Basis des ursprünglichen List.identifier „123" vorgenommenen Änderungen.
  16. Die Fachanwendung prüft erneut den übermittelten List.identifier gegen die aktuell persistierte Diagnosenliste.
  17. Die Prüfung schlägt fehl, da die aktuelle Liste mittlerweile den List.identifier „124" besitzt.
  18. Die Fachanwendung lehnt das Speichern ab.
  19. GDA 1 erhält eine Fehlermeldung, dass zwischenzeitlich eine neuere Version der Liste gespeichert wurde.
  20. GDA 1 muss erneut einen POST $ListRead durchführen, die zwischenzeitlich vorgenommenen Änderungen prüfen und gegebenenfalls in die aktuelle Version übernehmen, bevor ein neuer Schreibvorgang erfolgen kann.

Sequenzdiagramm Abgelehnter List Write


ListWriteErrorGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose FachanwendungGDA 2GDA 2FAFA$list-read durch GDA 11POST /Condition/$list-read2Collection-Bundle + ETag "123"GDA 1 bearbeitet Liste$list-read durch GDA 23POST /Condition/$list-read4Collection-Bundle + ETag "123"GDA 2 bearbeitet Liste$list-write durch GDA 25POST /Condition/$list-write (List + ETag "123")6ETag "123" im Header ==ETag der Fachanwendung "123"Fachanwendung aktualisiert Inhalte.7HTTP 200 OKError für GDA 18POST /Condition/$list-write (List + ETag "123")9ETag im Header "123" stimmt nichtmit ETag der Fachanwendungüberein, da er bereits zum Schreibenverwendet wurde.Fachanwendung lehnt Speichern ab.10HTTP 4xx Fehler / OperationOutcomeSpeichern der Liste wurde abgelehnt,der GDA 1 muss ein neues $list-read ausführen.


Sub_UC_eDiag_06_01 - Nach Initialisierung leere Liste bestätigen

ToDo: Die Überprüfung aus diesem UC wird bereits bei List-Read durchgeführt. Teil des ELGA Core. emptyReason #nilknown. Im eDiag wir müssen zusätzlich angeben welcher ListType es ist. Eine leere Liste mit dem Wert emptyReason = nilknown bedeutet, dass für den Patienten derzeit keine relevanten Einträge vorliegen. Der Status dokumentiert somit explizit das Fehlen von relevanten Einträgen und ist von einer noch nicht befüllten Liste zu unterscheiden.

Nach Initialisierung leere Liste bestätigenGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose Fachanwendungref$list-readalt: List.emptyReason == notstartedGDA erhält das von der FAübermittelte Collection-Bundleund bestätigt, dass keine Einträge(Condition/Procedure/AllergyIntolerance)dokumentiert werden müssen.1List.emptyReason = nilknownref$list-write

Sub_UC_eDiag_06_02 - Bestehende Ressource in eine Liste aufnehmen

Nach dem Erfassen einer neuen medizinischen Ressource Sub_UC_eDiag_06_09 kann diese in eine Liste aufgenommen werden. Die Fachanwendung kennzeichnet die Ressource anschließend als relevant (meta.tag = relevant).

Ablauf

Bestehende Ressource in eine Liste aufnehmenGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose FachanwendungVorbedingung: Im System des GDA 1 liegt einebestehende Ressource (Condition/Procedure/AllergyIntolerance)vor, die in eine Liste aufgenommen werden soll. Diese kann gerade erst erstellt worden sein oderaus der Gesamtansicht abgerufen worden sein.ref$list-readGDA erhält ein Collection-Bundle von derFachanwendung und bearbeitet die enthalteneList-Ressource.1Bestehende Ressource auswählen2List.entry hinzufügen- List.entry.flag = new- List.entry.item = Referenz auf bestehende RessourceDie ausgewählte Ressourcewird als neuer Listeneintragaufgenommen.refList-Write3meta.tag = relevant setzenDie Ressource in der Listemit List.entry.flag = new wurdeals relevant gekennzeichnet.

Sub_UC_eDiag_06_03 - Bestehende relevante Listeinträge fachlich bearbeiten

TODo: Der GDA kann Einträge in einer Liste fachlich bearbeiten - stimmt nicht mehr? 1. Schritt, ich erstelle eine neue 2 Schritt: Will ich sie verknüpfen, muss ich auf die bestehenden Ressourcen zugreifen mit dem Identifier 123, der muss vom Client zwischengespeichert werden, damit dieser an die FA mitgesendet werden kann.

Ablauf

Bestehenden Eintrag innerhalb einer Liste fachlich bearbeitenGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose Fachanwendungref$list-readGDA wählt bestehenden Eintrag(Condition/Procedure/AllergyIntolerance) ausund bearbeitet die Ressource1Bestehenden List.entry auswählen2Referenzierte Ressource (Condition/Procedure/AllergyIntolerance) laden3Fachliche Änderungen durchführenrefDiagnosen, Prozeduren sowie Allergien und Intoleranzen erfassen4Alten Eintrag aus Liste entfernen (List.entry.flag = removed)5Neuen Eintrag zu Liste an passender Stelle hinzufügen (List.entry.flag = new)ref$list-write

Sub_UC_eDiag_06_04 - Reihenfolge von Listeinträge ändern

Der GDA kann die Reihenfolge der Listeinträge ändern. Die Einträge selbst bleiben dabei unverändert. Evtl. auch in den ELGA Core mitnehmen.

Sub_UC_eDiag_06_05 - Einträge aus einer Liste entfernen

Die Referenz auf die Ressource wird aus der Liste entfernt (removed). Die referenzierte Ressource bleibt unverändert bestehen. Die Fachanwendung entfernt die Kennzeichnung als relevant (meta.tag = not-relevant).

Ablauf

Bestehende Ressource aus einer Liste entfernenGDA 1GDA 1e-Diagnose Fachanwendunge-Diagnose Fachanwendungref$list-readGDA erhält ein Collection-Bundle von derFachanwendung und bearbeitet die enthalteneList-Ressource.1List.entry entfernen- List.entry.flag = removedrefList-Write2meta.tag = not-relevant setzenDie Ressource in der Listemit List.entry.flag = removed wurdeals nicht relevant gekennzeichnet.

Sub_UC_eDiag_06_08 - Liste durch ELGA-Teilnehmer:in löschen

Der ELGA-Teilnehmer kann via ELGA-Portal eine aktuelle, einzelne oder alle historischen Versionen einer Liste unwiderruflich löschen.

Hierfür markiert der Patient die zu löschende Liste und führt über das Portal ein DELETE aus, mit dem Resultat, dass die ausgewählten Listen durch die Fachanwendung gelöscht werden.