(57)【特許請求の範囲】
【請求項１】
各病気が症状リストに関連づけられ、各症状が質問のリストに関連づけられており、各症状が症状重みを有し、各病気が累積された総重みを有し、症状と質問が各病気毎に異なる可能性がある、病気群のリストを格納する記憶装置と、
患者に情報を与える出力装置と、
前記患者からの情報を入力する入力装置と、
（ａ）前記入力装置を繰り返し使用して、前記記憶装置に格納されている前記質問のリストの選択された質問リストから尋ねられた質問に対する、症状を生成する応答であって、生成された症状が、病気に対する累積された総重みに重みを加えるところの、応答を引き出し、
（ｂ）
（ｂ１）前記の累積された総重みに基づいて、前記病気群のリストから病気を選択し、
（ｂ２）前記の選択された病気に関連する症状リストにおいて最大の症状重みを有する症状を選択し、
（ｂ３）前記の選択された症状に関連する質問リストから質問を選択し、
（ｂ４）現在の質問に対する現在の応答に基づいて症状を生成し、
（ｂ５）それぞれが前記の生成された症状を含む症状リストと関連する病気に対する累積された総重みを更新する
ことによって、患者の健康状態に固有の質問の流れが得られるように、前記の選択された質問リストからの質問を行う順序を調整し、
（ｃ）診断を下すために、病気に対する累積された総重みが閾値に達したか、あるいは、閾値を超えたかどうかを判定する
制御手段と
を有するコンピュータ化診断システム。
【請求項２】
前記制御手段は、症状を１つ以上の他の症状の有無に基づいて生成することを特徴とする、請求項１に記載のシステム。
【請求項３】
前記制御手段は、選択された１組の症状の存在によって、少なくとも１つの病気の累積された総重みにさらに重みが加えられるように構成されていることを特徴とする、請求項１に記載のシステム。
【請求項４】
前記制御手段は、診断プロセスの第１の時間における症状を、プロセスの第２の時間における症状とは異なって重み付けすることを特徴とする、請求項１に記載のシステム。
【請求項５】
第１の重大さで報告された症状の重みが、第２の重大さで報告された症状の重みとは異なることを特徴とする、請求項１に記載のシステム。
【請求項６】
前記制御手段は、時間の経過につれて指定されたシーケンスで発生する選択された１組の症状によって、指定されたシーケンスで発生しない選択された１組の症状の個別の重みの累積とは異なる累積された重みが総重みに対して加えられるように構成されていることを特徴とする、請求項１に記載のシステム。
【請求項７】
前記制御手段は、選択された１組の症状が発症しまたは終了するシーケンスによって、選択された症状の個別の累積された重みだけの場合とは異なる重みが総重みに加えられるように構成されていることを特徴とする、請求項１に記載のシステム。
【請求項８】
前記制御手段は、累積された総重みに基づいてさらに行われる診断のための質問に対して、病気を含めることを特徴とする、請求項１に記載のシステム。
【請求項９】
前記制御手段は、累積された総重みに基づいてさらに行われる診断のための質問に対して、病気を除外することを特徴とする、請求項１に記載のシステム。
【請求項１０】
前記制御手段は、緊急とみなされる病気に対する質問を、緊急ではない病気に対する質問より先になすことを特徴とする、請求項１に記載のシステム。
【請求項１１】
前記制御手段は、さらに、病気に関する累積された総重みが、可能性のある診断が排除されるように、除外閾値未満になるか否かを判定することを特徴とする、請求項１に記載のシステム。
【請求項１２】
病気を含めることにある程度の確実性が与えられることを特徴とする、請求項８に記載のシステム。
【請求項１３】
病気を除外することにある程度の確実性が与えられることを特徴とする、請求項９に記載のシステム。
【請求項１４】
前記制御手段は、それぞれある程度の確実性を有する複数の診断を、患者に固有の差別的診断リストに集積することを特徴とする、請求項１に記載のシステム。
【請求項１５】
前記制御手段は、患者についてなされた各質問が、少なくとも１つの病気に対する累積された総重みに、関連する質問重みを加えるように構成されていることを特徴とする、請求項１に記載のシステム。
【請求項１６】
各病気が第１の症状リストに関連づけられ、各症状が第１の質問リストに関連づけられており、各症状が症状重みを有し、各病気が累積された総重みを有し、症状と質問が各病気毎に異なる可能性があるところの病気リストを格納する記憶装置と、
患者に情報を与える出力装置と、
前記患者からの情報を入力する入力装置と、
（ａ）前記入力装置を繰り返し使用して、前記記憶装置に格納されている前記質問のリストの選択された質問のリストから尋ねられた質問に対し、症状を生成する応答であって、生成された症状が、病気に対する累積された総重みに重みを加えるところの、応答を引き出し、
（ｂ）前記入力装置を繰り返し使用して、ある時間間隔後に、尋ねられた質問に対する応答であって、前記時間間隔後の第２の質問リストと第２の症状リストが前記第１の質問リストと前記第１の症状リストとは異なっている可能性がある、応答をさらに引き出し、
（ｃ）
（ｃ１）前記の累積された総重みに基づいて、前記病気群のリストから病気を選択し、
（ｃ２）前記の選択された病気に現在関連する症状リストにおいて最大の症状重みを有する症状を選択し、
（ｃ３）前記の選択された症状に現在関連する質問リストから質問を選択し、
（ｃ４）現在の質問に対する現在の応答に基づいて症状を生成し、
（ｃ５）それぞれが前記の生成された症状を含む症状リストと現在関連する病気に対する累積された総重みを更新する
ことによって、患者の健康状態に固有の質問の流れが得られるように、前記の選択された質問リストからの質問を行う順序を調整し、
（ｄ）診断を下すために、病気に対する累積された総重みが閾値に達したか、あるいは閾値を超えたかどうかを判定することによって、患者の健康状態に固有の質問の流れが得られるように、前記の選択された質問リストからの質問を行う順序を調整する、
制御手段と
を有するコンピュータ化診断システム。
【請求項１７】
前記制御手段は、症状を１つ以上の他の症状の有無に基づいて生成することを特徴とする、請求項１６記載のシステム。
【請求項１８】
前記制御手段は、選択された１組の症状の存在によって、少なくとも１つの病気の累積された総重みにさらに重みが加えられるように構成されていることを特徴とする、請求項１６に記載のシステム。
【請求項１９】
前記制御手段は、診断プロセスの第１の時間における症状を、プロセスの第２の時間における症状とは異なって重み付けすることを特徴とする、請求項１６に記載のシステム。
【請求項２０】
第１の重大さで報告された症状の重みが、第２の重大さで報告された症状の重みとは異なることを特徴とする、請求項１６に記載のシステム。
【請求項２１】
前記制御手段は、長い年月の間に指定されたシーケンスで発生する選択された１組の症状によって、指定されたシーケンスで発生しない選択された１組の症状の個々の重みの累積とは異なる累積された重みが総重みに対して加えられるように構成されていることを特徴とする、請求項１６に記載のシステム。
【請求項２２】
前記制御手段は、選択された１組の症状が発症または終了するシーケンスによって、選択された症状の個別の累積重みだけの場合とは異なる重みが総重みに加えられるように構成されていることを特徴とする、請求項１６に記載のシステム。
【請求項２３】
前記制御手段は、累積された総重みに基づいてさらに行われる診断のための質問に対して、病気を含めることを特徴とする、請求項１６に記載のシステム。
【請求項２４】
前記制御手段は、累積された総重みに基づいてさらに行われる診断のための質問に対して、病気を除外することを特徴とする、請求項１６に記載のシステム。
【請求項２５】
前記制御手段は、緊急とみなされる病気に関する質問を、緊急ではない病気に関する質問より先になすることを特徴とする、請求項１６に記載のシステム。
【請求項２６】
前記制御手段は、病気に関する累積された総重みが、可能性のある診断が排除されるように、除外閾値未満になるか否かを判定することを特徴とする、請求項１６に記載のシステム。
【請求項２７】
病気を含めることにある程度の確実性が与えられることを特徴とする、請求項２３に記載のシステム。
【請求項２８】
病気を除外することにある程度の確実性が与えられることを特徴とする、請求項９に記載のシステム。
【請求項２９】
前記制御手段は、それぞれある程度の確実性を有する複数の診断を、患者に固有の差別的診断リストに集積することを特徴とする、請求項１６に記載のシステム。
【請求項３０】
前記制御手段は、患者についてなされる各質問が、少なくとも１つの病気に対する累積された総重みに、関連する質問重みを加えるように構成されていることを特徴とする、請求項１６に記載のシステム。
【請求項３１】
特定の病気に対する、判定された各時間間隔毎に、前記記憶装置は、症状リストと、各症状に対する質問リストを記憶することを特徴とする、請求項１６に記載のシステム。
【請求項３２】
質問が、病気の経時進行を追跡するようになっていることを特徴とする、請求項３１に記載のシステム。
【発明の詳細な説明】
発明の背景
発明の分野
本発明は、コンピュータ化医療診断システムに関する。より詳細に述べれば、本発明は、ダイナミックデータ構造を使用することでタイムベース化された患者の苦痛を診断するコンピュータシステムに関している。
関連技術の説明
現在、米国国民総生産のかなりの部分を医療費が占め、他のいかなる消費者物価指数よりも急速に上昇している。さらに、多くの人々は、通常、医療サービスに対して費用を支払うことができないため、最も基礎的な治療および医療情報さえアクセスすることができない。
多くの人々は、費用、時間の制約、あるいは不便のために治療を受けるのが遅れるかあるいは治療を受けることを妨げられる。一般人が、普遍的でかつ無制限で容易に医療情報をアクセスしていれば、多数の病気が防止できたであろう。同様に、初期に多数の病気を発見や治療することによって、多数の患者がその治療が米国の医療システムによる財政負担のかなりの部分である病気の進行した段階に達することを防ぐことができた。米国は莫大な割合を占める健康関連問題に直面し、本解決策は骨の折れることは明らかである。
医療問題に取り組む従来の試みは、様々な自動化形式を含んでいた。これらの試みのいくつかは医療質問に回答するダイヤルインライブラリの形式であった。他の試みは、患者の診察中にコンピュータ化された補助器具を医者に提供することを目標としていた。これらの方法はスタティックな手順、すなわちアルゴリズムを含んでいる。望まれることは、患者に迅速で、効率的でかつ正確な医療診察および診断を提供する自動化方法である。このような医療診察システムは、新しいタイプの医療問題あるいは発見方法が拡大できるようにモジュール式であるべきである。
患者の１つの面接方法は医療診断スクリプトを含んでいる。そこでは、スクリプトのフォーマットで専門家達の専門的な医療知識を示す有効な方法が必要とされている。このスクリプトは、患者の診断を迅速で効率的に行うためにダイナミック構造を用いるべきである。
発明の概要
リストベース処理は、リストを処理して、患者と対話できるように病気、症状および質問を病気、症状、および質問（ＤＳＱ）をネストしたセットに配列することによって行われる病気診断方法である。患者への質問毎に規定の返答が生成され、返答毎に規定の質問セットの１つを生成する。これにより患者から症状を聞き出す対話が確立される。症状は、処理され、病気を包含あるいは除外するために重み付けされる。含められた病気のセットは診断ということになる。リストベース処理システムは、医療の知識を正式、かつ構造化されたリスト、すなわちアレイに編成し、それから次の質問を自動的に選択するためにこれらのリストに特別のアルゴリズムを適用する。質問に対する返答は、より多くの質問をもたらし、最終的には診断を下す。
本発明によれば、
各病気が症状のリストに関連づけられ、各症状が質問のリストに関連づけられており、各症状が症状重みを有し、各病気が累積された総重みを有し、症状と質問が各病気毎に異なる可能性がある、病気群のリストを格納する記憶装置と、
患者に情報を与える出力装置と、
前記患者からの情報を入力する入力装置と、
（ａ）前記入力装置を繰り返し使用して、前記記憶装置に格納されている前記質問のリストの選択された質問のリストから尋ねられた質問に対し、症状を生成する応答であって、生成された症状が、病気に対する累積された総重みに重みを加えるところの、応答を引き出し、
（ｂ）
（ｂ１）現在の質問に対する現在の応答に基づいて症状を生成し、
（ｂ２）それぞれが前記の生成された症状を含む症状リストと関連する病気に対する累積された総重みを更新し、
（ｂ３）前記の累積された総重みに基づいて、前記病気群から病気を選択し、
（ｂ４）前記の選択された病気に関連する症状リストにおいて最大の症状重みを有する症状を選択し、
（ｂ５）前記の選択された症状に関連する質問リストから質問を選択する
ことによって、患者の健康状態に固有の質問の流れが得られるように、前記の選択された質問リストからの質問を行う順序を調整し、
（ｃ）診断を下すために、病気に対する累積された総重みが閾値に達したか、あるいは、閾値を超えたかどうかを判定する
制御手段と
を有するコンピュータ化診断システムが提供される。
この医療診察システムは、患者が属している母集団における特異的な診断についての地理ベースのリストも含んでおり、このリストはリストベースプロセッサが処理する場合には患者に特異的な診断に変えられる。このシステムは、患者が属している母集団における病気の確率あるいは発生率を使用して、システムが患者を評価することを可能にするように病気の頻度を保持するテーブルも含んでいる。このシステムは、診断を規定するのを一層助けるために、研究室の試験の選択および画像形式の選択に対する特定および状況に敏感な勧告をも患者にも与える。このシステムは、研究室の試験の選択および画像形式の選択が行なわれ、その結果を患者、患者の医療管理者および／または他の所望の団体組織に伝えることを可能にする“再入力”機能を呼び出すことができる。このシステムは、患者が（自分自身であるいはアシスタントによる）健康診断操作を実行し、診断をさらに正確にするためにシステムに結果を知らせることを可能にする“再投入機能”を呼び出すことができる。
図面の詳細な説明
図１ａは、本発明によるコンピュータ化医療診断。治療診察（ＭＤＡＴＡ）システムの好適な実施例の構成要素を示すブロック図；
図１ｂは、第１ａ図に示したＭＤＡＴＡシステムにおけるユーザー／患者コンピュータの構成要素を示すブロック図である；
図２は、第１ａ図のシステムで用いられる一組のプロセス、ファイル、およびデータベースを示すブロック図；
図３ａは、第２図に示したＭＤＳデータベース用のスクリプトファイルの作成に用いられるオフライン診断スクリプト（ＭＤＳ）生成プロセスを示す図；
図３ｂは、異なった二つの時間間隔におけるスクリプトのためのＤＳＱリストの考えられる階層を示す図；
図４ａは、図３ａに示した「医学知識の収集および編成」プロセスにおける病気割当ての部分を示す図；
図４ｂは、図３ａに示した「医学知識の収集および組織化プロセス」における病気知識獲得の部分を示す図；
図５は、図３ａに示した「スクリプトコンパイラ」の流れ図；
図６ａは、診断スクリプトエンジンの動作中に用いられる構成を示すブロック図；
図６ｂは、スクリプトエンジンの動作中に用いられる一組の構造と入力およびＭＤＡＴＡシステムによって作成された出力を示すブロック図；
図７は、図１のＭＤＡＴＡシステムのためのユーザープロセスの最高水準流れ図；
図８ａは、図７に示したオンライン面接プロセスの実行に用いられる「診断スクリプトエンジン」プロセスの流れ図；
図８ｂは、図８ａに示した「診断配信」プロセスの流れ図；
図９は、図８ａに示したリストベース処理のための「ＤＳＱリストスクリプトエンジン」プロセスの各部の流れ図；
図１０は、図８ａに示したＤＳＱリストスクリプトエンジンの動作中に用いられるリストの一部を示すブロック図；
図１１は、図８ａに示した「ＤＳＱリストスクリプトエンジン」プロセスの別の流れ図；
図１２は、図１１に示した「症状選択」（考慮される症状の選択）プロセスの流れ図；
図１３は、図１１に示した「応答処理」（ユーザーからの応答の処理）プロセスの流れ図；
図１４は、図１１に示した「病気リストの更新」（更新された症状リストに基づく病気の一時リストにおけるスコアの更新および包含または除外された病気の削除）プロセスの流れ図；
図１５は、図１ａに示したＭＤＡＴＡシステムにおいて医療診断または診断を作成するための別の実施例を示す高水準の流れ図；
好ましい実施例の詳細な説明
好ましい実施例の以下の詳細な説明は、本発明のある特定の実施例の説明を示している。しかしながら、本発明は、請求の範囲によって規定され、含まれるような多数の異なる方法で実施できる。この説明において、全体にわたって同じ部品同じ数字が付けられている図面を参照する。
便宜上、好ましい実施例の解説は次の主要な節、すなわちシステム概要、医療診断スクリプト、情報獲得の詳細、スクリプト生成の詳細、スクリプト実行の詳細、およびリストベース処理の利点構成される。
１．システム概要
医療診断および治療診察（ＭＤＡＴＡ）システムは、医療診断のために患者の自動面接を行うコンピュータシステムである。面接を行うために、ＭＤＡＴＡは、医療診断スクリプト（ＭＤＳ）のデータベースを使用する。各ＭＤＳは、特定の医療状態に対して患者に面接を行い、診断を下すのに必要なデータおよびコマンドを含んでいる。スクリプトは、病状、治療、投薬、専門医についての他のＭＤＡＴＡデータベース、要するに医療の診断と診察に必要な全ての情報によって支援されている。症状は、一つの病歴情報、健康診断から引き出された一つの情報、例えば、通常は自己診断、研究室の試験の結果、あるいは画像形式の選択結果から身体的徴候として規定できる。
図１ａを参照すると、ＭＤＡＴＡシステム１００のこの好ましい実施例のブロック図が示されている。ＭＤＡＴＡ１００は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、インターネット、あるいは他の接続サービスを示すことができるネットワーク“クラウド”１０２を含んでいる。
ＭＤＡＴＡプログラムおよびデータベースは、ＬＡＮ１０６およびネットワーク１０２のゲートウェイ１０４によって相互接続されていることが好ましいサーバ１０８のグループに存在することが好ましい。あるいは、ＭＤＡＴＡプログラムおよびデータベースは、ネットワークインタフェースハードウェア・ソフトウェア１１２を用いる単一のサーバ１１０に存在する。ＭＤＡＴＡサーバ１０８／１１０は、以下に述べる病気／症状／質問（ＤＳＱ）リストを記憶する。
ネットワーク１０２は、例えば、モデムまたはネットワークインタフェースカードを使用することによってユーザコンピュータ１１６に接続できる。コンピュータ１１６のユーザ１１４は、キーボードおよび／またはポインティングデバイスおよびモニタ１１８のような可視ディスプレイを使用してＭＤＡＴＡプログラムを遠隔アクセスするためにブラウザ１２０を使用できる。あるいは、ＭＤＡＴＡプログラムがコンピュータ１１８上でローカルモードで実行される場合、ブラウザ１２０は用いられない。ビデオカメラ１２２が、可視的症状のような可視入力を可能にするためにコンピュータ１１６に随意に接続できる。
種々の他の装置が、ＭＤＡＴＡサーバ１０８／１１０と通信するために使用されてもよい。サーバが音声認識ハードウェアあるいはＤＴＭＦハードウェアを備えている場合、ユーザは、電話１２４を使用してＭＤＡＴＡプログラムと通信できる。電話の実施例は、ここに参考として含める「コンピュータ化医療診断・治療診断システム」という名称の本出願人の同時係属中の米国出願第08/176,041号に記載されている。ＭＤＡＴＡサーバ１０８／１１０と通信する他の接続装置は、モデムまたは無線接続インタフェースを有するポータブルパーソナルコンピュータ、可視ディスプレイ１３０に接続されているケーブルインタフェース装置１２８、あるいは衛星受信機１３４およびテレビジョン１３６に接続されている衛星ディッシュ１３２を含んでいる。ユーザ１１４とＭＤＡＴＡサーバ１０８／１１０との間の通信を可能にする他の方法が考えられる。
図１ｂを参照すると、この好ましいユーザ／患者コンピュータの図は、ネットワークへのいくつかの考えられる相互接続を示している。スクリプトを“作動させる”ために、ＭＤＳファイルを読み出し、患者への質問を出したり、返答を入力したりするような面接動作を実行するためにそのコードを使用する、スクリプトエンジンと呼ばれる特別なプログラムが使用される。このスクリプトはまた、患者からの返答を集め、返答を評価し、診断を出し、患者の医療記録を更新する。このスクリプトエンジンはユーザコンピュータ内にあるのが好ましい。スクリプトエンジンは、ハードドライブあるいはＣＤ−ＲＯＭに記憶することができ、実行するために主メモリあるいはキャッシュにロードされる。
本発明のコンピュータ化ＭＤＡＴＡシステム１００のユーザ１１４によって利用されるこの好ましいコンピュータ１１６の構成要素が図１ｂに示されている。あるいは、図１ａに示される装置のように、医療面接を行う他の装置がコンピュータ１１６の代わりに利用できる。
コンピュータ１０２は、筺体１１６内部に複数の構成要素を含んでいる。電話線１０６が、モデム１６０を介してコンピュータ１１６の公衆電話網１５８をインタフェースする。電話網１５８は、ＭＤＡＴＡシステムサーバ１０８／１１０との接続を有するネットワーク１０２に接続できる。あるいは、ユーザは、ネットワークインタフェースカード１６４用いることによってネットワーク１０２に接続できる。
本明細書を通して、ユーザおよび患者の用語は相互に交換できるように使用される。しかしながら、ユーザが患者の代理として、役割を果たしてもよいことが理解される。この場合、ユーザは患者のアシスタントとして登録される。
ハードウェアおよびシステムソフトウェアは、２つの基本的考え方、すなわち他のオペレーティングシステムへの移植性および工業規格の使用で組み立てられている。このように、システムは、より汎用性が可能であり、自由な市場競争が製品を連続的に改良することを可能にすると同時に費用を減少させる。特定のハードウェアおよびソフトウェアを参照するが、異なった一そろいの部品を本システムで使用できることが理解されるであろう。
コンピュータ１１６は、インテルペンティームマイクロプロセッサ１７０を有するパーソナルコンピュータであるのが好ましい。アップルマッキントッシュ、アミガ（Amiga）、ＤＥＣのＶＡＸ、またはＩＢＭメインフレームのような他のコンピュータも使用できる。モデム１６０またはネットワークインタフェースカード１６４は、工業規格アーキテクチャ（ＩＳＡ）または周辺部品相互接続（ＰＣＩ）バス１６２に接続する。バス１６２は、マイクロプロセッサ１７０をコントローラ回路（チップあるいはボード）を介して複数の周辺装置と相互接続している。
コンピュータバス１６２は、アダプタまたはコントローラを通してこのバスに接続されている複数の周辺装置を有する。好ましくは、ＳＶＧＡあるいはより良い解像度のビデオアダプタボード１７２がビデオモニタ１１８に相互接続されている。直列通信回路１７６が、マウス１７８のようなポインティングデバイスとインタフェースする。並列通信回路が他の実施例において回路１７６の代わりに使用されてもよい。キーボードコントローラ回路１８０が、キーボード１８２とインタフェースする。５００Ｍｂ以上のハードディスクドライブ１８４とオプションのＣＤ−ＲＯＭドライブ１８６が、バス１６２に取り付けられることが好ましい。ハードディスク１８４は、患者ファイルのようなデータベースファイル、他のＭＤＡＴＡファイル、およびバイナリサポートファイルを記憶する。ＣＤ−ＲＯＭドライブ１８６は、コンピュータ１１６を使用する患者用のファイルのようなデータベースファイルおよびバイナリサポートファイルも記憶する。
主メモリ１９０がマイクロプロセッサ１７０に接続されている。この好ましい実施例において、コンピュータ１１６は、ウィンドウズ９５オペレーティングシステム１９２の下で作動するのが好ましい。メモリ１９０は、診断スクリプトエンジン１９４および病気／症状／質問（ＤＳＱ）リストスクリプトエンジン１９６を実行する。スクリプトエンジンソフトウェアは、ボーランドデルファイパスカル、バージョンIIで記述されている。
図２を参照すると、ＭＤＡＴＡシステム１００によって利用されるプロセス、ファイルおよびデータベースのセットが記載されている。後述するスクリプトエンジンプロセス、ＭＤＳデータベース、画像形式データベース、研究室の試験データベースを除いて、これらのプロセス、ファイル、およびデータベースは、「コンピュータ化医療診断・治療診断システム」である出願人の同時係属中出願の米国出願第08/176,041号に記載されている。
ＭＤＡＴＡシステム１００は、いくつかの主要なプロセスおよび関連するデータベースを使用する。１セットの患者ログインプロセッサ２１０は、３つの方法、すなわち１）患者識別番号（ＰＩＮ）を与えることによる方法、２）アシスタント識別番号（ＡＩＮ）を与えることによりシステムに予め登録されているアシスタントを識別する方法、３）患者識別番号を与えることによるシステムに予め登録されているアシスタントを有する患者を識別する方法の中の１つでシステムに予め登録されている患者を識別するためにシステム１００によって使用される。プロセス２１２のセットは患者あるいはアシスタントを登録するために使用される。ユーザが患者である場合、患者登録プロセスは、新しい患者、すなわち初めての患者を登録するためにシステムによって使用される。ユーザが患者でない場合、アシスタント登録プロセスは、新しいアシスタント、すなわち初めてのアシスタントを登録するためにシステムによって使用される。したがって、患者がまだ登録されていない場合、アシスタント付き患者の登録プロセスが患者を登録するためにシステムによって使用される。
一旦ユーザがログインあるいは登録されたとすると、システムはプロセスの選択を生じる。本実施例に関連する主要なプロセスは患者診断を実行する診断プロセス２２０である。評価プロセス２２０は、研究室の試験の選択および画像形式の選択データベースをアクセスして、この患者にとって、この点で、時にかなった適切な試験を勧告し、治療テーブル２５０にアクセスして、特定の病気あるいは診断のための現在の治療情報を得る。他の実施例では、他の医療情報プロセスをアクセスするために他の手段が追加される。
これらのプロセスに関係しているのは患者およびアシスタント登録データベーース２４０、診察履歴データベース２４２、患者返答データベース２４４、医療履歴オブジェクトデータベース２４６、患者投薬データベース２４８、未判定データベース２５２、患者医療履歴データベース２５４、医療診断スクリプト（ＭＤＳ）データベース２５６、画像形式データベース２５８、および研究室の試験データベース２６０。
II．医療診断スクリプト
医療診断スクリプト（ＭＤＳ）は、患者の健康状態の１つ以上の診断を生じさせるために患者とのプログラムされた対話である。ＭＤＳの作成は、医療診断情報を獲得するステップ、それを患者が理解できる用語で表現するステップ、それを役に立つシーケンスに配列するステップ、それを再生可能なスクリプトに編集するステップ、それを試験するステップ、それを特定の通信媒体のために構成するステップ、それを他のスクリプトおよびサポートデータベースの集合体の中に埋め込むステップ、およびそれを患者による使用のためにパッケージ化するステップのような数個のステップを必要とする。
“スクリプトを記述すること”は、医療情報を獲得し、それを処理して最終的に診断判定をもたらす論理的質問ストリームにする初期のステップを意味すると考えられる。明らかに、特定の病気を診断する経験をもつ内科医だけがこれらのステップを実行でき、ＭＤＡＴＡシステムは、これらを支援するためにいくつかの自動化方法を開発した。
本発明は、まず病気、症状、および質問のリストで始まる“リストベース処理”と呼ばれる１つの特定の方法を用いるのが好ましい。これらのリストは、リストベーススクリプト開発ツールを使用して処理され実行可能なスクリプトにされる。スクリプト開発ツールを使用して、作成者は、ソーススクリプトを記述し、編集し、それを再生可能なスクリプトファイルに編集し、スクリプトを再生し、スクリプトを実行したり、評価したり、細かく調整するようにスクリプトオプションをセットすることができる。
リストベーススクリプトは、作成者がいくつかのリストの形式のスクリプトの要素を提供する特別にフォーマット化されたテキストファイルからなる。トップリストはスクリプトが考慮する病気のリストである。各病気に関して、スクリプトは症状およびその重みをリストにする。各症状に関して、作成者は、質問および症状を引き出すその重みのリストを提供する。各質問に関して、作成者は、質問を導く前置きテキストを含む多数のテキストオブジェクトを提供する。スクリプトのための全てのリストが準備されると、次のステップは、スクリプトを“編集”する、すなわちそれを患者のために再生できる、すなわち“実行”できる特別符に号化されたスクリプトファイルに変換することである。スクリプトを開発段階で実行するために、スクリプト開発ツールは、適切な次の病気およびこの病気の好適な次の症状を選択する。スクリプト開発ツールは、質問テキストを表示し、患者からの返答を待つ。患者の返答に基づいて、スクリプト開発ツールは、病気スコアを更新し、次の症状を続ける。診断として含められている最初の病気、あるいは考慮されていた全ての病気のような（作成者により設定された）いくつかの条件に達した場合、スクリプトは中止する。
開発段階中、スクリプト作成者は、スクリプトが次の病気および次の症状を選択する方法を変え、スクリプトがどのくらい長く続くかのいろいろな“オプション”を設定できる。このオプション機能はスクリプトによって作成者の経験から最善の設定を求めるようにする。
したがって、スクリプトの３つの主要な段階は、１）知識獲得、２）スクリプト生成、および３）スクリプト実行である。スクリプト作成者は、スクリプトの作成および試験に全てこれら３つの段階を全て使用する。患者は、ＭＤＡＴＡシステム１００の実行時間使用中スクリプト実行段階を使用する。
スクリプトの段階
１．知識獲得
知識獲得段階は、所与の病気の診断に関する知識、および、この知識をスクリプトを生成するのに役に立つ何らかの形式に変えることを医療専門家から引き出すのに必要な全てのタスクを含んでいる。この段階は、通常、まずマラリアのような病気を診断するスクリプトの必要性を示すスクリプト開発のディレクタで始まる。この段階は、スクリプトの範囲を規定し、治療テキストを調査し、作成者および他の専門家に面接し、質問および回答のセットをフォーマット化し、質問シーケンスを作成し、自動知識獲得ツールが使用される場合、試験設定の質問のフローを実行するようなタスクを続ける。この段階は、病気、例えば、マラリア／非マラリアのような病気をマラリアにかかっている患者／マラリアにかかっていない患者に対する試験回答が送られたときに、正確に診断できるスクリプトを記述するのに必要な全ての情報を（少なくとも）含む、おそらく自動化されたソースドキュメントのセットで終わる。スクリプトの最終形式、スクリプトが実行するプラットホーム、あるいはスクリプトが患者と連絡するために使用している自然言語についてさえこの時点では何も知られていない。
２．スクリプト生成
スクリプト生成段階において、スクリプトは、ソフトウェアで得られた比較的小さな診断アルゴリズムとして生成される。この段階では、目的は、スクリプトにマラリアのような病気あるいは他の治療問題の診断に対する作成者のアプローチを自動的に表示させることにある。スクリプトは、データを含み、返答によって、マラリアあるいは非マラリアかを、および関連した信頼レベルを示すことをスクリプトの呼び出し者に知らせるまで、適切な最初の質問を出し、返答を重み付けし、返答を用いて別の質問を出す等処理をする。
スクリプトは実際の患者のために実行できるスタンドアローンプログラムではないことに注目すべきである。スクリプトは、マラリアのような単一の主な病気についてだけ知っていて、痛風あるいは喘息のような他の治療問題を診断しないことが好ましい。
このスクリプトは、多いに異なる形式およびフォーマットのスクリプトデータベース中の約４０，０００個のスクリプトの中の１つになるように方向づけられている。スクリプトは直ぐに、適切な人間言語（ドイツ語、スペイン語）に翻訳され、適切なエラー処理機構を追加され、適切なプログラミング言語（Ｃ＋＋、ＪＡＶＡ、ＨＴＭＬ）に変換され、適切なターゲット媒体（ＰＣ、Ｍａｃ、電話、ＬＡＮ、ＷＡＮ、インターネット）のためにフォーマット化され、サポートシステム（データベース、メタ機能、患者レコード、セッションログ）に接続されねばならない。
次に、スクリプトが実際に適切な出力を生成することを検証するために、既知の受容可能な診断に関して、患者の返答を様々に記録したスクリプトのセットを供給する広範囲にわたる試験を試験ベットで行う。
最後に、スクリプトは、いつでも生成システムの中に設置する状態となる。スクリプトは、大きなスクリプトデータベースに記憶されるか、スクリプトのセットにパッケージ化されて、ＣＤ ＲＯＭに書き込まれるかあるいはインターネットを介して病院に出荷されてもよい。使用されるスクリプトライブラリの形式は何であっても、スクリプトは、インデックスされ、スクリプトマネージャソフトウェアで登録されねばならない。この段階の終わりで、スクリプトは、最後には、実際の問題を実際に診断するために実際の患者に使用できる公式の、実行される医療診断システムの一部となる。
３．スクリプト実行
スクリプト実行段階において、スクリプトは遅かれ早かれ実際に実行される。もちろん、患者に関するセッションは、まずマラリアの診断スクリプトで開始しない。一般大衆に開放された医療診断システムは、明らかに任意の医療診断となる前に実行される多数の管理タスクを有する。まず第一に、このシステムは、パスワードおよび社会保障番号を求めている間に患者が著しく悪化することを望まない。それで、このシステムは、ＭＤＡＴＡシステムにログオンする人は誰に対しても救急処置室（ＥＲ）サブシステムを最初に実行することが最も可能性がある。ＥＲサブシステムは、患者が即時の“応急措置”治療あるいは診断を必要とする何らかの生命を脅かす状態にあるかどうか判定する２、３ダースのスクリプトからなる。“これは救急状態であるか”、“患者はエアウエーを有しているか”、“患者は出血しているか”は、ＥＲサブシステムが行う質問のいくつかである。
システムが緊急ケースを取り除いた後、システムはスローダウンして、患者を識別し、主な病気を判定することができる。そのとき、システムは、ジョブが患者の一般的な問題領域を判定するスクリプトルーチングサブシステムを呼び出す。この情報に基づいて、スクリプトルーチングシステムは、次に患者の主な病気にふさわしいトップレベルのスクリプトのシーケンスを選択する。例えば、発熱に対して、虫垂炎、腸管流感、食中毒に対するより明確なスクリプトが“診断なし”と示した後、ルーチングスクリプトは、最後にマラリアを疑うように判定できる。次に、最後に、本明細書で開発されたサンプルマラリアスクリプトが行われる。
スクリプトは、それ自体を実行するプログラムではない。スクリプトは、患者のことを尋ねる次の質問に対するスクリプト作成者チし、（スクリーン、電話線、あるいはインターネットに）伝送するための質問をフォーマット化する“スクリプトエンジン”によって実行されるデータストリームである。患者の返答は、スクリプトエンジンによっても獲得され、スクリプトに対してフォーマット化され、次の質問をスクリプトから選択するために使用される。スクリプトおよびそのスクリプトエンジンのこの相互関係は、患者の治療レコード、このセッション中これまで提供された情報、および次の質問を判定するいくつかのメタ機能とさえ考慮できる。スクリプトの終わりに、プロセスは、制御を熱帯病ルーチングスクリプトに戻し、実際には、“この患者の返答は１０００の中から１３５０の重みで熱帯性マラリアを示していること”あるいは“この患者の返答は１０００の中から４２０までにしかならないので、私はマラリアを除外する”と示している。まず第一にマラリアスクリプトと呼ばれるルーチングスクリプトは、次に他の診断スクリプトをアクセスできることを判定できるか、あるいは“患者の返答は任意の熱帯病である可能性が２７５／１０００だけを示している”ような何らかの返答を呼び出し者に戻すことを判定できる。
スクリプト機能
タイムベース診断スクリプト
タイムベース診断スクリプト概念は、ＤＳＱ診断スクリプトを時間次元に拡張する。丁度一つの診断スクリプトの代わりに、スクリプト作成者は、次にいくつかのスクリプト、例えば時間毎に１つのスクリプトを病気プロセスに提出する。作成者の最適判定によれば、スクリプトは、症状の始めから経過した時間に生成される。例えば、心筋梗塞症スクリプトは、間隔として１時間以下を使用するが、マラリアが使用していない。実行時間に、診断システムは、患者の病状に最も近い診断スクリプトを使用する。このスクリプトは、予測パターンに一致する病気に余分の重みを追加する症状を示唆していた。
システムは、患者に何時症状が始まったかを質問し、部分的にこの情報に基づいて、タイムベーススクリプトセットから適切なスクリプトを選択する。一旦正しいスクリプトが選択されると、スクリプトが実行される。すなわち、一組のタイムベーススクリプトの各スクリプトは幾分異なる症状および重みを有してもよいので、作成者は、その時間パターンが患者のパターンと一致するこれらの病気に対して余分の重みでタイムベース症状を設定する。これらの重みは、実行するときにスクリプトエンジンによって自動的に追加される。これらのタイムベース症状は後述される暗黙の症状であることに注目されたい。
各アルゴリズム作成者は、病気が進む時（例えば）毎時間に質問および適切な値を構成し、割り当てるかあるいは計算しなければならない。次に、患者がこのシステムに相談する場合、質問する最初の質問の中の１つは、何時（あるいはどのくらい前）あなたの症状は始まったのか”である。そのとき、患者は、症状が始まってからの経過時間に最も近いスクリプトと対話する。
暗黙症状
“症状”は、名前、年齢、性別等を含む直接あるいは間接に患者について知られている任意のデータ項目として規定されることに注目されたい。暗黙症状は、１つ以上の他の症状の有無に基づいて確定される症状である。暗黙症状の概念によってスクリプト作成者は、任意の所与の症状（あるいは症状のセット）が１つ以上の他の症状を含むかあるいは否定することをスクリプトエンジンに知らせることができる。これは、リストベーススクリプトに現実の世界を組み立てて、ＬＢエンジンにリストから余分な質問を除去する論理的推論とさせ、スクリプトをより焦点のあったものとさせる。
明らかな例として、男性である患者には、女性の生殖システムに関連した質問を尋ねる必要がない。人間の医者はこの暗黙性を知るが、スクリプトエンジンには知らせる必要がある。スクリプト作成者は下記の形式で症状のリストを簡単に作成する。
症状Ａであるならば、症状Ｂである。
例えば、
“患者が男性である”ことは“患者は女性でない”ことを暗示し、“患者が虫垂切除した”ことは“患者は虫垂がない”ことを暗示する。
ＡＮＤ、ＯＲあるいはＮＯＴのような論理演算子を使用して、比較的少ない質問によって引き起こされるかなり複雑な症状関係を形成することができる。
暗示症状は、“ＡであるならばＢである”タイプの陳述のテーブルとしてソーススクリプト内に列挙される。このエンジンが患者から新しい症状を受け取るたびに、エンジンは、暗示症状テーブルもチェックし、任意の他の症状が暗示されるかどうかを調べる。
相乗症状
相乗症状とは、任意の所与の患者において、症状が同時に発生する場合、特別の診断の重要性を有する他の症状の所定のセットがあることを示す症状である。ＤＳＱリストベースソーススクリプトにおいて、各症状は、病気を診断する方へ特定の重みを有するが、所定のセットの存在は診断の方へ余分な重みを与えてもよい。例えば、まず（マラリアを引き起こす媒介物が血液中の再生サイクルを通るときに引き起こされる）寒気、発熱、および発汗があることからマラリアは規範どおり診断される。寒気、発熱、発汗の個々の存在は、患者を診断する際におそらく必ずしもマラリアを疑うことを示唆するものではないが、これらの症状の中の３つ全てがあることはマラリアについての質問を誘発することになる。相乗症状の概念は、“寒気がある”ＡＮＤ“熱がある”ＡＮＤ“汗がでる”は、“マラリアの可能性がある”ことを示唆しているような陳述によって、この内部誘発に確証を与える。相乗症状は、症候群、すなわち、頻繁に合併して発症し、一般大衆にとっては、エイズのような固有の名前を有する症状の特定の集合を規定する際に重要な役割も有している。スクリプト作成者は、作成者にとって重要である症候群を規定するために相乗症状を使用できる。
III．知識獲得の詳細
スクリプトにとっての知識獲得の初期のタスクは、スクリプトに含められる病気を識別し、各病気に優先順位を割り当て、医療専門家を割り当てて、その割り当てられた病気に対してスクリプトの一部を開発する。各医療専門家は次に、病気に必要とされる適切なリストを生成する。これは下記のように要約することができる。
・  カバーされる病気の範囲を規定する
・  病気およびその症状を列挙する
・  序列、優先順位、および重みを病気および症状に割り当てる
・  症状を聞き出す、適切な言葉を使い、重み付けられた質問を作成する
・  病気、症状、および質問のリストのフォーマットを作る
・  この目的のために特別に開発された試験ツールを使用してリストを予め試験する
・  任意のＡＳＣＩＩ能力があるワードプロセッサを使用してリストをテキストファイルとして記述する
リストベース処理方法は、特定の健康問題を診断する要素を獲得する統合されたリストのセットで始まる。この段階において、医療専門家は、いくつかのリストの形式でその診断スキルおよび診断技術を記録する。これを行うために、医療専門家は、ＡＳＣＩＩ出力ファイルを生成できる任意の市販のワードプロセッサソフトウェアを使用できるのが好ましい。
スクリプトのためのＡＳＣＩＩリストは、下記のようにネストされる３つのタイプのリストからなる。
・  スクリプトが考慮する全ての病気を識別し、病気を診断するに考慮するべき順序で病気をランク付けする、１つの病気リスト
・  症状を識別し、各症状に重みを割り当て、病気を診断するための貢献を規定する、各病気についての１つの症状リスト
・患者から症状を聞き出す１つ以上の重み付けされた質問を識別する、各症状についての１つの質問リスト
自動医療診断の目的のために、医療診断データは、病気には症状があるという一般的な概念に基づく階層的分類に編成され、症状は質問によって患者から聞き出される。
“病気”は、不健康、疾患、苦痛、健康状態、緊張状態、問題、閉塞、機能不全等のような治療あるいは配慮を必要とする健康状態である。所与の病気を持った患者を診断するために、ＭＤＡＴＡシステムは、患者の回答に基づいて、苦痛を示す可能性のある病気のリストで開始し、これを診断のリストにする。
“症状”は、ＭＤＡＴＡシステムが患者について有する任意の情報である。これは下記を含む。すなわち、
・  患者ＩＤ（例えば、名前、住所、ＨＭＯ、年齢、性別）
・  患者履歴（例えば、過去の病気、親の健康情報、外国への最近の旅行
・  ＭＤＡＴＡへの以前のアクセス（例えば、患者の病気および経過履歴）
・  身体的徴候（例えば生命に関する兆候）および自動または半自動健康診断の結果
・  研究室および試験の結果
・  徴候、顕示、表示、表情等
各病気に関して、症状のリストが作成される。各症状には、患者が病気にかかって症状を示した可能性を示す重みが割り当てらる。計算を簡単にするために、ＭＤＡＴＡシステムは、病気の診断を下すために、他の閾値が使用されてもよいが、包含された閾値１，０００を使用する。このシステムは、患者が病気にかかっていないことを正式に宣言するために、除外された閾値も用いる。包含された閾値および除外された閾値の両方は感度係数セットによって修正されてもよい。これは、例えば、個々の患者に対してカスタム化された閾値レベルを可能にする。感度係数セットについては以下に詳しく述べる。
実際には、重みは、症状が与えられたとすると、病気を診断内科医が含めようとする尺度である。この重みは、患者が与えられた症状に対して病気にかかっている条件付確率としても使用できる。これは、都合がよければ、ベイズ的な確率分析を症状に適用するために使用できる。
症状は、１つ以上の質問セットによって聞き出され、質問の答え方についての情報および指示としばしば組み合わされる。症状を聞き出すのに必要なノードのセットは“フロー”と呼ばれるが、これは、小さいフローチャート上にしばしば作成され、患者との対話の進行方法を記述する質問の分岐フローを通常含むからである。
医療専門家によって生成された診断データをＭＤＡＴＡシステムに入力するために、データは編成され、フォーマットを作らなければならない。この目的のために、テキストファイルが使用され、テキストファイルのフォーマットが作成される。ＡＳＣＩＩ文字コードが使用されるのが好ましいが、ＥＢＣＤＩＣのようななんらかの明確なテキスト文字コードが使用されてもよい。
スクリプトは、下記のようないくつかのセグメントまたはデータ群からなる。
Ａ．重み付けされた症状によって診断される病気
Ｂ．フローによって聞き出されるかあるいは他の症状によって示唆される症状
Ｃ．症状を論理的に連結する暗黙
Ｄ．ノードを通るパスからなるフロー
Ｅ．質問ノードを通るパス
Ｆ．患者に通知および／または患者を診察するテキスト
Ｇ．患者に尋ねる返答を求める質問
Ｈ．患者からの特定の返答を知らせるキー
これらのセグメントは、スクリプト“ソース”あるいはテキストファイルについての下記の節の一部である。
ヘッダ節
ヘッダ節は、スクリプトフォーマットのようなスクリプト全部に当てはまるデータおよび患者の主な病気を含む症状のセットを含んでいる。
病気節
病気節は、このスクリプトによって診断できる病気、その症状、および診断の方に症状の重みを列挙している。スクリプトがスクリプトの開発段階中実行される場合、スクリプト開発ツールは、次に考慮する病気のうちの１つを選択し、次に考慮されるこの病気の症状のうちの１つを選択する。どの病気および症状が次に選択されるかは、作成者によって選択される実行オプションによって決まる。デフォルトシーケンスは、病気およびその症状がこの節に列挙された順序である。ＤＩＳＥＡＳＥ ＮＡＭＥ
病名は、病気を識別するために使用される、病気に対して固有なラベルである。病名は、内部的だけに使用され、患者は決してわからない。
ＩＣＤ−９ ＣＯＤＥ
病気を識別するために医療専門家によって使用される特別なコード
ＦＯＲＭＡＬ ＴＩＴＬＥ
病気の正式の名称。病気に対する共通の名前、あるいは頭字語を将来のフォーマットに追加することができるので、“正式の”名称がここで使用される。
ＳＹＭＰＴＯＭ ＮＡＭＥ
病気の診断画像あるいは“顕著な特徴”の一部である症状の名前。この症状は、症状節に詳細に規定されている。ＤＳＱリスト文脈において、“症状”は、仮定され、主張され、聞き出され、あるいは推論された、患者についての特定の詳細な事実である。作成者は、任意のデータ項目を症状として自由に規定できる。作成者に役に立つならば、症状は、患者の名前、地位、連続番号のような非医学的事実を含んでもよい。ここで意図するのは、基本的な症状を規定し、それらを何らかの便宜的な方法で分類することによって作成者がその医療経験を自由に表現することにある。
症状を作成するために、作成者は、症状を一意に断言したりあるいは否定したりする重み付き質問のセットを考えてもよい。これが問題ない場合、作成者は、その質問および回答によって（症状節で）症状を規定する。症状があまりにも複雑であると分かれば、作成者は、症状を構成要素に分解し、各構成要素を症状とみなし、構成要素について質問できる。作成者は、患者に各構成要素を別々に確定させることができ、主症状を確定するために推論節の推論機構を使用する。
ＳＹＭＰＴＯＭ ＷＥＩＧＨＴ
この症状が病気の全スコアに付加する量。技術的には、この量は、−１０，０００〜＋１０，０００の任意の数である得る。すなわち、現実的にはこの量は小さい正の整数になる傾向がある。記載されているように、スクリプトエンジンは、重みを病気に“点数をつける”一つの方法として取り扱う。症状が患者にあるものとわかった場合、スクリプトエンジンは、症状の重みを病気の全スコアに付加する。病気スコアが好ましくは１０００に達すると、スクリプトエンジンは、この病気を“中”に含める。
重みの簡単な算術加算は、症状が病気の存在について貢献しているか、あるいは病気の存在を“示す”特定の方法を示していないかもしれない。作成者のための１つの解決策は、重みについて最初の推測を行い、スクリプトを実行し、いかに病気スコアが各質問および回答で変化するかを調べ、それから症状を“再比較検討する”ことに戻ることにある。
“相乗症状”技術は、重みのための方法を開発する際に作成者に役立つ。２つの症状ＡおよびＢがあって、この両方がある患者にある場合、別々にある場合よりも重みを多く有しているならば、ＡおよびＢの両方によって示唆され、病気に余分の重みを追加する人工の第３の症状Ｃが規定できる。症状Ｃは関連質問を全然有しない。それは、他の症状の有無に基づいて重みを加算したりあるいは減算したりするためにだけ使用できる内部“ゴースト”症状である。
症状節
症状節は、スクリプトの他の部分で述べた症状の全てを列挙し、説明している。各症状に関して、この節は、症状を聞き出すために使用される質問のフローを識別する。
ＳＹＭＰＴＯＭ ＮＡＭＥ
症状名は症状のための一意のラベルであり、スクリプトの他の部分で症状を識別するために使用される。この名前は内部的にだけ使用され、患者は決してわからない。
ＦＬＯＷ ＮＡＭＥ
単語“フロー”は、フローチャートとして作成できる特定のシーケンスで質問された、重み付けられた特定の質問セットを記述するために使用される。したがって、フローは単一の質問群を示している。１つのフローはいくつかの症状の内の１つを引き出すことができるので、いくつかの症状は通常同じ質問フローを指定して使用される。いくつかの症状（例えば、主な病状）は関連する質問フローを全然有しない。
暗黙節
暗黙節は症状の中の論理的推論を列挙しており、したがってスクリプトエンジンは、どの症状が他の症状を示唆しているかを知っている。この節の各行は、共に他の症状を示唆する１つ以上の症状を指定する。すなわち、各行は、形式の論理式、すなわち症状Ａおよび症状Ｂおよび症状Ｃであるならば、症状Ｄであることに対するパラメータを示している。
症状暗黙は連鎖することができ、したっがって１つの暗示症状は、単独であるいは他のものと共に他の症状を示唆できる。
この節の１つの使用法は、“症候群”症状を確定することに有り、したがって患者の特定の症状のセットは単一の集合的症状を自動的に表わす。症状のこの組み合わせは、特定の症状セットがあるならば、余分の重みを加算（あるいは減算）する、すなわちいくつかの症状の“相乗”が同時に患者にあるようにできるようにするためにも用いることができる。
フロー節
フロー節は、スクリプトにおける全てのフローを列挙し、フローで引き出すことができる質問および症状のシーケンスを規定する。“フロー”は“質問フローチャート”の省略形である。フローは、いくつかの症状の中の１つを確定する複雑な質問とみなすことができる。分岐方式スクリプトに精通している読者は、フローが、いくつかの返答コードの中の１つを戻す全分岐方式スクリプトを含むかあるいは呼び出すのに役立つことができることがわかるであろう。
患者から１つの特定の症状を聞き出すために患者にいくつかの質問をする必要があることは全く一般的である。例えば、いくつかの予備質問（“喫煙したことがありますか”）は、かなり特定の質問（あなたが喫煙した年数における全時間は何時間ですか”）が後に続く段階を設定し、患者の症状を正確に規定するのに必要とされることもある。１つの全フローは、喫煙に関する２０個の質問を含むことができ、いくつかの事例、例えば決して喫煙しなかった、たまに喫煙する、２０年間喫煙し、まだ喫煙している、１０年間喫煙し、それから１０年前に禁煙などから１つを聞き出すことができる。
フローチャートにおけるあらゆるノードは、とられたフローのノードの１つからのパスに従って符号化されて、このノードに達する。これらのパスは、どの動作が各ノードで行われるべきであるかを識別するために使用される。
質問節
質問節は、フロー節で名前で言及された質問の詳細を規定する。この詳細は、前置きと、実際の質問と、患者によって押すことができる（電話キーパッド上の）キーと、（グラフィックインタフェースに関して）各回答のために使用されるボタンレベルとを含んでいる。
ＰＲＥＡＭＢＬＥ ＴＥＸＴ
前置きは、質問自体が尋ねられる前に患者に話されるかあるいは表示されるテキストである。前置きは、前の質問に続き、新しい主題の前触れとなり、いくつかの用語を定義し、患者に何故質問が尋ねられようとしているか、いかにそれを回答するかを知らせることができる。テキストの名前だけがここで示されている。すなわち、実際のテキストはテキスト節に示されている。質問に対する前置きが全然ないならば、これは、プレースホルダーとして数字０で示される。
ＱＵＥＳＴＩＯＮ ＴＥＸＴ
質問テキストは実際の質問である。前置きは１０行あるいは１００行の長さであるのに対して、質問は、一般的には適当に短く、非常に特定の回答を呼び出すが、この回答はキーの中の１つを押すかあるいはクリックすることによって示すことができる。質問テキストの名前だけがここで示されている。すなわち、実際のテキストはテキスト節に示されている。
ＶＡＬＩＤＫＥＹＳ
有効キーのセットは、患者がどのキーを押すことができるかあるいはクリックできるかをスクリプトエンジンに知らせる。
ＫＥＹ１．．．ＫＥＹＮ
これらはスクリプトのグラフィックディスプレイバージョンにだけ使用されるキーラベレである。このキーラベルは、いかに各ボタン、例えば、ＹＥＳ、ＮＯ、およびＮＯＴ  ＳＵＲＥのラベルを付けるかをエンジンに知らせる。
テキスト節
テキスト節は、他の節における名前、例えば前置き、キーラベル、および質問テキストのようなによって言及される全てのテキスト項目の実際のテキストを列挙する。各テキストに固有の名前を与え、テキスト節におけるテキストを列挙することによって、作成者はいくつかの節に同じテキストを使用できる。
患者のためのテキストのすべてを１カ所に有することで、電話網で使用するためのテキストを記録するかあるいはスクリーン上に表示するためのテキストをフォーマット化するようなスクリプトの自動処理も簡単になる。スクリプトは、そのテキスト節のテキストを他の言語の同等なテキストで取り換えることによって外国語に翻訳できる。
情報獲得図面の説明
図３ａを参照して、ＤＳＱスクリプトを生成するオフラインプロセス２８０を次に説明する。プロセス２８４で開始され、医療知識が収集され、リストファイルに編成される。リストファイルのためのデータは、一人以上の作成者２８２のために収集される。プロセス２８４は２つの部分を有する。第１の部分は、通常、病気を割り当てるスクリプトコーディネータあるいは監督作成者によって実行され、第２の部分は、スクリプトにおける各病気に対する病気情報を獲得するスクリプトコーディネータあるいは監督作成者によって実行される。病気知識を獲得する部分は通常、そのそれぞれの分野における複数の医療専門家によって実行される。プロセス２８４の割り当てられた病気部分については、図４ａに関連して詳しく説明し、プロセス２８４の獲得された病気情報部分については、図４ｂに関連して詳しく説明する。プロセス２８４の出力はＡＳＣＩＩファイルのような電子テキストである。この電子テキストは、病気、症状、質問のリスト２８６のようなＤＳＱリストの形式としている。付録は、マラリアのための典型的なスクリプトを含んでいる。このスクリプトはＤＳＱリストの１つの表現である。
スクリプトのためのタイムベースのＤＳＱリストの図示例が図３ｂに示されている。時間Ｔ1に対する典型的なスクリプト３２０および時間Ｔ2に対するスクリプト３２２が示されている。これらの２つのスクリプトの各々は、病気のリスト３２４と、症状のリスト３２６と、質問のリスト３２８とを含んでいる。この図は、病気、症状、および質問のリストの階層を示すことを目的としていて、単なる例示である。ある病気は、他の病気で規定された症状を指してもよいし、ある症状は他の症状で規定される質問を指してもよいことに注目されたい。したがって、症状およびそれと関連する質問は様々な医療の作成者によって再使用できる。
次に、図３ａに戻ると、プロセス２８０は、電子テキストフォーマットのＤＳＱリストを取り出し、ＤＳＱリストをスクリプトデータ生成ツールを使用することによって処理する状態２９０に移動する。スクリプトコンパイラ２９２が、スクリプトデータ生成ツールと緊密に結びついて作動し、ＭＤＳファイルを生成する。プロセス２８０は、最終ＭＤＳファイルを生成するために、反復方法でスクリプトデータ生成ツールおよびスクリプトコンパイラを利用できる。状態２９４で、ＭＤＳファイルは、ＭＤＳデータベースマネージャユーティリティ２９８によってＭＤＳデータベース３００に書き込まれる。ＭＤＳファイル２９６は２進フォーマットであることが好ましい。図３ａに２９６′と示されたＭＤＳファイルの典型的な表示において、ＭＤＳは、ヘッダデータ部と、マスタ病気リスト部と、マスタシステムリスト部と、マスタフロー部と、マスタ質問リスト部と、マスタテキストリスト部とを含んでいるのが好ましい。他の実施例においては、医療の作成者は、状態３０２に示されるように、スクリプトを医療作成者リング言語であるいはノードおよび分岐として記述できる。コンパイラを含んでもよい他のスクリプトツールは、ＭＤＳ２９６を生成する状態３０４に示されている。
次に、図４ａを参照し、医療知識収集・編成プロセス２８４の病気割り当てプロセス３５０を次に説明する。ＭＤＡＴＡシステムによって利用される他の医療専門家はこれらのタスクを実行できるけれども、プロセス３５０は、通常スクリプトコーディネータによって実行される。プロセス３５０は、コンピュータによって実行されないで、次のステップの完了を助けるためにコンピュータを利用することのできるスクリプトコーディネータによって実行されるのが好ましい。開始状態３５２で開始し、プロセス３５０は、現スクリプトに関連する主な病気が規定される状態３５４に移動する。主な病気には、相談している主問題を記述する場合に患者がシステムに最初に与えるかもしれない症状が含まれている。状態３５６に進むと、スクリプトコーディネータは、現スクリプトによって診断される病気のリストを判定する。これらの病気は、主な病気に診断を与えるものである。リストに含まれるのは、病名、記述子、病気に対する国際病気分類コード（ＣＤ−９）である。状態３５８に進むと、次に、病気は、患者が例えば、生国あるいはある生国の地方の総母集団における発生の確率によってランク付けされる。状態３６０に移動すると、スクリプトコーディネータは、病気の緊急および／または重大さに基づいて病気に優先順位を割り当てる。割り当てられた優先順位に基づいて、スクリプトエンジンを割り当てられた緊急指標あるいは重大指示を有する病気を最初にチェックするように向けることができる。状態３６２に続き、スクリプトコーディネータは、次に現スクリプトに対する病気をさらに調べるために一人以上の専門家に分割あるいは割り当てる。インターネットのようなコンピュータネットワークおよびＤＳＱリストデータベースを使用して、複数のスクリプトを並行し開発することができる。病気作成者達は、データベースおよびネットワークを介して、他の全ての作成者にも利用可能な質問および命令を作成することによって並列に作業することができる。この可能性はスクリプトの迅速な開発を可能にする。プロセス３５０は終了状態３６４で終了する。
次に、図４ｂを参照して、医療知識収集・編成プロセス２８４の病気知識獲得部３８０を次に説明する。プロセス３８０もまた、通常はコンピュータによって実行されず、特定の病気に対する病気知識を実際に獲得するためにコンピュータを使用できる医療スペシャリスト、すなわち専門家によって実行される。下記のステップは、図４ａの状態３６２でスクリプトコーディネータによって割り当てられるように、病気専門家によって実行される。
開始状態３８２で開始すると、プロセス３８０は、医療専門家がスクリプトがタイムベーススクリプトとして獲得されるのが最もよいかどうかを判定する判定状態３８４に移動する。すなわち、スクリプトファミリを形成する、逐次時間間隔の複数のスクリプトは、時間をかけて病気を追跡するように生成されるべきである。もしスクリプトがタイムベーススクリプトであると判定されたならば、プロセス３８０は、スクリプトファミリにおけるスクリプト間の時間間隔が判定される状態３８６に移動する。例えば、スクリプト作成者は、４８時間の間、２時間毎にスクリプトを生成するように判定することができる。スクリプトファミリに対する時間間隔の判定が完了するか、あるいはスクリプトが単一スクリプトとして最もよく示された場合、プロセス３８０は、医療専門家は、この専門家に割り当てられた各病気に対する包含閾値スコアおよび除外閾値スコアを識別するステップ３８８になる。状態３９０に移動すると、医療専門家は、症状に割り当てられた各病気に対する関連する症状のセットを識別する。症状リストは、症状名、識別子、および後述する少なくとも１つの重みを含んでいる。状態３９２で、医療専門家は、当該の応答後の関係およびこれらの関係によって識別される症状を識別する。応答後の関係は、病気診断に際して、一緒に生じる２つ以上の症状が別々に生じる症状に対する重みの和よりも多くの重みを有する同時に存在する関係あるいは相乗関係を含むことができる。逐次関係とは、症状が順次起こる場合であり、別々に生じる個別の症状の和よりも多くの重みを病気診断に生じる。症状の開始あるいは終了のシーケンスが症状が単独で生じる場合とは異なる重みを生じるケースも逐次関係の変形である。暗黙関係とは、一つの症状の存在が他の症状の存在を示唆する場合である。医療作成者は、表わされた症状、および応答後に処理された症状に対する経時的な関係も規定することができる。応答後の関係は、症状解明処理、ＰＯＲＳＴアレイ分析、あるいは症状の深刻さの解明も含んでもよい。ＰＯＲＳＴアレイは、１つの寸法に割り当てられた苦痛の症状の異なる属性あるいは特徴を有するＮ次元アレイである。例えば、ＰＯＲＳＴアレイは２２の次元を有することができる。
状態３９４に進むと、医療専門家は、各病気の症状に重みを割り当てる。苦痛の深刻さあるいは他の種類の症状の深刻さのような関連する範囲を有する症状に関して、医療専門家は、症状の深刻さに関連する重みの範囲を割り当てることができる。症状の重みは、その症状を有する各病気に対するスコアに累算される。重みは正負のいずれかであってもよく、それによって正または負のスコアが作成される。状態３９６に移動すると、各症状に関して、医療専門家は、症状を聞き出すかあるいは判定するために質問ノードのフローを規定する。いくつかの症状は、単一の質問によって判定できるが、大部分の症状は、症状を聞き出すために多数の質問を必要とするかもしれない。複数の質問を必要とする症状については、状態３９７で、質問の可能な返答に重みが割り当てられる。したがって、この種の症状は関連する一般範囲の重みを有する。状態３９８に進むと、質問フローの各質問ノードに関して、医療専門家は、患者に紹介（導入）あるいは説明、指示、注意および実際の質問を提供するように質問ノードに対するテキストオブジェクトを記述する。この提示は、要求される値の範囲（応答セット）あるいは予想された応答をフォーマット化する他の方法を規定できる。この指示および説明は、何についての質問であるか、なぜその質問がなされているのかを患者に理解させ、可能な回答を引き出すためのお膳立てをするためのものである。
各症状に関して、作成者は、症状を聞き出すために使用する質問フローを組み立てる。作成者が使用する質問フローは他の内科医の質問フローであってもよい。例えば、症状が鬱だとする。鬱の症状を確定するために、ある医者は、“あなたは鬱状態ですか”と尋ねることができる。これは、depression question 1と呼ぶことができる。作成者はそれを好まないものとする。それはあまりにも簡潔であり、得たいと思うことが、実際に何も得られない。そこで作成者は質問データベース作成者らに調べ、depression question flow 2を見つけるかもしれない。この質問フローの方がはるかにきめ細かい。このフローでは“あなたは鬱状態ですか”という質問に答えるために、この医者は１０ポイントの質問のリストを案出している。サブ質問はデータベースの他の質問であってもよい。この質問フローにおいて、患者は１０個の質問を尋ねられる。各質問は異なった重みづけがなされ、質問の全てに答えた後、スコアが合計され、スコアが質問の作成者によって規定された閾値に達する場合、この内科医は、その患者は鬱の症状を有していると断言する。
他の例において、作成者は偏頭痛に対する吐き気について尋ねたいものとする。作成者は質問バンクを調べる。作成者は、吐き気に関する５０個の異なる質問を見つけることができる。１つの質問は、“あなたは吐き気を催していますか”ということである。この質問は偏頭痛の作成者にとって受け入れられない。他の作成者は、重み付けされた１０個のサブ質問を含む質問フローを有する。そのスコアがこの作成者の予め規定した閾値に達するならば、この医者は、患者が吐き気を催していると断定する。偏頭痛の作成者は、現状の質問フローも好ましいと思うが、重み付けされたサブ質問のうちの１つの重みを変えたいと考える。この状況において、偏頭痛の作成者は、nausea question n+1のような改訂された重み付きの新しい質問をセーブする。次に、偏頭痛の作成者は、吐き気の新しいバージョンあるいは他のバージョンを使用する場合、それは、もちろん様々な病気を規定する際に異なって重み付けされる。
異なる重みの質問が質問フローの中で許されない場合、定義によって、全ての質問は同一に重み付けされる。しかし、病気作成者が、例えば腹痛があるかどうかを調べようとして、“咳をして下さい。咳をするとお腹が痛いのですか”というような一連の動作をするように要求する。患者が“はい”という場合、病気作成者は、患者におなかを押すように言い、痛むかどうかを尋ねることができる。病気の作成者は、通常、患者にこのような動作を要求して、腹痛の“症状”を確定する。しかしながら、これらの質問は腹痛を規定する上で全て等しい重みである訳ではない。おなかを押したときに患者が腹痛を感じると、それは咳をする動作よりもはるかに重要である。
質問ノードが状態３９８で完了した後、医療専門家は、判定状態４００で、タイムベーススクリプトに対する他の時間間隔が必要であるかどうかを判定する。他の間隔が必要とされないか、本スクリプトがタイムベーススクリプトでない場合、プロセス３８０は、戻り状態４０２で終了する。しかしながら、タイムベーススクリプトで他の間隔が必要とされる場合、プロセス３８０は、３８８に戻り、スクリプトファミリにおいて他の時間間隔の間ステップ３８８〜４００のセットを再実行する。
IV．スクリプト生成の詳細
ＭＤＡＴＡシステムの内部に、リストベース医療診断データがスクリプトとして記憶されている。これらのファイルは、人間の医者と面接されている患者との間の診断インタフェースである。実行時、ＭＤＳファイルは、ＭＤＳファイルをロードし、ファイル中の符号化されているデータおよび命令に基づいてスクリプトを実行する一般的なプログラムであるスクリプトエンジンを駆動することによって“走行する”。診断データは、病状、質問、およびテキストノードのリストの形で記憶されている。
リスト指向ＭＤＳファイルの内容は、ＡＳＣＩＩリストファイルの内容を反映している。両者の違いは、テキストデータが、文字列のテキストラインのセグメントとして記憶されているのに対し、ＭＤＳファイルが２進整数のリストにパックされている点である。ＭＤＳファイルデータがデータのオンラインアクセスを支援するように構成され、相互参照されることがもう１つの相違点である。
ＭＤＳファイルは、３２ビットの２進整数の非常に大きい１つのアレイとしてフォーマットが作られるのが好ましい。この大きいアレイは、データを含む長さが変わるブロックに割り当てられる。ファイルのブロックの割り当てはそれ自体ある数字であるので、それは、一方のブロックを他方のブロックに結合するデータ項目として使用できる。物理的には、これらのブロックは、いかなるプログラミング言語あるいはオペレーティングシステムとは無関係であり、３２ビット数のファイルを記憶できる任意のコンピュータハードウェアに転送できる。論理的には、これらのブロックは、リンクリスト、スタック、キュー、ツリー、およびネットワークのようなデータ構造を形成するように任意の方法でネストおよび結合できる。ＭＤＳファイルは、下記のように“マスタリスト”と呼ばれるいくつかのセグメントブロックとしてフォーマットが作られる。
・  ヘッダデータ
・  マスタ病気リスト
・  マスタフローリスト
・  マスタ質問リスト
・  マスタ症状リスト
・  マスタテキストリスト
ＭＤＳファイルを作成するためには、ＡＳＣＩＩリストファイルが読み出され、スクリプトコンパイラによってＭＤＳファイルに変換される。このプロセスは、ＡＳＣＩＩテキストファイルをライン毎に読み出し、対応するＭＤＳ出力ファイルの適宜なセグメントを編集し、サーチの速度を増すように相互参照リストを生成することからなる。いくつかのシンボルは、規定される前に使用できるので、変換プログラムはファイル中に２つのパスを形成しなければならない。第１のパス中、全てのラインが読み取られ、ＭＤＳファイルブロックに変換され、そのシンボルがテーブルに保存される。第２のパス中、シンボルはその実際のブロックアドレスと取り換えられる。もちろん、他の編集方法が使用されてもよい。
変換プログラムは、もちろん、無効フォーマット、不明セグメント、一対のシンボル、未使用のシンボル、誤植等の検出のような任意の数の品質および整合性のチェックを実行できる。簡単なテキストエディタと結合されると、変換プログラムは、スクリプト作成者にＡＳＣＩＩリストファイルにおける訂正を行なわさせ、ファイルを受け取るまで変換プログラムを再び走らせる。この編集サイクルは基本的なソースエラーおよび誤植を初期に見つけるのに役立つ。
スクリプトが編集された後、スクリプト作成者は、スクリプトが意図どおりに機能するかどうかを判定するためにスクリプトを試験する。機能していない場合、スクリプト作成者は、例えば、症状／質問の重みを調整し、質問ノードに対する語句を手直し、論理的エラーおよび医療エラーを直すことができる。次にスクリプト作成者は、スクリプトを再編集し、スクリプトが意図どおりに走行するまでスクリプトを再走行させる。
次に、図５を参照して、次にスクリプトコンパイラ２９２について説明する。ＡＳＣＩＩのような電子テキストフォーマットであるＤＳＱリストは、スクリプトデータ生成ツールの使用によって収集された後、スクリプトコンパイラ２９２によって処理される。開始状態４２０で開始し、スクリプトコンパイラは、完全さ、整合性および均一性を得るためにソーススクリプトを処理する。シンタックスエラーはこの状態で見つけられる。すべての問題領域が訂正された後、コンパイラは、状態４２４に進み、スクリプトをソースフォーマットから２進フォーマットである記憶ファイルフォーマットに変換する。状態４２６では、スクリプトコンパイラ２９２は、図２に示されるいろいろなＭＤＡＴＡデータベースへのアクセスのためのスクリプト、およびＭＤＡＴＡインフラストラクチャあるいはサポートシステムを増加させる。スクリプトコンパイラは、戻り状態４２８で終了する。
V.スクリプト実行の詳細
概要
患者が診断のためのＭＤＡＴＡシステム１００をアクセスすると、システムは、患者との最初の接触を管理し、患者を識別し、どのサービスを患者が必要としているかを判定し、正しいＭＤＳファイルを選択し、スクリプトエンジンを起動する。スクリプトエンジンは、ＭＤＳファイルをロードし、その符号化された命令に１つずつ従うことを開始する。符号化された命令に従うこの結果は患者との面接である。面接の終了で、スクリプトは、適切な端末動作（データベースの更新、ファイルのクローズ、セッションのロギング）を実行するようにエンジンに指令し、最終的にコンピュータ制御をＭＤＡＴＡシステム１００に戻す。
スクリプトエンジンを駆動し、オンライン面接を行うためにＭＤＳファイルを使用することを以下に説明する。データベースファイルにアクセスし、情報を患者に出力し、患者の応答を入力し、リポートを印刷するために必要なサポート動作は、スクリプトエンジンが走行している基本的なオペレーティングシステムによって実行される。
リストベース処理方法の実行時間モードはリスト指向であるＭＤＳファイルを生成する。これは、各ステップで、病気、症状、および質問のリストがスクリプトの次の質問あるいは動作を判定するために検索されねばならないことを意味する。スクリプトエンジンは、分岐ベースの方法よりも多くの作業をリストベースの方法を使用して行わなければならない。
ＭＤＳファイルは、本質的に、病気のハイレベルリストから、１つの病気の症状の症状を聞き出す単一の質問までトップダウンの順序で記憶されている人間の病気の医学百科事典である。スクリプトとしてこのようなデータ構造を実行することは、この構造が“反転される”、すなわち患者に逐次の質問ストリームとして与えられることを必要とする。これを実行時間モードで行うために、スクリプトエンジンは、最初にＭＤＳファイルのマスタ病気リストを検索し、考慮すべき次の病気を選択する。それからこのエンジンは、選択された病気の症状のリストを検索し、尋ねる次の症状を選択する。次に、エンジンは、選択された症状の質問セットを検索し、尋ねる次の質問を選択する。エンジンは、質問を患者に提示し、回答を得て、いろいろな重み付けされたリストを更新し、診断に達するかあるいは病気がなくなるまでこのプロセスを繰り返す。全体の目的は、スクリプトと診断で終了した患者との間の診断的対話を生成することにある。
スクリプトは実行されると、患者の症状を“一時”リストと呼ばれる一時的なダイナミックリストとして保持する。あらゆる新しい症状は、この集合に記録され、考慮中の病気のリストを更新するために使用される。患者の応答はこのようにして、次の病気および症状および質問を選択するために使用される健康プロファイルを形成する。プロファイルは下記のような多数の用途がある。
・  考慮中の全ての病気を更新し、次の病気を選択することを助けるために使用される
・  病状の統計的な比較を行うために使用できる
・  ＭＤＡＴＡシステムが、特定の患者の健康状態に基づいて質問ストリームを動的に変更することを可能にする
・  プロファイルを記憶し、後で再ロードして、スクリプトを続けることによって、ＭＤＡＴＡシステムがスクリプトを中断し、後で続けることが可能にする。
スクリプトエンジンが開始すると、スクリプトエンジンは、オンライン患者およびスクリプト（すなわちＭＤＳファイル）が与えられる。このエンジンは、病気、症状、および質問の符号化リストへのアクセスをするために、ＭＤＳファイルを開く。エンジンは、患者の医療履歴、およびもしあれば患者との過去のセッションの結果を得るために。患者レコードも開く。前述からＭＤＳファイルは、エンジンに次の面接ステップを指令することによって面接を行う。面接の終わりに、スクリプトは、適切な端末動作（データベースの更新、ファイルのクローズ、セッションのロギング）を実行するようにエンジンに指令し、最終的にコンピュータ制御をＭＤＡＴＡシステムに戻す。
リストベース処理のこの説明に対する関心は、患者に質問し、診断に向けて症状のセットを形成するために使用されるアルゴリズムである。このアルゴリズムは、ループを終了させる何らかの条件に達するまで、患者の症状のセットを分析し、更新する主ループからなる。主ループは、下記の一般的なステップを含んでいる。
・  患者の症状のセットを分析するステップ、
・  次に考慮される病気を選択するステップ、
・  次に考慮される症状を選択するステップ、
・  次に提示される質問を選択するステップ、
・  質問を患者に提示し、返答を処理するステップ、
・  返答に基づいて症状セットを更新するステップ、
・  症状セットの応答の後の処理を実行するステップ、
・  患者の症状のセットを分析するループ。
スクリプトが診断を形成し、治療診察を行い、あるいは患者を他のスクリプトに移すようなある出口動作で終了するまで、この主ループは続く。
スクリプト実行図面の説明
図６ａを参照し、診断スクリプトエンジン１９０を作動させるＭＤＡＴＡシステムの全体的な構成を次に説明する。診断スクリプトエンジン１９０は、ＭＤＡＴＡシステムの複数のデータベース４４２にアクセスし、医学界のいろいろなエンティティに対する出力能力を有するようにＭＤＡＴＡサポートシステム４４０とインタフェースする。ＭＤＡＴＡサポートシステム４４０は、図２に示された、ログインプロセス２１０と、登録プロセス２１２と、診断プロセス２２０とを含むプロセスを含んでいる。内科医４４４、患者１１４、および健康維持団体（ＨＭＯ）のような健康団体４４６への入出力を実行するプロセスも、ＭＤＡＴＡサポートシステム４４０に含まれている。ＭＤＡＴＡサポートシステム４４０は、図１ａおよび図１ｂに既に示されている通信ネットワーク１０２を利用する。図６ａに示されたデータベース４４２は、図２に既に示されたデータベースを含み、人間の病気、薬物および薬物相互作用、人間の解剖学、規制ラチェットテーブル（ratchet table）、および病気の発生頻度の地理的分布に対するような他のデータベースも含んでいる。規制ラチェットテーブルは、システムに患者にどれくらいの情報を知らせることができるかを知らせる、規制のある合法的な“ルール”のテーブルである。
図６ｂを参照し、診断スクリプトエンジンの動作中に使用される構造および入出力を次に説明する。ユーザ４６０からの入力、患者の医療履歴データベース２５４からのレコード、および中央ＭＤＡＴＡデータベース４４２から入手できる他の情報に基づいて、ＭＤＳ２９６はＭＤＳデータベース３００から選択される。あるいは、診断スクリプトエンジン１９０が患者のパーソナルコンピュータで実行されるならば、ローカルユーザデータ記憶装置１８４は、中央ロケーションに記憶されたＭＤＡＴＡデータベースの代わりにアクセスできる。しかしながら、いくつかの理由によりすなわちレコードの安全性の理由、患者がシステムによって迅速に知らされることができるように世界中のどこの医療提供者も分析のために必要なアクセスができ、診断を何らかの新しい治療に合わせ等の理由。中央データベースに患者の医療履歴を保持することはより実用的である。
ＭＤＳ２９６は、患者面接を実行する診断スクリプトエンジン１９０に利用できる。スクリプトエンジン１９０は、患者面接中に受信された情報を中央患者医療履歴データベース２５４あるいはローカルユーザデータ記憶装置１８４のいずれかに書き込むことができる。現スクリプトの完了時で、あるいは追加スクリプトが実行されると、医療診断あるいは診察４６２が生成される。この診断あるいは診察は、内科医４６２に報告され、ユーザ４６６へ出力され、中央ＭＤＡＴＡデータベースあるいはローカルユーザデータ記憶装置１８４に記憶されるのが好ましい。他のレポート４６８は必要に応じて生成することができる。後述すように、診断が直接ユーザに報告されない場合があるが、その代わりに後でユーザに詳しい報告をするために内科医に送られてもよい。
図７を参照すると、ＭＤＡＴＡシステム１００とのセッションにおけるユーザのための全体的なトップレベルプロセス４８０を次に説明する。プロセス４８０は、開始状態４８１で開始し、状態４８２に移動し、緊急状態を識別する。最初の“ハードコード化”スクリーニング質問のセットが緊急状態を識別するために利用される。緊急状態が識別されると、呼び出し９１１のような適当な診察がユーザに提供される。状態４８２および次の状態４８４、４８６および４８８は、本出願人の同時の出願係属中の「コンピュータ化医療診断・治療診察システム」の米国特許第08/176,041号に実質的に記載されている。プロセス４８０が、全然緊急状態でないと判定すると、プロセスは、状態４８４に続き、ユーザを確実に識別する。出願人の同時係属出願に記載されているように、ユーザは、患者であってもよいしあるいは患者のためのアシスタントであってもよい。パスワード、ＩＤ番号、声紋あるいは他の種類の識別方法が使用されてもよい。患者が適切にログインすると、プロセス４８０は、状態４８６に続き、任意の必要な管理タスクを実行する。状態４８８に進み、プロセス４８０は、ＭＤＡＴＡ医療データベース（図２）およびシステムファイルならびにソフトウェアにアクセスする。プロセス４９０に進むと、ユーザとのオンライン面接が行われる。オンライン面接は、診察スクリプトエンジンプロセス４９０によって実行されることが好ましい。しかしながら、プログラムを実行するかあるいはスクリプトを実行するかのような、オンライン面接を実行する他の方法を利用してもよい。ユーザプロセス４８０は終了状態４９２で完了する。
次に、図８ａを参照し、診断スクリプトエンジンプロセス４９０を説明する。開始状態４９２で開始すると、スクリプトエンジンプロセス４９０は、状態４９４に進み、スクリプトルータ機能を実行する。スクリプトルータは、患者の主な病状、症状が現れてからの時間、患者の過去の医療履歴、任意の他のスクリプトからの結果、あるいは以前からの現スクリプトファミリからの結果のような入力パラメータに基づいて適当なＤＳＱスクリプトを選択する。患者の主な病気の識別はアルゴリズムである。主な病気は、次の分類、すなわち、関わりのある人体システム、患者の問題、例えば外傷あるいは伝染病の原因、主な病気のアルファベット順のリスト、それらの病気に対するＩＣＤ−９番号、それらの主な病気のＭＤＡＴＡカタログ番号に分類することができる。適切なＤＳＱスクリプトが選択された後、プロセス４９０は状態４９６に続き、スクリプトデータベース３００（図６ｂ）から選択スクリプトを検索する。この時、診断スクリプトエンジンプロセス４９０は、患者との面接を実行する際にＤＳＱリストを利用するためにＤＳＱリストスクリプトエンジン５００を呼び出す。ＤＳＱリストスクリプトエンジン５００は、図９および図１１と共に詳しく説明する。
診断スクリプトエンジンプロセス４９０は、状態５０２でＤＳＱスクリプトエンジンの結果を後処理する。種々の種類の処理が、後述する状態５０６〜５２６によって例示されているように、状態５０２で実行される。状態５０２で実行できる１つの動作は、包含された病気リストおよび除外された病気リスト中の病気に対する確実度を判定することを含んでいる。包含されおよび除外される病気のリストにおけるあるあるいは全ての病気の確実度は、患者および／または内科医に報告することができる。包含され、および除外されている病気のリストならびに関連する確実度からの診断は特異的診断リストに編集される。診断に対する確実度を判定する種々の方法は、例えば、確実度ルックアップテーブルまたは感度係数セットを含んでいる。感度係数は、本出願人の発行された米国特許第5,594,638号「再入力機能および感度係数を含むコンピュータ化医療診断システム」に既に記載されている。プロセス４９０によって実行される次の動作は、判定状態５０４で判定されるような結果の種類によって決まる。種々の典型的な結果の種類を説する。状態５０６で、診断スクリプトエンジンプロセス４９０は、前述したように、患者を状態４９４で選択される他のスクリプトに属しているものとする。状態５０８で、プロセス４９０は適切な医療診断あるいは診察を生成する。機能５１０に移動すると、この診察が適切な当事者に配信される。機能５１０を図８ｂとともに詳しく説明する。診察が配信された後、プロセス４９０は終了状態５１２で終了する。
状態５１４で、プロセス４９０は特別のメタ分析を実行する。診断スクリプトエンジンは、いかに特定の症状が所与の病気で長い年月の間に変わるかあるいは進むかを細かく調べる。状態５１６で、プロセス４９０は、スクリプト中に累算された結果を患者のレコードに記憶する。状態５１８で、プロセス４９０は、患者がＭＤＡＴＡシステム１００の一部である医療情報ライブラリにアクセスするのを助ける。状態５２０で、プロセス４９０は、一時的に延期されたスクリプトの後の継続を予定する。通常、これは、患者がセッション中全スクリプトを完了することができない場合に生じる。病気が包含された閾値に全然達しなかった場合、診断スクリプトエンジンは、患者に対する確率のレベルを減少させる際に最大の重みを有する病気のリストを患者に提供することができる。そのような状況で、状態５２２では、プロセス４９０は一定の時間が経過し、後で診断ができるかどうかを調べることを可能にする再入力セッションを予定する。再入力機能は、本出願人の同時係属出願「コンピュータ化医療診断・治療診察システム」に記載されている。状態５２４で、プロセス４９０は、患者に試験を実行させ、システムに再び相談するように要求する。これらの試験は、自己検診、造形式試験（図２の２５８）あるいは研究室の試験（図２の２６０）を含むことができる。状態５２６で、プロセス４９０は、即時動作をするために緊急の結果を医療提供者に転送する。プロセス４９０は、終了状態５１２で終了する。
図８ｂを参照し、分配診断あるいは診察機能５１０を、次に説明する。機能５１０は、開始状態５１１で開始し、種々のリストの結果が１つ以上の病気あるいは閾値に達している診断により照合される状態１５２に進む。状態５１５に進むと、機能５１０は、システムによって行われた診断に対して適切で現在の治療のための治療テーブルをチェックする。状態５１７に進むと、機能５１０は、誰が診断、すなわち診察の受け手であるべきであるかを判定する。これは、調整ラチェットテーブル５１９を調べてみることによって部分的に行われる。調整ラチェットテーブルは、患者がどの国に住んでいるかのようないろいろな要因に応じて患者に知らせることができる情報の種類を判定する。調整ラチェットテーブル５１９に問い合わせた結果として、診察あるいは診断は、患者１１４、内科医４４４、管理看護団体あるいは合法的に医療情報へのアクセス権を有するかあるいは医療情報を知る必要がある他のエンティティ５２１に通信される。患者と共有でき、患者の内科医と共有されるべきである多くの情報がある。例えば、何が包含されるかおよび何が除外されるか並びに患者の他と異なる特定の診断は何か。すなわち、患者が質問の全てを答えた後、異なる病気の全てに対するスコアをランク付けすることができる。これは内科医に非常に役に立つ。調整ラチェットテーブル５１９は、患者の場所を識別するために患者の郵便番号あるいは電話領域コードのような患者のレコードで利用可能な情報を利用する。
図９を参照し、ＤＳＱスクリプトエンジンプロセス５００を説明する。プロセス５００は、開始状態５３０で開始し、状態５３２に進み、診断スクリプトエンジンによってプロセス５００に渡された、選択されたＤＳＱリストファイルにアクセスする。プロセス５００は状態５３４に進み、スクリプトエンジンによって利用された一時リストを初期化する。図１０を一時的に参照すると、プロセス５００は、クリアされる症状一時リスト５５２を初期化し、病気一時リスト５５０を、マスタ病気リスト３２４の全ての病気を有するように初期化する。この時点で、プロセス５００は、処理される病気の中の１つを選択し、次に病気の中で表明されるべき症状を選択する。患者の症状の有無を判定するために、プロセス５００は、状態５３６に続き、患者に尋ねられる症状について最初の質問を選択する。状態５３８で、プロセス５００は、患者に質問を求める。状態５４０に移動すると、プロセス５００は、患者の返答を受け取り、尋ねられた質問によりその返答の正確さをチェックする。次に、患者の返答は、状態５４２でＤＳＱ一時リストを更新するために使用される。
プロセス５００は、判定状態５４４に進むと、診断またはスクリプトの終わりに達したかどうかを判定する。達していなければ、プロセス５００は、状態５４６に進み、現在の症状において次の質問を選択するか、あるいは現在の症状に対する全ての質問を尋ね終っていると、現在の病気についての次の症状に進む。現在の病気における質問の全てが尋ねられ終ると、プロセス５００は、次の病気に移動し、この病気に必要な質問を尋ねる。プロセス５００はスクリプトの終わりに達するまで、状態５３８〜５４６でループし、診断が実行され、ユーザは、スクリプトが延期されるよう要求するか、あるいはスクリプトエンジンは、スクリプトが終了されるべきであると判定する。診断あるいは終わりに達すると、プロセス５００は、状態５４１で診断に戻し、状態５４３で患者を異なるスクリプトに属させ、状態５４５で現在のスクリプトを延期するか、あるいは状態５４７で現在のスクリプトを終了する。プロセス５００は戻り状態５４８で完了する。
次に、図１０を参照して、ＤＳＱリストスクリプトエンジン５００の実行時間動作中に用いられるリストの一部を説明する。ユーザ入力４６０および症状が始まってからの時間に基づいて、診断スクリプトエンジン４９０のスクリプトルータ４９４（図８ａ）は、ＤＳＱリストスクリプトエンジン５００に渡すべきスクリプトを識別する。患者の医療履歴２５４からの現在の患者のレコードは、スクリプトルータ４９４によっても使用される。スクリプトルータから受信された医療診断スクリプトを使用して、ＤＳＱリストスクリプトエンジン５００は、マスタ病気リスト３２４にアクセスする。マスタ病気リストの病気は病気一時リスト５５０にコピーされる。ＤＳＱリストスクリプトエンジン５００の動作中の適切な時間に、現在の病気についてマスタ症状リスト３２６の症状は、図１２とともに記載されているように、症状一時リスト５５２に選択的にコピーされる。症状は患者面接中に表明されるので、症状に対する症状の重みおよび／または質問の重みは、病気一時リスト５５０の現在の病気に対するスコアに加算される。特定の病気に対するスコアが包含された閾値に達すると、この病気は包含病気リスト５５４に移動される。あるいは、現在の病気に対するスコアが除外された病気の閾値に達すると、この病気は除外病気リスト５５６に移動される。表明された症状、包含された病気、除外された病気、および包含も除外もどちらもない病気は、全て患者医療履歴２５４に記憶される。スクリプトの終わりまたはスクリプト中の終わりもしくはチェックポイントで、病気一時リスト５５０に残された病気は患者医療履歴２５４にも書き込むことができる。あるいは、患者症状・病気情報は、中央の患者医療履歴２５４の代わりにローカルユーザデータ記憶装置１８４（図６ｂ）に書き込むことができる。
図１１を参照して、ＤＳＱリストスクリプトエンジン５００の動作を説明する。この説明は、図９とともに与えられたスクリプトエンジンプロセスの概要よりも詳細である。スクリプトエンジンプロセス５００は、開始状態５８０で開始すると、病気一時リスト５５０がスクリプトマスタ病気リスト３２４（図１０）から初期化される状態５８２に進む。状態５８４に移動すると、スクリプトエンジンプロセスは、現在の患者セッションおよび／または以前の患者セッションから患者データをアクセスする。スクリプトエンジンプロセス５００は、必要な患者データおよび任意の他のデータを得るために、ＭＤＡＴＡサポートシステム４４０（図６ａ）およびデータベース４４２を利用する。あるいは、患者データは、ローカルユーザデータ記憶装置１８４（図６ｂ）から検索できる。
状態５８６に進むと、スクリプトエンジンプロセス５００は、考慮されるべき病気を選択する。種々の方法は、考慮されるべき病気の順序を選択するのに用いられる。例えば、最も緊急の病気が最初に考慮され、続いて重大な病気、それから一般的な病気が考慮される。あるいは、緊急モデル／重大モデルとともに、考慮されるべき最初の病気は、患者がいる母集団で最も優勢である。スクリプトエンジンプロセスは、患者がいる母集団群あるいはロケーションを識別するために、電話番号、郵便番号、あるいは患者の履歴からの他のロケーション情報源を利用する。一旦プロセスが始まると病気の順序を選択する代りの方法は、症状の重みの合計が最高の病気、すなわち最も早く診断されるべき病気を使用することである。スクリプトコーディネータは、現在のスクリプトの病気を考慮されるべき順序でならべる。考察されるべき現在の病気が判定された後、スクリプトエンジンプロセス５５０は、“考慮されるべき選択症状”プロセス５８８に進む。プロセス５８８は、現在の病気に対して考慮されるべきで、図１２とともに詳しく説明する。
スクリプトエンジンプロセス５００は、プロセス５８８中にセットされて症状を判定する選択された症状ヌルフラグが判定状態５９０で表示されているかどうかをチェックする。もし選択された症状フラグが現在の病気に対してヌル（存在しない）ならば、プロセス５００は、判定状態６１６に進み、考慮されるより多くの病気があるどうか判定する。しかしながら、選択された症状フラグがヌルでないならば、スクリプトエンジンプロセス５００は、状態５９２に進み、患者に提示される質問のフローを選択する。各症状に関連しているのは症状を聞き出すことができる質問の論理フローである。論理フローは、“複合質問”、すなわちいくつかの質問からなり、いくつかの回答の中の１つを生成することができる質問と考えることができる。現在のところ考慮中の病気を包含する可能性が最も大きい症状を含む、すなわち返答として生成することができる質問フローが選択されるべきであることが望ましい。状態５９４に進み、次にスクリプトエンジンプロセス５００は現在のフローノードを実行する。状態５９６に進み、スクリプトエンジンプロセス５００は、フローノードの質問部分をユーザに提示する。あらゆる質問は、情報テキスト、命令テキスト、および質問のセットからなることが好ましい。質問を提示するために、スクリプトは、まずに情報テキストを患者に出力し、それから命令テキストを患者に出力し、最後に質問テキストを患者に出力する。質問テキストは、返答が現時点で期待されることを患者に指示する。
応答処理プロセス５９８に続き、スクリプトエンジンはユーザからの応答を処理する。プロセス５９８を、図１３とともに詳しく説明する。フローノードは、３つのタイプ、すなわち症状、質問、プログラムの中の１つであることが好ましい。スクリプトエンジンプロセス５００は、判定状態６００でフローノードタイプを判定する。ノードタイプが質問またはプログラムであるならば、スクリプトエンジンプロセス５００は、状態５９４（質問ループＱ）に移動し、次のフローノードを実行する。しかしながら、フローノードタイプが症状タイプのものであるならば、プロセス５００は、状態６０２に進み、患者から受信された応答に基づいて、症状一時リスト５５２（図１０）を更新する。応答に基づいて、重みは現在の症状に対して割り当てられる。あるいは、現在の症状が、そのいくつかが関連する重みを有する複数の質問を利用するならば、現在の質問に対する（あるならば）重みは現在の症状に対して累算される。
ＤＳＱスクリプトが症状を得ると、ＤＳＱスクリプトは、その症状を有する全ての病気を更新する。すなわち、患者からの単一の回答は、考慮されている全ての病気の症状の重み付けを変えることができる。これは、診断閾値により近い１つ以上の病気を“助長”する。
機能６０４に進むと、スクリプトエンジンプロセス５００は、症状一時リスト５５２をさらに更新するために応答後の処理を実行する。。応答後の処理の例は、if-then関係、同時関係、シーケンス関係、および他の同じタイプの関係を含んでいる。例えば、症状の重大さの値が９ならば、７５の重みが、胆石疝痛の診断に加算でき、５０の重みが虫垂炎の診断から減算できる。他の応答後の関係は、図４ｂとともに既に述べられている（獲得病気情報）。応答後の処理が完了した後、スクリプトエンジンプロセス５００は、病気リスト更新プロセス６０６に進む。プロセス６０６で、スクリプトエンジンは、更新された症状一時リスト５５２に基づいて病気一時リストのスコアを更新し、包含あるいは除外された病気を除去する。病気リスト更新プロセス６０６を、図１４とともにさらに説明する。
プロセス６０６の完了時、いくつかの病気は包含されてもよいしあるいは除外されてもよく、それによって病気一時リスト５５０の長さが減少する（図１０）。しかしながら、包含された閾値あるいは除外された閾値に達しない場合、病気は病気一時リストから除去されない。したがって、状態６０８で、更新された病気一時リストおよび更新された症状一時リストは、病気に対する症状をチェックする次の繰り返しのために残されている。判定状態６１０に移動して、スクリプトエンジンプロセス５００は、症状一時リスト５５２に現在の病気に対するより多くの症状があるかどうかを判定する。もしあるならば、スクリプトエンジンプロセス５００は、状態６１２で症状と関連した絶対値に基づいて、最大の重みを有する症状を選択し、次に状態５９２（症状ループＳ）に進み、この新しい症状に対する質問のフローを選択する。しかしながら、判定状態６１０で判定されるように、症状一時リスト５５２に追加の症状が全然ない場合、スクリプトエンジンプロセス５００は、状態６１４に進み、現在の病気を病気一時リスト５５０から削除する。
判定状態６１６に進むと、スクリプトエンジンプロセス５００は、現在のスクリプトに対する病気一時リスト５５０が空かどうかを判定する。空でないならば、スクリプトエンジンプロセス５００は、状態５８６（病気ループＤ）に移動し、スクリプトにおける次の病気を考慮する。現在のスクリプトに対する病気一時リスト５５０が空ならば、スクリプトエンジンプロセス５００は、判定状態６１８に進み、スクリプトの結果の種類を判定する。状態６２０で、考えられる結果の中の１つは、１つ以上の病気が包含あるいは除外されたということである。状態６２２で、他の種類の結果は、スクリプトエンジンが他のスクリプトあるいは他のサービスを属するように判定したということである。スクリプトエンジンプロセス５００は、戻り状態６２４で完了し、診断プロセス４９０（図８ａ）に戻る。
図１２を参照し、図１１で参照された症状選択プロセス５８８を次に説明する。選択症状プロセス５８８は、開始状態６４０で開始し、状態６４２に進み、症状一時リスト５５２（図１０）をクリアする。選択症状プロセス５８８は、状態６４４に進み、スクリプトマスタ病気リスト３２４（図１０）の現在の病気をアクセスする。プロセス５８８は、状態６４６に進むと、現在の病気の次の症状を識別する。プロセス５８８は、判定状態６４８に続き、症状の質問のフローがこの患者に対して既に実行されたかどうかを判定する。例えば、症状が、この患者に対する他の病気あるいは他のスクリプトに存在する判定されていたかも知れない。質問のフローが以前に実行されなかった場合、プロセス５８８は状態６５０に進み、症状を症状一時リストに付加する。症状を症状一時リストに付加した後、あるいは症状の質問のフローが既に実行された場合、プロセス５８８は判定状態６５２に移動する。判定状態６５２で、プロセス５８８は、現在の病気に対してより多くの症状があるかどうかを判定する。あるならば、プロセス５８８は状態６４６に戻り、現在の病気の次の症状を識別する。
状態６５２で判定されたように、現在の病気に対してそれ以上症状がない場合、プロセス５８８は、判定状態６５４に続き、症状一時リスト５５２が空であるかどうかを判定する。もし空ならば、症状選択プロセス５８８は、状態６５６に移動し、現在の病気をデータベース一時リスト５５０から削除する。これは、例えば、病気に対する全ての症状がこのスクリプトあるいは他のスクリプトにおいて初期の時点で以前に考慮されていたならば、生じるであろう。この場合、症状選択プロセス５８８は、以前ヌル症状フラグを有する状態６５８に戻る。判定状態６５４に戻り、選択症状プロセス５８８が症状一時リストが空でないと判定すると、実行は、症状一時リストが重みの絶対値によってソートされる状態６６０に続く。プロセス５８８は、状態６６２に進むと、重みの最大絶対値を有する症状を選択する。症状選択プロセス５８８は状態６６４で、選択された症状を有するプロセス５００（図１１）に戻る。
図１３を参照し、図１１で参照された応答処理プロセス５９８を次に説明する。プロセス５９８は、開始状態６９０で開始して、状態６９２に進み、ユーザ応答の妥当性をチェックする。プロセス５９８は、判定状態６９４に進むと、応答が妥当であるかどうかを判定する。応答が妥当でない場合、プロセス５９８は状態６９６に進み、ユーザへの質問テキストの出力を繰り返し、次に状態６９２に戻り、ユーザ応答の妥当性をチェックする。タイムアウト状態のチェックが応答処理プロセス５９８中で起こる。タイムアウトは、それが意識の喪失あるいは精神状態の変化の可能性を意味するかどうかを調べるために評価される。もしそうならば、精神状態サブルーチンを呼び出すことができるかあるいは例えば救急医療隊員に電話をかけることができる。
応答が判定状態６９４で妥当であると判定されると、プロセス５９８は、判定状態６９８に進み、ＤＳＱスクリプトエンジン５００によって現在処理中のノードタイプを判定する。ノードタイプが症状ノードであると、プロセス５９８は、状態７００に進み、現在のフローノードに関連する症状値を選択する。症状ノードは、複合質問に対する回答として症状を返す。症状値はそれから、状態７０２で症状スクリプトエンジンプロセス５００（図１１）に戻される。ノードタイプが質問ノードであると、プロセス５９８は、状態７０４に進み、応答をパスディジットに変換する。プロセス５９８は、状態７０６に進むと、パスディジットを現在のフローノードパス名に追加する。状態７０４および７０６は、実行される次の質問ノードを識別するために使用される。判定状態６９８に戻って、ノードタイプがプログラムノードであると判定されると、プロセス５９８は、状態７１０に進む。状態７１０で、プロセス５９８は、現在のノードによって示されたプログラムを実行し、戻りディジットを得る。プロセス５９８は、状態７１２で、戻りディジットを現在のフローノードパス名に追加する。状態７１０および７１２は、実行されるべき次の質問ノードを識別するために使用される。状態７１０で実行されたプログラムは、サブスクリプトあるいは他の機能もしくは患者から付加的医療情報を聞き出す必要があるサブルーチンであってもよい。状態７０６あるいは７１２のいずれかの完了で、プロセス５９８は、戻り状態７０８でＤＳＱスクリプトエンジンプロセス５００（図１１）に戻る。
図１４を参照して、図１１で言及した病気リスト更新プロセス６０６を次に説明する。プロセス６０６は、開始状態７３０で開始すると、状態７３２に進み、病気一時リスト５５０（図１０）にアクセスする。判定状態７３４に続き、プロセス６０６は、病気一時リスト５５０にもっと病気があるかどうかを判定する。ない場合、プロセス６０６は、戻り状態７３６で、ＤＳＱスクリプトエンジンプロセス５００に戻る（図１１）。しかしながら、一時リストにさらに病気があると、プロセス６０６は、状態７３８に進み、病気一時リスト５５０の次の病気をアクセスする。プロセス６０６は、判定状態７４０に進むと、現在の病気に、患者が回答したばかりの症状、あるいは機能６０４（図１１）で判定されたようなその応答後に処理された症状が含まれているかどうか判定する。含まれているならば、プロセス６０６は状態７４２に移動し、回答されたばかりの症状あるいは応答後のプロセスの症状の重みを現在の病気のスコアに加算する。プロセス６０６は、判定状態７４４に進むと、現在の病気スコアに加算される必要がある重みを有する付加的症状があるかどうかを判定する。これは通常、複数の応答後の処理の症状がある場合に生じる。もしそうならば、プロセス６０６は状態７４２に戻り、これらの付加的症状の重みを病気スコアに加算する。状態７４４で判定されるように、処理を必要とする症状がもはやない場合、プロセス６０６は判定状態７４６に進む。
判定状態７４６で、プロセス６０６は、病気スコアが包含された閾値に達したか、あるいは閾値を超えたかどうかを判定する。包含された閾値は１０００の値を有することが好ましいが、他の包含された閾値スコアも利用できる。閾値に達したか、あるいは閾値を越えていると、プロセス６０６は状態７４８に進み、現在の病気を包含された病気リスト５５４（図１０）に追加する。プロセス６０６は、状態７５０に移動すると、病気一時リスト５５０（図１０）から現在の病気を削除し、次に、判定状態７３４に戻り、一時リスト５５０にまだ病気があるかどうか判定する。
判定状態７４６に戻り、スコアが包含された閾値に達しないか、あるいは閾値を越えていないと判定されると、プロセス６０６は判定状態７５２に進む。判定状態７５２で、プロセス６０６は、病気スコアが除外された閾値を超えたかあるいは除外された閾値に達したかどうかを判定する。もしそうならば、プロセス６０６は状態７５４に移動し、現在の病気を除外された病気リスト５５６（図１０）に追加する。プロセス６０６は、状態７５０に進むと、この病気を病気一時リスト５５０から削除し、判定状態７３４に戻り、病気一時リスト５５０のその他の病気をチェックする。
判定状態７５２に戻り、病気スコアが除外された閾値以上か等しい場合、プロセス６０６は判定状態７３４に戻り、病気一時リスト５５０にその他の病気があるかをチェックする。判定状態７４０に戻り、現在の病気が回答されたばかりの症状、あるいはその応答後に処理された症状を含まない場合、プロセス６０６は判定状態７３４に戻り、病気一時リスト５５０にその他の病気があるかをチェックする。
包含された閾値および除外された閾値の使用は下記のような一定の含意を有している。
・  症状の重みは正または負の数として与えられる
・  ２つの実行スコアが各病気、すなわち１つが正で、１つが負に対して保持される
・  正の重みは正のスコアに加算され、負の重みは負のスコアに加算される
・  重みは減算されない
・  病気を包含するための正の閾値（例えば、１０００あるいは１００００）、病気を除外するための負の閾値（例えば、−１０００あるいは−１００００）の２つの閾値が使用される
・  正のスコアが正の閾値に達するかあるいは超えると、病気が包含される
・  負のスコアが負の閾値に達するかあるいは超えると、病気が除外される
・  病気がスクリプトの終わりまでにいずれの閾値にも達しないと、それは病気の“未決”リストに残され、患者の医療履歴に記録される。
図１５を参照して、分岐方式スクリプトを使用した医療診察、すなわち診断を生成する他の実施例について説明する。分岐方式スクリプトプロセス７８０は、開始状態７８２で開始すると、状態７８４に進み、分岐方式医療診断スクリプトファイルを開く。プロセス７８０は、状態７８６に進むと、患者に関する現在のセッションおよび／または以前のセッションのいずれかから患者データを設定する。スクリプトプロセス７８０は状態７８８に進み、スクリプトの最初の質問で開始する。スクリプトプロセス７８０は状態７９０に進むと、現在の質問をユーザに提示する。スクリプトプロセス７８０は、状態７９２で、妥当なユーザ応答を待つ。スクリプトプロセス７８０は、状態７９４に移動すると、ユーザ応答を記録する。スクリプトプロセス７８０は、状態７９６で、ユーザ応答に相応するノードに進む。スクリプトプロセス７８０は、判定状態７９８で、次のノードが出口ノードかどうか判定する。出口ノードでないならば、プロセス７８０は、状態７９０で、次の質問をユーザに提示する。スクリプトプロセス７８０は、出口ノードに達するまで、所定のスクリプトノードのシーケンスにしたがって状態７９０〜７９８でループする。出口ノードに達すると、スクリプトプロセス７８０は、判定状態８００に移動し、スクリプトの結果のタイプを判定する。分岐方式スクリプト７８０は、戻り状態８０２で診断を、戻り状態８０４で診察を、あるいは戻り状態８０６で他のスクリプトへの参照を返す。
VI．リストベース処理の利点
リストベース処理システムは、医療診断の他の方法に比べて速度、精度、および完全さという利点を有する。特に、リストベース処理方式は、
−  医療知識を他の人が処理できるリストに編成する；
−  精度および完全さをチェックできるような方法で診断を示す；
−  人間が分岐方式スクリプトを使用して記述できるよりもより良いスクリプトを生成する；
−  医療知識の変化に伴ってスクリプトの更新を簡単にする；
−  自動化手段による試験を可能にする；
−  分岐方式スクリプトから呼び出し可能な機能として使用できる；
−  コンピュータプラットホーム、媒体、言語に依存しない；
−  スクリプトを他の人間言語に容易に変換することができる；
−  医者が実際に診断する方法を反映している
付録
例示なＤＳＱリストベーススクリプト
このリスティングは、リストベース処理のための開始点として使用されるリストを含むＡＳＣＩＩファイルのより広範囲な例を示している。このリストは、フォーマットおよび関係を示すことだけを目的としている。このリストは、正しい医療情報あるいは完全な医療情報を伝えていないかもしれない。この例示的スクリプトの主たる病状は“倦怠感”である。
0004224136.tif 000002
0004224136.tif 000003
0004224136.tif 000004
0004224136.tif 000005
0004224136.tif 000006
0004224136.tif 000007
0004224136.tif 000008
0004224136.tif 000009
0004224136.tif 000010
0004224136.tif 000011
0004224136.tif 000012
【図１ａ】
0004224136.tif 000013
【図１ｂ】
0004224136.tif 000014
【図２】
0004224136.tif 000015
【図３ａ】
0004224136.tif 000016
【図３Ｂ】
0004224136.tif 000017
【図４ａ】
0004224136.tif 000018
【図４ｂ】
0004224136.tif 000019
【図５】
0004224136.tif 000020
【図６ａ】
0004224136.tif 000021
【図６ｂ】
0004224136.tif 000022
【図７】
0004224136.tif 000023
【図８ａ】
0004224136.tif 000024
【図８ｂ】
0004224136.tif 000025
【図９】
0004224136.tif 000026
【図１０】
0004224136.tif 000027
【図１１】
0004224136.tif 000028
【図１２】
0004224136.tif 000029
【図１３】
0004224136.tif 000030
【図１４】
0004224136.tif 000031
【図１５】
0004224136.tif 000032