Mengontrol akses ke resource FHIR di Cloud Healthcare API

Halaman ini menjelaskan cara menggunakan resource Izin FHIR untuk menentukan akses data penyimpanan FHIR di Cloud Healthcare API.

Untuk mengonfigurasi penyimpanan FHIR dengan penerapan izin, selesaikan langkah-langkah berikut:

  1. Buat FHIR store jika Anda belum memilikinya.

  2. Tetapkan parameter ConsentConfig penyimpanan FHIR berikut untuk mengaktifkan penerapan izin:

    • version: Menentukan versi penerapan izin yang digunakan untuk FHIR store. Nilai ini hanya dapat ditetapkan satu kali oleh CreateFhirStore atau UpdateFhirStore. Setelah ditetapkan, Anda harus memanggil ApplyConsents atau ApplyAdminConsents untuk mengubah versi.

    • access_enforced: Jika ditetapkan ke true, saat mengakses resource FHIR, header izin yang diberikan akan diverifikasi terhadap perintah izin yang diberikan oleh konsumen.

    • consent_header_handling: Jika ditetapkan ke PERMIT_EMPTY_SCOPE (default), server mengizinkan permintaan tanpa (atau kosong) header X-Consent-Scope. Jika ditetapkan ke REQUIRED_ON_READ dan access_enforced = true, server akan menolak semua permintaan tanpa (atau kosong) header X-Consent-Scope.

Menyiapkan FHIR store baru dengan ConsentConfig

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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores?fhirStoreId=FHIR_STORE_ID"

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  "version": "R4",
  "enableUpdateCreate": true,
  "consentConfig": {
    "version": "V1"
  }
}

Jika Anda sudah memiliki toko, gunakan UpdateFhirStore untuk menetapkan ConsentConfig dengan pemberlakuan izin version sebagai V1 dan tetapkan accessEnforced ke true.

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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?update_mask=consentConfig"

Kebijakan diwakili melalui resource Izin. Tujuan dan penggunaan kolom resource dijelaskan dalam Dokumen Model Data.

Berikut adalah contoh semua resource yang dapat dibuat untuk contoh tertentu ini.

Membuat resource FHIR

Contoh berikut menunjukkan cara menjalankan [FHIR bundle](/healthcare-api/docs/how-tos/fhir-bundles) untuk mengisi resource berikut:

  • Sumber daya Praktisi dengan nama Jeffrey Brown
  • Resource Pasien dengan nama Darcy Smith
  • Resource Pengamatan yang menunjukkan pengukuran hemoglobin Darcy (LOINC718-7) yang dikumpulkan oleh Happy Hospital
  • Resource Pengamatan yang menunjukkan pengukuran glukosa Darcy (LOINC15074-8).
  • Izin dari Darcy untuk mengizinkan Jeffrey Brown menggunakan aplikasi App/123 untuk mengakses datanya yang dikumpulkan oleh Happy Hospital
  • Izin dari Darcy untuk mengizinkan Jeffrey Brown mengakses datanya untuk perawatan darurat (ETREAT)
  • Izin dari Happy Hospital untuk mengizinkan Jeffrey Brown mengakses semua data saat melakukan riset biomedis (BIORCH) dengan aplikasi App/golden

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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir"

Anda akan melihat respons JSON seperti berikut:

{
  "entry": [
    {
      "response": {
        "etag": "W/\"VERSION_ID\"",
        "lastModified": "2022-09-01T17:31:40.423469+00:00",
        "location": "https://healthcare.googleapis.com/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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/v1/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"
}

Berikut adalah contoh lainnya dari R4 Consent resource yang menunjukkan cara kebijakan yang kompleks dapat direpresentasikan.

{
  "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"
      }
    ]
  }
}

Contoh sebelumnya merepresentasikan resource Izin pasien yang di dalamnya pasien f001 memberikan izin kepada praktisi f002 dengan tujuan untuk memberikan perawatan rutin yang diwakili oleh TREAT. Praktisi berasal dari geolokasi iso3166-1/CA. Resource Consent ini mengizinkan praktisi mengakses data pasien jika data tersebut memenuhi semua kondisi berikut.

  • Ini adalah jenis Encounter dengan ID Encounter/e001.
  • Data ini berasal dari sumber http://somesystem.example.org/foo.
  • Memenuhi setidaknya salah satu kondisi berikut pada tag (resource dapat diberi tag dengan menyetel kolom system dan code Meta.tag):
    • Memiliki tag (system = http://terminology.hl7.org/CodeSystem/common-tags dan code = actionable)
    • Memiliki kedua tag (system = http://example.com/custom-tags dan code = archived) dan (system = http://example.com/custom-tags dan code = insensitive)
  • Memiliki setidaknya salah satu label keamanan berikut
    • system = http://terminology.hl7.org/CodeSystem/v3-Confidentiality dan code adalah salah satu dari R, N, M, L, U.
    • system = http://terminology.hl7.org/CodeSystem/v3-ActCode dan code = PSY.

Contoh arahan kebijakan admin

{
  "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"
      }
    ]
  }
}

