Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

FHIR データ

FHIR® サーバ・アーキテクチャでは、FHIR データはダイナミック・オブジェクトとして表されるため、データを操作するには、ダイナミック・オブジェクトの操作方法に関する知識と、FHIR リソースを JSON で表す方法に関する知識とを組み合わせて使用します。FHIR リソースの JSON 表現の詳細は、FHIR 仕様Opens in a new tabを参照してください。

FHIR ペイロードが JSON 形式である場合、相互運用要求や応答などでは、%FromJSON メソッドを使用してペイロードをダイナミック・オブジェクトに変換し、操作できるようにします。

FHIR データとダイナミック・オブジェクト

FHIR データはインターシステムズ製品内でダイナミック・オブジェクトとして表されることがよくあるため、ダイナミック・オブジェクトの操作方法に関する知識は必須です。以下のコードは、FHIR データを含むダイナミック・オブジェクトを操作する方法を示しています。ご覧のように、FHIR リソースの JSON 表現内のフィールドの構造を把握できる程度に、FHIR 仕様Opens in a new tabに精通している必要があります。ダイナミック・オブジェクトの処理方法の詳細は、"JSON の使用" を参照してください。

これらのコード・サンプルでは、FHIR Patient リソースを含むダイナミック・オブジェクトである変数 patient が存在することを前提としています。

値の検索

以下のコードでは、2 つの異なるアプローチを使用して、Patient リソースの識別子を検索し、特定のシステムを見つけます。このコードを記述するためには、FHIR 仕様に十分精通し、Patient リソースの JSON 構造に system の名前/値ペアを持つ identifier が含まれることを把握しておく必要があります。

// Put JSON representation of Patient resource into a dynamic object
set patient = ##class(%DynamicObject).%FromJSON("c:\localdata\myPatient.json")

//Searching for a identifier with a specific system
set mySystem = "urn:oid:1.2.36.146.595.217.0.1"

//Approach 1: Use an Iterator
if $isobject(patient.identifier) {
  set identifierIterator = patient.identifier.%GetIterator()
  while identifierIterator.%GetNext(, .identifier) {
    if identifier.system = mySystem {
      write "Found identifier: " _ identifier.value,!
    }
  }
}

//Approach 2: Use a 'for' loop
if $isobject(patient.identifier) {
  for i=0:1:patient.identifier.%Size()-1 {
    set identifier = patient.identifier.%Get(i)
    if identifier.system = mySystem {
      write "Found identifier: " _ identifier.value,!
    }
  }
}

値の抽出

以下のコードの断片は Patient リソースから姓を抽出します。

if $isobject(patient.name) && (patient.name.%Size() > 0) {
  set myFamilyname = patient.name.%Get(0).family
}
値の変更

以下のコードの断片は Patient リソースの active フィールド (ブーリアン値) を 0 に設定します。

do patient.%Set("active", 0, "boolean")
新規 JSON オブジェクトの追加

新規 JSON オブジェクトを既存のダイナミック・オブジェクトに追加する場合は、ObjectScript 構文または JSON 構文のどちらを使用するのかを選択できます。例えば、以下のコードは、同じ結果をもたらす 2 つの異なるアプローチを使用して、新しい identifier を患者に追加します。

set mySystem = "urn:oid:1.2.36.146.595.217.0.1"
set myValue = "ABCDE"

// Approach 1: Use JSON syntax
if '$isobject(patient.identifier) {
  set patient.identifier = ##class(%DynamicArray).%New()
 }

do patient.identifier.%Push({
  "type": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
        "code": "MR"
      }
    ]
  },
  "system": (mySystem),
  "value": (myValue)
})

//Approach 2: Use ObjectScript syntax
set identifier = ##class(%DynamicObject).%New()

set typeCode = ##class(%DynamicObject).%New()
set typeCode.system = "http://terminology.hl7.org/CodeSystem/v2-0203"
set typeCode.code = "MR"

set identifier.type = ##class(%DynamicObject).%New()
set identifier.type.coding = ##class(%DynamicArray).%New()
do identifier.type.coding.%Push(typeCode)
set identifier.system = mySystem
set identifier.value = myValue

if '$isobject(patient.identifier) {
  set patient.identifier = ##class(%DynamicArray).%New()
 }
 do patient.identifier.%Push(identifier)

データ・ロード・ユーティリティ

データ・ロード・ユーティリティは、ローカル・システム・ディレクトリ内に格納されているリソースとバンドルを、HTTP を経由するか、または HTTP を経由せずに FHIR サーバに直接送信します。データ・ロード・ユーティリティに提供するローカル FHIR データは、個々のリソース、バンドル、またはその両方にすることができ、JSON、XML、またはその両方で表すことができます。このユーティリティの一般的な使用法は、大量の合成データをオープン・ソースの患者ジェネレータから FHIR サーバに提供することです。

可能な限り高速にデータを FHIR サーバに送ることが目的である場合は、HTTP を使用せずにデータをサーバに直接送信する方が効率的です。この場合、FHIRServer 引数を、サーバのエンドポイントと共にデータ・ロード・ユーティリティに渡します。例えば、サーバのエンドポイントが /fhirapp/fhir/r4 で、FHIR バンドルが含まれるディレクトリが c:\localdata であるとします。この場合、データ・ロード・ユーティリティを実行するには、以下のように入力します。

Set status = ##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("c:\localdata","FHIRServer","/fhirapp/fhir/r4")

ファイルの処理が終了すると、"Completed Successfully" と表示されます。表示されない場合は、"Do $SYSTEM.Status.DisplayError(status)" と入力するとエラーを表示できます。

または、HTTP を、サービス・レジストリの HTTP サービスの名前と共に渡すことで、すべてのバルク・データを HTTP 上で送信することもできます。HTTP サービスの作成の詳細は、"サービス・レジストリの管理" を参照してください。例えば、以下を実行できます。

Set status = ##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("c:\localdata","HTTP","MyUniqueServiceName")

データ・ロード・ユーティリティは、オプションの引数を 3 つ取ります。進行状況を表示するかどうかを制御するオプション、統計をログに記録するオプション、またはディレクトリ内の処理対象ファイルの数を制御するオプションです。これらの引数の詳細は、HS.FHIRServer.Tools.DataLoader.SubmitResourceFiles()Opens in a new tab を参照してください。

FeedbackOpens in a new tab