患者ジャーニーデータテンプレート
患者ジャーニーデータテンプレート
- 推奨される臨床属性
- 重要なプロセス上のマイルストーン
- MEDITECHからのデータ抽出ガイダンス
患者ジャーニー属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 実行された特定の臨床的または管理的アクション。 | ||
| 説明 この属性は、患者ジャーニー内で発生するイベントまたはタスクの名前を表します。「患者登録済み」、「薬剤投与済み」、「退院指示書作成済み」などの明確なステップを捕捉します。 活動の正しい識別は、プロセスフローをマッピングするために極めて重要です。これらの値は、電子カルテ内のトランザクションコード、オーダー状況、または文書化された介入から導出されることがよくあります。 その重要性 プロセスのステップを定義し、プロセスマップを可視化するために必要です。 取得元 さまざまなトランザクションログ(OEオーダー、看護介入、ADMイベント)から派生します。 例 患者登録済みトリアージ完了薬剤投与診断結果検証済み | |||
| イベントのタイムスタンプ EventTimestamp | 活動が発生した具体的な日時です。 | ||
| 説明 この属性は、活動が行われた正確な瞬間を記録します。これは、イベントを時系列に並べ、プロセスステップ間の期間を計算するために使用されます。 高精度なタイムスタンプは、トリアージからアセスメントまでの期間や診断結果の応答時間など、待ち時間の正確な分析に必要です。 その重要性 イベントを順序付けし、サイクルタイムとスループットを計算するために必要です。 取得元 ソーステーブルのトランザクション日付/時刻カラム。 例 2023-10-15T08:30:00Z2023-10-15T09:15:22Z2023-10-16T14:45:00Z | |||
| ソースシステム SourceSystem | データが生成されたシステムの識別子。 | ||
| 説明 イベントデータが抽出されたMEDITECHインスタンスまたは特定のモジュールを識別します。複数の病院環境では、これにより異なる施設またはシステムバージョンからのデータを区別するのに役立ちます。 この属性は単一システム抽出の場合は静的ですが、病院ネットワーク全体で統一ビューを作成するためにデータを結合する際には重要です。 その重要性 マルチシステム環境におけるデータリネージとトレーサビリティを確保します。 取得元 抽出時またはシステムID設定時にハードコードされます。 例 MEDITECH_ExpanseMEDITECH_6.1病院A_本院 | |||
| 最終データ更新 LastDataUpdate | データが最後に抽出または更新されたタイムスタンプ。 | ||
| 説明 レコードが最後に処理されたか、プロセスマイニングツールにロードされた日時を示します。これは、データの鮮度を監査し、分析がシステムの最新の状態を反映していることを保証するのに役立ちます。 これはイベントタイムスタンプとは異なり、臨床イベント時間ではなく、技術的なデータパイプライン時間を反映しています。 その重要性 データガバナンスと、分析が最新のデータで実行されることを保証するために不可欠です。 取得元 ETL実行時のシステム日付。 例 2023-11-01T00:00:00Z2023-11-02T12:00:00Z | |||
| 患者エピソード PatientEpisode | 特定の患者ケア期間または来院の固有識別子。 | ||
| 説明 患者エピソードは、プロセス分析の中心的なケース識別子として機能します。これは、単一の入院または外来受診に関連するすべての臨床、管理、および財務イベントを一つのまとまったジャーニーにグループ化します。 MEDITECHシステムでは、これは多くの場合、アカウント番号または来院IDと相関します。この属性は、登録から退院までの患者ジャーニーを再構築し、入院期間の計算と臨床パスウェイの分析を可能にするための基本です。 その重要性 これは、異なるイベントを単一のプロセスインスタンスにリンクするために必要な必須のケースキーです。 取得元 MEDITECH入院または登録モジュール。通常はアカウント番号フィールド。 例 V100938475AC29384755E993847211O229384711 | |||
| トリアージ緊急度レベル TriageAcuityLevel | トリアージ中に患者に割り当てられた重症度評価。 | ||
| 説明 患者の状態の緊急度を示し、通常はスケール(例:1~5、1が最も重篤)で表されます。この属性は「救急部門フロー分析」の中心です。 これにより、アナリストは待ち時間と患者の重症度を関連付け、最も重篤な患者が効果的に優先されていることを確認できます。 その重要性 救急部門の優先順位付けと安全コンプライアンスの分析に不可欠です。 取得元 救急部門またはトリアージの看護評価画面。 例 1 - 再蘇生2 - 緊急3 - 準緊急4 - 軽緊急 | |||
| 主要診断 PrimaryDiagnosis | 患者エピソードで特定された主要な病状。 | ||
| 説明 受診の主要な理由のICD-10コードまたは説明が含まれます。これは「臨床経路バリアント分析」の要となる情報です。 主要診断ごとにケースをグループ化することで、臨床管理者は実際の治療経路を、その特定の病状に対する理想的な臨床経路と比較できます。 その重要性 臨床経路を分析するためにケースをグループ化する上で不可欠です。 取得元 医療記録または抄録モジュール。 例 J18.9 - 肺炎I21.9 - 急性心筋梗塞S72.0 - 大腿骨骨折 | |||
| 再入院 IsReadmission | このエピソードが前回の退院から30日以内に発生したかどうかを示すフラグ。 | ||
| 説明 患者の現在の登録日が、前回のエピソードの退院日から30日以内である場合にtrueを返すブール型属性です。「再入院とケアの質」ダッシュボードをサポートします。 再入院を特定することで、アナリストは前回のエピソードに遡り、退院計画やフォローアップケアのギャップを見つけることができます。 その重要性 償還と患者転帰に影響を与える重要な品質指標です。 取得元 同じMedicalRecordNumberの現在のStartTimeと以前のCase EndTimeを比較して計算されます。 例 truefalse | |||
| 在院期間 LengthOfStay | 入院から退院までの患者エピソードの総期間。 | ||
| 説明 登録/入院開始時刻から退院時刻までの合計経過時間を表す計算メトリックです。「在院期間トレンド分析」ダッシュボードの主要メトリックです。 高レベルの効率性指標として機能し、異なる部門や診断グループ間の比較を正規化するためによく使用されます。 その重要性 病院運営における主要な効率KPI。 取得元 登録開始時刻と退院時刻から計算されます。 例 4日2時間45 minutes12日間 | |||
| 患者タイプ PatientType | 患者の受診カテゴリ(例:入院、外来、救急)。 | ||
| 説明 病院受診の性質を分類します。一般的な値には、「入院」、「外来」、「緊急」、または「観察」が含まれます。この分類は、ケアの標準や予想される期間がタイプによって大きく異なるため、プロセスをフィルタリングおよび比較するための基本となります。 このフィールドは、「退院計画最適化」ダッシュボードにおいて、在院期間の期待値をセグメント化するのに役立ちます。 その重要性 プロセス比較のための基本的なセグメンテーション(入院対外来)。 取得元 入院または受診テーブル(例: AdmVisits.Status)。 例 入院緊急外来手術観察 | |||
| 担当医 AttendingProvider | 活動の責任者である主要な臨床医またはプロバイダー。 | ||
| 説明 タスクを実行またはケアを監督する医師、看護師、または技術者の氏名またはIDを記録します。この属性は、「治療計画策定速度」ダッシュボードをサポートし、特定のスタッフや役割に速度と効率の指標を割り当てます。 これは、臨床スタッフ間のワークロードのバランスを取り、トレーニングの必要性を特定するためのリソース分析を可能にします。 その重要性 リソースのパフォーマンス分析とワークロードのバランス調整を可能にします。 取得元 活動ログのプロバイダーまたはユーザーフィールド。 例 スミス医師RNジョーンズテック・アダムス | |||
| 病院部門 HospitalDepartment | 活動が発生した特定の部署または部門。 | ||
| 説明 活動を担当する機能単位(例:「救急」、「放射線科」、「ICU」、「一般病棟」など)を特定します。この属性は「部門別リソーススループット」ダッシュボードにとって不可欠です。 これにより、パフォーマンス指標を単位ごとにセグメント化でき、院内転送とリソース利用におけるボトルネックを特定するのに役立ちます。 その重要性 組織分析と特定の部署におけるボトルネック特定のための鍵。 取得元 トランザクションテーブルの場所または部門フィールド。 例 救急部門放射線科集中治療室外科病棟3 | |||
| 診療記録番号 MedicalRecordNumber | すべての受診を通じて患者を一意に識別するID。 | ||
| 説明 診療記録番号(MRN)は、エピソード固有のIDとは別に、医療機関内で患者を一意に識別します。これにより、アナリストは同じ患者に関する複数のエピソードを時系列で関連付けることができます。 この属性は「再入院とケアの質」ダッシュボードに不可欠であり、退院後30日以内に病院に戻る患者の検出を可能にします。 その重要性 エピソード横断分析と患者中心の視点を可能にします。 取得元 患者マスターインデックスまたは登録テーブル。 例 MRN-100293MRN-55928388291002 | |||
| 退院先 DischargeDisposition | 退院時の患者の行き先または状態。 | ||
| 説明 エピソード後に患者がどこに行ったかを示します。例えば、「自宅」、「スキル看護施設」、「訪問看護」、または「死亡」です。これは「退院計画最適化」ダッシュボードの主要な成果指標です。 これを分析することで、急性期後ケアの配置確保の遅延が在院期間の延長に寄与しているかどうかを特定できます。 その重要性 在院期間と再入院リスクを分析するための主要な成果指標。 取得元 退院抄録または登録画面。 例 自宅へ退院短期総合病院へ移送済み失効医療上の助言に反して退院 | |||
| トリアージ待ち時間 TriageWaitTime | 登録とトリアージ完了の間の時間。 | ||
| 説明 「患者登録済み」イベントと「トリアージ完了」イベント間の算出された期間。これは「平均トリアージ処理時間」KPIに直接反映されます。 この期間を監視することで、救急部門の管理者はピーク時の人員配置を調整し、患者の安全基準が満たされるようにすることができます。 その重要性 救急部門の主要な運用指標。 取得元 特定のアクティビティのタイムスタンプ間の計算された差。 例 15分1時間20分 | |||
| 入院元 AdmitSource | 患者がどこから来たか(例:自宅、転送、紹介)。 | ||
| 説明 「医師紹介」、「救急室」、「他病院からの転送」など、患者の入院元を説明します。これは、患者がシステムにどのように入るかについてのコンテキストを提供します。 流入パターンと「救急部門フロー分析」およびリソース計画への影響を理解するのに役立ちます。 その重要性 患者の流入と需要チャネルに関するコンテキストを提供します。 取得元 入院登録データ。 例 救急室クリニック紹介SNFからの移送 | |||
| 注文カテゴリ OrderCategory | 臨床オーダーの分類(例:検査、放射線科、コンサルテーション)。 | ||
| 説明 オーダーを「検査」、「放射線科」、「食事」、「コンサルテーション」などの広範なカテゴリにグループ化します。これは「診断サービスターンアラウンド」ダッシュボードに不可欠です。 これにより、ワークフローを分離して、画像診断と血液検査に固有のサイクルタイムを分析できます。これらはしばしば異なるボトルネックを持っています。 その重要性 診断および治療のワークフローをセグメント化します。 取得元 オーダー入力(OE)モジュールのカテゴリフィールド。 例 検査室放射線科看護薬局 | |||
| 薬剤名 MedicationName | 投与された医薬品の名前。 | ||
| 説明 「投薬」イベントに関与した特定の薬剤を捕捉します。これは、「薬剤投与コンプライアンス」ダッシュボードに必要です。 これにより、看護リーダーは、特定の高リスクまたは時間厳守の薬剤(敗血症に対する抗生物質など)が適切な治療期間内に投与されていることを確認できます。 その重要性 臨床コンプライアンスおよび安全分析に必要です。 取得元 薬局(PHA)またはベッドサイド認証(BMV)モジュール。 例 アセトアミノフェンバンコマイシンヘパリンインスリン | |||
| 請求額 ChargeAmount | 特定の活動またはサービスに関連する財務上の価値。 | ||
| 説明 検査や病室料金など、特定のイベントに計上される費用または請求を表します。主に財務に関するものですが、リソースの強度に関連しています。 集計すると、プロセス変動の財務的影響を理解するのに役立ちますが、要求されたビューの主な焦点は臨床フローです。 その重要性 プロセス分析に財務的側面を追加します。 取得元 請求またはBAR(請求/売掛金)モジュール。 例 150.001200.5045.00 | |||
| 遵守違反 IsAdherenceViolation | ケースが標準的な臨床経路から逸脱したかどうかを示すフラグ。 | ||
| 説明 アクティビティのシーケンスが患者の主要診断に対して定義された参照モデルと一致しない場合にtrueに設定されるブール型フラグです。「臨床経路バリアント分析」をサポートします。 これにより、「非準拠」ケースを迅速にフィルタリングし、なぜ標準的なケアが遵守されなかったのかを調査することができます。 その重要性 プロセス逸脱とばらつきを迅速に特定します。 取得元 コンフォーマンスチェックアルゴリズムによって計算されます。 例 truefalse | |||
患者ジャーニー活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| トリアージ完了 | 救急部門での初期看護評価の完了を示します。これにより、患者の緊急度レベルと重症度スコアが定義されます。 | ||
| その重要性 救急部門フロー分析ダッシュボードがスループットと待ち時間を測定するために不可欠です。 取得元 MEDITECH EDM(救急部管理)モジュール。EDMトラッカーの状態変更またはトリアージ評価文書のタイムスタンプから導出されます。 取得 ステータスフィールドが「トリアージ済み」に変更されたときに記録されます イベントタイプ explicit | |||
| 患者登録済み | このイベントは、システムにおける患者エピソードまたは来院記録の管理上の作成を示します。MEDITECH ADM(入院管理)モジュールへの初期の入力ポイントを捕捉します。 | ||
| その重要性 患者ジャーニーの開始とサイクルタイムの計算を確立します。総在院期間の計算に不可欠です。 取得元 MEDITECH ADMモジュール。「入院」テーブルから、特に「入院日時」またはトランザクションログ作成タイムスタンプから取得されます。 取得 「新規来院」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 患者移送済み | 患者が1つの場所(病棟/病室/ベッド)から別の場所へ物理的に移動したことを示します。病院内の流れを追跡します。 | ||
| その重要性 「内部搬送ボトルネック」を特定するための指標です。搬送時間が長くなっている場合、リソースの競合や搬送作業(ポーター業務)の遅延が発生している可能性があります。 取得元 MEDITECH ADM(入院管理)。「ロケーション履歴」または「病室ベッド」トランザクションログから取得されます。 取得 「患者移送」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 患者退院済み | 来院の事務的な終了。患者は物理的に退院し、ベッドが解放されます。 | ||
| その重要性 プロセスの正式な終了。最終的な入院期間を計算し、30日間の再入院期間を定義するために使用されます。 取得元 MEDITECH ADM(入院管理)。来院記録の「退院日時」フィールド。 取得 「患者退院」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 注文済み | 臨床医によるサービス、薬剤、または診断検査の依頼を記録します。これは、下流の臨床活動のトリガーイベントとなります。 | ||
| その重要性 「診断サービスターンアラウンド」KPIのベースラインを設定します。これを実行時間と比較することで、サービス提供における遅延を特定します。 取得元 MEDITECH OE(オーダー入力)モジュール。「OeOrders」テーブルの「オーダー日時」フィールドを使用して取得されます。 取得 「オーダー入力」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 薬剤投与 | 看護スタッフによる患者への薬剤の実際の投与を記録します。通常、ベッドサイドでのバーコードスキャンによって取得されます。 | ||
| その重要性 「薬剤投与コンプライアンス」をサポートします。看護部門における安全リスクとワークフローの中断を特定します。 取得元 MEDITECH PHA(薬局)またはeMAR(電子薬剤投与記録)。投与履歴の「投与日時」。 取得 「投薬管理」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 診断結果検証済み | 診断テスト(検査または放射線)が実施され、その結果が技師または放射線科医によって承認されたことを示します。これにより、診断オーダーのループが効果的に閉じられます。 | ||
| その重要性 「診断サービス応答時間」のエンドポイント。補助部門におけるボトルネックを分析するために不可欠です。 取得元 MEDITECH LABまたはITS(画像診断・治療サービス)モジュール。結果ステータスが「検証済み」または「署名済み」に変更されたときに取得されます。 取得 ステータスフィールドが「検証済み」に変更されたときに記録されます イベントタイプ explicit | |||
| 診断記録済み | 臨床医が符号化された診断(ICD-10)を患者記録に入力する時点。これはしばしば特定の臨床パスウェイをトリガーします。 | ||
| その重要性 ケースを分類することで「臨床経路バリアント分析」を可能にします。患者を比較のためにグループ化する上で重要です。 取得元 MEDITECH ABS(抄録)または医療記録。診断コードがアカウントに関連付けられたときに記録されます。 取得 「診断入力」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| 退院指示書作成済み | 医師が患者の退院を承認するオーダーに署名した際のタイムスタンプ。これは「退院計画」フェーズの開始を示します。 | ||
| その重要性 「退院計画リードタイム」のベースラインを設定します。これと実際の退院との間のギャップは、運用上の非効率性を表します。 取得元 MEDITECH OE(オーダー入力)。カテゴリーが「退院」のオーダーをフィルタリングします。 取得 「オーダー入力」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| ケアプラン開始済み | 特定の看護または多職種連携によるケアプランの作成または割り当てを表します。これは「治療計画策定」の概念に対応します。 | ||
| その重要性 「治療計画策定速度」を測定します。ここでの遅延は、臨床上の意思決定にギャップがあることを示唆しています。 取得元 MEDITECH PCS(患者ケアシステム)またはケアマネージャー。標準ケアプランが患者に適用されたときのタイムスタンプ。 取得 トランザクション「ケアプラン追加」が実行されたときに記録されます イベントタイプ explicit | |||
| コンサルテーション依頼送信済み | 専門医の意見を求める特定のタイプのオーダーです。これにより、「専門医コンサルテーション応答」ダッシュボードのタイマーが開始されます。 | ||
| その重要性 多職種連携におけるボトルネックを特定します。ここでは長い待ち時間が在院期間を延長します。 取得元 MEDITECH OE(オーダー入力)。カテゴリーが「コンサルテーション」の「OeOrders」をフィルタリングして特定します。 取得 「オーダー入力」トランザクション実行時に記録されます。 イベントタイプ explicit | |||
| コンサルテーション完了 | 専門医アセスメントの完了。多くの場合、特定の文書タイプ(例:「心臓病コンサルテーションノート」)の提出から推測されます。 | ||
| その重要性 専門医の応答性を測定するエンドポイント。タイムリーなケアの進捗を確保するために不可欠です。 取得元 MEDITECH PCM(プロバイダーオーダー管理)またはEMR。特定のタイトルを持つドキュメントの作成タイムスタンプから推測されます。 取得 前後のステータスフィールドを比較 イベントタイプ inferred | |||
| フォローアップ予約済み | 患者の将来の予約のスケジューリング。この活動は退院後の継続的なケアをサポートします。 | ||
| その重要性 「フォローアップ予約スケジューリング」分析をサポートします。再入院率の低減と相関しています。 取得元 MEDITECH SCH(スケジューリング)。退院日付近に作成された新規予約記録と患者IDをリンクすることで推測されます。 取得 予約作成日フィールドと退院日を比較して導出 イベントタイプ inferred | |||
| 検体採取済み | 検査分析のための生体サンプルの物理的な採取を示します。この活動は、検査オーダーと処理の間のギャップを埋めます。 | ||
| その重要性 診断ライフサイクルにおける遅延の原因となることが多い詳細なステップ。看護部門の遅延と検査部門の遅延を区別するのに役立ちます。 取得元 MEDITECH LABモジュール。通常、採血担当者がバーコードをスキャンするか、検体ステータスを「採取済み」に更新したときに記録されます。 取得 トランザクション「検体採取」が実行されたときに記録されます イベントタイプ explicit | |||
抽出ガイド
ステップ
データリポジトリサーバーの特定: MEDITECHデータリポジトリ(DR)をホストするMicrosoft SQL Serverインスタンスを特定します。これは、トランザクションM-ATまたはファイルベースのデータベースとは異なります。読み取り専用の認証情報(通常はサービスアカウント)が必要です。
スキーマバージョンの確認: MEDITECH DRの構造は、Magic、Client/Server (6.x)、Expanse間でわずかに異なります。以下のクエリは標準的な命名規則(例: AdmVisits, OeOrders)を使用しています。ローカルのSQL Server Management Studio (SSMS) オブジェクトエクスプローラーでこれらのテーブル名を確認してください。
スコープの定義: 患者訪問の主要テーブルを特定します。これは通常、AdmVisits、RegAcct、またはAbstractDataといった名前で、特定のDR構成によって異なります。このクエリではAdmVisitsを患者エピソードのアンカーとして使用しています。
SQL環境の準備: SSMSを開き、DRに接続します。新しいクエリウィンドウを開きます。正しいデータベース(多くの場合livedbなど)にコンテキストが切り替わっていることを確認してください。
パラメーターの設定: 提供されたSQLスクリプトで、日付範囲(例: '2023-01-01')および、DRが複数のサイトをホストしている場合は施設識別子のプレースホルダーを置き換えます。
抽出の実行: 完全なT-SQLスクリプトを実行します。これは共通テーブル式(CTE)を利用して、まず対象となる母集団を定義し、次に複数のデータソースをUNION ALLで結合して標準化されたイベントログを作成します。
NULL属性の処理: クエリには、タイムスタンプ内のNULL値(必要に応じてCOALESCEを使用)を処理し、重要な結合キー(SourceID/VisitID)が存在することを確認するロジックが含まれています。
トリアージと緊急データの検証: MEDITECHはEDデータを特定のモジュールに格納します。緊急ワークフローを分析する場合は、EdVisitsまたはNurInterventionsテーブルが入力されていることを確認してください。
オーダーカテゴリの検証: クエリは、カテゴリurnsまたはニーモニックに基づいて、一般オーダー、コンサルテーション、退院オーダーを分離します。施設の特定のニーモニック辞書に合わせて、特定のWHERE句を調整する必要がある場合があります。
データのエクスポート: 結果が返されたら、SSMSの結果グリッドを右クリックし、「結果をCSVとして保存」を選択します。ヘッダーが含まれていることを確認してください。
最終フォーマット: CSVを開いて、ProcessMindにインポートする前に日付形式がISO 8601準拠(YYYY-MM-DD HH:MM:SS)であることを確認してください。
設定
- データベースアクセス: MEDITECH DR SQLデータベースに対してdb_datareader権限が必要です。
- 期間: 完了したサイクルを確実にするため、退院患者のデータは3~6ヶ月分の抽出期間を推奨します。
- 施設フィルタリング: DRに複数施設のデータが含まれる場合、BaseVisits CTEをFacilityIDまたはSourceSystemIDでフィルタリングしてください。
- エピソード定義: スクリプトは、一意のVisitID(多くの場合、アカウント番号またはエピソード番号と呼ばれます)をCase IDとして使用します。
- パフォーマンス: クエリは、スキャン範囲を制限するためにCTEアンカーを使用します。最適なパフォーマンスを得るために、AdmVisitsテーブルのAdmitDateとDischargeDateにインデックスがあることを確認してください。
- レイテンシー: データリポジトリの転送は、サイト構成に応じて15分から24時間のレイテンシーが発生する可能性があります。LastDataUpdateのタイムスタンプを確認してください。
a クエリ例 sql
/* MEDITECH Data Repository T-SQL Extraction for ProcessMind */
/* Process: Patient Journey */
/* Dialect: T-SQL */
WITH BaseVisits AS (
/* Define the population: Discharged patients within a date range */
SELECT
V.VisitID,
V.PatientID,
V.AccountNumber AS MedicalRecordNumber,
V.AdmitDateTime,
V.DischargeDateTime,
V.FacilityID,
V.PatientType,
V.AttendingProviderID,
V.DischargeDisposition,
NULLIF(DATEDIFF(MINUTE, V.AdmitDateTime, V.DischargeDateTime), 0) / 1440.0 AS LengthOfStay,
/* Flag readmissions logic would go here, simplified as 0 for base script */
0 AS IsReadmission
FROM
[YourDatabaseName].[dbo].[AdmVisits] V
WHERE
V.DischargeDateTime >= '2023-01-01'
AND V.DischargeDateTime < '2023-04-01'
AND V.Status = 'DIS' /* Discharged Status */
),
PatientDiagnoses AS (
/* Helper CTE for Primary Diagnosis to avoid duplicates in joins */
SELECT
D.VisitID,
MAX(D.ICDCode) AS PrimaryDiagnosis
FROM
[YourDatabaseName].[dbo].[AbsDiagnoses] D
WHERE
D.Rank = 1 /* Primary Diagnosis Rank */
GROUP BY
D.VisitID
),
TriageData AS (
/* Helper CTE for Triage Acuity */
SELECT
T.VisitID,
MAX(T.AcuityLevel) AS TriageAcuityLevel
FROM
[YourDatabaseName].[dbo].[EdTriage] T
GROUP BY
T.VisitID
)
/* 1. Patient Registered */
SELECT
V.VisitID AS PatientEpisode,
'Patient Registered' AS ActivityName,
V.AdmitDateTime AS EventTimestamp,
'MEDITECH_ADM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
V.FacilityID AS HospitalDepartment,
V.AttendingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
BaseVisits V
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
V.AdmitDateTime IS NOT NULL
UNION ALL
/* 2. Triage Completed */
SELECT
V.VisitID AS PatientEpisode,
'Triage Completed' AS ActivityName,
ED.TriageDateTime AS EventTimestamp,
'MEDITECH_ED' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
'Emergency Department' AS HospitalDepartment,
ED.TriageNurseID AS AttendingProvider,
V.PatientType,
ED.AcuityLevel AS TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[EdTriage] ED
INNER JOIN BaseVisits V ON ED.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
WHERE
ED.TriageDateTime IS NOT NULL
UNION ALL
/* 3. Order Placed (General) */
SELECT
V.VisitID AS PatientEpisode,
'Order Placed' AS ActivityName,
O.OrderDateTime AS EventTimestamp,
'MEDITECH_OE' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
O.Department AS HospitalDepartment,
O.OrderingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[OeOrders] O
INNER JOIN BaseVisits V ON O.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
O.Category NOT IN ('CONSULT', 'DISCHARGE') /* Exclude specific types handled elsewhere */
UNION ALL
/* 4. Specimen Collected */
SELECT
V.VisitID AS PatientEpisode,
'Specimen Collected' AS ActivityName,
L.CollectionDateTime AS EventTimestamp,
'MEDITECH_LAB' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
'Laboratory' AS HospitalDepartment,
L.CollectedBy AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[LabSpecimens] L
INNER JOIN BaseVisits V ON L.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
L.CollectionDateTime IS NOT NULL
UNION ALL
/* 5. Diagnostic Result Verified */
SELECT
V.VisitID AS PatientEpisode,
'Diagnostic Result Verified' AS ActivityName,
R.VerifiedDateTime AS EventTimestamp,
'MEDITECH_LAB' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
'Laboratory' AS HospitalDepartment,
R.VerifiedBy AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[LabResults] R
INNER JOIN BaseVisits V ON R.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
R.VerifiedDateTime IS NOT NULL
UNION ALL
/* 6. Diagnosis Documented */
SELECT
V.VisitID AS PatientEpisode,
'Diagnosis Documented' AS ActivityName,
DX.EntryDateTime AS EventTimestamp,
'MEDITECH_ABS' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
V.FacilityID AS HospitalDepartment,
DX.ProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[AbsDiagnoses] DX
INNER JOIN BaseVisits V ON DX.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
DX.EntryDateTime IS NOT NULL
UNION ALL
/* 7. Care Plan Initiated */
SELECT
V.VisitID AS PatientEpisode,
'Care Plan Initiated' AS ActivityName,
N.CreateDateTime AS EventTimestamp,
'MEDITECH_NUR' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
N.NurseUnit AS HospitalDepartment,
N.NurseID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[NurPlan] N
INNER JOIN BaseVisits V ON N.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
N.CreateDateTime IS NOT NULL
UNION ALL
/* 8. Medication Administered */
SELECT
V.VisitID AS PatientEpisode,
'Medication Administered' AS ActivityName,
M.AdminDateTime AS EventTimestamp,
'MEDITECH_PHA' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
M.AdminLocation AS HospitalDepartment,
M.AdministeredBy AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[PhaMedAdmin] M
INNER JOIN BaseVisits V ON M.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
M.Status = 'ADMINISTERED'
UNION ALL
/* 9. Consult Request Sent */
SELECT
V.VisitID AS PatientEpisode,
'Consult Request Sent' AS ActivityName,
O.OrderDateTime AS EventTimestamp,
'MEDITECH_OE' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
O.Department AS HospitalDepartment,
O.OrderingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[OeOrders] O
INNER JOIN BaseVisits V ON O.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
O.Category = 'CONSULT'
UNION ALL
/* 10. Consultation Completed */
SELECT
V.VisitID AS PatientEpisode,
'Consultation Completed' AS ActivityName,
O.CompletedDateTime AS EventTimestamp,
'MEDITECH_OE' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
O.Department AS HospitalDepartment,
O.OrderingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[OeOrders] O
INNER JOIN BaseVisits V ON O.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
O.Category = 'CONSULT'
AND O.Status = 'COMPLETED'
AND O.CompletedDateTime IS NOT NULL
UNION ALL
/* 11. Patient Transferred */
SELECT
V.VisitID AS PatientEpisode,
'Patient Transferred' AS ActivityName,
TX.TransferDateTime AS EventTimestamp,
'MEDITECH_ADM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
TX.ToLocation AS HospitalDepartment,
NULL AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[AdmRoomTx] TX
INNER JOIN BaseVisits V ON TX.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
TX.TransferDateTime IS NOT NULL
UNION ALL
/* 12. Discharge Order Written */
SELECT
V.VisitID AS PatientEpisode,
'Discharge Order Written' AS ActivityName,
O.OrderDateTime AS EventTimestamp,
'MEDITECH_OE' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
O.Department AS HospitalDepartment,
O.OrderingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[OeOrders] O
INNER JOIN BaseVisits V ON O.VisitID = V.VisitID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
O.Category = 'DISCHARGE'
OR O.Mnemonic LIKE '%DISCHARGE%'
UNION ALL
/* 13. Patient Discharged */
SELECT
V.VisitID AS PatientEpisode,
'Patient Discharged' AS ActivityName,
V.DischargeDateTime AS EventTimestamp,
'MEDITECH_ADM' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
V.FacilityID AS HospitalDepartment,
V.AttendingProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
BaseVisits V
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
V.DischargeDateTime IS NOT NULL
UNION ALL
/* 14. Follow-up Booked */
SELECT
V.VisitID AS PatientEpisode,
'Follow-up Booked' AS ActivityName,
S.BookDateTime AS EventTimestamp,
'MEDITECH_SCH' AS SourceSystem,
GETDATE() AS LastDataUpdate,
V.MedicalRecordNumber,
S.ApptDepartment AS HospitalDepartment,
S.ProviderID AS AttendingProvider,
V.PatientType,
T.TriageAcuityLevel,
D.PrimaryDiagnosis,
V.DischargeDisposition,
V.LengthOfStay,
V.IsReadmission
FROM
[YourDatabaseName].[dbo].[SchAppt] S
INNER JOIN BaseVisits V ON S.PatientID = V.PatientID
LEFT JOIN PatientDiagnoses D ON V.VisitID = D.VisitID
LEFT JOIN TriageData T ON V.VisitID = T.VisitID
WHERE
S.BookDateTime > V.AdmitDateTime
AND S.BookDateTime <= DATEADD(day, 30, V.DischargeDateTime) /* Logic to link appt to episode */
AND S.Status NOT IN ('CANCELLED', 'NOSHOW');