PseudonymizePatient

Zweck

Durchführung eines Record Linkage auf Basis von (reduzierten) Patient-Ressourcen und Abfrage/Erzeugung von entsprechenden Pseudonymen.

Grundlage für das Record Linkage sind die in der Patienten-Ressource enthaltenen jedoch stark begrenzten Informationen. Dies können sowohl personenidentifizierende Informationen (u.a. Name, Vorname, Geburtsdatum, Kontakt- oder Adressinformationen) oder auch nur Identifier (u.a. KVID10, Bloomfilter) sein. Im Ergebnis wird System-intern eine eineindeutige Personenkennung (Master Person Index) erzeugt. Anschließend werden entsprechend der gewünschten Anzahl Pseudonyme (Parameter count) erzeugt und in einem Ergebnis-Bundle zurückgegeben. Die Zuordnung von eingehender Patienten-Ressource und Ergebnis-Pseudonym(en) erfolgt über die eingehende Patient.id.

Voraussetzung
  • API-Key: Der spezifizierte API-Key muss valide und zum Aufruf der Methode autorisiert sein.
  • Die Patient-Ressource muss den Profilvorgaben PseudonymizePatient entsprechen.
  • Die angegebene Pseudonym-Domäne muss konfiguriert sein.
  • Im Fall von count > 1: Die angegebene Pseudonym-Domäne muss in der Lage sein mehre Pseudonyme für einen Originalwert zu verwalten (Multi-Psn-Domäne).
  • Es wird nur der Bundle.Type batch unterstützt.
Aufruf und Rückgabe

Invocations

URL: [base]/$pseudonymizePatient

This operation changes content

Parameters (In)

NameCardinalityTypeDocumentation
study1..1string

Angabe der Studie auf Basis derer für die angegebenen Originalwerte vorhandene Pseudonyme gesucht und ggf. erzeugt werden

patient1..1Patient

Patienten-Ressource des Patienten, für die 1-n Pseudonyme erzeugt werden sollen

context1..*

Kontext der zu generierenden oder zu suchenden Pseudonyme.

context.target1..1string

Angabe der Pseudonymisierungs-Domäne in welcher nach vorhandenen Pseudonymen gesucht wird oder neue Pseudonyme erzeugt werden sollen.

context.count0..1integer

Angabe der Anzahl zu erzeugender Pseudonyme innerhalb der Domäne. Default = 1.

Return Values (Out)

NameCardinalityTypeDocumentation
externalPatientId1..1string

ID der Patient-Ressource zum Zweck der Rückreferenzierung. Es wird die vom Client übermittelte ID (Element Patient.id) verwendet, in Anlehnung an das Konzept 'Update as Create' as der FHIR-Spezifikation.

pseudonym1..*

Gruppierung der domänenspezifischen Pseudonyme.

pseudonym.target1..1Identifier

Angabe der Domäne (entspricht dem beim Request übermittelten Wert) zum Zweck der Rückreferenzierung

pseudonym.value0..*Identifier

Das erzeugte Pseudonym (wird nur im Erfolgsfall übermittelt).

Abfrage von 1-n eines Pseudonym-Werten für einen Originalwert und eine spezifische Domäne. Eine gleichzeitige Verarbeitung von mehreren Pseudonymisierungen kann durch Übergabe mehrerer entsprechender Requests in einem FHIR-Batch-Bundle erfolgen.

Im Kontext dieser Operation wird das folgende Patient-Profil verwendet:

idS Σ1..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionC0..*Extension
modifierExtension?! C0..*Extension
id0..1string
extensionC0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemS Σ1..1uriPattern
valueS Σ1..1string
periodΣ0..1Period
assignerΣ0..1Reference(Organization)
bloomfilterS Σ0..1IdentifierBloomfilter
activeΣ ?!0..1boolean
nameΣ0..*HumanName
telecomΣ0..*ContactPoint
genderΣ0..1codeBinding
birthDateΣ0..1date
deceasedBooleanboolean
deceasedDateTimedateTime
addressΣ0..*Address
maritalStatus0..1CodeableConceptBinding
multipleBirthBooleanboolean
multipleBirthIntegerinteger
photo0..*Attachment
id0..1string
extensionC0..*Extension
modifierExtensionΣ ?! C0..*Extension
relationship0..*CodeableConceptBinding
name0..1HumanName
telecom0..*ContactPoint
address0..1Address
gender0..1codeBinding
organizationC0..1Reference(Organization)
period0..1Period
id0..1string
extensionC0..*Extension
modifierExtensionΣ ?! C0..*Extension
language1..1CodeableConceptBinding
preferred0..1boolean
generalPractitioner0..*Reference(Organization | Practitioner | PractitionerRole)
managingOrganizationΣ0..1Reference(Organization)
id0..1string
extensionC0..*Extension
modifierExtensionΣ ?! C0..*Extension
otherΣ1..1Reference(Patient | RelatedPerson)
typeΣ1..1codeBinding

Bei count = 0 wird nur lesend zugegriffen und werden keine Pseudonyme erzeugt. Bei count > 1 ist die Konfiguration von Multi-Psn-Domänen erforderlich. In diesem Fall kann die Rückgabe mehrere Parameter mit dem Bezeichner pseudonym enthalten.

Im Fehlerfall wird eine OperationOutcome-Ressource mit entsprechenden Informationen zurückgegeben. Bei Verwendung innerhalb eines Batch-Bundles (siehe Beispiele) wird in der Batch-Response neben diesem OperationOutcome auch eine Parameters-Ressource zurückgegeben, die auf die betroffene PatientId sowie das Target verweist.