Contoh sebelumnya menunjukkan bahwa resource Izin kebijakan admin memberikan izin kepada praktisi f002 dengan tujuan untuk memberikan perawatan rutin yang diwakili oleh TREAT. Praktisi berasal dari geolokasi iso3166-1/CA. Resource Izin ini mengizinkan praktisi mengakses data pasien jika data tersebut memenuhi semua kondisi berikut:

  • Ini adalah jenis Encounter dengan ID Encounter/e001.
  • Data ini berasal dari sumber http://somesystem.example.org/foo.
  • Memenuhi setidaknya salah satu kondisi berikut pada tag:
    • Memiliki tag (system = http://terminology.hl7.org/CodeSystem/common-tags dan code = actionable)
    • Memiliki kedua tag (system = http://example.com/custom-tags dan code = archived) dan (system = http://example.com/custom-tags dan code = insensitive)
  • Memiliki setidaknya salah satu label keamanan berikut
    • system = http://terminology.hl7.org/CodeSystem/v3-Confidentiality dan code adalah salah satu dari R, N, M, L, U.
    • system = http://terminology.hl7.org/CodeSystem/v3-ActCode dan code = PSY.

Contoh direktif kebijakan berjenjang admin

{
  "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"
        }
      }
    ]
  }
}

Contoh sebelumnya menunjukkan resource Izin kebijakan berjenjang admin yang memberikan izin kepada praktisi f002 dengan tujuan untuk memberikan perawatan rutin yang diwakili oleh TREAT. Praktisi berasal dari geolokasi iso3166-1/CA. Resource Izin ini mengizinkan praktisi mengakses data kompartemen pasien dengan tag employee. Semua kriteria resource hanya berlaku untuk resource dasar kompartemen, yang berarti resource Pasien, karena mengontrol resource mana yang akan di-cascade dari.

Menerapkan izin pasien atau kebijakan admin

Menerapkan izin pasien paling lambat 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

Respons berisi nama operasi. Untuk melacak status operasi, Anda dapat menggunakan [Metode `get` Operasi](/healthcare-api/docs/reference/rest/v1/projects.locations.datasets.operations/get):

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Setelah operasi selesai, server akan menampilkan respons dengan status operasi dalam format JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.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.v1.fhir.ApplyConsentsResponse",
    "consentApplySuccess": "2",
    "affectedResources": "5"
  }
}

Respons ini menunjukkan bahwa server berhasil memproses 2 izin dan memperbarui akses berdasarkan izin dari 5 resource (1 Pasien, 2 Izin, 2 Observasi).

Menerapkan kebijakan admin dengan ApplyAdminConsents

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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyAdminConsents"

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

Respons berisi nama operasi. Untuk melacak status operasi, Anda dapat menggunakan [Metode `get` Operasi](/healthcare-api/docs/reference/rest/v1/projects.locations.datasets.operations/get):

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Setelah operasi selesai, server akan menampilkan respons dengan status operasi dalam format JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.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.v1.fhir.ApplyAdminConsentsResponse",
    "consentApplySuccess": "1",
    "affectedResources": "7"
  }
}

Respons ini menunjukkan bahwa server berhasil memproses 1 kebijakan admin dan memperbarui akses berdasarkan izin 7 resource (1 Praktisi, 1 Pasien, 2 Observasi, 2 Izin pasien, dan 1 kebijakan admin).

Pemberlakuan izin yang disimpan dalam FHIR store tidak akan berlaku hingga ApplyConsents (untuk izin pasien) atau ApplyAdminConsents (untuk kebijakan admin dan kebijakan admin bertingkat) dipanggil dan berhasil diselesaikan. Jika Anda menambahkan, mengubah, atau menghapus izin setelah menjalankan ApplyConsents atau ApplyAdminConsents, Anda harus menjalankannya lagi agar izin tersebut disertakan dalam model penegakan.

Resource FHIR diindeks secara asinkron, sehingga mungkin ada sedikit penundaan antara waktu saat ApplyConsents atau ApplyAdminConsents selesai dan saat model penegakan ditampilkan dalam hasil penelusuran. Penundaan ini hanya diharapkan untuk permintaan penelusuran.

