Auf dieser Seite wird beschrieben, wie Sie FHIR-Einwilligungs-Ressourcen verwenden, um den Datenzugriff von FHIR-Speichern in der Cloud Healthcare API zu bestimmen.
Speicher mit aktivierter FHIR-Zugriffssteuerung konfigurieren
So konfigurieren Sie einen FHIR-Speicher mit der Erzwingung der Einwilligung:
Erstellen Sie einen FHIR-Speicher, falls Sie noch keinen haben.
Legen Sie die folgenden
ConsentConfig
-Parameter des FHIR-Speichers fest, um die Einwilligungsdurchsetzung zu aktivieren:version
: Gibt an, welche Version der Einwilligungsdurchsetzung für den FHIR-Speicher verwendet wird. Dieser Wert kann nur einmal durchCreateFhirStore
oderUpdateFhirStore
festgelegt werden. Nachdem er festgelegt ist, müssen SieApplyConsents
oderApplyAdminConsents
aufrufen, um die Version zu ändern.access_enforced
: Wenn dieser Wert auftrue
festgelegt ist, werden beim Zugriff auf FHIR-Ressourcen die angegebenen Einwilligungsheader anhand der von Nutzern erteilten Einwilligungsrichtlinien überprüft.consent_header_handling
: Wenn dieser Wert aufPERMIT_EMPTY_SCOPE
(Standard) gesetzt ist, erlaubt der Server Anfragen ohne oder mit leeremX-Consent-Scope
-Header. WennREQUIRED_ON_READ
festgelegt ist undaccess_enforced
=true
, lehnt der Server alle Anfragen ohne (oder mit leerem)X-Consent-Scope
-Header ab.
Neuen FHIR-Speicher mit ConsentConfig
einrichten
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'version': 'R4', 'enableUpdateCreate': true, 'consentConfig': { 'version': 'V1', 'accessEnforced': true } }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores?fhirStoreId=FHIR_STORE_ID"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID", "version": "R4", "enableUpdateCreate": true, "consentConfig": { "version": "V1" } }
Wenn Sie bereits einen Store haben, verwenden Sie UpdateFhirStore
, um den ConsentConfig
mit der Einwilligungs-Durchsetzung version
als V1
festzulegen und legen Sie accessEnforced
auf true
fest.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'consentConfig': { 'version': 'V1', 'accessEnforced': true } }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?update_mask=consentConfig"
Richtlinien mithilfe der Einwilligungsressource definieren
Richtlinien werden durch die Einwilligungsressource dargestellt. Zweck und Verwendung der Ressourcenfelder werden in den Dokumenten zum Datenmodell beschrieben.
Hier ist ein Beispiel für alle Ressourcen, die für dieses Beispiel erstellt werden können.
FHIR-Ressourcen erstellen
Im folgenden Beispiel wird gezeigt, wie ein [FHIR-Bundle](/healthcare-api/docs/how-tos/fhir-bundles) ausgeführt wird, um die folgenden Ressourcen zu füllen:
- Eine Fachkraft-ressource mit dem Namen Jeffrey Brown
- Eine Patientenressource mit dem Namen Darcy Smith
- Eine Beobachtungsressource mit einer Hämoglobinmessung von Darcy (LOINC
718-7
), die vom Happy Hospital erfasst wurde - Eine Beobachtungsressource mit einer Glucose-Messung von Darcy (LOINC
15074-8
) - Eine Einwilligung von Darcy, um Jeffrey Brown die Verwendung der Anwendung
App/123
zu erlauben, um auf ihre vom Happy Hospital erfassten Daten zuzugreifen. - Eine Einwilligung von Darcy, um Jeffrey Brown den Zugriff auf all ihre Daten für eine Notfallbehandlung zu erlauben (
ETREAT
) - Eine Einwilligung des Happy Hospital, um Jeffrey Brown den Zugriff auf alle Daten zu erlauben, wenn er mit der Anwendung
App/golden
(BIORCH
) biomedzinische Forschung betreibt.
cat > bundle.json << 'EOF' { "resourceType": "Bundle", "type": "transaction", "entry": [ { "request": {"method": "PUT", "url": "Practitioner/12942879-f89f-41ae-aa80-0b911b649833"}, "resource": { "active": true, "birthDate": "1970-05-23", "gender": "male", "id": "12942879-f89f-41ae-aa80-0b911b649833", "name": [{ "family": "Brown", "given": ["Jeffrey"], "use": "official" }], "resourceType": "Practitioner" } }, { "request": {"method": "PUT", "url": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"}, "resource": { "active": true, "birthDate": "1990-01-01", "gender": "female", "id": "3c6aa096-c054-4c22-b2b4-1e4a4d203de2", "name": [{ "family": "Smith", "given": ["Darcy"], "use": "official" }], "meta": { "tag": [{ "system": "http://terminology.hl7.org/CodeSystem/common-tags", "code": "employee" }] }, "resourceType": "Patient" } }, { "request": {"method": "PUT", "url": "Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"}, "resource": { "id": "7473784b-46a8-470c-b9a6-fe38a01025aa", "meta": {"source": "http://example.com/HappyHospital"}, "code": { "coding": [{ "code": "718-7", "system": "http://loinc.org", "display": "Hemoglobin [Mass/volume] in Blood" }] }, "effectivePeriod": {"start": "2021-12-10T05:30:10+01:00"}, "issued": "2021-12-10T13:30:10+01:00", "resourceType": "Observation", "status": "final", "subject": {"reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"}, "valueQuantity": { "code": "g/dL", "system": "http://unitsofmeasure.org", "unit": "g/dl", "value": 7.2 } } }, { "request": {"method": "PUT", "url": "Observation/68583624-9921-4158-8754-2a306c689abd"}, "resource": { "id": "68583624-9921-4158-8754-2a306c689abd", "code": { "coding": [{ "code": "15074-8", "system": "http://loinc.org", "display": "Glucose [Moles/volume] in Blood" }] }, "effectivePeriod": {"start": "2021-12-01T05:30:10+01:00"}, "issued": "2021-12-01T13:30:10+01:00", "resourceType": "Observation", "status": "final", "subject": {"reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"}, "valueQuantity": { "code": "mmol/L", "system": "http://unitsofmeasure.org", "unit": "mmol/l", "value": 6.3 } } }, { "request": {"method": "PUT", "url": "Consent/10998b60-a252-405f-aa47-0702554ddc8e"}, "resource": { "category": [{ "coding": [{ "code": "59284-0", "system": "http://terminology.hl7.org/CodeSystem/consentcategorycodes" }] }], "id": "10998b60-a252-405f-aa47-0702554ddc8e", "patient": {"reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"}, "policyRule": { "coding": [{ "code": "OPTIN", "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode" }] }, "provision": { "actor": [ { "reference": {"reference": "Practitioner/12942879-f89f-41ae-aa80-0b911b649833"}, "role": { "coding": [{ "code": "GRANTEE", "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode" }] } } ], "extension": [ { "url": "https://g.co/fhir/medicalrecords/Environment", "valueCodeableConcept": { "coding": [{ "code": "123", "system": "App" }] } }, { "url": "https://g.co/fhir/medicalrecords/DataSource", "valueUri": "http://example.com/HappyHospital" } ], "type": "permit" }, "resourceType": "Consent", "scope": { "coding": [{ "code": "patient-privacy", "system": "http://terminology.hl7.org/CodeSystem/consentscope" }] }, "status": "active" } }, { "request": {"method": "PUT", "url": "Consent/73c54e8d-2789-403b-9dee-13085c5d5e34"}, "resource": { "category": [{ "coding": [{ "code": "59284-0", "system": "http://terminology.hl7.org/CodeSystem/consentcategorycodes" }] }], "id": "73c54e8d-2789-403b-9dee-13085c5d5e34", "patient": {"reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"}, "policyRule": { "coding": [{ "code": "OPTIN", "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode" }] }, "provision": { "actor": [ { "reference": {"reference": "Practitioner/12942879-f89f-41ae-aa80-0b911b649833"}, "role": { "coding": [{ "code": "GRANTEE", "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode" }] } } ], "purpose": [{ "code": "ETREAT", "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason" }], "type": "permit" }, "resourceType": "Consent", "scope": { "coding": [{ "code": "patient-privacy", "system": "http://terminology.hl7.org/CodeSystem/consentscope" }] }, "status": "active" } }, { "request": {"method": "PUT", "url": "Consent/5c8e3f8a-9fd5-480d-a08e-f29b89feccde"}, "resource": { "category": [{ "coding": [{ "code": "57017-6", "system": "http://loinc.org" }] }], "id": "5c8e3f8a-9fd5-480d-a08e-f29b89feccde", "patient": {}, "extension": [{ "url": "https://g.co/fhir/medicalrecords/ConsentAdminPolicy" }], "policyRule": { "coding": [{ "code": "OPTIN", "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode" }] }, "provision": { "actor": [ { "reference": {"reference": "Practitioner/12942879-f89f-41ae-aa80-0b911b649833"}, "role": { "coding": [{ "code": "GRANTEE", "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode" }] } } ], "purpose": [{ "code": "BIORCH", "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason" }], "extension": [ { "url": "https://g.co/fhir/medicalrecords/Environment", "valueCodeableConcept": { "coding": [{ "code": "golden", "system": "App" }] } } ], "type": "permit" }, "resourceType": "Consent", "scope": {}, "status": "active" } } ] } EOF curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ --data @bundle.json \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "entry": [ { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/12942879-f89f-41ae-aa80-0b911b649833/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/68583624-9921-4158-8754-2a306c689abd/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/10998b60-a252-405f-aa47-0702554ddc8e/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/73c54e8d-2789-403b-9dee-13085c5d5e34/_history/VERSION_ID", "status": "201 Created" } }, { "response": { "etag": "W/\"VERSION_ID\"", "lastModified": "2022-09-01T17:31:40.423469+00:00", "location": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/5c8e3f8a-9fd5-480d-a08e-f29b89feccde/_history/VERSION_ID", "status": "201 Created" } } ], "resourceType": "Bundle", "type": "transaction-response" }
Im Folgenden finden Sie weitere Beispiele für R4-Ressourcen zur Einwilligung, die zeigen, wie komplexe Richtlinien dargestellt werden können.
Beispiel für eine Einwilligungsanweisung für Patienten
{ "resourceType": "Consent", "id": "patient-consent-example", "patient": { "reference": "Patient/f001" }, "category": [ { "coding": [ { "system": "http://loinc.org", "code": "59284-0" } ] } ], "scope": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/consentscope", "code": "patient-privacy" } ] }, "policyRule": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "OPTIN" } ] }, "status": "active", "provision": { "type": "permit", "actor": [ { "reference": { "reference": "Practitioner/f002" }, "role": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode", "code": "GRANTEE" } ] } } ], "purpose": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason", "code": "TREAT" } ], "class": [ { "system": "http://hl7.org/fhir/resource-types", "code": "Encounter" } ], "data": [ { "meaning": "instance", "reference": { "reference": "Encounter/e001" } } ], "extension": [ { "url": "https://g.co/fhir/medicalrecords/Environment", "valueCodeableConcept": { "coding": [ { "system": "iso3166-1", "code": "CA" } ] } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://terminology.hl7.org/CodeSystem/common-tags", "code": "actionable" } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "extension": [ { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://example.com/custom-tags", "code": "archived" } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://example.com/custom-tags", "code": "insensitive" } } ] }, { "url": "https://g.co/fhir/medicalrecords/DataSource", "valueUri": "http://somesystem.example.org/foo" } ], "securityLabel": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "code": "R" }, { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "PSY" } ] } }
Das vorherige Beispiel stellt eine Einwilligungsressource dar, in der ein Patient f001
einer Fachkraft f002
Berechtigung gewährt, um eine reguläre Behandlung bereitzustellen, die durch TREAT
dargestellt wird.
Der Fachkraft stammt aus dem Standort iso3166-1/CA
. Diese Einwilligungsressource ermöglicht es dem Fachkraft, auf die Patientendaten zuzugreifen, wenn die Daten alle der folgenden Bedingungen erfüllen.
- Sie ist ein
Encounter
-Typ mit der IDEncounter/e001
. - Sie stammen aus der Quelle
http://somesystem.example.org/foo
. - Sie erfüllen mindestens eine der folgenden Bedingungen für das Tag. Ressourcen können getaggt werden, indem die Felder
system
undcode
von Meta.tag festgelegt werden: - Hat das Tag (
system
=http://terminology.hl7.org/CodeSystem/common-tags
undcode
=actionable
) - Enthält beide Tags (
system
=http://example.com/custom-tags
undcode
=archived
) und (system
=http://example.com/custom-tags
undcode
=insensitive
) - Es hat mindestens eines der folgenden Sicherheitslabels:
system
=http://terminology.hl7.org/CodeSystem/v3-Confidentiality
undcode
istR
,N
,M
,L
oderU
.system
=http://terminology.hl7.org/CodeSystem/v3-ActCode
undcode
=PSY
.
Beispiel für eine Richtlinie für Administratorrichtlinien
{ "resourceType": "Consent", "id": "admin-policy-example", "patient": {}, "extension": [{ "url": "https://g.co/fhir/medicalrecords/ConsentAdminPolicy" }], "category": [ { "coding": [ { "system": "http://loinc.org", "code": "57017-6" } ] } ], "scope": {}, "policyRule": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "OPTIN" } ] }, "status": "active", "provision": { "type": "permit", "actor": [ { "reference": { "reference": "Practitioner/f002" }, "role": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode", "code": "GRANTEE" } ] } } ], "purpose": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason", "code": "TREAT" } ], "class": [ { "system": "http://hl7.org/fhir/resource-types", "code": "Encounter" } ], "data": [ { "meaning": "instance", "reference": { "reference": "Encounter/e001" } } ], "extension": [ { "url": "https://g.co/fhir/medicalrecords/Environment", "valueCodeableConcept": { "coding": [ { "system": "iso3166-1", "code": "CA" } ] } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://terminology.hl7.org/CodeSystem/common-tags", "code": "actionable" } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "extension": [ { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://example.com/custom-tags", "code": "archived" } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://example.com/custom-tags", "code": "insensitive" } } ] }, { "url": "https://g.co/fhir/medicalrecords/DataSource", "valueUri": "http://somesystem.example.org/foo" } ], "securityLabel": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "code": "R" }, { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "PSY" } ] } }
Das obige Beispiel stellt eine Einwilligungsressource für eine Verwaltungsrichtlinie dar, in der ein Patient f002
einer Fachkraft TREAT
Berechtigung gewährt, um eine reguläre Behandlung bereitzustellen, die durch TREAT
dargestellt wird. Der Fachkraft stammt aus dem Standort iso3166-1/CA
. Diese Einwilligungsressource ermöglicht es dem Fachkraft, auf die Patientendaten zuzugreifen, wenn die Daten alle der folgenden Bedingungen erfüllen:
- Sie ist ein
Encounter
-Typ mit der IDEncounter/e001
. - Sie stammen aus der Quelle
http://somesystem.example.org/foo
. - Sie erfüllen mindestens eine der folgenden Bedingungen für das Tag:
- Hat das Tag (
system
=http://terminology.hl7.org/CodeSystem/common-tags
undcode
=actionable
) - Enthält beide Tags (
system
=http://example.com/custom-tags
undcode
=archived
) und (system
=http://example.com/custom-tags
undcode
=insensitive
) - Es hat mindestens eines der folgenden Sicherheitslabels:
system
=http://terminology.hl7.org/CodeSystem/v3-Confidentiality
undcode
istR
,N
,M
,L
oderU
.system
=http://terminology.hl7.org/CodeSystem/v3-ActCode
undcode
=PSY
.
Beispiel für eine Richtlinie für abfolgebasierte Administratorrichtlinien
{ "resourceType": "Consent", "id": "admin-cascading-policy-example", "patient": {}, "extension": [ { "url": "https://g.co/fhir/medicalrecords/ConsentAdminPolicy" }, { "url": "https://g.co/fhir/medicalrecords/CascadingPolicy" } ], "category": [ { "coding": [ { "system": "http://loinc.org", "code": "57017-6" } ] } ], "scope": {}, "policyRule": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "OPTIN" } ] }, "status": "active", "provision": { "type": "permit", "actor": [ { "reference": { "reference": "Practitioner/f002" }, "role": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode", "code": "GRANTEE" } ] } } ], "purpose": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-ActReason", "code": "TREAT" } ], "class": [ { "system": "http://hl7.org/fhir/resource-types", "code": "Patient" } ], "extension": [ { "url": "https://g.co/fhir/medicalrecords/Environment", "valueCodeableConcept": { "coding": [ { "system": "iso3166-1", "code": "CA" } ] } }, { "url": "https://g.co/fhir/medicalrecords/DataTag", "valueCoding": { "system": "http://terminology.hl7.org/CodeSystem/common-tags", "code": "employee" } } ] } }
Das vorherige Beispiel stellt eine Einwilligungsressource für eine abfolgebasierte Administratorrichtlinie dar, in der eine Fachkraft f002
die Berechtigung erhält, eine reguläre Behandlung bereitzustellen, die durch TREAT
dargestellt wird. Der Fachkraft stammt aus dem Standort iso3166-1/CA
. Diese Einwilligungsressource ermöglicht es dem Fachkraft, auf die Compartment-Daten von Patienten mit dem Tag employee
zuzugreifen. Alle Ressourcenkriterien gelten nur für die Ressourcen des Bereichs, also die Patientenressource, da sie festlegt, von welchen Ressourcen die Kaskade ausgehen soll.
Einwilligungen von Patienten oder Administratorrichtlinien erzwingen
Erzwingen Sie die Einwilligungen der Patienten bis zum ApplyConsents
.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{'validateOnly': false}" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
Die Antwort enthält einen Vorgangsnamen. Sie können den Status des Vorgangs mit der [Methode „get“ für den Vorgang](/healthcare-api/docs/reference/rest/v1/projects.locations.datasets.operations/get) verfolgen:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
Wenn der Vorgang abgeschlossen ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1beta1.fhir.FhirStoreService.ApplyConsents", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "2", "secondarySuccess": "5" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.fhir.ApplyConsentsResponse", "consentApplySuccess": "2", "affectedResources": "5" } }
Diese Antwort gibt an, dass der Server zwei Einwilligungen erfolgreich verarbeitet und den Einwilligungs-Zugriff von 5 Ressourcen aktualisiert hat (1 Patient, 2 Einwilligungen, 2 Beobachtungen).
Administratorrichtlinie bis zum ApplyAdminConsents
erzwingen
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'validateOnly': false, 'newConsentsList': { 'names': ['projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/5c8e3f8a-9fd5-480d-a08e-f29b89feccde/_history/VERSION_ID'] } }" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyAdminConsents"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
Die Antwort enthält einen Vorgangsnamen. Sie können den Status des Vorgangs mit der [Methode „get“ für den Vorgang](/healthcare-api/docs/reference/rest/v1/projects.locations.datasets.operations/get) verfolgen:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
Wenn der Vorgang abgeschlossen ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1beta1.fhir.FhirStoreService.ApplyAdminConsents", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "1", "secondarySuccess": "7" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.fhir.ApplyAdminConsentsResponse", "consentApplySuccess": "1", "affectedResources": "7" } }
Diese Antwort gibt an, dass der Server eine Verwaltungsrichtlinie erfolgreich verarbeitet und den Einwilligungs-Zugriff von 7 Ressourcen aktualisiert hat (1 Ärztin, 1 Patient, 2 Beobachtungen, 2 Patienteneinwilligungen und 1 Verwaltungsrichtlinie).
Die Durchsetzung von Einwilligungen, die in einem FHIR-Speicher gespeichert sind, tritt erst in Kraft, wenn ApplyConsents
(für Patienteneinwilligungen) oder ApplyAdminConsents
(für Administratorrichtlinien und abgeleitete Administratorrichtlinien) aufgerufen und erfolgreich abgeschlossen wurde. Wenn Sie Einwilligungen hinzufügen, ändern oder entfernen, nachdem Sie ApplyConsents
oder ApplyAdminConsents
ausgeführt haben, müssen Sie sie noch einmal ausführen, damit diese Einwilligungen in das Durchsetzungsmodell aufgenommen werden.
FHIR-Ressourcen werden asynchron indexiert. Daher kann es zu einer geringfügigen Verzögerung zwischen dem Abschluss von ApplyConsents
oder ApplyAdminConsents
und dem Zeitpunkt kommen, an dem das Erzwingungsmodell in den Suchergebnissen angezeigt wird. Diese Verzögerung ist nur bei Suchanfragen zu erwarten.
Wenn Sie zum ersten Mal die Durchsetzung von Einwilligungen im FHIR-Speicher einrichten, warten Sie, bis der lang andauernde Vorgang ApplyConsents
oder ApplyAdminConsents
abgeschlossen ist, bevor Sie Einwilligungssensitive Anfrderungen stellen.
Wenn Sie ApplyConsents
für eine Teilmenge von Patienten aufrufen möchten, können Sie die folgenden Filter verwenden:
PatientScope
: Mit diesem Befehl wirdApplyConsents
auf eine Liste von Patienten-IDs mit bis zu 10.000 Patienten angewendet.TimeRange
:ApplyConsent
auf einer Liste von Patientenressourcen-IDs ausführen, deren Einwilligungsressourcen in einem bestimmten Zeitraum aktualisiert werden
Wenn Sie ApplyAdminConsents
aufrufen möchten, müssen Sie eine vollständige Liste aller Richtlinien angeben, die Sie anwenden möchten (keine inkrementelle Liste). Eine leere Liste führt also dazu, dass keine Verwaltungsrichtlinien im Play Store erzwungen werden. Jede Richtlinie muss der Name einer Ressourcenversion sein, wenn die Versionierung im FHIR-Speicher aktiviert ist. Andernfalls muss es sich um einen Ressourcennamen handeln.
Mit operations.get
können Sie den ProgressCounter
des Vorgangs abrufen. Nach Abschluss wird eine ApplyConsentsResponse zurückgegeben, die in Operation.response
enthalten ist.
Die Zähler in ProgressCounter
und ApplyConsentsResponse
oder ApplyAdminConsentsResponse
werden in der folgenden Tabelle beschrieben.
ProgressCounter |
ApplyConsentsResponse oder ApplyAdminConsentsResponse |
Beschreibung |
---|---|---|
success |
consentApplySuccess |
Die Anzahl der Einwilligungsressourcen, die im Rahmen des Vorgangs erfolgreich verarbeitet wurden. |
failure |
consentApplyFailure |
Die Anzahl der Einwilligungsressourcen, die nicht unterstützt oder ungültig sind. Sie haben folgende Möglichkeiten: Fehlerlogs in Cloud Logging aufrufen oder wenn validateOnly false ist, prüfen Sie den Status der Erzwingung von Einwilligungen mit CheckConsentEnforcementStatus oder CheckPatientConsentEnforcementStatus , um Fehlerdetails abzurufen. |
secondarySuccess |
affectedResources |
Wenn validateOnly den Wert false hat, steht er für die Anzahl der FHIR-Ressourcen, die aufgrund der Einwilligungsänderung erfolgreich neu indexiert wurden. |
secondaryFailure |
failedResources |
Wenn validateOnly den Wert false hat, steht er für die Anzahl der FHIR-Ressourcen, die möglicherweise eine Einwilligungsänderung haben, aber nicht neu indexiert werden konnten. Dies kann sich auf die Suche mit Einwilligungskontext auswirken, aber nicht auf andere Methoden. Die Fehlerdetails finden Sie in den Fehlerlogs in Cloud Logging. |
Wenn FHIR-Einwilligungs-Ressourcen verarbeitet werden, können Sie die folgenden APIs verwenden, um den Status der Erzwingung für eine einzelne Einwilligung oder alle Einwilligungen eines Patienten zu prüfen:
CheckConsentEnforcementStatus
: gibt eineParameters
-Ressource (STU3, R4) zurück, die auflistet die folgenden Parameter:id
: steht für die Ressourcen-ID der Zustimmungs-RessourcelastUpdated
: Der Zeitpunkt, zu dem die Einwilligung zuletzt erzwungen wurde.versionId
: die Versions-ID, die für die Durchsetzung der Einwilligung verwendet wirdconsent-enforcement-status
: Status der Einwilligungserzwingung
CheckPatientConsentEnforcementStatus
: gibt einenBundle
(STU3, R4) von derParameters
-Ressource (STU3,R4) zurück, die aus dem Erzwingungsstatus aller Einwilligungen eines einzelnen Patienten besteht
Bei Administratorrichtlinien kann CheckConsentEnforcementStatus
nur verwendet werden, um den Durchsetzungsstatus einer einzelnen Administratorrichtlinie zur Einwilligung zu prüfen. Alternativ können Sie fhirStores.get
verwenden, um alle aktiven Administratorrichtlinien aufzurufen, die auf den Store angewendet werden.
Status der Einwilligungserzwingung
consent-enforcement-status
kann folgende Werte haben:
OFF
: der Standard-Erzwingungsstatus einer neuen Einwilligungs-Ressource, bei dem die Einwilligungs-Ressource noch nie verarbeitet wurde.ENFORCEABLE
: der Status, in dem die Einwilligungs-Ressource erfolgreich verarbeitet wurde.INACTIVE
: ein inaktiver Status, in dem die Einwilligungs-Ressource ignoriert wird.UNSUPPORTED
: Der Status einer Einwilligungs-Ressource, die den FHIR-Spezifikationen entspricht, aber nicht durchsetzbar ist. Dies liegt an der eingeschränkten Implementierung der FHIR-Einwilligungs-erzwingung mit dem aktuellen Maß an Feature-Unterstützung.ENFORCEMENT_LIMIT_EXCEEDED
: Der Status, wenn das FHIR-Einwilligungs-Ressourcenformat und die Level an Unterstützung für die Ressource fehlerfrei sind, aber eine oder mehrere der folgenden Bedingungen wahr sind:Der Patient hat eine große Satz von Einwilligungsressourcen.
Die Größe der Einwilligungsanweisungen für alle aktiven Einwilligungen ist größer als die maximal zulässige Größe der Einwilligungsanweisungen als dass ein FHIR-Server sie erzwingen könnte.
Mit Einwilligungs-Kontext suchen
Die Cloud Healthcare API unterstützt Suchanfragen nach FHIR-Ressourcen in einem bestimmten FHIR-Speicher mit actor
, purpose
und environment
als Abfrageparameter. Die Antwort enthält nur die Ressourcen, für die eingewilligt wurde.
In FHIR-Ressourcen mit Einwilligungsbereich suchen
- Fachkraft Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) verwendet eine vertrauenswürdige AnwendungApp/123
und sucht alle Beobachtungen mitstatus=final
. - Fachkraft Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) verwendet AnwendungApp/123
und sucht alle Beobachtungen von Patienten Darcy. - Fachkraft Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) verwendet AnwendungApp/123
und sucht nach allen Beobachtungen des Patienten Darcy zu Notfallbehandlungszwecken. - Fachkraft Jeffrey Brown (identifiziert mit
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) sucht nach Beobachtungen mitstatus=final
zu zwei Zwecken: Behandlung und Forschung - Ein IT-Administrator eines Krankenhauses verwendet
bypass
, um nach allen Ärzten im Krankenhaus zu suchen.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/123" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?status=final"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa", "resource": { "code": { "coding": [ { "code": "718-7", "display": "Hemoglobin [Mass/volume] in Blood", "system": "http://loinc.org" } ] }, "effectivePeriod": { "start": "2021-12-10T05:30:10+01:00" }, "id": "7473784b-46a8-470c-b9a6-fe38a01025aa", "issued": "2021-12-10T13:30:10+01:00", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "source": "http://example.com/HappyHospital", "versionId": "VERSION_ID" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2" }, "valueQuantity": { "code": "g/dL", "system": "http://unitsofmeasure.org", "unit": "g/dl", "value": 7.2 } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/123" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Darcy"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Darcy" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Darcy" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Darcy" } ], "resourceType": "Bundle", "total": 0, "type": "searchset" }
Die vorherige Abfrage ist eine verkettete Suche. Da dem Einwilligungsszenario actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/123
der Zugriff auf die Patient-Darcy-Ressource (durch Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2
identifiziert) verweigert wird, gibt der FHIR-Server keine Beobachtung vom Patienten zurück, als ob der Patient nicht existiert.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 purp/v3/ETREAT env/App/123" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Darcy"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/68583624-9921-4158-8754-2a306c689abd", "resource": { "code": { "coding": [ { "code": "15074-8", "display": "Glucose [Moles/volume] in Blood", "system": "http://loinc.org" } ] }, "effectivePeriod": { "start": "2021-12-01T05:30:10+01:00" }, "id": "68583624-9921-4158-8754-2a306c689abd", "issued": "2021-12-01T13:30:10+01:00", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "versionId": "VERSION_ID" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2" }, "valueQuantity": { "code": "mmol/L", "system": "http://unitsofmeasure.org", "unit": "mmol/l", "value": 6.3 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa", "resource": { "code": { "coding": [ { "code": "718-7", "display": "Hemoglobin [Mass/volume] in Blood", "system": "http://loinc.org" } ] }, "effectivePeriod": { "start": "2021-12-10T05:30:10+01:00" }, "id": "7473784b-46a8-470c-b9a6-fe38a01025aa", "issued": "2021-12-10T13:30:10+01:00", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "source": "http://example.com/HappyHospital", "versionId": "VERSION_ID" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2" }, "valueQuantity": { "code": "g/dL", "system": "http://unitsofmeasure.org", "unit": "g/dl", "value": 7.2 } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject:Patient.name=Darcy" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject:Patient.name=Darcy" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject:Patient.name=Darcy" } ], "resourceType": "Bundle", "total": 2, "type": "searchset" }
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 purp/v3/TREAT purp/v3/HRESCH" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?status=final"
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "issue": [ { "code": "security", "details": { "text": "permission_denied" }, "diagnostics": "the maximum number of allowed consent purpose scopes is 1, got 2", "severity": "error" } ], "resourceType": "OperationOutcome" }
In diesem Fall sollte Fachkraft Jeffrey Brown den unnötigen Zweck aus dem „X-Consent-Scope“ in der Anfrage entfernen.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: bypass actor/Admin/ef0592c9-6724-467e-878d-f879e537cd15 env/net/HappyNet" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner?"
Da bypass
angegeben ist, wurden die Einwilligungsüberprüfungen übersprungen. Sie sollten eine JSON-Antwort ähnlich der folgenden erhalten:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/12942879-f89f-41ae-aa80-0b911b649833", "resource": { "active": true, "birthDate": "1970-05-23", "gender": "male", "id": "12942879-f89f-41ae-aa80-0b911b649833", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "versionId": "VERSION_ID" }, "name": [ { "family": "Brown", "given": [ "Jeffrey" ], "use": "official" } ], "resourceType": "Practitioner" }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
Ressource mit Einwilligungskontext abrufen
Die Cloud Healthcare API unterstützt das Abrufen einer FHIR-Ressource in einem bestimmten FHIR-Speicher mit actor
, purpose
und environment
als Abfrageparameter. Die Antwort enthält nur die Ressourcen, für die eingewilligt wurde.
FHIR-Ressourcen mit Einwilligungsbereich abrufen
- Fachkraft Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) verwendet die AnwendungApp/123
, liest die Hämoglobin-Messung des Patienten (in diesem BeispielObservation/7473784b-46a8-470c-b9a6-fe38a01025aa
). - Fachkraft Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) verwendet die unbekannte AnwendungApp/unknown
und liest die Hämoglobin-Messung des Patienten (in diesem BeispielObservation/7473784b-46a8-470c-b9a6-fe38a01025aa
). - Der Arzt Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) führt mithilfe der AnwendungApp/golden
biomedzinische Forschung durch und liest das Geburtsdatum von Darcy (in diesem BeispielPatient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2
). - Der Arzt Jeffrey Brown (identifiziert durch
Practitioner/12942879-f89f-41ae-aa80-0b911b649833
) fordert mit dem „Break-the-Glass“-Protokoll den Notfallzugriff auf den Datensatz eines Patienten an. (in diesem BeispielObservation/7473784b-46a8-470c-b9a6-fe38a01025aa
).
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/123" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"
Da die Einwilligung des Anfragenden vorliegt, enthält die Antwort den Inhalt der Beobachtungsressource.
{ "code": { "coding": [ { "code": "718-7", "display": "Hemoglobin [Mass/volume] in Blood", "system": "http://loinc.org" } ] }, "effectivePeriod": { "start": "2021-12-10T05:30:10+01:00" }, "id": "7473784b-46a8-470c-b9a6-fe38a01025aa", "issued": "2021-12-10T13:30:10+01:00", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "source": "http://example.com/HappyHospital", "versionId": "VERSION_ID" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2" }, "valueQuantity": { "code": "g/dL", "system": "http://unitsofmeasure.org", "unit": "g/dl", "value": 7.2 } }
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/unknown" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"
Da der Grenzzugriff des Anfragenden („App/unbekannt“) nicht durch die Einwilligung des Patienten zugelassen ist, wird die Anfrage abgelehnt.
{ "issue": [ { "code": "security", "details": { "text": "permission_denied" }, "diagnostics": "Consent access denied or the resource being accessed does not exist", "severity": "error" } ], "resourceType": "OperationOutcome" }
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 purp/v3/BIORCH env/App/golden" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"
Da der Anfragende die Einwilligung erteilt hat, enthält die Antwort den Inhalt der Patientenressource.
{ "active": true, "birthDate": "1990-01-01", "gender": "female", "id": "3c6aa096-c054-4c22-b2b4-1e4a4d203de2", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "versionId": "VERSION_ID", "tag": [{ "system": "http://terminology.hl7.org/CodeSystem/common-tags", "code": "employee" }] }, "name": [ { "family": "Smith", "given": [ "Darcy" ], "use": "official" } ], "resourceType": "Patient" }
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "X-Consent-Scope: btg actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"
Da die Autorisierungsmethode der Einwilligung btg
ist, überspringt der Server die Einwilligungsüberprüfungen. Die Antwort ist der Inhalt der Beobachtungsressource.
{ "code": { "coding": [ { "code": "718-7", "display": "Hemoglobin [Mass/volume] in Blood", "system": "http://loinc.org" } ] }, "effectivePeriod": { "start": "2021-12-10T05:30:10+01:00" }, "id": "7473784b-46a8-470c-b9a6-fe38a01025aa", "issued": "2021-12-10T13:30:10+01:00", "meta": { "lastUpdated": "2022-09-01T17:31:40.423469+00:00", "source": "http://example.com/HappyHospital", "versionId": "VERSION_ID" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2" }, "valueQuantity": { "code": "g/dL", "system": "http://unitsofmeasure.org", "unit": "g/dl", "value": 7.2 } }
Einwilligungsheader konfigurieren
In den folgenden Abschnitten werden die unterstützten Methoden zur Durchsetzung von Einwilligungen in der Cloud Healthcare API beschrieben und wie der Ressourcenzugriff erzwungen wird, wenn Sie eine Einwilligungssensitive Anfrage stellen.
Bei Stellen einer Anfrage ist Ihr Autorisierungsserver für die Generierung von Zugriffstokens mit dem entsprechenden Einwilligungsbereich verantwortlich.
HTTP-Header festlegen
Einwilligungsbereiche werden über den HTTP-Header X-Consent-Scope
an die Cloud Healthcare API übergeben. Die Cloud Healthcare API verwendet diesen Header, um die einwilligungsbasierte Zugriffssteuerung für Daten in FHIR-Speichern zu erzwingen.
Eine FHIR-Anfrage kann eine begrenzte Anzahl von Einwilligungs-Eintrags-Bereichen unterstützen. In einer FHIR-Anfrage können bis zu drei Einträge von actor
, einer von purp
und einer von env
, enthalten sein.
Für spezielle Bereiche kann eine FHIR-Anfrage einen von btg
oder bypass
unterstützen.
HTTP-Header für vertrauenswürdige Anwendungen festlegen
Dieser Abschnitt ist nur erforderlich, wenn Sie einen vom Kunden verwalteten Autorisierungsserver verwenden. In diesem Fall müssen Sie auch einen SMARTproxy oder einen ähnlichen Proxy verwenden.
Einige vertrauenswürdige Anwendungen können direkt die Cloud Healthcare API aufrufem mit den Einwilligungsbereichen im angegebenen HTTP-Header senden. Dies ermöglicht die direkte Erzwingung der Einwilligung, ohne dass ein SMARTproxy oder ein anderer Proxy zwischen externen Autorisierungsservern und Google Cloud konvertieren muss.
Beispielsweise kann Ihre Anwendung für eine Teilmenge von Bereichen registriert sein, z. B. ein Anwendungs-environment
-Bereich oder die Anwendung kann ein Auswahl-Widget anzeigen, um einige Bereichseinträge wie die purpose
der zugreifenden Person festzulegen.
Ein vertrauenswürdiger Nutzer oder eine vertrauenswürdige Anwendung kann auch die Einträge „btg
“ oder „bypass
“ verwenden, die nach der Prüfung überprüft werden.
Autorisierungsserver für Einwilligungsbereiche konfigurieren
Die Cloud Healthcare API bietet integrierte Unterstützung für die Erzwingung von FHIR-Einwilligungen basierend auf den Eingabebereichen für Einwilligungen. FHIR-Speicheradministratoren sind dafür verantwortlich, einen Autorisierungsserver außerhalb der Cloud Healthcare API zu erstellen und zu konfigurieren, der Einwilligungsbereiche gewährt.
Beispiel für ein Zugriffstoken
Das folgende Beispiel zeigt ein base64-codiertes Zugriffstoken:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJjb25zZW50LnRva2VuLm9yZyIsImlhdCI6MTYxMjg4NDA4NSwiZXhwIjoxNjQ0NDIwMDg1LCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJkb2N0b3IuZ2FicmllbGFAZXhhbXBsZS5jb20iLCJzY29wZSI6Im9pZGMgYWN0b3IvUHJhY3RpdGlvbmVyLzEyMyBhY3Rvci9Hcm91cC85OTkgcHVycC92My9UUkVBVCBlbnYvQXBwL2FiYyJ9.fC7ljkVUUx8fwUOrJuONcrqA-WKC-k_Bclzlgds0Cq6H_gEe3nUjPlSOCTQsIdYB
Nach der Decodierung des Zugriffstokens sehen Sie, dass es die folgende Nutzlast enthält:
{
"iss": "consent.token.org",
"iat": 1612884085,
"exp": 1644420085,
"aud": "www.example.com",
"sub": "doctor.gabriela@example.com",
"scope": "oidc actor/Practitioner/123 actor/Group/999 purp/v3/TREAT env/App/abc"
}
SMARTProxy konfigurieren
SMARTProxy ist ein Open-Source-Proxy von Google mit folgenden Funktionen:
Ermöglicht dem Cloud Healthcare API-FHIR-Server, Einwilligungsensitive Zugriffsstokens zu akzeptieren und zu validieren.
Ermöglicht der FHIR-Implementierung in der Cloud Healthcare API, einwilligungsfsensitive Zugriffstokens als Teil des Verwaltungs- und Berechtigungsmodells der Cloud Healthcare API zu inkludieren.
Unterstützt auch Tokenfeatures für SMART on FHIR-Unterstützung.
Wenn Sie eine Anfrage zum Abrufen von Daten aus der Cloud Healthcare API über SMARTProxy stellen, geschieht Folgendes:
SMARTProxy akzeptiert eine Anfrage von einem Client, die ein Einwilligungssensitives Token enthält.
SMARTProxy validiert das Einwilligungs-sensitive-Token über einen Ihrer JWT-Autorisierungsserver.
SMARTProxy liest die Bereiche aus dem Einwilligungs-sensitiven Token und übergibt sie über den HTTP-Header an die Cloud Healthcare API.
Die Cloud Healthcare API empfängt die Header und validiert sie, um Einwilligungsanweisungen für die Anfrage durchzusetzen. Die Cloud Healthcare API gibt dann eine Antwort über den SMARTProxy an den Client zurück.
Google Cloud-Dienstkonto konfigurieren
Ein Proxy kann nur ein einziges Google Cloud-Dienstkonto haben. Wenn mehrere Clients denselben Proxy verwenden, verwenden sie auch dasselbe Dienstkonto. Seien Sie bei der Freigabe eines Dienstkontos für mehrere Kunden aus folgenden Gründen vorsichtig:
Zum Lesen der FHIR-Daten in der Cloud Healthcare API kann das Dienstkonto mit umfassenden Lese- und Schreibberechtigungen konfiguriert sein. Weitere Informationen zu Berechtigungen finden Sie unter Zugriff auf Cloud Healthcare API-Ressourcen steuern. Informationen zum Einrichten eines Proxys finden Sie unter Allgemeine Best Practices.
Cloud-Audit-Logs
Hauptkonto-E-Mail-Adresse ist mit dem Dienstkonto verknüpft.
Wenn Sie beispielsweise die Cloud Healthcare API direkt aufrufen und Ihr Google-Konto zur Authentifizierung nutzen, protokolliert Cloud-Audit-Logs Ihre E-Mail-Adresse als Hauptkonto-E-Mail-Adresse. Wenn Sie einen Proxy zum Aufrufen der Cloud Healthcare API verwenden, verwendet der Proxy sein eigenes Dienstkonto und die Hauptkonto-E-Mail-Adresse ist die E-Mail-Adresse des Dienstkontos und das ursprüngliche Konto ist nicht definiert.
Audit-Logs
Audit-Logs werden generiert, wenn eine Zugriffsanfrage vorliegt oder sich die Zugriffssteuerung der Ressourcen ändert.
Auf Audit-Logs zugreifen
Wenn Audit-Logs im FHIR-Store aktiviert sind, ist in den Audit-Logs, die in Cloud Logging verfügbar sind, ein Metadatenfeld vom Typ consentMode
enthalten. consentMode
kann einen der folgenden Werte haben:
off
: Für die FHIR-Speicherkonfiguration istconsentConfig.accessEnforced
auffalse
festgelegt und erlaubt keine Einwilligungssensitiven Anfragen.emptyScope
: Beim FHIR-Speicher istconsentConfig.accessEnforced
auftrue
festgelegt, aber ein Einwilligungsbereich-Header wurde nicht angegeben. Daher wurden keine Einwilligungen erzwungen.enforced
: Im FHIR-Speicher istconsentConfig.accessEnforced
auftrue
festgelegt und der Einwilligungsbereich-Header ist vorhanden. Daher wurden die Einwilligungen für den Antrag geprüft und erzwungen.btg
: In der FHIR-Anfrage wurdebtg
im Header „In Einwilligungsbereich“ angegeben. Daher wurden die Einwilligungsprüfungen übersprungen. Diese Anfrage ist nur für Notfälle gedacht und wird erst nach der Prüfung überprüft.bypass
: In der FHIR-Anfrage wurde im Header „Einwilligungsumfang“ nurbypass
angegeben. Daher wurden die Einwilligungsbestätigungen übersprungen. Diese Anfrage soll von einem vertrauenswürdigen Workflow (z. B. einem Administrator oder einer vertrauenswürdigen Anwendung anstelle von Endnutzern) verwendet werden, damit sich dieses Prüfprotokoll von derbtg
unterscheidet, die für Datengovernance-Prüfungen verwendet wird.
Optional können Sie access_determination_log_config
auf VERBOSE
festlegen, um weitere Informationen dazu zu erfassen, warum ein Antrag gewährt oder abgelehnt wird.
Audit-Logs für die Zugriffserzwingung ändern
Wenn sich die Basisressource des Bereichs ändert (z. B. durch Entfernen des employee
-Tags eines Patienten): Die Zugriffssteuerung für die geänderte Ressource und ihren Bereich kann sich aufgrund der abfolgebasierten Administratorrichtlinie ändern. Dadurch wird eine Neuindexierung aller Ressourcen des Bereichs ausgelöst. Der Fortschritt der Indexierung für jede Aktualisierung der Ressourcenbasis des Bereichs kann in Cloud Logging mit dem Filter jsonPayload.@type="type.googleapis.com/google.cloud.healthcare.logging.FhirConsentCascadeLogEntry"
verfolgt werden.
Beispiel für ein Protokoll zum Fortschritt der Kaskadenerneuererstellung
{ "insertId": "tz2gtza8", "jsonPayload": { "@type": "type.googleapis.com/google.cloud.healthcare.logging.FhirConsentCascadeLogEntry", "state": "STATE_FINISHED", "affectedResources": "2", "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "compartmentBaseResourceName": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/PATIENT_RESOURCE_ID/_history/PATIENT_RESOURCE_VERSION" }, "resource": { "type": "healthcare_fhir_store", "labels": { "location": "LOCATION", "dataset_id": "DATASET_ID", "fhir_store_id": "FHIR_STORE_ID", "project_id": "PROJECT_ID" } }, "timestamp": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "severity": "INFO", "logName": "projects/PROJECT_ID/logs/healthcare.googleapis.com%2Fconsent_cascading_fhir", "receiveTimestamp": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" }
jsonPayload.state
ist der Status der Indexierung, jsonPayload.affectedResources
ist die Anzahl der neu indexierten Ressourcen des Bereichs und jsonPayload.lastUpdated
ist der Zeitstempel der Aktualisierung der Patientenressource. Wenn der Vorgang gerade erst gestartet wurde, sind jsonPayload.state="STATE_STARTED"
und jsonPayload.affectedResources
nicht vorhanden.
Einschränkungen und Grenzwerte
In diesem Abschnitt werden die Einschränkungen und Limits für FHIR R4 aufgeführt. Dieselben Einschränkungen und Limits gelten jedoch auch für FHIR STU3.
Typ | Einschränkungen und Limits |
---|---|
Einzelne Einwilligungsressource |
|
Erzwingungsmodell |
|
X-Consent-Scope |
|
Unterstützte Methoden |
|
Leistung |
|
Best Practices
In den folgenden Abschnitten werden Best Practices für die Verwendung der FHIR-Zugriffssteuerung beschrieben.
Allgemeine Best Practices
import Sie nicht gleichzeitig FHIR-Ressourcen und rufen
ApplyConsents
oderApplyAdminConsents
auf. Wir empfehlen, zuerst FHIR-Ressourcen zu importieren und dannApplyConsents
oderApplyAdminConsents
aufzurufen. Wenn die zu importierenden Ressourcen jedoch keine Patienten- oder Einwilligungsressourcen enthalten, ist das Erzwingungsmodell nicht betroffen und die Verarbeitung von Einwilligungen oder Verwaltungsrichtlinien ist nicht erforderlich.Erstellen Sie nicht parallel benutzerdefinierten Suchanfragen und rufen
ApplyConsents
auf. Wir empfehlen, diese Dinge nacheinander auszuführen.Wenn in Ihren Workflows mehrere
ApplyConsents
auf nicht zusammenhängendePatientScope
aufgerufen werden müssen, können sie parallel aufgerufen werden.ApplyAdminConsents
kann parallel mit beliebig vielenApplyConsents
ausgeführt werden, aber nicht mit einer anderenApplyAdminConsents
.Beschränken Sie beim Einrichten des Proxys das IAM-Dienstkonto auf schreibgeschützte Berechtigungen, damit die Daten eines Patienten nicht in die Daten eines anderen Patienten geschrieben werden.
Verwenden Sie den Einwilligungsproxy nicht, wenn Sie Einträge erstellen oder aktualisieren.
Alle Schreibanfragen müssen validiert werden, um unerwartete Änderungen an patientenübergreifenden Daten zu verhindern.
Wenn abfolgebasierte Einwilligungen erzwungen werden, müssen zuerst die Ressourcen der Abteilungsbasis importiert werden, gefolgt von den übrigen Ressourcen der Abteilung. Alternativ können alle Ressourcen des Bereichs in einem einzigen Bundle verpackt und mit
fhir.executeBundle
aufgenommen werden.
Patientenressource löschen
Wenn Sie beim Löschen einer Patientenressource auch die Einwilligungserzwingung für diesen Patienten entfernen möchten (insbesondere, wenn FhirStore.disableReferentialIntegrity
"true“ ist), sollten Sie folgende Reihenfolge der Vorgänge beachten:
Löschen Sie alle Einwilligung-Ressourcen, die zur Patientenressource gehören.
Rufen Sie
ApplyConsents
mit dem FilterPatientScope
auf.
Vorhandenen Speicher für Einwilligungs-Zugriff einrichten
So richten Sie einen vorhandenen Speicher für den Einwilligungszugriff ein:
Nutzen Sie
UpdateFhirStore
um denConsentConfig
mit der Einwilligungs-Durchsetzungversion
alsV1
festzulegen und legen SieaccessEnforced
auftrue
fest.curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'consentConfig': { 'version': 'V1', 'accessEnforced': true } }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?update_mask=consentConfig"
Einwilligungen von Patienten oder Administratorrichtlinien verarbeiten
ApplyConsents
für Patienteneinwilligungen
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{'validateOnly': false}" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"
ApplyAdminConsents
für Administratorrichtlinien und abgeleitete Administratorrichtlinien.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'newConsentsList': { 'names': [ 'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/RESOURCE_ID_1/_history/VERSION_ID_1', ... 'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Consent/RESOURCE_ID_N/_history/VERSION_ID_N' ] }, 'validateOnly': false }" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyAdminConsents"
Häufigkeit der Ausführung von „ApplyConsents“ oder „ApplyAdminConsents“
Wenn das Feld
ConsentConfig
nicht festgelegt ist: Das FeldConsentConfig
ist sowohl beim ersten Erstellen eines FHIR-Speichers als auch beim Löschen des FeldsConsentConfig
nicht festgelegt. Sobald das FeldConsentConfig
nicht festgelegt ist, müssen Sie Folgendes wiederholen: Speicher für den Einwilligungszugriff einrichten, bevor Sie Einwilligungssensitive Anfragen stellen, um eine Auswertung veralteter Einwilligungen-Erzwingungsrichtlinien zu vermeiden.Wenn sich das Durchsetzungsmodell ändert: Wenn eine Einwilligungsressource erstellt, aktualisiert oder gelöscht wird, ändert sich das Durchsetzungsmodell. In solchen Fällen müssen Sie
ApplyConsents
oderApplyAdminConsents
aufrufen, damit die Änderungen wirksam werden.Wenn Sie die Patienten mit Änderungen der Einwilligung verfolgen können, empfehlen wir, den Filter
PatientScope
zu verwenden, um die erneute Verarbeitung des gesamten Speichers zu vermeiden. Dieser Filter ist nützlich, um die Durchsetzung für eine kleine Gruppe von Patienten sofort zu aktualisieren.Sie können
ApplyConsents
auch mit dem FilterTimeRange
regelmäßig ausführen. Dieser Filter ist nützlich, wenn eine sofortige Aktualisierung nicht erforderlich ist. Beispielsweise aktualisiert die folgende Anfrage die Erzwingung für Änderungen der Einwilligung zwischen dem 20.09.2022 0 Uhr und dem 21.09.2022 0 Uhr UTC.curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ --data "{ 'validateOnly': false, 'timeRange': { 'start': '2022-09-20T00:00:00Z', 'end': '2022-09-21T00:00:00Z', } }" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"
FHIR-Einwilligungsansicht verwenden
Der FHIR Consent Viewer zeigt Zugriffssteuerungsrichtlinien an. Es enthält eine Tabelle mit Einwilligungsbereichen, die FHIR-Zugriffssteuerungsregeln darstellen.
Bevor Sie den FHIR-Konsens-Viewer verwenden können, müssen folgende Voraussetzungen erfüllt sein:
Die Einstellung für den FHIR-Speicher
disableResourceVersioning
mussfalse
sein. Diese Einstellung kann nach dem Erstellen des FHIR-Speichers nicht mehr geändert werden. Informationen zum Erstellen eines neuen FHIR-Speichers finden Sie unter FHIR-Speicher erstellen.Der FHIR-Speicher ist für die Durchsetzung der Einwilligung konfiguriert.
So rufen Sie den FHIR-Einwilligungs-Viewer auf:
Console
Rufen Sie in der Google Cloud Console die Seite Browser auf.
Wählen Sie das Dataset mit dem FHIR-Speicher aus, dessen erzwungene Einwilligungsrichtlinien Sie aufrufen möchten.
Wählen Sie auf der Seite Datenspeicher in der Liste Datenspeicher den FHIR-Speicher aus, dessen erzwungene Einwilligungsrichtlinien Sie aufrufen möchten.
Klicken Sie auf der Seite Datenspeicherdetails auf den Tab Einwilligung. Die Einwilligungsbereiche werden angezeigt.