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).
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

target1..1string

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

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.

target1..1Identifier

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

pseudonym0..*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
extensionI0..*Extension
modifierExtension?! I0..*Extension
id0..1string
extensionI0..*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
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
relationship0..*CodeableConceptBinding
name0..1HumanName
telecom0..*ContactPoint
address0..1Address
gender0..1codeBinding
organizationI0..1Reference(Organization)
period0..1Period
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
language1..1CodeableConceptBinding
preferred0..1boolean
generalPractitioner0..*Reference(Organization | Practitioner | PractitionerRole)
managingOrganizationΣ0..1Reference(Organization)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*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" />
    <entry>
        <resource>
            <Parameters>
                <id value="PseudonymizePatient-Bundle-request-example-1-Par1" />
                <parameter>
                    <name value="study" />
                    <valueString value="MyStudy" />
                </parameter>
                <parameter>
                    <name value="patient" />
                    <resource>
                        <Patient>
                            <id value="aaaaaaaa-8a1e-4442-af99-50abc27d6f52" />
                            <meta>
                                <profile value="https://ths-greifswald.de/fhir/StructureDefinition/epix/Patient" />
                            </meta>
                            <identifier>
                                <type>
                                    <coding>
                                        <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>
                            <identifier>
                                <system value="http://fhir.de/sid/gkv/kvid-10" />
                                <value value="A123456789" />
                            </identifier>
                            <identifier>
                                <type>
                                    <coding>
                                        <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>
                <parameter>
                    <name value="target" />
                    <valueString value="MyStudy-Domain1" />
                </parameter>
            </Parameters>
        </resource>
        <request>
            <method value="POST" />
            <url value="$pseudonymizePatient" />
        </request>
    </entry>
    <entry>
        <resource>
            <Parameters>
                <id value="PseudonymizePatient-Bundle-request-example-1-Par2" />
                <parameter>
                    <name value="study" />
                    <valueString value="MyStudy" />
                </parameter>
                <parameter>
                    <name value="patient" />
                    <resource>
                        <Patient>
                            <id value="bbbbbbbb-e258-4471-9ac3-6dfdfac35a6e" />
                            <meta>
                                <profile value="https://ths-greifswald.de/fhir/StructureDefinition/epix/Patient" />
                            </meta>
                            <identifier>
                                <type>
                                    <coding>
                                        <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>
                            <identifier>
                                <system value="http://fhir.de/sid/gkv/kvid-10" />
                                <value value="Z987654321" />
                            </identifier>
                            <name>
                                <family value="Hinterlist" />
                                <given value="Herbert" />
                            </name>
                        </Patient>
                    </resource>
                </parameter>
                <parameter>
                    <name value="target" />
                    <valueString value="NotMyStudy-Domain15" />
                </parameter>
            </Parameters>
        </resource>
        <request>
            <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" />
    <entry>
        <resource>
            <Parameters>
                <id value="PseudonymizePatient-Bundle-response-example-1-Par1" />
                <parameter>
                    <name value="externalPatientId" />
                    <valueId value="aaaaaaaa-8a1e-4442-af99-50abc27d6f52" />
                </parameter>
                <parameter>
                    <name value="target" />
                    <valueIdentifier>
                        <system value="http://my.fhir.domain.local/fhir/sid/domains" />
                        <value value="MyStudy-Domain1" />
                    </valueIdentifier>
                </parameter>
                <parameter>
                    <name value="pseudonym" />
                    <valueIdentifier>
                        <system value="http://my.fhir.domain.local/fhir/sid/pseudonyms" />
                        <value value="56464986521" />
                    </valueIdentifier>
                </parameter>
            </Parameters>
        </resource>
        <response>
            <status value="200" />
            <outcome>
                <OperationOutcome>
                    <id value="PseudonymizePatient-Bundle-response-example-1-Par1OpO" />
                    <issue>
                        <severity value="information" />
                        <code value="informational" />
                        <diagnostics value="Operation completed successfully." />
                    </issue>
                </OperationOutcome>
            </outcome>
        </response>
    </entry>
    <entry>
        <resource>
            <Parameters>
                <id value="PseudonymizePatient-Bundle-response-example-1-Par2" />
                <parameter>
                    <name value="externalPatientId" />
                    <valueId value="bbbbbbbb-e258-4471-9ac3-6dfdfac35a6e" />
                </parameter>
                <parameter>
                    <name value="target" />
                    <valueIdentifier>
                        <system value="http://my.fhir.domain.local/fhir/sid/domains" />
                        <value value="NotMyStudy-Domain15" />
                    </valueIdentifier>
                </parameter>
            </Parameters>
        </resource>
        <response>
            <status value="404" />
            <outcome>
                <OperationOutcome>
                    <id value="PseudonymizePatient-Bundle-response-example-1-Par2OpO" />
                    <issue>
                        <severity value="fatal" />
                        <code value="security" />
                        <diagnostics value="Target domain &#39;NotMyStudy-Domain15&#39; not found." />
                    </issue>
                </OperationOutcome>
            </outcome>
        </response>
    </entry>
</Bundle>