Skip to content

TomoOkuyama/iris4h-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IRIS for Health FHIR R4 デモ環境

InterSystems IRIS for Health 2025.3 による FHIR R4 デモ環境。 Docker Compose で起動するだけで、FHIR リポジトリ・電子カルテ UI・Interoperability プロダクションが一式動作する。

元テンプレート: Intersystems-jp/IRIS-FHIR-Oximeter-Template


このデモでできること

  • FHIR R4 リポジトリ — JsonAdvSQL ストレージ戦略による高性能な FHIR サーバーを体験
  • 電子カルテ UI — FHIR API だけで動く患者サマリ画面(バイタル・病名・アレルギー・検査結果)
  • Interoperability 連携 — SpO2 低下を検知して HL7 v2.5 メッセージを自動生成するフロー
  • マルチモデルアクセス — 同じデータに FHIR REST / SQL / ObjectScript / グローバル変数でアクセス

セットアップ

前提条件: Docker Desktop がインストールされていること

通常版(本番用 / 評価用)

IRIS for Health の製品版イメージを使用する。全機能が利用可能。

ライセンスキー: dockerfiles/iris/iris.key に配置が必要。評価ライセンスの発行は InterSystems までお問い合わせください。

docker compose up -d --build
bash demo/01_load_patients.sh    # デモデータ投入(起動完了後)
コンテナ ホスト名 ポート 説明
iris4h iris 11201:1972 (SuperServer), 11204:52773 (Web Server) IRIS for Health 2025.3
webgw4h webgw 11202:80 (HTTP), 11203:443 (HTTPS) Web Gateway 2025.3
画面 URL
電子カルテ UI http://localhost:11202/csp/emr/index.html
FHIR R4 エンドポイント http://localhost:11202/csp/healthshare/fhirserver/fhir/r4
Management Portal http://localhost:11202/csp/sys/%25CSP.Portal.Home.zen

認証情報: _SYSTEM / SYS

必要に応じて docker-compose.yml のポートフォワード設定を環境に合わせて変更してください。

Community版(ライセンスキー不要)

ライセンスキーなしで手軽に動作を確認したい場合は、Community Edition を利用できる。アクセスURLやデモスクリプトは通常版と共通。

docker compose -f docker-compose.community.yml up -d --build
bash demo/01_load_patients.sh    # デモデータ投入(起動完了後)
コンテナ ホスト名 ポート 説明
iris4h-community iris 11201:1972 (SuperServer), 11202:52773 (Web Server) IRIS for Health Community 2025.3