Beispiel

Beispielhafter Request-Body als Bundle:

<Bundle xmlns="http://hl7.org/fhir">
<id value="PseudonymizePatient-Bundle-request-example-1" />
<type value="batch" />
<Parameters>
<id value="PseudonymizePatient-Bundle-request-example-1-Par1" />
<name value="study" />
<valueString value="MyStudy" />
</parameter>
<name value="patient" />
<Patient>
<id value="aaaaaaaa-8a1e-4442-af99-50abc27d6f52" />
<profile value="https://ths-greifswald.de/fhir/StructureDefinition/epix/Patient" />
</meta>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="MR" />
</coding>
</type>
<system value="http://my.fhir.domain.local/fhir/sid/patients" />
<value value="1337" />
</identifier>
<system value="http://fhir.de/sid/gkv/kvid-10" />
<value value="A123456789" />
</identifier>
<system value="https://ths-greifswald.de/fhir/CodeSystem/epix/BloomfilterType" />
<code value="A" />
</coding>
</type>
<system value="https://ths-greifswald.de/fhir/sid/epix/bloomfilter" />
<value value="SWNoIGJpbiBlaW4gQmxvb21maWx0ZXIuIFZlcnNwcm9jaGVuLg==" />
</identifier>
</Patient>
</resource>
</parameter>
<name value="context" />
<name value="target" />
<valueString value="MyStudy-Domain1" />
</part>
<name value="count" />
<valueInteger value="1" />
</part>
</parameter>
<name value="context" />
<name value="target" />
<valueString value="MyStudy-Domain2" />
</part>
<name value="count" />
<valueInteger value="1" />
</part>
</parameter>
</Parameters>
</resource>
<method value="POST" />
<url value="$pseudonymizePatient" />
</request>
</entry>
<Parameters>
<id value="PseudonymizePatient-Bundle-request-example-1-Par2" />
<name value="study" />
<valueString value="MyStudy" />
</parameter>
<name value="patient" />
<Patient>
<id value="bbbbbbbb-e258-4471-9ac3-6dfdfac35a6e" />
<profile value="https://ths-greifswald.de/fhir/StructureDefinition/epix/Patient" />
</meta>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203" />
<code value="MR" />
</coding>
</type>
<system value="http://my.fhir.domain.local/fhir/sid/patients" />
<value value="0815" />
</identifier>
<system value="http://fhir.de/sid/gkv/kvid-10" />
<value value="Z987654321" />
</identifier>
<family value="Hinterlist" />
<given value="Herbert" />
</name>
</Patient>
</resource>
</parameter>
<name value="context" />
<name value="target" />
<valueString value="NotMyStudy-Domain15" />
</part>
</parameter>
</Parameters>
</resource>
<method value="POST" />
<url value="$pseudonymizePatient" />
</request>
</entry>
</Bundle>

Beispielhafter Response-Body als Bundle:

<Bundle xmlns="http://hl7.org/fhir">
<id value="PseudonymizePatient-Bundle-response-example-1" />
<type value="batch-response" />
<Parameters>
<id value="PseudonymizePatient-Bundle-response-example-1-Par1" />
<name value="externalPatientId" />
<valueId value="aaaaaaaa-8a1e-4442-af99-50abc27d6f52" />
</parameter>
<name value="pseudonym" />
<name value="target" />
<system value="http://my.fhir.domain.local/fhir/sid/domains" />
<value value="MyStudy-Domain1" />
</valueIdentifier>
</part>
<name value="value" />
<system value="http://my.fhir.domain.local/fhir/sid/pseudonyms" />
<value value="56464986521" />
</valueIdentifier>
</part>
</parameter>
<name value="pseudonym" />
<name value="target" />
<system value="http://my.fhir.domain.local/fhir/sid/domains" />
<value value="MyStudy-Domain2" />
</valueIdentifier>
</part>
<name value="value" />
<system value="http://my.fhir.domain.local/fhir/sid/pseudonyms" />
<value value="8976834765347" />
</valueIdentifier>
</part>
</parameter>
</Parameters>
</resource>
<status value="200" />
<OperationOutcome>
<id value="PseudonymizePatient-Bundle-response-example-1-Par1OpO" />
<severity value="information" />
<code value="informational" />
<diagnostics value="Operation completed successfully." />
</issue>
</OperationOutcome>
</outcome>
</response>
</entry>
<Parameters>
<id value="PseudonymizePatient-Bundle-response-example-1-Par2" />
<name value="externalPatientId" />
<valueId value="bbbbbbbb-e258-4471-9ac3-6dfdfac35a6e" />
</parameter>
<name value="pseudonym" />
<name value="target" />
<system value="http://my.fhir.domain.local/fhir/sid/domains" />
<value value="MyStudy-Domain15" />
</valueIdentifier>
</part>
<name value="value" />
<system value="http://my.fhir.domain.local/fhir/sid/pseudonyms" />
<value value="8976834765347" />
</valueIdentifier>
</part>
</parameter>
</Parameters>
</resource>
<status value="404" />
<OperationOutcome>
<id value="PseudonymizePatient-Bundle-response-example-1-Par2OpO" />
<severity value="fatal" />
<code value="security" />
<diagnostics value="Target domain 'NotMyStudy-Domain15' not found." />
</issue>
</OperationOutcome>
</outcome>
</response>
</entry>
</Bundle>