Skip to content

Commit

Permalink
Merge pull request #361 from gematik/feat/add-info-on-notification-pa…
Browse files Browse the repository at this point in the history
…t-merge

add ig requirements + comments + examples
  • Loading branch information
f-peverali authored Jan 25, 2024
2 parents d40d228 + 892e4db commit a42089d
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,23 +1,58 @@
# Patient-merge Notification
# Patient merge und Notification
Im Rahmen von Krankenhausbesuchen umfassen u.a. die Aufnahme-Workflows regelmäßig die manuelle Bearbeitung von Patientenstammdaten. Daher ist hier das Risiko redundant persistierter Patientendaten stets vorhanden. Dies hat auch zur Folge, dass Zusammenführungen von Patientendaten in Krankenhäusern an der Tagesordnung stehen.
Die Patientendatenzusammenführung (Patient merge) bezeichnet den Workflow der Bereinigung redundanter Patienten-Instanzen innerhalb eines KIS oder einer KH-IT-Umgebung. Die Bereinigung geschieht erfahrungsgemäß als halbautomatisierter Prozess, für den dedizierte Komponenten eingesetzt werden können.

## patient-merge
Mergen von Patienten ist Aufgabe des zu bestätigenden Systems, ein externes Starten eines merge Prozesses, bspw. durch die [$patient-merge Operation aus R5](https://hl7.org/fhir/R5/patient-operation-merge.html) ist nicht gefordert
Ziel dieses Spezifikations-Abschnitts ist es, dass externe Clients Patient-merge-Vorgänge nachvollziehen und entsprechend verarbeiten können.
Entsprechend wird hier eine Festlegung zur Kommunikation eines stattgefundenen Patient merges (Patient merge Notification) gegenüber einem Subsystem oder einem externen Service - u.a. mittels FHIR Subscriptions - festgelegt.


## Patient merge
Mergen von Patienten ist Aufgabe des bestätigungsrelevanten Systems (d.h. hier des patientenführenden Systems - in der Regel des KIS).
Ein externes Starten eines Patient merge - bspw. durch die [$patient-merge Operation aus R5](https://hl7.org/fhir/R5/patient-operation-merge.html) - ist nicht gefordert.

**Hinweis**: Die Patienten-Ressource, die nicht weiter verwendet werden soll, nennen wir im Folgenden die "obsolete Ressource". Die Ressource, die erhalten bleiben soll, nennen wir "resultierende Ressource".

## Gemergte Patienten Instanz
Wenn ein Patient merge geschieht, gelten für das patientenführende System folgende Anforderungen:

**REQ_BAS_PAT-MER-010**: Das patientenführende System MUSS sicherstellen, dass ein externer Client, dem ein lesender Zugriff auf eine Patienten-Ressource erteilt wurde, auch nach einem Patient merge auf diese obsolete Ressource zugreifen kann, um eine Abfrage auf die resultierende Ressource mittels .link-Elements zu ermöglichen. Dies MUSS solange gelten, bis das patientenführende System sicherstellen kann - z.B. mittels eines vereinbarten Workflows -, dass alle Abfragen des Clients, die potentiell auf die obsolete Ressource zielen könnten, in Zukunft auf die resultierende Ressource zielen.

### Datenelemente des ersetzten Patienten:
### Datenelemente der obsoleten Patienten-Ressource

**REQ_BAS_PAT-MER-011**: Das patientenführende System MUSS nach einem merge die Elemente der obsoleten Ressource folgendermaßen befüllen, um sicherzustellen, dass die obsolete Ressource auf die resultieren Ressource verweist und das die obsolete Ressource als inaktiv gekennzeichnet ist:
- .active = false
- .link.other = Reference(auf “neuen” Patient)
- .link.other = Reference(auf “resultierenden” Patient)
- .link.type = “replaced-by”

### Datenelemente der resultierenden Patienten-Ressource

**REQ_BAS_PAT-MER-012**: Das patientenführende System KANN nach einem merge die Elemente der resultierende Ressource folgendermaßen befüllen, um sicherzustellen, dass die resultierende Ressource auf die obsolete Ressource verweist:
- .link.other = Reference(auf “obsoleten” Patient)
- .link.type = “replaced-by”

## Beispiele
Die Patient merge Notification kann folgendermaßen illustriert werden: ex existieren fälschlicherweise zwei Instanzen, die sich lediglich hinsichtlich der organisationsspezfischen Patiente-ID unterscheiden.
Diese sind:

"Quell" Patienten-Ressource:
{{json:DorisQuelle}}

und

"Ziel" Patienten-Ressource:
{{json:DorisZiel}}

Mittel eines Patient merge vorgangs wird die "Ziel" Patienten-Ressource ausgewählt und beide Ressourcen entsprechend modifiziert:

Obsolete Patienten-Ressource:
{{json:DorisObsolet}}

Resultierende Patientin:
{{json:DorisResultat}}

Gemergte Patientin:
{{json:DorisDuplikat}}
## Patient merge Notification
**REQ_BAS_PAT-MER-020**: Das patientenführende System MUSS einen Client mittels FHIR Subscription über einen erfolgten Patienten merge informieren können.

"Neue" Patientin:
{{json:DorisOriginal}}
Hier wird aktuell geklärt ob dies mittels r4 Subscription oder R5 backport topic-based Subscription erfolgen soll.

## Patient-merge Notification
Clients werden mittels FHIR Subscription über einen erfolgten Patienten-merge informiert. Hier wird aktuell geklärt ob dies mittels r4 Subscription oder R5 backport topic-based Subscription erfolgen soll.

1 change: 1 addition & 0 deletions Resources/input/fsh/ISiKPatient.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ Description: "Dieses Profil beschreibt die Nutzung von administrativen Patienten
* postalCode 1.. MS
* country 1.. MS
* link MS
* ^comment = "Dieses und untergoerdnete Elemente MÜSSEN bei einem erfolgten Patient merge entsprechend der Festlegungen im Implementation Guide befüllt werden."
* other MS
* type MS

Expand Down
62 changes: 38 additions & 24 deletions Resources/input/fsh/patient-merge.fsh
Original file line number Diff line number Diff line change
@@ -1,58 +1,72 @@
Instance: DorisDuplikat
Instance: DorisQuelle
InstanceOf: ISiKPatient
Usage: #example
* identifier[VersichertenId-GKV].type = $identifier-type-de-basis#GKV
* identifier[VersichertenId-GKV].system = "http://fhir.de/sid/gkv/kvid-10"
* identifier[VersichertenId-GKV].value = "A123456789"
* identifier[Patientennummer].type = $v2-0203#MR
* identifier[Patientennummer].system = "https://fhir.krankenhaus.example/sid/PID"
* identifier[Patientennummer].value = "TestPID"
* identifier[Patientennummer].value = "654321"
* active = false
* name[Name]
* family = "Duplikat"
* given = "Doris"
* gender = #female
* birthDate = "1964-08-12"

Instance: DorisZiel
InstanceOf: ISiKPatient
Usage: #example
* identifier[VersichertenId-GKV].type = $identifier-type-de-basis#GKV
* identifier[VersichertenId-GKV].system = "http://fhir.de/sid/gkv/kvid-10"
* identifier[VersichertenId-GKV].value = "A123456789"
* identifier[Patientennummer].type = $v2-0203#MR
* identifier[Patientennummer].system = "https://fhir.krankenhaus.example/sid/PID"
* identifier[Patientennummer].value = "123456"
* active = true
* name[Name]
* family = "Duplikat"
* given = "Doris"
* gender = #female
* birthDate = "1964-08-12"

Instance: DorisObsolet
InstanceOf: ISiKPatient
Usage: #example
* identifier[VersichertenId-GKV].type = $identifier-type-de-basis#GKV
* identifier[VersichertenId-GKV].system = "http://fhir.de/sid/gkv/kvid-10"
* identifier[VersichertenId-GKV].value = "A123456789"
* identifier[Patientennummer].type = $v2-0203#MR
* identifier[Patientennummer].system = "https://fhir.krankenhaus.example/sid/PID"
* identifier[Patientennummer].value = "654321"
* active = false
* name[Name]
* family = "Duplikat"
* given = "Doris"
* gender = #female
* birthDate = "1964-08-12"
* address[+].type = #both
* address[=].line[+] = "Musterweg 2"
* address[=].line[=].extension[+].url = "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName"
* address[=].line[=].extension[=].valueString = "Musterweg"
* address[=].line[=].extension[+].url = "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber"
* address[=].line[=].extension[=].valueString = "2"
* address[=].city = "Musterhausen"
* address[=].postalCode = "98764"
* address[=].country = "DE"
* link
* other = Reference(DorisOriginal)
* other = Reference(DorisResultat)
* type = #replaced-by


Instance: DorisOriginal
Instance: DorisResultat
InstanceOf: ISiKPatient
Usage: #example
* identifier[VersichertenId-GKV].type = $identifier-type-de-basis#GKV
* identifier[VersichertenId-GKV].system = "http://fhir.de/sid/gkv/kvid-10"
* identifier[VersichertenId-GKV].value = "A123456789"
* identifier[Patientennummer].type = $v2-0203#MR
* identifier[Patientennummer].system = "https://fhir.krankenhaus.example/sid/PID"
* identifier[Patientennummer].value = "TestPID"
* identifier[Patientennummer].value = "123456"
* active = true
* name[Name]
* family = "Duplikat"
* given = "Doris"
* gender = #female
* birthDate = "1964-08-12"
* address[+].type = #both
* address[=].line[+] = "Musterweg 2"
* address[=].line[=].extension[+].url = "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName"
* address[=].line[=].extension[=].valueString = "Musterweg"
* address[=].line[=].extension[+].url = "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber"
* address[=].line[=].extension[=].valueString = "2"
* address[=].city = "Musterhausen"
* address[=].postalCode = "98764"
* address[=].country = "DE"
* link
* other = Reference(DorisDuplikat)
* other = Reference(DorisObsolet)
* type = #replaces

Profile: PatientMergeSubscription
Expand Down

0 comments on commit a42089d

Please sign in to comment.