アクセスURLは通常版と同じ(http://localhost:11202/...)。

Community版の制限: Web Gateway を含まず、IRIS の内蔵 Web Server で直接応答する。また、Community Edition には同時接続数やデータベースサイズ等の制限がある。詳細は コミュニティ版と製品版の違いについて を参照。


デモシナリオ

シナリオ1: FHIR R4 リポジトリ

FHIR リソースを POST するだけで FHIR R4 リポジトリにデータが格納される。JsonAdvSQL ストレージ戦略(2024.1〜)により、FHIR REST API の検索性能・標準準拠性・スケーラビリティが大幅に向上している。

FHIR データを SQL で分析したい場合は、FHIR SQL Builder で SQL テーブルを生成できる(http://localhost:11202/csp/fhirsql/index.html)。

シナリオ2: マルチモデルアクセス

同じデータに FHIR API / SQL / ObjectScript / グローバル変数の 4 つの方法で同時アクセスできる。IRIS のマルチモデルエンジンならではの特徴。

docker exec -it iris4h iris session IRIS -U FHIRSERVER

実行例は demo/03_objectscript_queries.txt を参照。

シナリオ3: パルスオキシメーター → HL7 自動変換

操作手順:

  1. 電子カルテ UI で患者を選択
  2. 「SpO2入力」タブを開く
  3. スライダーで血中酸素飽和度(SpO2)を 90% 未満に設定
  4. 「SpO2を記録する」ボタンをクリック
  5. ./Out/ に HL7 ファイルが出力される

スクリプトでの実行: bash demo/04_oximeter_test.sh でも同じ操作を curl で実行できる。

裏側の仕組み:

ボタンをクリックすると、電子カルテ UI が FHIR Bundle(Patient + Observation)を IRIS に POST する。IRIS 側では常時稼働している Interoperability プロダクションがこのリクエストを受け取り、BPL(ビジネスプロセス)が SpO2 < 90% を検知すると、DTL(データ変換)で HL7 v2.5 SIU_S12 メッセージに変換してファイル出力する。BPL も DTL も Management Portal の GUI で定義されており、コードを書く必要がない。

処理フロー:

FHIR Bundle POST
  → HS.FHIRServer.Interop.Service
    → Solution.FHIRBPL(SpO2 < 90% を判定)
      → Solution.FromFhirObsToSIUS12(DTL: HL7変換)
        → EnsLib.HL7.Operation.FileOperation(./Out/ にHL7ファイル出力)

ビジュアルトレースで処理フローを可視化: http://localhost:11202/csp/healthshare/fhirserver/EnsPortal.MessageViewer.zen


主要コンポーネント

Setup.cls — 環境構築の自動化

Docker イメージビルド時に FHIR サーバー・プロダクションを自動セットアップする初期化クラス。

  1. FHIRSERVER ネームスペース作成 — Interoperability 対応ネームスペースを構築
  2. ソースのインポート — BPL・DTL・プロダクション定義をコンパイル
  3. FHIR R4 サーバー構築 — JsonAdvSQL ストレージ戦略で FHIR エンドポイントを作成
  4. Interop 連携 — FHIR リクエストが Interoperability Service を経由するよう設定
  5. 電子カルテ UI 登録/csp/emr を CSP アプリケーションとして登録
  6. プロダクション開始Solution.FoundationProduction を自動起動

FHIRBPL.cls — ビジネスプロセス

FHIR リクエストを受け取り、SpO2 値を評価するビジネスプロセス(BPL)。

  • FHIR CRUD を HS.FHIRServer.Interop.Operation に委譲
  • Bundle 内の Observation から SpO2 を抽出
  • SpO2 < 90% の場合、DTL 変換を呼び出して HL7 メッセージを生成

FromFhirObsToSIUS12.cls — データ変換

BPL のコンテキスト(SpO2値・患者名・患者ID)から HL7 v2.5 SIU_S12 メッセージを組み立てるデータ変換(DTL)。

電子カルテ UI

FHIR R4 API を直接呼び出す電子カルテ風 UI。単体 HTML で動作し、ライブラリ(Bootstrap / jQuery / Font Awesome)も同梱しているため、インターネット接続不要で動作する。

電子カルテ UI

主な機能:

  • 患者一覧(20名、検索フィルタ付き)
  • 患者サマリ表示(病名・アレルギー・バイタル・検査結果)
  • 異常値のハイライト(SpO2 < 90%, 体温 >= 38.0℃, HbA1c >= 7.0% 等)
  • アラートバッジ(SpO2低下、発熱、高血圧、アレルギー注意)
  • SpO2 入力 → Bundle POST(Interop 連携で HL7 出力をトリガー可能)
  • FHIR JSON 生データ表示

デモデータ

demo/01_load_patients.sh で投入される臨床的に整合性のあるダミーデータ:

リソース 件数 内容
Patient 20名 全国各地の日本人(20代〜80代、男女各10名)
Observation (SpO2) 19件 正常値(97%)〜重症(78%)
Observation (体温) 19件 平熱(36.3℃)〜高熱(39.1℃)
Observation (血圧) 13件 正常(118/75)〜重症高血圧(170/110)
Observation (検査) 20件 血糖値・HbA1c・ヘモグロビン・クレアチニン
Condition 23件 糖尿病・高血圧・CKD・心不全・COPD・喘息・肺炎・睡眠時無呼吸
AllergyIntolerance 10件 薬剤(ペニシリン等)・食物(そば等)・環境(花粉等)

技術詳細

JsonAdvSQL ストレージ戦略

IRIS for Health 2024.1 で導入された FHIR サーバーのデフォルトストレージ戦略。従来の HS.FHIRServer.Storage.Json と比べ、FHIR REST API の検索性能・標準準拠性・スケーラビリティが大幅に向上している。

特徴:

  • 検索性能の向上 — コンパートメント検索、_include/_revinclude:iterate対応)、拡張プレフィックス(sa, eb, ap)をフルサポート
  • マルチモデルアクセス — FHIR REST / SQL / ObjectScript / グローバル変数の 4 方式で同時アクセス
  • SQL 分析FHIR SQL Builder でプロジェクションを定義すれば、BI ツール(Tableau、Power BI 等)から JDBC/ODBC 接続可能

従来ストレージとの比較

項目 Json(レガシー) JsonAdvSQL(推奨)
導入バージョン 2024.1 より前 2024.1 以降(デフォルト)
コンパートメント検索 制限あり フルサポート
_include / _revinclude 制限あり フルサポート:iterate 対応)
検索プレフィックス 基本のみ sa, eb, ap 対応
パフォーマンス 標準 大幅に改善

