Clinical Template : TDL (Template Definition Language)
テンプレートを作るための知識共有の試み

山崎 俊司
千葉大学医学部附属病院医療情報部 


1 テンプレートとは
電子カルテにおけるテンプレートとは、患者さんの疾患、病態ごとに、標準的に記載、確認、処置すべきことなどをまとめた画面デザインである。テンプレートの目的は、電子カルテ記載の標準化を達成するとともに、診療における見落し、書き落としを防止し、疾患、病態ごとに医学知識を提示することにより診療の質的向上を目指すものである。

2 チェック項目とは
チェック項目は テンプレートに配置される入出力項目で、一種の構造化データ入力(Structured Data Entry 以下SDE )法である。チェック項目ごとに部位、発症日時、程度、発症様式、性質などをその項目の属性としてどのように表現するかを定義する。
特に、チェック項目の程度については、5段階評価など、数値化できる表現形式を用いる。
テンプレートから入力データは原則として、チェック項目を通して入力する。

3 テンプレートの構築
 診療の実態に即した使いやすいテンプレートの作成には、各分野の専門医の知識が必要である。しかし、必ずしも各施設に協力的な専門医がいるとは限らない。このため、テンプレート機能を実装した電子カルテを広く診療に利用するために、テンプレートを共有する必要性が生じるが、各施設の開発環境の違いにより、テンプレートの共有は、容易ではない。
テンプレート開発の効率を改善し、ユーザーがシステムのプラットフォームの違いを越えて、テンプレートの内容を共有できるようにするため、標準的にテンプレートを記述する手法が期待されている。

4 テンプレート共有のための方法 (Template Definition Language = TDL)
TDLとは、電子カルテにおけるテンプレートを記述する言語である。この言語は、各施設で開発され使用される電子カルテのテンプレートを構築するための知識を記述し、施設間のテンプレート共有を円滑にし、開発資源を節約するためものである。
TDLはユーザーインターフェースを規定するものではく、プラットフォームや、バックエンドのデータベースに依存しない。

5 TDL 試作例
千葉大学医学部附属病院で開発中のテンプレート機能をもった電子カルテシステムに対する議論を踏まえ、以下のようなTDLを試作した。

1)テンプレートクラス
TypeTemplate:
テンプレートのタイプ。用途によりサブクラスを設定する。
TypeTemplateには、初診時用、診断確認用、結果観察用、サマリー用
NameTemplate:
テンプレート名。いわゆる、プロブレム名、患者の状況名などに一致する。
NameCheckItem:
チェック項目名。個々のチェック項目名を定義する。
DefaultItemType:
デフォルトのデータタイプ。テンプレートに表示される各々のCheckItemの入力形式を定義する。省略時はBooleanとし項目内容の有無をラジオボタン等で表示する。
2)チェック項目クラス
NameCheckItem:チェック項目名
TypeCheckItem:
チェック項目の分類。チェック項目の分類は 自覚症状、他覚所見、検査データ処置、指導、オーダ内容などを分類する。
Location:
部位。チェック項目においてさらに詳細な部位が定義できるときに使用する。
DetailCheckItem:
詳細項目名。チェック項目の詳細な属性。基本、程度、発症様式、増悪因子、軽快因子など。
TypeData:
詳細項目のデータタイプ。TypeDataには、自由文、5段階評価、List, VAS(Visual Analog Scale)、有無(Boolean)などがある。5段階評価、Listの項目は、TypeDataの記載に続けて、[ ]内にカンマ区切りで記載する。
3) Service:(表の中ではSrvと略記)
Serviceは各属性の値により駆動される動作で、テンプレートクラス、チェック項目クラスとも同様で、各項目について定義できる。
ロジックの記載法未定であるが、Arden Syntax for Medical Logic Systemsの<knowledge_body>の応用を考えている。

表 1  電子カルテTDLのプロトタイプ

Class Template    Class Check Item

TypeTemplate     NameCheckItem
SrvTypeTemplate    SrvNameCheckItem
NameTemplate     TypeCheckItem
SrvNameTemplate    SrvTypeCheckItem
NameCheckItem     Location
SrvNameCheckItem     SrvLocation
DefaultItemType    DetailCheckItem
SrvDefaultItemType    SrvDetailCheckItem
        TypeData
        SrvTypeData

項目名の後ろ1つ以上のスペースに続けて項目データを記載する。
/* */の間の記載はコメントと見なされる。

例1 Serviceの表記法
「一年に一度胸部レントゲン写真を撮る場合」はArden Syntaxの記法を用い以下のようになる。
Knowledge:
type: data-driven;;
data: open_template := event { open this template}
    /*このテンプレートを利用した場合のイベント*/
    ZENKAI := read last{date of Chest X ray examination}
    KONKAI := today
    ;;
evoke: open_template;;
logic:
    if KONKAI - ZENKAI > 1 year then conclude true;
    end if;
    ;;
action: write "一年以上胸部X線写真を撮っていません。胸部X線写真をオーダーして下さい。";;

現在のところメッセージを電子カルテの画面に表示するWRITEというactionしかなく、動的なテンプレートを記述するには、拡張が必要である。

表 2  TDL プロトタイプによるテンプレート記載例

Class Template    
TypeTemplate     経過観察用    
NameTemplate     SLE(全身性エリテマトーデス)    
NameCheckItem     発熱
DefaultItemType    Boolean
NameCheckItem     顔面紅斑
DefaultItemType    Boolean
NameCheckItem     関節炎
DefaultItemType    Boolean
NameCheckItem     レイノー現象
DefaultItemType    Boolean
NameCheckItem     C3
DefaultItemType    Data value
NameCheckItem     C4
DefaultItemType    Data value
NameCheckItem     CRP
DefaultItemType    Data value
NameCheckItem     抗DNA抗体
DefaultItemType    Data value
NameCheckItem     蛋白尿(定性)
DefaultItemType    Data value
NameCheckItem     ステロイドの内服量
DefaultItemType    Dose

Class Check Item
NameCheckItem     関節炎
TypeCheckItem     他覚所見
Location    右PIP(1-5),左PIP(1-5),右MP(1-5),左MP(1-5)右MTP(1-5),左MTP(1-5),右手首,左手首,右足,左足,右中足間,左中足間,右顎,左顎,右肩,左肩,右肘,左肘,右膝,左膝,右股,左股
DetailCheckItem     疼痛 (関節炎)
TypeData    5 段階評価 [なし,軽微,軽度,中等度,高度]
DetailCheckItem     関節腫脹    
TypeData    5 段階評価 [なし,軽微,軽度,中等度,高度]
DetailCheckItem     関節液貯留    
TypeData    5 段階評価 [なし,軽微,軽度,中等度,高度]
DetailCheckItem     関節発赤        
TypeData    5 段階評価 [なし,軽微,軽度,中等度,高度]