ITブログ

HL7 FHIR実装の調査とデモ

厚生労働省標準規格に採択されたHL7 FHIRの実装の確認と、HAPI FHIRによるデモ方法紹介です。

診療情報提供書・退院時要約等で厚生労働省標準規格に採用され、電子カルテ標準化推進の軸となるHL7 FHIRについて調べました。
HL7公式サイトの実装リンク(プロジェクト)の内容確認とHAPI FHIRのデモ方法を紹介します。
 
まず厚生労働省標準規格はこちらです。
下の方(新しい方)にHL7 FHIRの規格が追加されています。
 
HL7公式サイト"Open Source Implementations"から、Java、.NETの実装リンクを調べました。
 
・HAPI FHIR
 ・Apache-2.0 license
 ・Javaによるモデル、パーサー、クライアント、サーバーフレームワーク、検証、ユーティリティ
 ・FHIRサーバー・クライアントを高速に作成するためのOpen-source Javaライブラリ
 ・Contributorsを見ると、Firely, Google, Philips, Red Hatのメンバーも含まれている
 
・firely-net-sdk/FirelyTeam
 ・BSD 3-Clause License
 ・アムステルダムを本拠地とするソフトウェアエンジニア、サポートエンジニア、コンサルタントのグループ
 ・.NETによるモデル、パーサー/シリアライザー、ユーティリティ、クライアント
 
・SMART on FHIR
 ・Apache License, Version 2.0等
 ・ボストン小児病院・ハーバードメディカルスクール職員がリーダーシップを執るコミュニティ
 ・Java and MySqlによるMITREid Connect(JavaによるOIDCリファレンス実装)とHAPI FHIRリファレンス実装も含まれる
 ・Apple Health RecordsAPIやMicrosoftAzureSMART APIに採用されている
 
・IBM FHIR Server
 ・Apache-2.0 license
 ・Open-source FHIRサーバーとライブラリ
 ・HAPI-JPAサーバーとのパフォーマンス比較結果をアピール(IBM FHIR Server vs. HAPI-JPA)
 
有名どころはやはりHAPI FHIRでしょうか。
HAPI FHIRはプロダクトというよりライブラリ(部品)を公開しているようです。
その中に"PLAIN SERVER"や"JPA SERVER"というものがあります。
"PLAIN SERVER"は、"Plain Server / Facade"という記載も見られように、バックエンド(永続化)を提供しないで、電子カルテのデータベースのような既存のデータソースに接続させるためのライブラリのようです。
"JPA SERVER"はJava Persistence API(Java標準の永続化API)を使用したバックエンドまで含むサーバー実装です。
この"JPA SERVER"を簡単に実行できるように "hapi-fhir-jpaserver-starter" というプロジェクトが存在します。
 
このプロジェクトを使用してデモ実行してみます。
※Dockerコンテナも用意されていますが、今回はソースコード修正やデバッグがしやすいローカル実行(Running locally)で動かします。
 
■必要なもの
・Windows ※今回はWindows11で試しました。Windows10でも同様です。
・JDK 17 ※HAPI FHIRはJDK11以上ですが、"hapi-fhir-jpaserver-starter" ではJDK17のチェックが入っているようです。
・Maven ※mavenの\binフォルダをPATH環境変数に追加します。
 
■実行
実行はgithubからソースコードをダウンロード・展開したあと、コマンドラインでそのフォルダに移動して "mvn jetty:run" とするだけです。
ブラウザで http://localhost:8080/ にアクセスするとAPIをテストできる画面が表示されます。
it-7-1.png
 
■テスト
まずはPatientリソースにアクセスしてみます。
左メニューの"Resources"一覧から "Patient" を探してクリックします。
Patient Resourceの画面が表示されます。
it-7-2.png
 
条件を指定せずに "Search"ボタンを押してください。
まだ患者データが存在しないので0件の結果が返ってきます。
 
Result Body
 ~
 "total": 0,
 ~
 
戻るボタンでPatient Resource画面に戻った後、"CRUD Operations" タブをクリックして、"Create"ボタンの行の"Contents"に以下を入力します。
 
{
  "resourceType": "Patient",
  "meta": [{
    "profile": "http://jpfhir.jp/fhir/eClinicalSummary/StructureDefinition/JP_Patient_eClinicalSummary"
  }],
  "identifier": [{
    "system": "urn:oid:1.2.392.100495.20.3.51.11311234567",
    "value": "90000001"
  }],
  "name": [{
    "extension": [{
      "url": "http://hl7.org/fhir/StructureDefinition/iso21090-EN-representation",
      "valueCode": "IDE"
    }],
    "use": "official",
    "text": "テスト 患者",
    "family": "テスト",
    "given": "患者"
  },{
    "extension": [{
      "url": "http://hl7.org/fhir/StructureDefinition/iso21090-EN-representation",
      "valueCode": "SYL"
    }],
    "use": "official",
    "text": "テスト カンジャ",
    "family": "テスト",
    "given": "カンジャ"
  }],
  "gender": "female",
  "birthDate": "2000-01-01"
}
it-7-3.png
 
厚生労働省標準規格の「診療情報提供書 HL7FHIR 記述仕様 第 1 版」に準拠した必須項目を指定してみました。
 
上記で分かりにくいのは Identifier.systemでしょうか。
"urn:oid:1.2.392.100495.20.3.51.1" ここまでが固定値で、残りの10桁 "1311234567" に医療機関コードを指定するようです。
 
また、診療情報提供書 HL7FHIR 記述仕様 第 1 版 Ver. 1.0.1 (2022.2.25)時点(現在最新)で、Patientリソースの"birthDate"であるべきところが"birthdate"となっていました。
FHIRのバリデーション等を通せば間違いに気付きますが、規格書どおりに実装してしまうと生年月日が連携されないことになってしまいそうです。
 
"Create"ボタンを押してデータ登録ができたら、戻るボタンでPatient Resource画面に戻った後、再度 "Search" ボタンを押してください。
登録したPatientリソースが取得できていれば成功です。
it-7-5.png