Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

DICOM モダリティ・ワークリスト・プロダクションのサンプル

一般的な DICOM SOP クラスの 1 つに、モダリティ・ワークリスト (MWL) があります。MWL により、主要な画像機器 (モダリティ) は、通常は放射線医学情報システム (RIS) の一部である MWL サービス・クラス・プロバイダ (SCP) にある患者の人口統計や検査の詳細をクエリできます。モダリティは、標準的な C-FIND オペレーションを使用して、選択された基準と共に患者のリストを要求し、それに対してモダリティ・ワークリスト・サービスが応答します。

ENSDEMO ネームスペースには、Demo.DICOM.Production.WorkListOpens in a new tab という名前のプロダクションが含まれています。このプロダクションは、DICOM ワークリストをサポートするモダリティのために、Ensemble を使用してそれらのワークリストを処理する方法を示します。

このプロダクションのシナリオでは、1 日の開始時にモダリティは処理する作業のリストを必要とします。プロダクションは、以下の処理を実行します。

  1. モダリティが C-FIND 要求メッセージを Ensemble に送信します。

  2. C-FIND 要求は、ワークリストの必要性を示します。

  3. Ensemble が情報を検索します。

  4. Ensemble はリスト内の患者ごとに C-FIND 応答メッセージを作成します。

  5. Ensemble は応答メッセージをモダリティに返信します。

generated description: worklist prod config

ビジネス・サービス EnsLib.DICOM.Service.TCPOpens in a new tab は、DICOM 画像デバイスに接続します。Demo.DICOM.Process.WorkListOpens in a new tab ビジネス・プロセス・クラスは、DICOM C-FIND-RQ メッセージを処理して、ワークリスト・エントリを応答として返す方法を示します。

この方法でのみ、モダリティ・ワークリスト SOP クラス (MWL) は機能します (つまり、モダリティ側からサービス・プロバイダ (SCP) のデータをクエリします)。そのため、SCP 側からモダリティ機器にデータをブロードキャストする方法はありません。同様に、MWL プロトコル自体は、返されたマッチのリストからどの患者が選択されたかを RIS に通知する方法をモダリティに提供しません。もっとも、その情報は、モダリティ実施済み手続きステップ (MPPS) サービスを両方の機器がサポートしている場合に使用することで、通信することが可能です。

以下の手順で、プロダクションにこのタイプのインタフェースを追加する方法の概要を示します。

  1. Ensemble, プロダクション構成 ページの [新規プロダクション作成] をクリックして、汎用プロダクションを作成します。"Ensemble プロダクションの構成" の “プロダクションの作成と構成” を参照してください。

  2. スタジオで、プロダクション定義を編集して StorageLocation プロパティと SETTINGS パラメータの両方を追加します。StorageLocation と SETTINGS の定義に関する詳細は、"格納場所を制御するための DICOM プロダクションの構成" を参照してください。StorageLocation を正しく機能させるには SETTINGS パラメータが必要です。StorageLocation と SETTINGS を定義してから、プロダクションをコンパイルします。

  3. EnsLib.DICOM.Service.TCPOpens in a new tab クラスを使用して、このプロダクションに DICOM 重複ビジネス・サービスを追加 します。

  4. モダリティ・ワークリスト専用に DICOM ビジネス・サービスの設定を構成します。

  5. 受信した DICOM C-FIND-RQ メッセージ・ドキュメントからワークリスト・エントリを生成する、ビジネス・プロセス・クラスを作成します。

  6. 上記の手順で作成したカスタム・クラスを使用して、DICOM ビジネス・プロセスを追加します。

  7. プロダクションをテストして、プロダクションがワークリストの要求メッセージを受け取り、適切な応答メッセージ・ドキュメントを返信することを確認します。

Demo.DICOM.Production.WorkList.cls のクラス・コードを表示するには、スタジオを使用してプロダクションの詳細を参照します。

DICOM ワークリスト・ビジネス・サービスの構成

DICOM ビジネス・サービスを構成するには、Ensemble, プロダクション構成 ページのダイアグラムでその DICOM ビジネス・サービスをクリックします。詳細は、“DICOM 重複ビジネス・ホストの構成” の節を参照してください。この節では、デモ・ワークリスト・プロダクション内のビジネス・サービスに固有の設定について説明しています。

[重複ターゲット構成名]

ビジネス・サービスが受け取った任意の DICOM ドキュメントを送信するプロダクション内で、構成項目を指定します。