Interoperability プロダクション構成

HS.FHIRServer.Interop.Service(ビジネスサービス)
  → Solution.FHIRBPL(ビジネスプロセス: SpO2判定)
    → HS.FHIRServer.Interop.Operation(FHIR CRUD実行)
    → Solution.FromFhirObsToSIUS12(DTL: HL7変換)
      → To_Scheduling / EnsLib.HL7.Operation.FileOperation(HL7ファイル出力)

ファイル構成

iris4h-demo/
├── docker-compose.yml           # Docker Compose 定義(製品版)
├── docker-compose.community.yml # Docker Compose 定義(Community版)
├── readme.md                    # このファイル
│
├── dockerfiles/
│   ├── iris/
│   │   ├── dockerfile           # IRIS for Health イメージ定義
│   │   ├── iris.script          # IRIS 初期化スクリプト
│   │   ├── Setup.cls            # FHIRサーバー・プロダクションのセットアップクラス
│   │   └── iris.key             # ライセンスキー(※git管理外)
│   └── webgw/
│       ├── dockerfile           # Web Gateway イメージ定義
│       └── opt/iris/
│           ├── CSP.conf         # Apache CSP モジュール設定
│           └── CSP.ini          # Web Gateway 接続設定
│
├── src/
│   ├── emr/
│   │   └── index.html           # 電子カルテ UI(FHIR fetch API ベース)
│   └── Solution/
│       ├── FHIRBPL.cls          # ビジネスプロセス(BPL: SpO2チェック)
│       ├── FoundationProduction.cls  # プロダクション定義
│       └── FromFhirObsToSIUS12.cls   # データ変換(DTL: FHIR→HL7 SIU_S12)
│
├── demo/
│   ├── 00_agenda.md             # デモ Agenda
│   ├── 01_load_patients.sh      # デモデータ投入(患者20名+臨床データ)
│   ├── 03_objectscript_queries.txt  # ObjectScript クエリ集
│   ├── 04_oximeter_test.sh      # パルスオキシメーター デモスクリプト
│   └── view_hl7.sh              # HL7 メッセージ UTF-8 表示ビューア
│
└── Out/                         # HL7 メッセージ出力先(実行時に生成)
    └── .gitkeep

参考リンク

InterSystems 公式ドキュメント

クラスリファレンス

リリースノート

関連ドキュメント

About

IRIS for Health FHIR R4 デモ環境 - 電子カルテUI・パルスオキシメーター連携・SQLクエリ集

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors