diff --git a/ImplementationGuide/markdown/UebergreifendeFestlegungen/UebergreifendeFestlegungen_Patient-merge.md b/ImplementationGuide/markdown/UebergreifendeFestlegungen/UebergreifendeFestlegungen_Patient-merge.md index 20e35946..2466aa22 100644 --- a/ImplementationGuide/markdown/UebergreifendeFestlegungen/UebergreifendeFestlegungen_Patient-merge.md +++ b/ImplementationGuide/markdown/UebergreifendeFestlegungen/UebergreifendeFestlegungen_Patient-merge.md @@ -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. diff --git a/Resources/input/fsh/ISiKPatient.fsh b/Resources/input/fsh/ISiKPatient.fsh index 62be57f1..437f2dc1 100644 --- a/Resources/input/fsh/ISiKPatient.fsh +++ b/Resources/input/fsh/ISiKPatient.fsh @@ -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 diff --git a/Resources/input/fsh/patient-merge.fsh b/Resources/input/fsh/patient-merge.fsh index 372a229d..d5c8e2e7 100644 --- a/Resources/input/fsh/patient-merge.fsh +++ b/Resources/input/fsh/patient-merge.fsh @@ -1,4 +1,4 @@ -Instance: DorisDuplikat +Instance: DorisQuelle InstanceOf: ISiKPatient Usage: #example * identifier[VersichertenId-GKV].type = $identifier-type-de-basis#GKV @@ -6,28 +6,51 @@ Usage: #example * 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 @@ -35,24 +58,15 @@ Usage: #example * 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