Demo.DICOM.ProductionStorage プロダクションは、Demo.DICOM.Process.WorkListOpens in a new tab を基本クラスとするビジネス・プロセスを使用します。詳細は、“DICOM ワークリスト・プロダクションのビジネス・プロセスの作成” を参照してください。これは、モダリティからの DICOM メッセージを処理するためのロジックが含まれたカスタム・プロセスです。

[LocalAET]

呼び出し先のアプリケーション・エンティティ・タイトル (AET)。リモート DICOM ピアが Ensemble と通信するために使用します。これは、Ensemble ネームスペースで関連付けを定義する場合に使用する [呼び出されたAET] に該当します。

Demo.DICOM.Production.WorkListOpens in a new tab プロダクションを初めて実行すると、このプロダクションでは、Ensemble がこのデモ・プロダクションのテスト DICOM アプリケーションに接続するために必要な DICOM 関連付けが作成されます。ENSDEMO ネームスペース内のこの関連付けは、Ensemble, DICOM設定 ページで表示できます。

[RemoteAET]

リモート DICOM ピアの呼び出し元のアプリケーション・エンティティ・タイトル。

アダプタがサービス・クラス・プロバイダ (SCP (サーバ)) のロールを果たす場合、アダプタには接続を許可された DICOM ピアの名前のカンマ区切りリストが含まれます。名前は、リテラル文字列またはパターン/代入の形式のいずれかになります。

デモ・プロダクションの EnsLib.DICOM.Service.TCPOpens in a new tab サービスは、[RemoteAET] の値として JD-SCU を使用します。

DICOM ワークリスト・プロダクションのビジネス・プロセス・クラスの作成

ENSDEMODemo.DICOM.Production.WorkListOpens in a new tab プロダクションは、サンプルのカスタム・ビジネス・プロセス・クラス Demo.DICOM.Process.WorkListOpens in a new tab を使用します。このカスタム・クラスは、DICOM C-FIND 要求メッセージを処理して、ワークリスト・エントリを応答として返す方法を示します。このデモ・クラスは、RIS システムから患者情報を取得する操作をシミュレートします。

このカスタム・クラスは、すべてのユーザ定義 DICOM ビジネス・プロセス用のスーパークラスである EnsLib.DICOM.ProcessOpens in a new tab を拡張します。詳細は、"クラスリファレンス" のエントリを参照してください。

手順は、"Ensemble プロダクションの開発" の “カスタム・ビジネス・プロセスの開発” を参照してください。

Demo.DICOM.Process.WorkListOpens in a new tab クラスは、SETTINGS パラメータを使用して、構成のために新しい NumberOfWorkListEntries プロパティを公開します。この設定は、C-FIND 要求の結果として返されるワークリスト・エントリの数に影響します。

カスタム・クラスの内容の概要は、以下の節を参照してください。

Demo.DICOM.Process.WorkList.cls のクラス・コードを表示するには、スタジオを使用して処理の詳細を参照します。

DICOM 通信の重複性のため、ビジネス・プロセスはプロセス外の事象を継続的に追跡する必要があります。これは、プロセスの状態のコンテキスト変数を使用することで実行できます。

DICOM ワークリスト・プロセス・プロパティ

カスタム・クラスは、要求を読み取って応答の形式を作成する必要のある以下のプロパティを追加します。

DocumentFromService

ビジネス・サービスからの受信メッセージ (EnsLib.DICOM.DocumentOpens in a new tab オブジェクト)。

NumberOfWorkListEntries

ワークリスト・エントリの数を構成します。デフォルトは 1 です。

OriginatingMessageID

最初のメッセージの ID を継続的に追跡します。

ReplyCounter

ワークリスト要求に対して送信された応答の数を継続的に追跡します。

DICOM ワークリスト・プロセス・メソッド

カスタム・クラスは、要求を処理して応答を作成する必要のある以下のメソッドを追加します。

OnMessage()

このメソッドは、C-FIND 要求メッセージおよび C-CANCEL 要求メッセージを処理します。検索要求は、要求のデータセットに指定されている基準を使用して実行されるクエリを要求します。クエリには、かなり時間がかかり、多くの結果が生成される可能性があるため、個別のマッチは 1 つ以上のメッセージで報告されます。このデモ・メソッドでは、その他の種類の DICOM メッセージは生成されません。

OnMessage() メソッドには、以下のシグニチャがあります。

Method OnMessage(pSourceConfigName As %String,
                 pInput As %Library.Persistent)
                 As %Status
OnError()

