Ekstensi FHIR

Halaman ini menjelaskan cara Cloud Healthcare API mendukung ekstensi FHIR.

Ringkasan

FHIR memungkinkan ekstensi yang ditentukan pengguna pada resource dan jenis data. Cloud Healthcare API mendukung penyimpanan dan pengambilan ekstensi ini.

Nilai ekstensi

Elemen ekstensi adalah pasangan nilai kunci. Kunci yang disimpan di kolom url menunjukkan URL kanonis dari definisi ekstensi yang menentukan konten dan arti ekstensi. Kolom value adalah elemen pilihan yang dapat berisi berbagai jenis data FHIR.

Mekanisme ini sama untuk semua versi FHIR, hanya saja versi sebelumnya memiliki lebih sedikit jenis data yang tersedia. Jenis data yang tersedia untuk ekstensi dapat ditemukan di standar FHIR (DSTU2, STU3, R4).

Contoh berikut menunjukkan resource Patient dengan dua ekstensi, warna rambut dan kewargaan, pada elemen root:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "extension": [
    {
      "url": "http://example.com/fhir/StructureDefinition/hair-color",
      "valueString": "brown"
    },
    {
      "url": "http://example.com/fhir/StructureDefinition/patient-citizenship",
      "valueCodeableConcept": {
        "coding" : [{
          "system" : "urn:iso:std:iso:3166",
          "code" : "US"
        }]
      }
    }
  ]
}

Jenis dan elemen data kompleks dengan kolom turunan juga dapat memiliki ekstensi; misalnya, Patient ini berisi ekstensi di kolom identifier yang merupakan jenis data kompleks dan ekstensi di kolom communication yang memiliki kolom turunan lainnya:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "identifier": [
    "system": "MRN",
    "value": "AB1234",
    "extension": [
      {
        "url": "http://example.com/fhir/StructureDefinition/last-verified",
        "valueDateTime": "2021-01-01T00:00:00Z"
      }
    ]
  ],
  "communication": [
    {
      "language": {
        "coding": [{
          "system": "urn:iso:std:iso:639",
          "code": "EN"
        }]
      },
      "extension": [
        {
          "url": "http://example.com/fhir/StructureDefinition/fluency-level",
          "valueInteger": 7
        }
      ]
    }
  ]
}

Setiap elemen ekstensi hanya dapat memiliki satu kolom nilai. Untuk menentukan ekstensi yang berisi array nilai, Anda harus menentukan beberapa elemen ekstensi dengan url yang sama.

Anda tidak dapat menentukan ekstensi pada elemen root untuk jenis resource berikut:

  • Binary
  • Bundle
  • Parameters

Ekstensi kompleks

Ekstensi dapat berisi ekstensi untuk menentukan struktur bertingkat. Nama url ekstensi turunan relatif terhadap ekstensi luar. Setiap elemen ekstensi harus memiliki elemen nilai atau ekstensi turunan bertingkat, tetapi tidak keduanya.

Contoh berikut menunjukkan resource Patient yang berisi ekstensi patient-citizenship kompleks dengan ekstensi turunan code dan period:

{
  "resourceType": "Patient",
  "extension": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
      "extension": [
        {
          "url": "code",
          "valueCodeableConcept": {
            "coding": [{
              "system": "urn:iso:std:iso:3166",
              "code": "CA"
            }]
           }
        },
        {
          "url": "period",
          "valuePeriod": {
            "start": "2010-01-01"
          }
        }
      ]
      }
  ]
}

Ekstensi pada jenis primitif

Jenis data primitif di FHIR juga dapat memiliki ekstensi. Jika ditampilkan dalam format JSON, ekstensi akan dinyatakan dalam properti JSON tambahan dengan _ ditambahkan di depan nama elemen dasar, seperti yang ditentukan dalam representasi JSON FHIR.

Contoh berikut, dalam format JSON, menunjukkan resource Patient dengan ekstensi di kolom birthDate:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "birthDate": "1970-01-01",
  "_birthDate": {
    "extension": [
      {
        "url": "http://example.com/fhir/StructureDefinition/date-type",
        "valueString": "A"
      }
    ]
  }
}

Jika elemen primitif diulang, properti dengan _ juga ditangani sebagai array, dengan nilai null yang digunakan untuk menyelaraskan nilai ekstensi dengan primitif yang sesuai.

Contoh berikut menunjukkan resource Patient dengan ekstensi pada nilai kedua name.given, tetapi tanpa ekstensi pada nilai pertama:

{
  "resourceType": "Patient",
  "name": {
    "given": [
      "ABC",
      "DEF"
    ],
    "_given": [
      null,
      {
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/display",
            "valueString": "XYZ"
          }
        ]
      }
    ]
  }
}

Menentukan ekstensi dengan StructureDefinition

Untuk tujuan interoperabilitas, nama dan arti ekstensi dapat ditentukan dengan resource StructureDefinition yang dapat dipublikasikan atau didistribusikan agar pengguna data dapat menafsirkannya. Hal ini bersifat opsional saat menggunakan ekstensi di Cloud Healthcare API.

Identitas definisi ini ditunjukkan oleh URL kanonis di kolom 'url'. Untuk data yang dipertukarkan antar-organisasi, sebaiknya gunakan URL yang dapat diikuti konsumen data untuk mendapatkan StructureDefinition. Cloud Healthcare API tidak memvalidasi URL ini atau mencoba menyelesaikannya.

Konten resource StructureDefinition dapat bersifat kompleks dan sering ditentukan menggunakan alat untuk membuat profil FHIR.

Ekstensi pengubah

Ekstensi pengubah mirip dengan ekstensi, tetapi disimpan di kolom modifierExtension. Ekstensi pengubah adalah data tambahan yang tidak dapat diabaikan karena dapat membatalkan interpretasi elemen yang memuatnya.

Misalnya, ekstensi pengubah dapat menunjukkan bahwa pasien tidak memiliki kondisi yang ditentukan atau bahwa suatu obat tidak boleh diberikan resep.

Cloud Healthcare API menyimpan dan mengambil ekstensi pengubah, tetapi tidak mencoba menafsirkan artinya. Aplikasi disarankan untuk mengambil tindakan yang tepat saat menemukan ekstensi pengubah yang tidak memahaminya, mungkin dengan menampilkan peringatan atau menolak resource sepenuhnya. Implementasi harus menghindari penggunaan ekstensi pengubah jika memungkinkan.