Jika ini pertama kalinya Anda menyiapkan penerapan izin di FHIR store, tunggu hingga operasi yang berjalan lama ApplyConsents atau ApplyAdminConsents selesai sebelum membuat permintaan yang mendukung izin.

Untuk memanggil ApplyConsents pada sebagian pasien, Anda dapat menggunakan filter berikut:

  • PatientScope: untuk menjalankan ApplyConsents pada daftar ID pasien dengan hingga 10.000 pasien

  • TimeRange: untuk menjalankan ApplyConsent pada daftar ID resource Pasien yang resource Izinnya diperbarui selama rentang waktu tertentu

Untuk memanggil ApplyAdminConsents: Anda harus memberikan daftar lengkap semua kebijakan yang ingin Anda terapkan (bukan daftar inkremental). Akibatnya, daftar kosong akan membatalkan penegakan dari semua kebijakan admin dari toko. Setiap kebijakan harus berupa nama versi resource jika FHIR store melakukan pembuatan versi, dan nama resource jika tidak.

Anda dapat menggunakan operations.get untuk mengambil ProgressCounter operasi. Setelah selesai, ada ApplyConsentsResponse yang disertakan dalam Operation.response. Penghitung di ProgressCounter dan ApplyConsentsResponse atau ApplyAdminConsentsResponse dijelaskan dalam tabel berikut.

ProgressCounter ApplyConsentsResponse atau ApplyAdminConsentsResponse Deskripsi
success consentApplySuccess Jumlah resource Izin yang berhasil diproses oleh operasi.
failure consentApplyFailure Jumlah resource Izin yang tidak didukung atau tidak valid. Anda dapat melihat log error di Cloud Logging atau saat validateOnly adalah false, periksa status penerapan izin menggunakan CheckConsentEnforcementStatus atau CheckPatientConsentEnforcementStatus untuk mengambil detail error.
secondarySuccess affectedResources Jika validateOnly adalah false, maka ini menunjukkan jumlah resource FHIR yang berhasil diindeks ulang karena efek perubahan izin.
secondaryFailure failedResources Jika validateOnly adalah false, ini menunjukkan jumlah resource FHIR yang mungkin mengalami perubahan izin, tetapi gagal diindeks ulang. Hal ini dapat memengaruhi penelusuran dengan konteks izin, tetapi tidak memengaruhi metode lainnya. Untuk melihat detail error, Anda dapat melihat log error di Cloud Logging.

Saat resource Izin FHIR diproses, Anda dapat menggunakan API berikut untuk memeriksa status penegakan untuk satu izin atau semua izin dari pasien:

  • CheckConsentEnforcementStatus: menampilkan resource Parameters (STU3, R4) yang mencantumkan parameter berikut:

    • id: merepresentasikan ID resource resource Izin

    • lastUpdated: menunjukkan waktu saat izin terakhir kali diterapkan

    • versionId: merepresentasikan ID versi yang digunakan untuk penerapan izin

    • consent-enforcement-status: menunjukkan status penerapan izin

  • CheckPatientConsentEnforcementStatus: menampilkan Bundle (STU3, R4) dari resource Parameters (STU3, R4) yang terdiri dari status penegakan semua izin dari satu pasien

Untuk kebijakan admin, CheckConsentEnforcementStatus hanya dapat digunakan untuk memeriksa status penerapan satu kebijakan admin Izin. Atau, Anda dapat menggunakan fhirStores.get untuk melihat semua kebijakan admin aktif yang diterapkan ke toko.

consent-enforcement-status dapat memiliki salah satu nilai berikut:

  • OFF: merepresentasikan status penerapan default resource Izin baru yang belum pernah diproses.

  • ENFORCEABLE: status saat resource Izin telah diproses dengan berhasil.

  • INACTIVE: status tidak aktif saat resource Izin diabaikan.

  • UNSUPPORTED: status resource Izin yang mungkin sesuai dengan spesifikasi FHIR, tetapi tidak dapat diterapkan. Hal ini disebabkan oleh penerapan yang terbatas dari penegakan izin FHIR dengan tingkat dukungan fitur saat ini.

  • ENFORCEMENT_LIMIT_EXCEEDED: status saat format resource izin FHIR dan tingkat dukungan untuk resource bebas error, tetapi satu atau beberapa kondisi berikut benar:

    • Pasien memiliki banyak resource Izin.

    • Ukuran petunjuk izin di semua izin aktif lebih besar daripada ukuran maksimum yang diizinkan untuk petunjuk izin agar diterapkan oleh server FHIR.

Cloud Healthcare API mendukung penelusuran resource FHIR di penyimpanan FHIR tertentu dengan actor, purpose, dan environment sebagai parameter kueri. Respons hanya berisi resource yang telah diberi izin.

  1. Praktisi Jeffrey Brown (diidentifikasi oleh Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menggunakan aplikasi tepercaya App/123 menelusuri semua Pengamatan dengan status=final.
  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/123" \
        "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?status=final"

    Anda akan melihat respons JSON seperti berikut:

    {
      "entry": [
        {
          "fullUrl": "https://healthcare.googleapis.com/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final"
        },
        {
          "relation": "first",
          "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final"
        },
        {
          "relation": "self",
          "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?status=final"
        }
      ],
      "resourceType": "Bundle",
      "total": 1,
      "type": "searchset"
    }
    
  3. Praktisi Jeffrey Brown (diidentifikasi oleh Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menggunakan aplikasi App/123 menelusuri semua Pengamatan dari Pasien Darcy.
  4. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Darcy"

    Anda akan melihat respons JSON seperti berikut:

    {
      "link": [
        {
          "relation": "search",
          "url": "https://healthcare.googleapis.com/v1/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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Darcy"
        }
      ],
      "resourceType": "Bundle",
      "total": 0,
      "type": "searchset"
    }
    

    Kueri sebelumnya adalah penelusuran berantai. Karena skenario izin actor/Practitioner/12942879-f89f-41ae-aa80-0b911b649833 env/App/123 ditolak aksesnya untuk resource Pasien Darcy (diidentifikasi oleh Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2), server FHIR tidak menampilkan Pengamatan dari Pasien seolah-olah Pasien tidak ada.

  5. Praktisi Jeffrey Brown (diidentifikasi dengan Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menggunakan aplikasi App/123 menelusuri semua Pengamatan dari Pasien Darcy untuk tujuan perawatan darurat.
  6. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Darcy"

    Anda akan melihat respons JSON seperti berikut:

    {
      "entry": [
        {
          "fullUrl": "https://healthcare.googleapis.com/v1/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/v1/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/v1/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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject:Patient.name=Darcy"
        }
      ],
      "resourceType": "Bundle",
      "total": 2,
      "type": "searchset"
    }
    
  7. Praktisi Jeffrey Brown (diidentifikasi dengan Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menelusuri Pengamatan dengan status=final untuk dua tujuan, yaitu perawatan dan riset
  8. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?status=final"

    Anda akan melihat respons JSON seperti berikut:

    {
      "issue": [
        {
          "code": "security",
          "details": {
            "text": "permission_denied"
          },
          "diagnostics": "the maximum number of allowed consent purpose scopes is 1, got 2",
          "severity": "error"
        }
      ],
      "resourceType": "OperationOutcome"
    }
    

    Dalam hal ini, Praktisi Jeffrey Brown harus menghapus tujuan yang tidak perlu dari `X-Consent-Scope` dalam permintaan.

  9. Administrator IT rumah sakit menggunakan bypass untuk menelusuri semua Praktisi di rumah sakit.
  10. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner?"

    Karena bypass diberikan, pemeriksaan izin dilewati. Anda akan menerima respons JSON yang mirip dengan yang berikut:

    {
      "entry": [
        {
          "fullUrl": "https://healthcare.googleapis.com/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?"
        },
        {
          "relation": "first",
          "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?"
        },
        {
          "relation": "self",
          "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Practitioner/?"
        }
      ],
      "resourceType": "Bundle",
      "total": 1,
      "type": "searchset"
    }
    

Cloud Healthcare API mendukung pengambilan resource FHIR di penyimpanan FHIR tertentu dengan actor, purpose, dan environment sebagai parameter kueri. Respons hanya berisi resource yang telah diberi izin.

  1. Praktisi Jeffrey Brown (diidentifikasi oleh Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menggunakan aplikasi App/123 membaca pengukuran hemoglobin Pasien (dalam contoh ini, Observation/7473784b-46a8-470c-b9a6-fe38a01025aa).
  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/123" \
        "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"

    Karena pemohon diberi izin, responsnya adalah konten resource Pengamatan.

    {
      "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
      }
    }
    
  3. Praktisi Jeffrey Brown (diidentifikasi oleh Practitioner/12942879-f89f-41ae-aa80-0b911b649833) menggunakan aplikasi App/unknown yang tidak diketahui membaca pengukuran hemoglobin Pasien (dalam contoh ini, Observation/7473784b-46a8-470c-b9a6-fe38a01025aa).
  4. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"

    Karena akses batas pemohon (`App/unknown`) tidak diizinkan oleh izin Pasien, permintaan ditolak.

    {
      "issue": [
        {
          "code": "security",
          "details": {
            "text": "permission_denied"
          },
          "diagnostics": "Consent access denied or the resource being accessed does not exist",
          "severity": "error"
        }
      ],
      "resourceType": "OperationOutcome"
    }
    
  5. Praktisi Jeffrey Brown (diidentifikasi dengan Practitioner/12942879-f89f-41ae-aa80-0b911b649833) melakukan riset biomedis menggunakan aplikasi App/golden membaca birthDate Darcy (dalam contoh ini, Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2).
  6. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/3c6aa096-c054-4c22-b2b4-1e4a4d203de2"

    Karena pemohon telah diberi izin, responsnya adalah konten resource Pasien.

    {
      "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"
    }
    
  7. Praktisi Jeffrey Brown (diidentifikasi oleh Practitioner/12942879-f89f-41ae-aa80-0b911b649833) meminta akses darurat yang tidak sah ke catatan pasien, menggunakan protokol "break-the-glass". (dalam contoh ini, Observation/7473784b-46a8-470c-b9a6-fe38a01025aa).
  8. 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/7473784b-46a8-470c-b9a6-fe38a01025aa"

    Karena metode otorisasi izin adalah btg, server akan melewati pemeriksaan izin. Responsnya adalah konten resource Pengamatan.

    {
      "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
      }
    }
    

Bagian berikut menjelaskan metode penerapan izin yang didukung di Cloud Healthcare API dan cara penerapan akses resource saat Anda membuat permintaan yang mendukung izin.

Saat membuat permintaan, server otorisasi Anda bertanggung jawab untuk membuat token akses dengan cakupan izin yang relevan.

Menetapkan header HTTP

Cakupan izin diteruskan ke Cloud Healthcare API menggunakan header HTTP X-Consent-Scope. Cloud Healthcare API menggunakan header ini untuk menerapkan kontrol akses berbasis izin pada data di penyimpanan FHIR.

Permintaan FHIR dapat mendukung cakupan entri izin dalam jumlah terbatas. Hingga tiga entri actor, satu entri purp, dan satu entri env dapat disertakan dalam permintaan FHIR tertentu.

Untuk cakupan khusus, permintaan FHIR dapat mendukung salah satu dari btg, atau bypass.

Menetapkan header HTTP untuk aplikasi tepercaya

Bagian ini hanya diperlukan jika Anda menggunakan server otorisasi yang dikontrol pelanggan. Dalam hal ini, Anda juga harus menggunakan SMARTproxy atau proxy serupa.

Beberapa aplikasi tepercaya dapat melakukan panggilan langsung ke Cloud Healthcare API dengan cakupan izin di header HTTP yang ditentukan. Hal ini memungkinkan penegakan izin langsung tanpa memerlukan SMARTproxy atau proxy lain untuk mengonversi antara server otorisasi eksternal dan Google Cloud.

Misalnya, aplikasi Anda mungkin terdaftar untuk subset cakupan, seperti cakupan environment aplikasi, atau aplikasi mungkin menampilkan widget pilihan untuk menyetel beberapa entri cakupan seperti purpose pengakses.

Pengguna tepercaya atau aplikasi tepercaya juga dapat menggunakan entri cakupan btg atau bypass, yang tunduk pada peninjauan pasca-audit.

Cloud Healthcare API menyediakan dukungan bawaan untuk penerapan Izin FHIR berdasarkan cakupan izin input. Administrator penyimpanan FHIR bertanggung jawab untuk membuat dan mengonfigurasi server otorisasi di luar Cloud Healthcare API yang memberikan cakupan izin.

Contoh token akses

Contoh berikut menunjukkan token akses yang dienkode dalam base64:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJjb25zZW50LnRva2VuLm9yZyIsImlhdCI6MTYxMjg4NDA4NSwiZXhwIjoxNjQ0NDIwMDg1LCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJkb2N0b3IuZ2FicmllbGFAZXhhbXBsZS5jb20iLCJzY29wZSI6Im9pZGMgYWN0b3IvUHJhY3RpdGlvbmVyLzEyMyBhY3Rvci9Hcm91cC85OTkgcHVycC92My9UUkVBVCBlbnYvQXBwL2FiYyJ9.fC7ljkVUUx8fwUOrJuONcrqA-WKC-k_Bclzlgds0Cq6H_gEe3nUjPlSOCTQsIdYB

Setelah mendekode token akses, Anda dapat melihat bahwa token tersebut berisi payload berikut:

{
  "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"
}

Mengonfigurasi SMARTProxy

SMARTProxy adalah proxy open source dari Google yang menyediakan fitur berikut:

  • Mengizinkan server FHIR Cloud Healthcare API menerima dan memvalidasi token akses yang mendukung izin.

  • Memungkinkan penerapan FHIR di Cloud Healthcare API menyertakan token akses yang mendukung izin sebagai bagian dari model izin dan pengelolaan Cloud Healthcare API.

  • Mendukung fitur token untuk dukungan SMART on FHIR juga.

Saat Anda membuat permintaan untuk mengambil data dari Cloud Healthcare API melalui SMARTProxy, hal berikut akan terjadi:

  1. SMARTProxy menerima permintaan dari klien yang berisi token yang mendukung izin.

  2. SMARTProxy memvalidasi token yang mendukung izin melalui server otorisasi JWT yang Anda miliki.

  3. SMARTProxy membaca cakupan dari token yang mendukung izin dan meneruskannya ke Cloud Healthcare API melalui header HTTP.

  4. Cloud Healthcare API menerima header dan memvalidasinya untuk menerapkan arahan izin pada permintaan. Cloud Healthcare API kemudian menampilkan respons melalui SMARTProxy ke klien.

Mengonfigurasi akun layanan Google Cloud

Proxy hanya dapat memiliki satu Google Cloud akun layanan. Jika beberapa klien menggunakan proxy yang sama, klien akan menggunakan akun layanan yang sama. Berhati-hatilah saat membagikan akun layanan ke beberapa klien karena alasan berikut:

Misalnya, jika Anda memanggil Cloud Healthcare API secara langsung menggunakan Akun Google Anda untuk autentikasi, maka Cloud Audit Logs akan mencatat alamat email Anda sebagai alamat email utama. Saat Anda menggunakan proxy untuk memanggil Cloud Healthcare API, proxy akan menggunakan akun layanannya sendiri dan alamat email utama adalah alamat email akun layanan tersebut dan akun asli tidak ditentukan.

Log audit

Log audit dibuat saat ada permintaan akses atau saat perubahan penerapan akses resource.

Mengakses log audit

Jika log audit diaktifkan di FHIR store, kolom metadata consentMode akan disertakan dalam log audit yang tersedia di Cloud Logging. consentMode dapat memiliki salah satu nilai berikut:

  • off: konfigurasi FHIR store telah menetapkan consentConfig.accessEnforced ke false dan tidak mengizinkan permintaan yang mendukung izin.

  • emptyScope: FHIR store memiliki consentConfig.accessEnforced yang disetel ke true, tetapi header cakupan izin tidak disertakan. Akibatnya, izin tidak diterapkan.

  • enforced: FHIR store memiliki consentConfig.accessEnforced yang ditetapkan ke true dan header cakupan izin ada. Akibatnya, izin dievaluasi dan diterapkan pada permintaan.

  • btg: permintaan FHIR memiliki btg yang diberikan di header cakupan izin. Akibatnya, pemeriksaan izin dilewati. Permintaan ini dimaksudkan untuk digunakan dalam keadaan darurat dan hanya tunduk pada peninjauan pasca-audit.

  • bypass: permintaan FHIR hanya memiliki bypass yang diberikan di header cakupan izin. Akibatnya, pemeriksaan izin dilewati. Permintaan ini dimaksudkan untuk digunakan oleh alur kerja tepercaya (seperti administrator atau aplikasi tepercaya, bukan pengguna akhir) sehingga log audit ini berbeda dengan btg, yang digunakan untuk pemeriksaan tata kelola data.

Secara opsional, Anda dapat menyetel access_determination_log_config ke VERBOSE untuk mencatat informasi selengkapnya tentang alasan permintaan diberikan atau ditolak.

Log audit perubahan penerapan akses

Saat resource dasar kompartemen berubah (misalnya, menghapus tag employee pasien): Kontrol akses pada resource yang berubah dan kompartemennya dapat berubah karena Kebijakan Bertingkat Admin. Tindakan ini akan memicu pengindeksan ulang pada semua resource kompartemennya. Progres pengindeksan ulang untuk setiap pembaruan resource dasar kompartemen dapat dilacak di Cloud Logging dengan filter jsonPayload.@type="type.googleapis.com/google.cloud.healthcare.logging.FhirConsentCascadeLogEntry".

Contoh log progres pengindeksan ulang bertingkat

{
  "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 adalah status operasi pengindeksan ulang, jsonPayload.affectedResources adalah jumlah resource kompartemen yang diindeks ulang, dan jsonPayload.lastUpdated adalah stempel waktu pembaruan resource pasien. Jika operasi baru saja dimulai, jsonPayload.state="STATE_STARTED" dan jsonPayload.affectedResources tidak akan ada.

Batasan dan keterbatasan

Bagian ini menunjukkan batasan dan limitasi untuk FHIR R4, tetapi batasan dan limitasi yang sama berlaku untuk FHIR STU3.

Jenis Batasan dan batas
Resource Izin Tunggal
  • Hanya satu Consent.provision yang didukung, beberapa penyediaan atau penyediaan bertingkat tidak didukung.
  • Minimal 1 Consent.provision.actor, maksimal 25:
    • Consent.provision.actor.role harus berupa http://terminology.hl7.org/CodeSystem/v3-RoleCode.
    • Consent.provision.actor.code harus berupa GRANTEE atau HPOWATT.
  • Maksimal 1 Consent.provision.purpose:
    • Consent.provision.purpose.system harus berupa http://terminology.hl7.org/CodeSystem/v3-ActReason.
    • Consent.provision.purpose.code tidak boleh kosong dan maksimal 13 karakter.
  • Maksimal 1 environment:
    • Consent.provision.extension.url harus berupa https://g.co/fhir/medicalrecords/Environment.
    • Panjang gabungan sistem dan kode harus kurang dari 15 karakter.
  • Jika memfilter menurut jenis resource, Consent.provision.class.system harus http://hl7.org/fhir/resource-types.
  • Jika memfilter menurut sumber data, Consent.provision.extension.url harus https://g.co/fhir/medicalrecords/DataSource.
  • Jika memfilter menurut tag data, Consent.provision.extension.url harus berupa https://g.co/fhir/medicalrecords/DataTag.
    • Tag data dapat berupa ekstensi kompleks, yang bertingkat hingga satu tingkat, untuk mendeskripsikan kebijakan yang cocok dengan resource yang memiliki semua tag yang ditentukan (ditafsirkan secara konjungtif).
    • Maksimal 5 tag bertingkat didukung.
  • Maksimal 100 nilai untuk semua atribut berulang, kecuali dijelaskan berbeda di baris ini.
Model penerapan
  • Setiap pasien dapat memiliki hingga 200 resource Izin active yang diterapkan dalam satu waktu.
  • Setiap toko dapat memiliki hingga 200 kebijakan admin active yang diterapkan sekaligus.
  • Format ringkas khusus untuk kumpulan semua Petunjuk Izin di semua izin aktif untuk Pasien tertentu tidak boleh melebihi batas ukuran yang ditetapkan; biasanya ada cukup kapasitas untuk mengenkode ribuan petunjuk izin, kecuali jika string resource yang sangat panjang sangat banyak. Contoh:
    • Ratusan Izin pada sumber data dan tag data unik, yang masing-masing sangat panjang, menggunakan banyak ruang.
    • Satu Pasien dengan 3.000 entri ID resource Consent.provision.data.reference unik di banyak Izin aktif yang masing-masing menentukan Consent.provision.actor unik menggunakan ruang secara lebih agresif daripada ketentuan yang tidak menentukan batasan referensi data atau berisi banyak string referensi aktor yang sama.
  • Setiap resource dapat memiliki hingga 1.000 arahan izin dari semua Izin yang berlaku untuknya.
X-Consent-Scope
  • Minimal satu dan maksimal tiga entri actor.
  • Maksimal satu entri purp:
    • Setiap entri purp harus dalam format system/code (v3 adalah sistem terdaftar untuk http://terminology.hl7.org/CodeSystem/v3-ActReason).
    • Panjang kode harus kurang dari 13.
  • Maksimum satu entri env:
    • Setiap entri env harus dalam format system/code.
    • Panjang gabungan sistem dan kode harus kurang dari 15.
  • btg memerlukan minimal satu entri actor.
  • bypass memerlukan minimal satu entri actor dan satu entri env.
Metode yang didukung
Performa
  • ApplyConsents dan ApplyAdminConsents diskalakan secara serupa atau lebih baik daripada ImportResources.
  • Mengenai permintaan yang mendukung izin:
    • Model izin kami telah dioptimalkan untuk performa penegakan operasi CRUD, termasuk penelusuran dalam skala besar di banyak resource dan banyak pasien.
    • Pembacaan setiap resource dapat memberikan dampak kecil pada latensi permintaan, tetapi performa penelusuran bervariasi berdasarkan kueri dasar dan jumlah cakupan izin yang menyebabkan lebih banyak kriteria aksesori aktif selama penelusuran.
    • Sebaiknya jalankan pengujian performa Anda sendiri dengan berbagai parameter permintaan FHIR yang representatif untuk menentukan karakteristik performa kasus penggunaan Anda berdasarkan karakteristik data Anda, seperti jumlah resource dari jenis resource penelusuran tertentu di penyimpanan FHIR.
    • Solusi kami menjaga penyerapan dan pembaruan semua resource, termasuk resource izin, tetap ringan sehingga throughput selama penyerapan dan bentuk traffic tulis lainnya dapat berjalan dengan dampak minimum.

Praktik terbaik

Bagian berikut menjelaskan praktik terbaik saat menggunakan Kontrol Akses FHIR.

Praktik terbaik umum

  • Jangan mengimpor resource FHIR dan memanggil ApplyConsents atau ApplyAdminConsents secara paralel. Sebaiknya impor terlebih dahulu resource FHIR, lalu panggil ApplyConsents atau ApplyAdminConsents. Namun, jika resource yang akan diimpor tidak menyertakan resource Pasien atau Izin, maka model penegakan tidak akan terpengaruh dan pemrosesan izin atau kebijakan admin tidak diperlukan.

  • Jangan membuat penelusuran kustom dan memanggil ApplyConsents secara paralel. Sebaiknya Anda melakukannya satu per satu.

  • Jika alur kerja Anda memerlukan pemanggilan beberapa ApplyConsents pada PatientScope yang tidak berurutan, alur kerja tersebut dapat dipanggil secara paralel.

  • ApplyAdminConsents dapat berjalan secara paralel dengan sejumlah ApplyConsents, tetapi tidak dengan ApplyAdminConsents lain.

  • Saat menyiapkan proxy, batasi akun layanan IAM dengan izin hanya baca untuk menghindari penulisan data satu pasien ke catatan pasien lain.

  • Jangan gunakan proxy izin saat membuat atau memperbarui catatan.

  • Memvalidasi semua permintaan penulisan untuk mencegah modifikasi data lintas pasien yang tidak terduga.

  • Jika izin berjenjang diterapkan, resource dasar kompartemen harus diimpor terlebih dahulu, diikuti dengan resource kompartemen lainnya. Atau, semua resource kompartemen dapat di-wrap dalam satu paket dan di-ingest menggunakanfhir.executeBundle.

Menghapus resource Pasien

Saat menghapus resource Pasien, jika Anda juga ingin menghapus penerapan izin untuk pasien tersebut (terutama saat FhirStore.disableReferentialIntegrity bernilai benar), sebaiknya ikuti urutan operasi berikut:

  1. Menghapus semua resource Izin yang dimiliki resource Pasien.

  2. Panggil ApplyConsents dengan filter PatientScope.

Untuk menyiapkan toko yang sudah ada untuk akses izin, selesaikan langkah-langkah berikut:

  1. Gunakan UpdateFhirStore untuk menetapkan ConsentConfig dengan penerapan izin version sebagai V1 dan tetapkan accessEnforced ke true.

    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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?update_mask=consentConfig"
  2. Memproses izin pasien atau kebijakan admin

    1. ApplyConsents untuk izin pasien
    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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"
    1. ApplyAdminConsents untuk kebijakan admin dan kebijakan bertingkat admin.
    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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyAdminConsents"

Seberapa sering menjalankan ApplyConsents atau ApplyAdminConsents

  • Jika kolom ConsentConfig tidak ditetapkan: Kolom ConsentConfig tidak ditetapkan baik saat penyimpanan FHIR pertama kali dibuat maupun saat kolom ConsentConfig dihapus. Setelah kolom ConsentConfig tidak disetel, Anda harus mengulangi penyiapan toko untuk akses izin sebelum membuat permintaan yang mendukung izin untuk menghindari evaluasi kebijakan penegakan izin yang sudah tidak berlaku.

  • Saat model penegakan berubah: Saat resource Izin dibuat, diperbarui, atau dihapus, model penegakan akan berubah. Dalam kasus tersebut, Anda harus memanggil ApplyConsents atau ApplyAdminConsents agar perubahan ini diterapkan.

    • Jika Anda dapat melacak perubahan Pasien dengan Izin, sebaiknya gunakan filter PatientScope untuk menghindari pemrosesan ulang seluruh toko. Filter ini berguna untuk segera memperbarui penegakan sejumlah kecil Pasien.

    • Anda juga dapat menjalankan ApplyConsents secara berkala menggunakan filter TimeRange. Filter ini berguna saat penyegaran segera tidak penting. Misalnya, permintaan berikut memperbarui penegakan untuk perubahan izin antara 00.00 UTC 20-09-2022 dan 00.00 UTC 21-09-2022.

      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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:applyConsents"

FHIR Consent Viewer menampilkan kebijakan kontrol akses. Tabel ini menyediakan tabel yang berisi cakupan izin untuk merepresentasikan aturan Kontrol Akses FHIR.

Sebelum Anda dapat menggunakan FHIR Consent Viewer, pastikan hal berikut:

Untuk melihat FHIR Consent Viewer, selesaikan langkah-langkah berikut:

Langkah berikutnya