Google Cloud Healthcare APIでFHIR プロファイルを使ってみる

Nobuhisa Mizue
google-cloud-jp
Published in
15 min readJun 28, 2022

Google CloudのHealthcare API (FHIR R4)に “JP-Core”プロファイルを適用してみました

はじめに

Google Cloud Healthcare API は、HL7 v2やFHIRやDICOMなど医療業界の標準規格を扱うためのフルマネージドのクラウドサービスです。サーバやデータベースを構築することなく、APIのみでデータの操作が可能です。
本記事では、HL7 FHIRの日本版プロファイルであるJP-Coreを適用して、データを検証するための手順を紹介します。HL7 FHIR や FHIRプロファイル について詳細を知りたい方はこちらのサイトをご参照ください。また、JP-Coreプロファイルついてはこちらをご参照ください。
なお、本記事は完全な操作手順を説明するものではありませんのでご了承願います。

以降で説明する手順の大まかな流れは以下の通りです。

  1. HL7 FHIRストア作成
  2. JP-Core プロファイルのアーティファクトを作成
  3. FHIRストアにJP-Coreプロファイルをインポート
  4. 検証する

1. HL7 FHIRストア作成

Google Cloud Healthcare APIを利用すると、HL7 FHIR に準拠した FHIRストアを瞬時に作成することができます。この作成は、コマンドラインでもGoogle Cloud コンソールでも実行できます。具体的な手順はこちらのドキュメントを参照してください。

以下は、

・データセット名 : dataset1
・リージョン: asia-northeast1 (東京)
・タイプ : FHIR
・ストアID : fhirstore-jp-core

などを指定してストアを作成する際のコンソール画面の例です。
コンソール > 分析 > Healthcare > ブラウザ
から[データセットを作成]をクリックします

[作成]ボタンを押すと、FHIR ストアの作成がすぐに完了します。その後、コンソール画面上でストアの詳細を確認できます。

2. JP-Core プロファイルのアーティファクトを作成

JP-Coreプロファイルは、2022年6月現在で Draft Ver.1が公開されています。プロファイルをインポートするには、 まず、Implementation Guide(IG)等のJSON形式のファイル群(アーティファクト)が必要です。
今回はSUSHIというツールを使って、JP-Coreプロファイルのアーティファクトを生成してみます。もしすでにJP-Coreのアーティファクト( ImplementationGuide、 StructureDefinition、 CodeSystem、 ValueSet など)を生成済みであれば、このセクションをスキップすることができます。

SUSHIは、FHIR shorthand (FSH)を記述したファイルをFHIRのJSON形式に変換するためのツールです。FSH in Practiceについても参照してください。

Cloud Shellの利用

Cloud Shell上にSUSHIをインストールします。Cloud Shellはブラウザからアクセスできる、オンラインの開発および運用環境です。Google Cloudコンソール上で [Cloud Shellをアクティブにする]をクリックするだけでCloud Shellを利用できます。

Node.js や npm のインストール

以下のコマンドを実行して nodejsやnpmをインストールします。

sudo apt updatecurl -fsSL https://deb.nodesource.com/setup_current.x|sudo bash -sudo apt-get install -y nodejsnode --version
v18.2.0
npm --version
8.9.0

SUSHIをインストール

npmでSUSHIをインストールします。

sudo npm install -g fsh-sushisushi --version
SUSHI v2.5.0 (implements FHIR Shorthand specification v2.0.0)

SUSHIを実行

JP-Core ドラフトをGithubからCloneします。

git clone https://github.com/jami-fhir-jp-wg/jp-core-draft.git

ディレクトリを移動し、SUSHIを実行します。

cd jp-core-draft/forSUSHI/JPCoreV1sushi .

実行結果は以下のように表示されます。

sushi

これで、fsh-generated/resourceフォルダーの下にImplementationGuide、StructureDefinition、CodeSystem、ValueSetなどのJSON形式のアーティファクトが生成されます。

“copyrightyear” と “releaselabel” を削除

fsh-generated/resourcesフォルダーの下に生成された ImplementationGuide-JPCoreV1.jsonファイルを編集して、copyrightyearとreleaselabelの項目を削除しておきます。具体的には、以下のように、該当する 8 行を削除します。

[変更前]

[変更後]

Implementation Guideを構成する

FHIRストアに JP-Coreプロファイルを適用するためには、Implementation Guideにリソース項目を記載する必要があります。IGの修正内容についてはドキュメントを参照ください。具体的には、ImplementationGuide-JPCoreV1.json ファイルに以下のような“global” の項目を追加します。

FHIRストアへプロファイルをインポート

JSON ファイルをGoogle Cloud Storageにアップロード

FHIR プロファイルをインポートする前に、まずGoogle Cloud Storage (GCS)のバケットを作成し、そこにJSONファイルをアップロードします。以下は、バケット名を hcls-jp1-fhir-profiles とした場合の例です。

cd jp-core-draft/forSUSHI/JPCoreV1/fsh-generatedgsutil mb gs://hcls-jp1-fhir-profilesgsutil -m cp resources/* gs://hcls-jp1-fhir-profiles/jp-core/

FHIR ストアへのインポート

プロファイルをインポートする方法はこちらのドキュメントで説明しています。具体的には以下のコマンドを実行します。

