Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
DIYで始めよう!HL7 FHIR/REST/JSON
90分チュートリアルキット
このチュートリアルキットは、第23回医療情報学春季学術大会 チュートリアル6
「HL7 FHIRをどう導入するか」(日本Mテクノロジー学会主催)を元にしたものです。
文責 一般社団法人日本Mテクノロジー学会
鳥飼 幸太(群馬大学医学部附属病院 システム統合センター)
土井 俊祐(東京大学医学部附属病院 企画情報運営部)
上下2分割・両面で印刷すると冊子形式で見やすくなります
本チュートリアルキットの目的
• FHIRの構成要素について、コーディングスキルを身につける• -REST
• -JSON
• Excel VBAからREST/JSONを用いて、FHIRサーバからデータを取得するコーディングを身につける
•これらの取り組みを通じて、FHIRがREST/JSONを採用する、開発上のメリットについて具体的実感をもつ
本チュートリアルキットの流れ
• HL7 FHIRについて
• 医療情報ユーザーから見たFHIRアプリケーションの利点
• FHIRで利用するREST, JSONについて
•ハンズオン ~ExcelでDIYするFHIR~(90分程度)
• 準備(環境の確認、モジュールのダウンロード・インポート)
• ハンズオン1:サーバからRESTでデータを取得する
• ハンズオン2:JSONをパースしてVBAのオブジェクトに変換する
• ハンズオン3:該当患者の複数回の検査結果を取得し、表形式で入力する
• 選択ハンズオンA&B:FHIRから取得したデータをVBAで加工し様式に挿入
•日本Mテクノロジー学会のご紹介
FHIRとは
2017年3月8日”FHIRのご紹介”(HL7協会)より抜粋http://www.hl7.jp/docs/60seminar_2_HL7.pdf
FHIRは、米国HL7協会が発表した新しい医療情報の標準規格です。
実装を重視し、早く・簡単に実装できることをコンセプトとしています。
過去の標準規格と相互に活用することができ、相互運用性を確保したまますぐに使用することができます。
JSON, XML, HTTPといったWeb標準の基盤を使用できます。
日本HL7協会が様々な資料を掲載していますので、ぜひ一通り読んでみて下さい。
“Make once, Use Many”
現行システムとFHIRの適用範囲
WWW
TCP/IP
CAT5/6/7 IEEE802.11a/b/g/n/ac
Mobile NetworkWired (Fixed) Network
スタッフが情報とともに移動する個別タスクを個別に分担チーム医療・情報の電子化、即時化目的ごとのデバイス
スタッフが情報の側に移動する共通タスクを複数スタッフで分担部門化の流れとともに浸透共通の端末
HTTP
FHIRの通信は、柔軟な開発や連携が必要なシステムで力を発揮します。
本チュートリアルの内容
• FHIRを現場に導入するまでの道のり
電子カルテ部門システムSS-MIX2 等
FHIRリポジトリ 開発環境 Webシステムアプリケーション
今回やるのは主にココ開発の敷居の低さを体感してもらおう!
90分で出来る、最小限の要素から
ここを作るのは大変
このチュートリアルの構成
Excel Excel VBA JSON ConverterDictionary
Excel上でFHIRデータをパースし意図通りに表示
• 本チュートリアルは、Excel VBAを使用
してFHIRの通信を実体験します。
• Excelは2013以上のバージョンをご用意
下さい。
• ExcelでJsonを扱うために、2つの外部
モジュールを使用します。これらは
GitHubという開発者向けのオープン
ソースの共有サイトからダウンロードし
ます。(後述)
使うもの1:JSON
• JSON=JavaScript Object Notation
• JavaScriptの文法に沿っています
• 内容1:名前/値
• 内容2:配列
https://www.json.org/json-ja.html
例{ “羊羹” : “とらや”}
https://www.ibm.com/support/knowledgecenter/ja/SS9H2Y_7.5.0/com.ibm.dp.doc/json_jsonexamples.html
使うもの2:REST
• REST(REpresentational State Transfer)• HTTP通信(URL)でアクセスしデータ送受信を行うWebサービス
RESTは設計に際し以下を設計原則と
するよう提言されている
1. アドレス指定可能なURIで公開さ
れていること
2. インターフェース(HTTPメソッド
の利用)の統一がされていること
3. ステートレスであること
4. 処理結果がHTTPステータスコード
で通知されること
処理 HTTPメソッド CRUD操作
登録 POST CREATE
取得 GET READ
更新 PUT UPDATE
削除 DELETE DELETE
今回は主に利用者の観点からGETメソッドを使用します
RESTで使用するURLの例
データの場所(WebサイトのURL) 引数(取得するデータの条件指定)
ハンズオン準備1(外部モジュールのダウンロード)
• VBA-JSON(JsonConverter)
https://github.com/VBA-tools/VBA-JSON
• VBA-Dictionary(Dictionary)
https://github.com/VBA-tools/VBA-Dictionary
• 2つのツールをそれぞれ右上の
「Colne or download」から
Zipファイルをダウンロートして下さい
• ダウンロードしたら、zipファイルを
任意の場所に展開しておいて下さい
ハンズオン準備2(開発タブの追加)
• 開発タブがない方はオプションから追加して下さい。
• 「開発」タブがある方はそのまま次ページへ• タブがない方は下の手順で追加
• ファイル → オプション• Excelのオプションが開いたら、「リボンのユーザ
設定」で「開発」のタブにチェックを入れる• OKを押下
※Excelのバージョンにより設定する場所が異なることがあります。
ハンズオン準備3(JsonConverterのインポート)
• GitHubでダウンロードした「VBA-JSON」「VBA-Dictionary」のzipファイルを解凍しておきインポートします
①右クリック
②ファイルのインポートをクリック
③「JsonConverter.bas」を選択し開く
④ツリーに展開されていればOK 同様に「Dictionary.cls」
もインポートします
ハンズオン準備4(VBAプログラムの実行方法)
• モジュール、プロシージャを選択して「▶」ボタンで実行します
①使用中のモジュール
②実行するプロシージャをアクティブにする(入力カーソルが点滅している状態。SubからEnd Subの間であればどこでもOK)
③「▶」(F5)を押す
どのプロシージャもアクティブでない場合、実行するプロシージャを選択するポップアップが表示されます。
ハンズオン準備5(エラー処理、デバッグ)
• エラーが出たら「デバッグ」を押下してエラーの場所を確認します
①デバッグを押下②エラーが発生している箇所が黄色でハイライトされます。プログラムを修正すると、ここから処理が再開されます。(再開したくない場合は③処理を中断するか、④ブレークポイントを設定しておきます)
③「■」を押すと処理を終了します
④左側の灰色の部分をクリックすると、ブレークポイントを設定できます。ここで処理を1度ストップさせることができます。再開する場合は「▶」を押下するか、ブレークポイントを削除します。
ハンズオン準備(注意点)
• VBA-JSONのモジュールをインストールする前にプログラムを実行すると、後からインストールしてもエラーが出ることがあります。
• その場合は、Excelを一度保存して閉じ、再度ファイルを開くことで解消します。
• 今回使用するFHIRのテストサイト「Hapi」は、世界中からアクセスがあり、データの書き換えも自由に行われます。
• そのため、該当のPatient IDやObservation IDのデータが消えることがあります。その場合は、PatientやObservationのデータが存在するURLに変更する必要が生じます。→Entryを使用することで有効なIDを調べられますが、不慣れな方
は事務局にご連絡いただければお知らせできます。
ハンズオン1:サーバにRESTでアクセスする(1/5)
• 「標準モジュール」の中から使用する「Module 1」を開きます
①Module1を開きます
ここでは、Module1の中にある
以下の3つのプロシージャを使い
ます
• Initialize
→FHIRサーバのURL指定
• RestConnection
→基本はこちらを使用(REST
を使用するコードが簡単)
(Windowsの方はこちら)
• RestConnectionforMac
→RestConnectionでエラーが
出る方はこちらを使用
(Macの方はこちら)
ハンズオン1:サーバにRESTでアクセスする(2/5)
• 「Initialize」ではRESTで接続するFHIRサーバのURLを指定します
②サンプルとして7つのURLを指定しています
サーバアドレス データベース
リソースの種類(ここではpatient(基本情報)、Observation(検査結果))
id 最新の履歴 json形式で出力
このURLをコピーしてブラウザで見てみると、どのようなデータが返ってくるかわかりやすいです。
Point
ハンズオン1:サーバにRESTでアクセスする(3/5)
• WorksheetFunction オブジェクトを利用して指定したURLからデータを取得する
③Web APIからデータを引き出すときに使用する。FHIRでなくとも例えばWikipediaでの検索結果な
どを表示させることも可能。
↓Mac版の代替プログラム
ここでURLを指定します
ハンズオン1:サーバにRESTでアクセスする(4/5)
• WorksheetFunction オブジェクトでエラーが出る方は…
Excel Online, Excel 2016 for Macではこのオブジェクトは使用できない。赤点線の部分は代替のプログラムで置き換えたもの。
ハンズオン1:サーバにRESTでアクセスする(5/5)
• RestConnectionプロシージャを実行する
⑤実行するとURLに対応したデータが返されます。条件format=“json”を入れるとjson形式になります。
※エラー処理はしていないので、インターネット接続がないとエラーが表示されます。
ハンズオン2:json形式のデータをパースしてVBAのオブジェクトにする(1/4)
• Excel2016現在では、json形式を直接扱うワークシート関数がないので、GitHubで公開されている変換プログラムを使用します。
先ほどインポートした「JsonConverter」と
「Dictionary」のモジュールを使います
• Dictionary
→インポートしておくだけでOK
• JsonConverter
→VBAのプログラムに組み込みます。
FHIRリポジトリから取得したjson形式
のデータを引数に入れて実行すると、
VBAオブジェクトに変換されて戻って
きます。
①配布プログラムの「02_…」を開く
ハンズオン2:json形式のデータをパースしてVBAのオブジェクトにする(2/4)
• VBAオブジェクトでのリソースの書き方
【VBAオブジェクトでの表現】【FHIRリソース】 【jsonでの表現】
項目名はどの形式でも変更ありません。リソースの基本構造のみ
おさえておけば、VBAでの記述方法もわかります。
Point
ハンズオン2:json形式のデータをパースしてVBAのオブジェクトにする(3/4)
• JsonConverterを用いてJsonをオブジェクト形式に変換する
Patientリソースのデータをセルに格納
Json→VBAオブジェクトに変換
②テキストファイルのコードをここにコピー&ペーストする
このプログラムでは下記の通り指定
(1) Patientの場合:url = str3
(2) Observationの場合:url = str5
ハンズオン2:json形式のデータをパースしてVBAのオブジェクトにする(4/4)
• 実行するとExcelのセルにリソースのデータが格納されます※正しいURLを選択しないとエラーが出ます
【str3】http://hapi.fhir.org/baseDstu3/Patient/1646554/_history/1?_format=json
【str5】 http://hapi.fhir.org/baseDstu3/Observation/1579810/_history/1?_format=json
③ それぞれ正しく実行された場合の実行結果
この階層はPatient IDではなくObservation IDなので注意Point
ハンズオン3: 該当患者の複数回の検査結果を取得し、結果を表形式で入力する(1/3)
• Observationリソースのデータを患者番号で検索し、VBAオブジェクトに入れた後、Excelに表形式で出力します。
【str6】http://hapi.fhir.org/baseDstu3/Observation?_pretty=true&patient=1579762&_format=json
「_?」より後ろの部分は検索ないしは出力の条件となります
Point
1つ目の検索結果jsonObj("entry")(“1”)
2つ目の検索結果jsonObj(“entry”)(“2”)
検索条件を入れてリクエストすると、検索結果はそれぞれ「entry」のツリーの下に並列で出力されます。個々の検索結果は、検索条件を指定し
ないURLでも表示させることができます。
ハンズオン3: 該当患者の複数回の検査結果を取得し、結果を表形式で入力する(2/3)
• jsonObj(“entry”).Countで、entryの数(=検索結果の数)を取得します。その後、Forループを使用してそれぞれの結果を出力します。
②テキストファイルのコードをEnd Subの上にコピー&ペーストする
③str=6と入力して実行します
①「03_ハン…」を開く
entryの数を取得
個々の検査結果を出力させる
ハンズオン3: 該当患者の複数回の検査結果を取得し、結果を表形式で入力する(3/3)
• 実行するとSheet2に結果が表形式で出力されます。このデータさえ出力できれば、残りはVBAの機能でUIを整えることができます。
正しく実行された場合の実行結果
各種様式作成、グラフの作成等でUIを整えるのはVBAが得意
選択ハンズオン:A or Bのお好きな方を進めて下さい
• 「選択ハンズオンA」と「選択ハンズオンB」
のフォルダには、ヒントとなるプログラムと回
答があります。
• 困ったとき(時間がないとき)は、「ヒント」
や「回答」のプログラムをコピーしてプロシー
ジャを完成させて下さい。
• FHIRのリソースをVBAを使って特定の場所に
表示させるハンズオンです。
回答プログラムを入れて動作を確かめるだけでもVBAにおけるオブジェクトの扱い方を体感できます。
Point
選択ハンズオンA:患者情報の自動入力
• Patientリソースから患者基本情報を取得し、診療情報提供書の必要事項を自動入力するプログラムを作ります。
ハンズオンA:患者情報の自動入力 • Sheet3と「handsonA()」のプロシー
ジャを使用します。
• 赤枠のボタンを押すとhandsonAを実行
するようにしてあります
• Sheet3.Cells(1,2)の患者IDを読み取り、
Patientリソースからデータを取得
• 必要なデータをオブジェクトから抜き出
してセルに入力して下さい。
RESTのURLは「str3」の形式です。年齢の計算にはVBAのDateDiff関数を使用すると簡単です。
Point
選択ハンズオンB:検査結果説明用紙の作成
• ハンズオン3で取得したObservationリソースの検査結果をソートし、様式の結果表に自動入力するプログラムを作ります。
ハンズオンB:検査結果グラフ自動作成 • Sheet4と「handsonB()」のプロシー
ジャを使用します。
• 赤枠のボタンを押すとhandsonBを実行
するようにしてあります
• Sheet3.Cells(1,3)の患者IDを読み取り、
Observationリソースからデータを取得
• Sheet2の結果をコピーして作成する方式
でもOKです。
RESTのURLは「str6」の形式です。表形式にするためどの検査かをプログラムで識別する必要があります。
Point
通信状況の確認をしたい方は
• https://www.telerik.com/fiddler
• Webサイトとの通信を可視化できるソフトウエアです
これでハンズオンは終了です
日本Mテクノロジー学会について
• (主に)医療データベース、プログラミング等に関連する領域の
利用、応用、改良、及び普及を行うことを目的とした団体です。
• 現代のMテクノロジーは関数型のプログラム、ツリー型とテーブル型の
両方式のDBを統合できるオブジェクト指向型の開発環境です。
• より良い医療システムアーキテクチャを探究しています。
• プログラミングやデータベースの技能・知識を持った情報部門
担当者の育成を目的としたチュートリアルを年3回実施します
• 学術部会(主に大学・病院関係)と技術部会(主にベンダ関係)が中心
• 年次大会ではユーザとベンダのそれぞれの立場からの学術発表、技術討
論、チュートリアル等を行い、会員のレベルアップを図っています。