このメソッドは、エラーが発生すると呼び出されます。同じエラーが返されると、ビジネス・プロセスは自身の状態をエラーに設定し、終了します。

OnError() メソッドには、以下のシグニチャがあります。

Method OnError(request As %Library.Persistent, ByRef response As %Library.Persistent,
               callrequest As %Library.Persistent,
               pErrorStatus As %Status,
               pCompletionKey As %String)
               As %Status

CreateIntermediateFindResponse()

このメソッドは、C-FIND 応答のメッセージの中間インスタンスを生成し、必須の DICOM フィールドを書き込みます。プロトコルは、最後のメッセージ以外のすべてのメッセージの状態が保留中に設定されるように要求します。これにより、クライアントはまだ受信するデータがあることがわかります。最後のメッセージの状態は成功で、クエリが終了したことを示します。この例では、選択基準は無視され、ダミーの患者記録が返されます。実際のプロダクションの実装は、当然これよりも複雑になります。

CreateIntermediateFindResponse() メソッドには、以下のシグニチャがあります。

Method CreateIntermediateFindResponse(pDocIn As EnsLib.DICOM.Document,
                                      Output pDocOut As EnsLib.DICOM.Document)
                                      As %Status

CreateFinalFindResponse()

このメソッドは、最期のプロセスが完了したことを示すメッセージのインスタンスを作成し、コマンド・フィールドを C-FIND-RSP に設定して、それが検索応答メッセージであることを示します。

CreateFinalFindResponse() メソッドには、以下のシグニチャがあります。

Method CreateFinalFindResponse(pDocIn As EnsLib.DICOM.Document,
                               Output pDocOut As EnsLib.DICOM.Document)
                               As %Status

DICOM ワークリスト・プロダクションのテスト

機能する関連付けがあり、プロダクションを作成したら、そのワークリスト・プロダクションを使用して有効な DICOM メッセージ・ドキュメントの処理を試みることができます。Ensemble に含まれるデモ・プロダクションは、DICOM 処理のテスト専用に開発されたサードパーティ製ソフトウェアを使用して開発されました。使用可能な多くのソフトウェア製品のいずれかを利用することも、実際の DICOM モダリティ・データを使用してテストすることも可能です。

この節では、管理ポータルの [イベント・ログ] ページ、[メッセージ・ブラウザ] ページ、[メッセージ詳細] ページ、および [メッセージの内容] ページの一部を示します。これらのページは、ワークリストをサポートするモダリティから DICOM メッセージを受け取る実行中の Demo.DICOM.Production.WorkListOpens in a new tab プロダクションのものです。

以下は、[メッセージ・ブラウザ] で Ensemble の DICOM メッセージ・ドキュメントの内容を表示したものです。

generated description: worklist run msg details

データ・セット内の物理データとコマンド・セット内のメタデータが含まれた DICOM メッセージの構造を確認できます。

以下の [イベント・ログ] の一部は、モダリティと通信し、ビジネス・プロセスで構成された 3 つのワークリスト項目を処理するプロダクションを実行するイベントを、(ボトムアップ方式で) 示したものです。

generated description: worklist run eventlog

以下のログは、サードパーティ製の DICOM テスト用ソフトウェアから得られたもので、ソフトウェアと Ensemble プロダクションとの通信を示しています。

test: #3:ENS-SCP << A-ASSOCIATE-RQ PDU
test: #3:ENS-SCP >> A-ASSOCIATE-AC PDU
test: #3:ENS-SCP << C-FIND-RQ Modality Worklist Information Model - FIND SOP Class
test: #3:ENS-SCP << Dataset
test: #3:ENS-SCP >> C-FIND-RSP Modality Worklist Information Model-FIND SOP Class, status #ff01H[StatusEntry.PENDING]
test: #3:ENS-SCP >> Dataset
test: #3:ENS-SCP >> C-FIND-RSP Modality Worklist Information Model-FIND SOP Class, status #ff01H[StatusEntry.PENDING]
test: #3:ENS-SCP >> Dataset
test: #3:ENS-SCP >> C-FIND-RSP Modality Worklist Information Model-FIND SOP Class, status #ff01H[StatusEntry.PENDING]
test: #3:ENS-SCP >> Dataset
test: #3:ENS-SCP >> C-FIND-RSP Modality Worklist Information Model-FIND SOP Class, status #0000H[Success]
test: #3:ENS-SCP << A-RELEASE-RQ PDU
test: #3:ENS-SCP >> A-RELEASE-RP PDU
test: #3:ENS-SCP closing socket
FeedbackOpens in a new tab