gcloud healthcare fhir-stores import gcs fhirstore-jp-core \
--dataset=dataset1 \
--gcs-uri='gs://hcls-jp1-fhir-profiles/jp-core/*' \
--content-structure=RESOURCE_PRETTY \
--location=asia-northeast1
Request issued for: [fhirstore-jp-core]
Waiting for operation [projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/operations/80843133466
49620481] to complete…done.
name: projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/fhirStores/fhirstore-jp-core
version: R4

上記のようなメッセージが出力されれば正常終了です

StructureDefinitionが正常にインポートできたことを確認する

Google Cloud コンソールには、FHIR Viewerという機能があります。FHIRストアに格納したデータをこのViewer上で検索したり参照することができます。このViewer上で、正常にインポートできたのかどうかを確認することもできます。

FHIR store (fhristore-jp-core)を選択し、フィルター欄に“StructureDefinition” と入力します。

さらにフィルター追加で、b14aa99c-ab14–403f-8efd-4a9de985514d を入力します。これは、JP_Patient_Race.fshに定義されているExtensionのIDです。

FHIR Viewerの右側に選択したデータが表示されます。
この画面は[OVERVIEW]、[ELEMENTS]、[JSON] 3つのタブから構成されています。[JSON]タブを見てみると以下のように表示されます。

Implementation Guideを有効化

IGを有効化するためにはこのドキュメントの手順に従い、以下のコマンドを実行します。

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/fhir+json; charset=utf-8" \
— data '{
“validationConfig”: {
“enabledImplementationGuides”: [“http://jpcoreV1/ImplementationGuide/JPCoreV1"],
“disableProfileValidation”: false
}
}' "https://healthcare.googleapis.com/v1beta1/projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/fhirStores/fhirstore-jp-core?updateMask=validationConfig"
{
“name”: “projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/fhirStores/fhirstore-jp-core”,
“version”: “R4”,
“validationConfig”: {
“enabledImplementationGuides”: [
“http://jpcoreV1/ImplementationGuide/JPCoreV1"
]
}
}

検証する

FHIRプロファイルを使った検証が可能であることを確認します。
テスト用のPatientリソースのJSONファイルを作成し、JP_Core プロファイルを使った検証をしてみます。

ファイル名 : sample-patient.json

{
"active": true,
"address": [
 {
  "city": “福岡県”,
  "country": “日本”
 }
],
"birthDate": "2009–10–16",
"gender”: "male",
"resourceType”: "Patient"
}

このデータを使って、 curl コマンドでFHIRプロファイルの validate を実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
— data @sample-patient.json \
'https://healthcare.googleapis.com/v1/projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/fhirStores/fhirstore-jp-core/fhir/Patient/$validate?profile=http://jpfhir.jp/fhir/core/StructureDefinition/JP_Patient'
{
“issue”: [
{
“code”: “informational”,
“details”: {
“text”: “success”
},
“diagnostics”: “success”,
“severity”: “information”
}
],
“resourceType”: “OperationOutcome”

検証結果が正常であれば、上記のような出力が得られます。

データの中に異常な行や値があると、プロファイルの検証でエラーが発生します。具体的にJSONファイルの中の一行を変更してみましょう。ここでは、birthDateを異常な日付(10月36日)に変更しています。

[変更前]

"birthDate”: "2009–10–16",

[変更後]

"birthDate”: "2009–10–36",

sample-patient.jsonファイルの内容は以下のようになります。

{
"active": true,
"address": [
{
"city": "福岡県",
"country": "日本"
}
],
"birthDate": "2009–10–36",
"gender": "male",
"resourceType": "Patient"
}

先ほどと同じ curl コマンドを実行すると、今回は、FHIRプロファイルの検証機能により、以下のようなエラーが出力されます。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
— data @sample-patient.json \
'https://healthcare.googleapis.com/v1/projects/hcls-jp1/locations/asia-northeast1/datasets/dataset1/fhirStores/fhirstore-jp-core/fhir/Patient/$validate?profile=http://jpfhir.jp/fhir/core/StructureDefinition/JP_Patient'
{
“issue”: [
 {
  “code”: “structure”,
  “details”: {
   “text”: “unparseable_resource”
  },
  “diagnostics”: “expected date: found \”2009–10–36\””,
  “expression”: [
   “Patient.birthDate”
  ],
  “severity”: “error”
 }
],
“resourceType”: “OperationOutcome”

おわりに

近年、電子カルテを含む医療データの標準化が強く推奨されています。日本でも今後はFHIRを使ったアプリケーションが増えると想定されています。Google CloudのHealthcare APIを使うと、アプリケーション開発者はサーバやデータベースの構築が一切不要で、REST APIだけですべての標準形式のデータを操作できます。また、拡張性の高いFHIR対応アプリケーションを容易に作成することが可能です。Google Cloud Healthcare APIには、今回紹介した以外にも多数の機能が実装されています。これからFHIRやDICOMを扱うアプリケーションを検討する場合は、ぜひGoogle Cloud Healthcare APIを試してみてください。

--

--

Nobuhisa Mizue
google-cloud-jp

Customer Engineer at Google Cloud. All views and opinions are my own.