您的患者就诊旅程数据模板
您的患者就诊旅程数据模板
- 推荐的临床属性
- 核心流程里程碑
- MEDITECH 数据提取指南
患者就诊属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventTimestamp | 活动发生的具体日期和时间。 | ||
| 描述 该属性记录活动发生的精确时刻。用于按时间顺序排列事件,并计算流程步骤间的时长指标。 高精度时间戳对于准确分析等待时间(如分诊到评估的时长)或诊断结果的周转时间至关重要。 为何重要 用于排序事件并计算周期时间与吞吐量。 获取方式 源表中的事务日期/时间列。 示例 2023-10-15T08:30:00Z2023-10-15T09:15:22Z2023-10-16T14:45:00Z | |||
| 最后数据更新 LastDataUpdate | 数据上次提取或刷新的时间戳。 | ||
| 描述 指示记录上次处理或加载到流程挖掘工具的时间。这有助于审核数据新鲜度,并确保分析反映系统的最新状态。 它与 Event Timestamp 不同,因为它反映的是技术数据管道的时间,而非临床事件发生的时间。 为何重要 对数据治理以及确保基于最新数据进行分析至关重要。 获取方式 ETL 执行时的系统日期。 示例 2023-11-01T00:00:00Z2023-11-02T12:00:00Z | |||
| 患者就诊号/就诊案例 PatientEpisode | 特定护理期或就诊的唯一标识符。 | ||
| 描述 “患者就诊案例”是流程分析的核心标识符。它将与单次住院或门诊相关的所有临床、行政和财务事件整合为一个完整的旅程。 在 MEDITECH 系统中,这通常对应于账号 (Account Number) 或就诊 ID。该属性是重现从挂号到出院全过程的基础,支持计算住院时长并分析临床路径。 为何重要 这是将零散事件链接到单个流程实例所必需的强制性 case key。 获取方式 MEDITECH 入院或挂号模块;通常为账号(Account Number)字段。 示例 V100938475AC29384755E993847211O229384711 | |||
| 活动名称 ActivityName | 执行的具体临床或行政操作。 | ||
| 描述 该属性代表患者旅程中发生的事件或任务名称。它捕获诸如“患者已挂号”、“已给药”或“已开具出院医嘱”等具体步骤。 正确识别活动是映射流程流转的关键。这些值通常派生自电子健康记录中的事务代码、医嘱状态或记录的干预措施。 为何重要 定义流程步骤,是实现流程地图可视化的必要条件。 获取方式 源自各种事务日志(OE 医嘱、NUR 干预、ADM 事件)。 示例 患者已挂号分诊完成已给药诊断结果已核实 | |||
| 源系统 SourceSystem | 数据源系统的标识符。 | ||
| 描述 识别提取 event data 的 MEDITECH 实例或特定模块。在多医院环境中,这有助于区分来自不同机构或系统版本的数据。 对于单系统提取,此属性是静态的,但在合并数据以创建跨医院网络的统一视图时,它至关重要。 为何重要 确保多系统环境下的 data 血缘和可追溯性。 获取方式 在提取或系统 ID 配置期间硬编码。 示例 MEDITECH_ExpanseMEDITECH_6.1Hospital_A_Main | |||
| 主治医师 AttendingProvider | 负责该活动的主要临床医生或服务提供者。 | ||
| 描述 记录执行任务或监督护理的医生、护士或技术人员的姓名或 ID。该属性支持“诊疗计划制定速度”仪表板,将速度和效率指标归因于特定人员或角色。 它支持资源分析,以平衡工作负载并识别临床人员的培训需求。 为何重要 支持资源绩效分析和工作负载平衡。 获取方式 活动日志中的医生或用户字段。 示例 Dr. Smith注册护士 Jones技师 Adams | |||
| 住院时长 LengthOfStay | 从入院到出院的就诊总时长。 | ||
| 描述 一个计算指标,代表从挂号/入院开始到出院之间流逝的总时间。这是“住院时长趋势分析”dashboard 的核心指标。 它作为一个高层级的效率指标,通常用于不同科室或诊断组之间的标准化比较。 为何重要 医院运营的核心效率 KPI。 获取方式 根据挂号 StartTime 与出院时间的差值计算得出。 示例 4 天 2 小时45分钟12 天 | |||
| 出院去向 DischargeDisposition | 出院时患者的去向或状态。 | ||
| 描述 指示患者在诊疗周期后的去向,如“回家”、“专业护理机构”、“家庭医疗”或“离世”。这是“出院计划优化”dashboard 的关键结果指标。 分析此项有助于识别在安排急性期后护理时出现的延误是否导致了住院时间延长。 为何重要 分析住院时长和再入院风险的关键结果指标。 获取方式 出院摘要或挂号屏幕。 示例 出院回家转至短期综合医院已到期违背医嘱离院 | |||
| 分诊急迫程度等级 TriageAcuityLevel | 分诊时为患者分配的严重程度等级。 | ||
| 描述 指示患者病情的紧急程度,通常采用分级(例如 1-5 级,其中 1 级为危重)。此属性是“急诊科流程分析”的核心。 它允许分析师将等待时间与患者严重程度关联起来,确保最危重的患者得到有效优先处理。 为何重要 对分析急诊优先级和安全合规性至关重要。 获取方式 急诊或分诊护理评估屏幕。 示例 1 - 复苏2 - 紧急3 - 急迫4 - 次急迫 | |||
| 初步诊断 PrimaryDiagnosis | 为该就诊案例确定的主要医疗状况。 | ||
| 描述 包含就诊首要原因的 ICD-10 代码或描述。这是“临床路径差异分析”的基石。 通过按主诊断对 cases 进行分组,临床经理可以将实际治疗路径与特定病情的理想临床路径进行对比。 为何重要 对于将 cases 分组以分析临床路径至关重要。 获取方式 病案记录或病案摘录模块。 示例 J18.9 - 肺炎I21.9 - 急性心肌梗死S72.0 - 股骨骨折 | |||
| 医院科室 HospitalDepartment | 活动发生的具体单元或科室。 | ||
| 描述 识别负责该活动的职能部门,如“急诊”、“放射科”、“ICU”或“普通病房”。此属性对“科室资源吞吐量”dashboard 至关重要。 它允许按单位细分绩效指标,帮助精准定位内部转运和资源利用中的瓶颈。 为何重要 组织分析和识别特定单位瓶颈的关键。 获取方式 事务表中的位置或科室字段。 示例 急诊科放射科重症监护室 (ICU)外科病房 3 | |||
| 患者类型 PatientType | 患者就诊类别(例如住院、门诊、急诊)。 | ||
| 描述 对医院就诊性质进行分类。常见值包括“住院”、“门诊”、“急诊”或“留观”。此类分类是过滤和比较流程的基础,因为不同类型的护理标准和预期时长存在显著差异。 此字段通过细分住院时长预期,为“出院计划优化”dashboard 提供帮助。 为何重要 用于流程对比的基础细分(住院与门诊)。 获取方式 入院或就诊表(例如 AdmVisits.Status)。 示例 住院患者紧急门诊手术留观 | |||
| 是否再入院 IsReadmission | 指示该周期是否发生在上次出院后 30 天内的标记。 | ||
| 描述 一个布尔属性,如果患者当前的挂号日期在上次就诊周期的出院日期后的 30 天内,则返回 true。这为“再入院与护理质量”dashboard 提供支持。 识别再入院情况让分析师能够追溯至之前的就诊周期,从而发现出院计划或随访护理中的漏洞。 为何重要 影响医保报销和患者预后的关键质量指标。 获取方式 通过对比同一 MedicalRecordNumber 的当前 StartTime 与上次 Case EndTime 计算得出。 示例 truefalse | |||
| 病案号 (MRN) MedicalRecordNumber | 跨所有就诊周期的患者唯一标识符。 | ||
| 描述 病案号 (MRN) 在医疗机构内唯一标识一名患者,不同于特定的就诊 ID。它允许分析人员将同一名患者在不同时间段的多次就诊关联起来。 该属性对于“再入院与护理质量”仪表板至关重要,支持检测在出院后 30 天内重返医院的患者。 为何重要 支持跨周期的分析和以患者为中心的视图。 获取方式 患者主索引或挂号表。 示例 MRN-100293MRN-55928388291002 | |||
| 入院来源 AdmitSource | 患者来源(例如:家庭、转院、转诊)。 | ||
| 描述 描述患者入院的来源,例如“医生转诊”、“急诊室”或“从其他医院转入”。这为患者如何进入系统提供了背景信息。 它有助于理解就诊模式及其对“急诊科流程分析”和资源规划的影响。 为何重要 提供有关患者流入和需求渠道的背景信息。 获取方式 入院挂号数据。 示例 急诊室诊所转诊从专业护理机构 (SNF) 转入 | |||
| 分诊等待时间 TriageWaitTime | 挂号到分诊完成之间的时间跨度。 | ||
| 描述 “患者挂号”与“分诊完成”事件之间的计算时长。这直接支持“平均分诊吞吐时间”这一 KPI。 监测该时长有助于急诊经理在高峰时段调整人力,确保符合患者安全标准。 为何重要 急诊科的核心运营指标。 获取方式 计算特定 activity timestamps 之间的差值。 示例 15 minutes1 小时 20 分钟 | |||
| 是否违反遵循度 IsAdherenceViolation | 指示 case 是否偏离标准临床路径的标记。 | ||
| 描述 一个布尔标记,如果活动序列与患者主诊断定义的参考模型不匹配,则设置为 true。这支持“临床路径差异分析”。 它允许快速过滤“非合规”cases,以调查为何未遵循标准化护理流程。 为何重要 快速识别流程偏差和变异。 获取方式 由合规性检查算法计算。 示例 truefalse | |||
| 药物名称 MedicationName | 所给药物的名称。 | ||
| 描述 捕获“已给药”事件中涉及的具体药物。这是“给药合规性”dashboard 的必要字段。 它允许护理领导层核实特定的高风险或有时限要求的药物(如脓毒症抗生素)是否在适当的治疗窗口内交付。 为何重要 临床合规性和安全性分析所必需。 获取方式 药房 (PHA) 或床旁验证 (BMV) 模块。 示例 对乙酰氨基酚万古霉素肝素胰岛素 | |||
| 订单类别 OrderCategory | 临床医嘱分类(例如化验、放射、会诊)。 | ||
| 描述 将医嘱分为“实验室”、“放射科”、“膳食”或“会诊”等大类。这对于“诊断服务周转”dashboard 至关重要。 它允许分离工作流,以便分析影像检查与血液检查各自的周期时间,因为这两者通常具有不同的瓶颈。 为何重要 细分诊断和治疗工作流。 获取方式 医嘱录入 (OE) 模块类别字段。 示例 实验室/化验室放射科护理药房 | |||
| 费用金额 ChargeAmount | 与特定活动或服务相关的财务价值。 | ||
| 描述 代表特定事件(如检查或房费)产生的成本或费用。虽属财务范畴,但反映了资源强度。 汇总这些数据有助于理解流程偏差对财务的影响,尽管分析的核心重点仍是临床流。 为何重要 为流程分析增加财务维度。 获取方式 计费或 BAR(计费/应收账款)模块。 示例 150.001200.5045.00 | |||
患者就诊活动
| 活动 | 描述 | ||
|---|---|---|---|
| 出院医嘱已下达 | 医生签署授权患者出院医嘱的时间戳。这标志着“出院计划”阶段的开始。 | ||
| 为何重要 为“出院计划提前期”设定基准。该基准与实际离院时间之间的差距反映了运营效率的低下。 获取方式 MEDITECH OE(医嘱录入)。筛选类别为“出院”的医嘱。 捕获 当执行“医嘱录入”事务时记录 事件类型 explicit | |||
| 分诊完成 | 表示急诊科初始护理评估的完成。这定义了患者的敏锐度等级和严重程度评分。 | ||
| 为何重要 对“急诊科流程分析”dashboard 衡量周转率和等待时间至关重要。 获取方式 MEDITECH EDM(急诊管理)模块。派生自 EDM 追踪器的状态变更或分诊评估文档的时间戳。 捕获 当状态字段更改为“已分诊”时记录 事件类型 explicit | |||
| 已下单 | 记录临床医生对服务、药物或诊断测试的请求。这是后续临床活动的触发事件。 | ||
| 为何重要 为“诊断服务周转时间”KPI 设定基准。将其与执行时间对比可识别服务交付中的延误。 获取方式 MEDITECH OE(医嘱录入)模块。使用“医嘱日期/时间”字段从“OeOrders”表中捕获。 捕获 当执行“医嘱录入”事务时记录 事件类型 explicit | |||
| 已给药 | 记录护理人员向患者实际给药的情况。通常通过床旁条码扫描捕获。 | ||
| 为何重要 支持“给药合规性”。识别护理单元中的安全风险和工作流中断。 获取方式 MEDITECH PHA(药房)或 eMAR(电子给药记录)。给药历史中的“执行日期时间”。 捕获 当执行“给药管理”事务时记录 事件类型 explicit | |||
| 患者已出院 | 就诊的行政关闭。患者已实际离开,床位已释放。 | ||
| 为何重要 流程的正式结束。用于计算最终住院时长并定义 30 天再入院观察期。 获取方式 MEDITECH ADM(入院管理)。就诊记录中的“出院日期时间”字段。 捕获 当执行“患者出院”事务时记录 事件类型 explicit | |||
| 患者已挂号 | 该事件标志着系统中患者案例或就诊记录的行政创建。它捕获了进入 MEDITECH ADM(入院管理)模块的初始点。 | ||
| 为何重要 确定患者就诊流程的起点和周期时间计算。对于计算总住院时长至关重要。 获取方式 MEDITECH ADM 模块。源自“入院”表,特别是“入院日期时间”或事务日志创建时间戳。 捕获 当执行“新就诊”事务时记录 事件类型 explicit | |||
| 患者已转院/转科 | 表示患者从一个位置(单元/房间/床位)到另一个位置的物理移动。追踪在医院内的流动情况。 | ||
| 为何重要 “内部转运瓶颈”的关键。转运时间过长表示资源竞争或勤务延迟。 获取方式 MEDITECH ADM(入院管理)。从“位置历史”或“房床”事务日志中捕获。 捕获 当执行“患者转院/转科”事务时记录 事件类型 explicit | |||
| 诊断已记录 | 临床医生将编码诊断 (ICD-10) 录入患者记录的环节点。这通常会触发特定的临床路径。 | ||
| 为何重要 通过对 case 进行分类来支持“临床路径差异分析”。这对于将患者分组进行比较至关重要。 获取方式 MEDITECH ABS(病案摘录)或病案记录模块。在诊断代码与账户关联时捕获。 捕获 当执行“诊断录入”事务时记录 事件类型 explicit | |||
| 诊断结果已核实 | 表示诊断检查(化验或放射)已执行,且结果已由技术员或放射科医生签署。这有效地完成了诊断医嘱的闭环。 | ||
| 为何重要 “诊断服务周转”的终点。对于分析辅助科室的瓶颈至关重要。 获取方式 MEDITECH LAB 或 ITS(影像与治疗服务)模块。从结果状态变更为“已验证”或“已签署”时捕获。 捕获 当状态字段更改为“已核实”时记录 事件类型 explicit | |||
| 会诊已结束 | 专家评估的完成。通常通过特定文档类型的归档(如“心内科会诊记录”)推断。 | ||
| 为何重要 衡量专家响应能力的终点。对于确保诊疗及时推进至关重要。 获取方式 MEDITECH PCM(医生医嘱管理)或 EMR。从具有特定标题的文档创建时间戳推断。 捕获 对比状态字段的前后变化 事件类型 inferred | |||
| 会诊请求已发送 | 一种请求专家意见的特定类型医嘱。这会开启“专科会诊响应”dashboard 的计时。 | ||
| 为何重要 识别多学科护理协作中的瓶颈。此处等待时间过长会延长住院天数。 获取方式 MEDITECH OE(医嘱录入)。通过筛选“OeOrders”中类别为“会诊”的记录来识别。 捕获 当执行“医嘱录入”事务时记录 事件类型 explicit | |||
| 护理计划已启动 | 代表特定护理或跨学科护理计划的创建或分配。这对应于“已制定诊疗计划”的概念。 | ||
| 为何重要 衡量“诊疗计划制定速度”。此处的延迟通常预示着临床决策环节存在断层。 获取方式 MEDITECH PCS(患者护理系统)或护理管理器。标准护理计划应用于患者的时间戳。 捕获 当执行“添加护理计划”事务时记录 事件类型 explicit | |||
| 标本已采集 | 记录实验室分析生物样本的实际采集。此活动连接了医嘱下达与样本处理环节。 | ||
| 为何重要 这一细粒度步骤通常是诊断周期延误的原因。有助于区分护理延误与实验室延误。 获取方式 MEDITECH LAB 模块。通常在采血人员扫描条形码或将样本状态更新为“已采集”时捕获。 捕获 当执行“采集标本”事务时记录 事件类型 explicit | |||
| 随访已预约 | 为患者预约未来的复诊。此活动支持出院后的护理连续性。 | ||
| 为何重要 支持“随访预约排定”分析。与更低的再入院率相关。 获取方式 MEDITECH SCH(预约调度)。通过将临近出院日期创建的新预约记录链接到患者 ID 来推断。 捕获 通过对比“预约创建日期”与“出院日期”字段得出 事件类型 inferred | |||
提取指南
步骤
识别 Data Repository 服务器:定位托管 MEDITECH Data Repository (DR) 的 Microsoft SQL Server 实例。这与事务型 M-AT 或基于文件的数据库不同。您需要只读凭据(通常是服务帐户)。
确定架构版本:Magic、Client/Server (6.x) 和 Expanse 之间的 MEDITECH DR 结构略有不同。以下查询使用标准命名约定(例如 AdmVisits、OeOrders)。请在本地 SQL Server Management Studio (SSMS) 的对象资源管理器中核对这些表名。
定义范围:确定患者就诊的主表。根据您的 DR 配置,该表通常命名为 AdmVisits、RegAcct 或 AbstractData。查询使用 AdmVisits 作为患者周期的锚点。
准备 SQL 环境:打开 SSMS 并连接到 DR。打开一个新的查询窗口。确保切换到正确的数据库环境(通常名为 livedb 或类似名称)。
配置参数:在提供的 SQL 脚本中,替换日期范围(例如 '2023-01-01')和机构标识符(如果您的 DR 托管多个站点)的占位符。
执行提取:运行完整的 T-SQL 脚本。它利用公用表表达式 (CTE) 首先定义目标人群,然后通过 UNION ALL 多个数据源来创建标准化的事件日志。
处理 NULL 属性:查询包含处理 timestamp 中可能出现的 NULL 值的逻辑(在适当处使用 COALESCE),并确保关键连接键 (SourceID/VisitID) 存在。
验证分诊和急诊数据:MEDITECH 在特定模块中存储 ED 数据。如果您正在分析急诊工作流,请确保 EdVisits 或 NurInterventions 表中有数据。
验证医嘱类别:查询根据类别 urn 或助记符分离一般医嘱、会诊医嘱和出院医嘱。您可能需要调整特定的 WHERE 子句以匹配您机构特定的助记符字典。
导出数据:结果返回后,右键单击 SSMS 中的结果网格,选择“将结果另存为 CSV”。确保包含列标题。
最终格式化:在导入 ProcessMind 之前,打开 CSV 验证日期格式是否符合 ISO 8601 标准 (YYYY-MM-DD HH:MM:SS)。
配置
- 数据库访问:需要 MEDITECH DR SQL 数据库的 db_datareader 权限。
- 日期范围:建议提取 3 到 6 个月的已出院患者数据,以确保捕获完整的流程周期。
- 机构过滤:如果 DR 包含多机构数据,请按 FacilityID 或 SourceSystemID 过滤 BaseVisits CTE。
- 就诊定义:脚本使用唯一的 VisitID(通常称为账号或就诊编号)作为 Case ID。
- 性能优化:查询使用 CTE 锚点来限制扫描范围。请确保 AdmVisits 表的 AdmitDate 和 DischargeDate 已建立索引,以实现最佳查询性能。
- 数据延迟:根据站点配置,Data Repository 传输可能有 15 分钟到 24 小时的延迟。请确认 LastDataUpdate timestamp。
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');