ユースケース: コネクテッド ヘルス、モダナイゼーション、シングル ビュー
製品: MongoDB Atlas、MongoDB Atlas Charts、MongoDB 時系列、MongoDB Queryable Encryption
ソリューション概要
医療プロバイダーは厳格な品質要件の下で業務を行っています。CMS や主要な健康プランを含む連邦機関や保険会社は、プロバイダーに対し、患者に提供するケアの品質を測定、追跡、報告するよう求めています。これらの義務を**コンプライアンス**することにより、これらの標準を満たす組織には高額な償還が支払われ、満たさない組織には罰則が科されるなどの金銭的な影響があります。
HEDIS は品質要件を定義します。この測定セットは、プロバイダーが患者ごとに完了する必要がある臨床活動を指定します。例えば、糖尿病患者に対する HbA1c 検査、腎臓評価、糖尿病性網膜症検査などがあります。測定期間内に患者が必要な活動を受けない場合、ケアのギャップが発生します。
ケアのギャップはコンプライアンスの問題だけではありません。検出されないと、悪化した患者の転帰、再入院率の上昇、病状の進行、予防可能な合併症につながります。また、プロバイダーが提供されるサービスの量ではなく、患者の転帰に基づいて支払われる契約の場合、CMS スターレーティングの低下と補償の損失にもつながります。
ほとんどの組織は、ケアのギャップが存在することを認識しています。しかし、これらは運用上の課題に直面しています。FHIR データストアにより、医療ソフトウェアと EHR システムは安全に通信してデータを共有できますが、リアルタイムの運用上の臨床クエリには最適化されていません。ライブワークロードでは、高いクエリレイテンシ、ネストされたリソース集計の性能低下、ネイティブの時系列サポートの欠如、クエリボリュームの増加に伴うコストの増加など、予測可能なボトルネックに直面します。その結果、ケアコーディネーターはこれらのシステムからデータを取得するのに十分な速度が得られず、HEDIS コンプライアンスの追跡、患者のギャップの解消、タイム内の介入ができません。
これらのパフォーマンスのボトルネックを解決するため、このソリューションでは、FHIR データ基盤に構築され、オペレーション層として MongoDB Atlas を活用した CDS システムを提示します。このアーキテクチャでは、FHIR が相互運用性とデータ交換を取り扱い、MongoDB Atlas がリアルタイムのバイタルモニタリング、HEDIS ケアギャップの計算、および臨床ワークフローを実行します。このフレームワークにより、ケアコーディネーターは、ケアの点で低レイテンシのデータアクセスとリアルタイムの意思決定支援を受けられます。
図 1 。MongoDB によるリアルタイムの臨床意思決定支援の利点
参照アーキテクチャ
このソリューションは、ウェアラブル デバイスとヘルスケア システムからの臨床データを取り込み、データストアとオペレーション レイヤーを介してルーティングし、以下のアーキテクチャ ダイアグラムに示すように、ケア コーディネーターにリアルタイムの意思決定サポートを提供します。
図2。高レベルのアーキテクチャ
FHIR データストアレイヤーには、生の FHIR R4 リソースが保存されています。これらには、次のものが含まれます。
PatientConditionMedicationRequestObservationEncounterAllergyIntolerance
このレイヤーはコンプライアンス検証と R4 正規化を取り扱い、HIPAA および HITRUST コンプライアンス要件に基づく相互運用性の正規の情報源として機能します。
MongoDB Atlas はオペレーションレイヤーを提供します。クエリ、集計、クリニカルな意思決定支援に必要なリアルタイムワークフローに最適化された非正規化ドキュメントと時系列データを保存します。
この保存された臨床データをリアルタイムのアクションに変換するため、プラットフォームは次のコンポーネントをオーケストラします。
MongoDB Atlas は、すべての臨床データを柔軟なポリモルフィックスキーマに保存する操作基盤として機能します。
データ生成パイプラインは FHIR データストアから読み取り、患者レコード、バイタル、CDS ルールを MongoDB Atlas にプロパゲートします。
システムには、臨床的意思決定をサポートするために
AlertEngineおよびQualityEnginePython モジュールが組み込まれています。AlertEngineはリアルタイムのバイタルをモニターして直ちに臨床的リスクを検出し、QualityEngineは HEDIS コンプライアンスのギャップについて臨床歴史を評価します。両方のエンジンは、結果を MongoDB Atlas のpatient_360ドキュメントに書き込みます。最後に、ケアギャップワークフローはエンジンの結果をケアコーディネーターに直接配送します。例えば、
AlertEngineが重大なアラートを発生させると、ケアギャップワークフローは開いているギャップの優先順位を付けるため、コーディネーターは緊急のケースを最先に確認できます。
次のセクションでは、このフローの各部分について説明します。
MongoDB Atlas: 主な機能
複雑なヘルスケアのワークロード向けに設計された MongoDB Atlas は、レガシー システムを高度に最適化されたネイティブデータ エコシステムに置き換えます。以下に、プラットフォームがリアルタイムの意思決定サポートを提供できるようにする中核機能の概要を示します。
図 3 。Atlas の主な機能
柔軟な document model: patient_360 collection は、患者の完全なレコードを 1 つのドキュメントに保存します。これには、人口統計、病状、薬剤、検査、バイタルの概要、ケアの不足、アラート、パーソナライズされたスレッショルド、データの出処が含まれます。1 つのドキュメントで、FHIR ストアに対する複数のリソースの結合が必要な質問に答えることができます。
時系列コレクション: synthetic_vitals コレクションは、MongoDB のネイティブ時系列コレクションを使用してウェアラブル デバイバイス データを保存します。これらのコレクションは、自動データ バッケット化、効率的な範囲クエリ、および高頻度の時間順データの特定の目的のためにビルドされたストレージを提供します。
チェンジストリーム: プラットフォームはチェンジストリームを使用して、新しいバイタルにリアルタイムで反応します。読み取りが到着すると、システムは CDS ルールを評価し、ポーリングせずに臨床アラートを生成します。
Queryable Encryption: MongoDB Queryable Encryption は、保存されている機密性の高い患者フィールドを保護します。アプリケーションは、平文を露出せずに暗号化された PHI フィールドをクエリし、HIPAA 要件を満たし、別の暗号化レイヤーの必要性を排除します。
集計パイプライン: このフレームワークは、ダッシュボードの集計、ケアギャップの計算、バイタルの値の傾向分析、HEDISスコアリングを取り扱い、複雑な臨床クエリをミリ秒単位で解決します。
AI と分析の構造: patient_360 ドキュメントは、規格化された臨床データ、構造化された証拠、およびメタデータのプロバンスを、追加の変換なしでダウンストリームの AI および分析パイプラインに提供します。
データ生成パイプライン
初期化時、このソリューションは複数のステップからなるパイプラインを使用して CDS システムをシードして有効化します。詳細は以下に示します。
図 4 。データ生成パイプライン
データ生成パイプラインは、合成された実際の臨床データを作成し、個人化されたスレッショールドとケアのギャップを計算し、リアルタイム モニタリングを開始する初期化シーケンスを推進します。パイプラインは次のように機能します。
FHIR 患者バンドルを生成する: 状態、薬剤、検査所見、エンカウンター、アレルギーを含む FHIR R4 トランザクションバンドルを作成します。これらのバンドルは、相互運用層として機能する FHIR データストアに保存されます。
バイタル履歴を生成します。患者ごとに24時間のバイタルサインの時系列を生成し、正常、悪化、または急性の生理学的パターンを表します。データは
synthetic_vitals時系列コレクションに保存されます。patient_360 ドキュメントを実体化する: 各 FHIR バンドルを MongoDB Atlas の非正規化された
patient_360ドキュメントに変換します。変換には、ソース FHIR レコードにリンクするdata_provenanceブロックが含まれます。シード CDS ルール: 臨床意思決定支援ルール定義を
cds_rulesコレクションに挿入します。パーソナライズされたスレッショルドを計算します: 活動中の薬剤と状態に基づいて患者ごとのバイタルサインのスレッショルドを計算します。これらの結果は
patient_360ドキュメントに保存されます。CDS ルールの評価:
AlertEngineを現在のバイタルに対して実行し、生成されたアラートをalertsコレクションに書き込みます。HEDIS ケアギャップを計算する:
QualityEngineを各患者の診療歴に対して実行し、構造化されたケアギャップの結果をpatient_360ドキュメントに書き込みます。シードプロバイダーの帰属:
attributionsコレクションでプロバイダーと患者の帰属関係を生成し、ギャップ結果とアラートを受け取るプロバイダーを決定します。リアルタイムモニタリングを開始する: バイタルシミュレーションワーカーを有効化し、サーバーから送信されるイベントを介してライブのバイタルサインデータを臨床プラットフォームにストリーミングします。
CDS エンジン
CDS エンジンは患者データを分析し、ケアチームに実行可能なインサイトを提供します。このソリューションでは、臨床モニタリングと品質測定の計算が2つの独立したエンジンに分かれます。このアーキテクチャパターンは、ケアの相互運用性のためのHL7 FHIRアクセラレータプログラムであるDa Vinciイニシアティブに準拠しています。このプログラムでは、リアルタイムアラートとHEDISギャップロジックの分離が推奨されています。
AlertEngine: リアルタイム スレッショル モニタリング
AlertEngine は、受信したバイタルを CDS ルールと照らし、臨床アラートを生成します。次の CDS ルールを検証します。
ベータブロッカーによる頻脈促進:パーソナライズされた関値を超える心拍数を評価します。
多要因性低血糖: 心拍数の急増、2 型糖尿病、インスリン、65 歳以上、低活動の集計条件をチェックします。
慢性腎臓病代謝性アシドーシス: 30 分間持続する 22 以上の呼吸数をモニターします。
敗血症の警告: 糖尿病をリスク増幅器として、変更された SIRS 基準の 3 つ以上の存在を制御します。
比較コンテキスト: 患者の薬剤と状態のプロファイルを評価して、種々の重症度警告を生成します。
AlertEngine は単一の読み取りではなく、持続的な侵害をチェックします。スパイク検出には 2 時間のベースライン ウィンドウを使用し、劣化には 4 時間の値動ウィンドウを使用します。エンジンはすべてのアラートにコンテキストを適用します。つまり、同じ心拍数の読み取りでも、ベータブロッカー患者には重大なアラートが発生し、健康な患者には重症度の低いフラグが発生します。
QualityEngine: HEDIS ケアギャップ計算
QualityEngineは、HEDIS 測定期間内に必要な臨床ケアを各患者が受けたかどうかを判定します。エンジンは、2型糖尿病と CKD の患者を対象とし、指定された HEDIS 測定値に対して臨床歴史を評価します。
次の表に、これらの HEDIS 測定値を示します。
測定 | コード | 証拠が必要です |
|---|---|---|
総合的な糖尿病ケア — HbA1c 検査 | CDC-HBA | HbA1c 検査結果 |
糖尿病の腎臓健康評価 | KED | eGFR および uACR 検査結果 |
高血圧の制御 | CBP | 適格なエンカウンター |
糖尿病患者のためのスタチン療法 | SPD | 総コレステロール検査結果 |
糖尿病患者の眼科検査 | EED | 適格なエンカウンター |
ケアコーディネーターは、QualityEngine の結果を使用して、介入が必要な患者を特定し、ギャップが品質スコアや償還に影響を与える前にアウトリーチの優先順位を付けます。各結果には、ギャップステータス、発見された証拠、見つからない証拠、推奨されるアクション、優先順位スコア、再計算日が含まれます。さらに、エンジンは FHIR 準拠のエンドポイントを公開し、MeasureReport バンドルを返して支払いシステムとの相互運用性を確保します。
ケアギャップワークフロー
ケアギャップワークフローは、ヘルスケア組織が患者の実際の臨床ケアと設定された医療ガイドラインとの不一致を特定、追跡、解決するために使用するシステマティックなプロセスとして機能します。ケアギャップ検出は、次のアクションで構成される識別からクロージャーまでの構造化されたパスをたどります。
評価:
QualityEngineは、各患者の臨床歴史をHEDIS測定基準と照らし合わせて評価します。書き込み (write):システムは、サポートする証拠、推奨されるアクション、優先順位とともに、開いているギャップを
patient_360ドキュメントに書き込みます。検討: ケアコーディネーターは、優先順位と期限過ぎ期間でソートされている臨床プラットフォーム内の開放されているギャップを検討します。
介入: KED や CDC-HBA などの実行可能なギャップに対して、プラットフォームは構造化された介入ワークスペースを開き、コーディネーターは検査を注文し、完了を記録し、またはフォローアップを予定します。
閉じる: 介入が完了すると、
patient_360ドキュメントのギャップステータスが更新され、次のサイクルでQualityEngineが再評価されます。エスカレート:
AlertEngineが臨床アラートを検出すると、関連する開いているギャップの優先順位を上げ、ケアチームに通知します。関連するギャップのないアラートは、敗血症の警告のように、独立した臨床通知としてケアチームに直接ルーティングされます。
データモデルアプローチ
1 人の患者に対する FHIR R4 トランザクション バンドルには、20 個以上の個別のリソースが含まれています。インスリンを服用している種類 2 型糖尿病の 65 歳以上の患者が低血糖のリスクにあるかどうかを判定するには、システムで次の操作を実行する必要があります。
FHIR ストアをクエリして
Patientリソースを検索します。そのリソースを複数の
ConditionリソースとMedicationRequestリソースと相関付けます。結合された結果にわたってルールロジックを適用します。
ライブの本番ワークロードでは、このトラバーサルによりレイテンシが増加し、クエリ時間が不規則になります。たとえば、このソリューションの患者は、最大 5 つのアクティブな病態、6 つの医療リソース、8 つの検査観察リソース、エンカウンター、および臨床ノートを持つことができ、これらはすべて CDS ルールで評価する必要があります。
このオーバーヘッドをバイパスするには、patient_360 ドキュメントでこの分断されたデータを 1 つのドキュメントに統合し、トラバーサルを完全に排除します。1 人の患者のすべての臨床データは、次のように構造化された 1 つのドキュメントに保存されます。
patient_id: ソース FHIR レコードにリンクされた一意の患者 ID。demographics: 年齢、性別、および暗号化された PHI フィールド (名前、MRN、生年月日)。conditions: SNOMED コードと発症日が記載された活動中の診断。medications: 用量、投与経路、頻度を含む有効な処方。labs: 値、単位、参照範囲を含む結果。flags: 状況と医療から引き出される計算されたブール値。personalized_thresholds: 有効な薬剤に基づいた患者ごとのバイタルサインの制限。vitals_summary: 最新の読み取り値、4時間平均、および24時間の値動向。active_alerts:AlertEngineによって生成される CDS アラート。care_gaps:QualityEngineによって計算された HEDIS 測定結果。data_provenance: ソース FHIR コレクション、患者 ID、および具現化メタデータ。
ドキュメント配列としての臨床データ
patient_360ドキュメントでは、各条件がconditions配列のエントリを表し、各医薬がmedications配列のエントリを表します。以下に示すように、ドキュメントは、別々のテーブルに分割するのではなく、使用される形式で臨床エンティティを保存 (suru)します。
{ "conditions": [ { "code": "44054006", "display": "Type 2 diabetes mellitus", "clinical_status": "active", "onset_date": "2017-10-21T21:29:59.716351+00:00" }, { "code": "433144002", "display": "Chronic kidney disease stage 3", "clinical_status": "active", "onset_date": "2023-09-12T21:29:59.716372+00:00" } ], "medications": [ { "display": "Insulin glargine 100 units/mL injection", "dose": "20.0 units", "route": "subcutaneous", "frequency": "once daily at bedtime", "status": "active" }, { "display": "Atenolol 50 mg oral tablet", "dose": "50.0 mg", "route": "oral", "frequency": "once daily", "status": "active" } ] }
計算された操作フィールド
FHIR バンドルには標準相互運用データが含まれていますが、 patient_360ドキュメントには、臨床フラグ、ケアギャップ結果、パーソナライズされたスレッショルド、アクティブアラートなど、FHIR で定義されていない操作フィールドが組み込まれています。
たとえば、より広範なデータ生成パイプライン内に組み込まれた具現パイプラインは、FHIR バンドルから臨床フラグを計算し、それらを patient_360 ドキュメントに直接書き込みます。AlertEngine はこれらのフラグを読み取り、患者に適用される CDS ルールを決定します。これには、次のものが含まれます。
flags.has_beta_blocker: ベータブロッカー心拍数ルールを有効化します。flags.has_insulin: 多要素低血糖症ルールを有効化します。flags.has_ckd:CKD 代謝性アシドーシスと呼吸ルールを有効にします。flags.condition_codes: すべてのアクティブな状態の SNOMED コード。
ケアギャップの結果にも同じアプローチを使用します。マテリアライゼーションパイプラインはケアギャップの結果を計算し、それらを patient_360 ドキュメントに直接追加します。計算された各 HEDIS 測定値は、関連する status、priority、evidence、recommended_action とともに care_gaps 配列内に保存されます。標準の FHIR とは異なり、document model はこの情報を患者の臨床レコードとともに保存します。この構造の例を以下に示します。
{ "care_gaps": [ { "hedis_measure": "CDC-HBA", "measure_name": "Comprehensive Diabetes Care — HbA1c Testing", "status": "open", "days_overdue": 34, "priority": "high", "evidence": { "found": ["HbA1c 5.13% (2025-10-07)"], "missing": [] }, "recommended_action": "Schedule or order an HbA1c follow-up" } ] }
このアプローチにより、柔軟性が向上します。臨床要件が変更された場合は、ドキュメントを拡張できます。新しい CDS ルールは、既存のフィールドに影響することなく、同じドキュメントに新しいフィールドを書き込みます。
ソース レコードへの追跡可能性
patient_360 ドキュメントは、FHIR レコードの代わりではなく、派生されたオペレーション ビューを構成します。実体化パイプラインは、FHIR リソースからこのビューを生成します。あらゆる臨床的決定またはケアギャップの結果を監査するため、すべてのドキュメントにはdata_provenance ブロックが含まれています。
{ "data_provenance": { "layer": "cds_operational", "source_fhir_collection": "synthetic_patients", "source_patient_id": "1b3bbaec-def8-4b55-8e87-9d04b55d6890", "materialization_version": "1.0", "last_materialized_at": "2026-05-09T21:30:04.873754+00:00", "fhir_resource_count": 22 } }
FHIR データ ストアは、相互運用性のための正規の情報源であり、MongoDB Atlas は、オペレーション ビューを保持し、そのソース データへの直接リンクを維持します。
document model 内の暗号化されたフィールド
医療規制では、アプリケーションで PHI を暗号化する必要があります。一般的なアプローチでは、暗号化された PHI を別のシステムに保存し、必要な場合にのみ取り出します。ただし、このフレームワークでは、2 番目のデータ ストア、別のキー マネジメント レイヤー、および患者レコードの取得ごとにレイテンシが増加します。
MongoDB Queryable Encryption は、PHI を同じドキュメントに保持することで、このオーバーヘッドを解消します。患者の名前、MRN、生年月日などの横断的に機密性の高いフィールドを保護し、暗号化のキーを持つ認可されたクライアント アプリケーションのみが読み取り可能にします。ドキュメントの残りは、操作上の使用のために引き続きクエリ可能です。
{ "demographics": { "name": { "$binary": { "base64": "EAXZmoXjO0re...", "subType": "06" } }, "given": { "$binary": { "base64": "EF1RChFVFEJC...", "subType": "06" } }, "family": { "$binary": { "base64": "EK18iT8qVki8...", "subType": "06" } }, "birth_date": { "$binary": { "base64": "EJOsqgLJPEjI...", "subType": "06" } }, "gender": "female", "age": 77 } }
例えば、AlertEngineやQualityEngineのようなマイクロサービスは、フラグ、スレッショルド、ケアギャップフィールドを読み取りますが、暗号化されたデモグラフィックフィールドは読み取りません。
ソリューションのビルド
詳細なインストール手順については、GitHub リポジトリを参照してください。リポジトリには、MongoDB Atlas 接続文字列の取得手順、コンテナ化配置用の Docker 構成、ローカル配置の手順が含まれています。
前提条件と設定を構成する
プラットフォームをコンテナとして実行するには、Docker Desktopをインストールします。
MongoDB Atlas M10 クラスターを作成し、ネットワーク アクセスを構成します。
Atlas クラスターに接続し、接続文字列をコピーします。
[任意]外部 FHIR データストアに FHIR バンドルを永続化する場合は、
HealthLakeサービスへのアクセス権限を持つ AWS アカウントを作成します。
プラットフォームとデータシーディングを起動する
ブラウザーで http://localhost:8080 を開きます。ログイン時に、デモンストレーションシナリオに合わせてペルソナを選択します。
Frida(シミュレーションモード):シーディングの前にシミュレーション設定を構成するには、Fridaを選択します。プラットフォームは、すべてのデータを自動的に生成してロードする複数のステップからなるパイプラインを実行します。リアルタイムのバイタルストリーミングを使用したライブデモには、このモードを使用します。
Diego (既存データ モード): Diego を選択すると、シミュレーションの実行なしで事前にシードされたデータセットに接続します。安定したデータに対してプラットフォームをデモンストする場合、またはシーディング パイプラインが実行済みの場合は、このオプションを使用します。
患者のダッシュボードを調べ、未対処のケアの間隔を確認し、バイタルをリアルタイムでモニターします。
キーポイント
FHIR ワークフローの操作レイヤーとして MongoDB Atlas を使用する: アプリケーションの FHIR データ ファンデーションを MongoDB Atlas 内の非正規化された操作レイヤーで拡張し、リアルタイムの臨床クエリ、ケアギャップの計算、バイタルのモニタリングを実現します。
患者データを 1 つのドキュメントとしてモデル化する: 病状、薬剤、検査、アラート、ケアの間隔、バイタルサインの阈値を 1 つのドキュメントにまとめて保存することで、アプリケーションは複数のリソースを結合することなく、1 回の読み取りで必要なものをすべて取得できます。
データ取り込み時に臨床フラグとしきい値を事前計算する: FHIR バンドルから主要な臨床の事実を抽出し、取り込み時に MongoDB Atlas の計算フィールドとして保存することで、CDS エンジンはソースレコードを再読み込まずにルールを評価できます。
ケアギャップとアラートの結果を患者ドキュメントに直接書き込みます。
care_gapsやactive_alertsのような配列フィールドを使用して、HEDIS 測定結果と臨床アラートを臨床レコードと一緒に保存し、ケア コーディネーターに 1 つのクエリで完全な実行可能な情報を提供します。MongoDB Queryable Encryption で PHI を保護する: 機密性の高い患者フィールドに Queryable Encryption を適用して PHI を保護しながら、プレーンテキストの露出を避けます。別個の暗号化レイヤーなしで HIPAA 要件を満たします。
作成者
Giovanni Rodríguez Fragoso, MongoDB
Francesc Mateu Amengual, MongoDB
Diego Canales, MongoDB