您的患者就医旅程 data template
您的患者就医旅程 data template
- 推荐的临床背景属性
- 用于追踪的关键流程里程碑
- Epic EHR 的特定提取指南
患者就医旅程属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventTimestamp | 活动发生的精确日期和时间。 | ||
| 描述 此属性记录 该字段的准确性对于识别瓶颈至关重要。通过为起点和终点提供时间锚点,它支持了“分诊吞吐量”和“确诊时间” 为何重要 支持计算周期时间、前置时间以及流程排序。 获取方式 取决于源表的各种 示例 2023-10-15T08:30:00Z2023-10-15T09:15:22Z2023-10-16T14:20:00Z | |||
| 患者诊疗阶段 PatientEpisodeId | 特定患者就诊或护理阶段的唯一标识符。 | ||
| 描述 “患者诊疗阶段”是 分析此属性可以重建端到端的患者就医旅程。它支持将分诊、诊断、治疗和出院活动关联为一个完整的流程实例。 为何重要 是将离散事件关联到单个流程案例中的基础关键键值。 获取方式 Epic Clarity 表:PAT_ENC,列:PAT_ENC_CSN_ID 示例 200459112200459113200459114200459115 | |||
| 活动名称 ActivityName | 执行的具体临床或行政操作。 | ||
| 描述 此属性捕捉患者就医旅程中发生的 在分析中,此字段构成流程图的节点。它派生自 EHR 中的各种交易代码和医嘱状态,用于创建易于阅读的 为何重要 定义流程步骤并实现工作流的可视化。 获取方式 提取自 CLARITY_ADT、ORDER_PROC 和 ORDER_MED 表。 示例 分诊完成已下达诊断检测医嘱患者已出院已给药 | |||
| 最后数据更新 LastDataUpdate | 数据提取或上次刷新的时间戳。 | ||
| 描述 此属性指示记录最后一次由 ETL 流水线处理的时间。它与 分析师利用它来确定 为何重要 有助于评估 Process Mining 数据的时效性和可靠性。 获取方式 ETL 系统时间戳。 示例 2023-10-27T23:59:59Z2023-10-28T06:00:00Z | |||
| 源系统 SourceSystem | `data` 的记录系统,通常为 Epic EHR。 | ||
| 描述 此属性标识 在分析中,它能确保 为何重要 为数据来源提供追溯性和背景。 获取方式 硬编码或提取自连接字符串配置。 示例 Epic EHREpic ClarityEpic Caboodle | |||
| 主要诊断代码 PrimaryDiagnosisCode | 代表主诊断的 ICD-10 或内部代码。 | ||
| 描述 此属性记录患者确诊的医疗状况,通常在“确诊”活动期间填充。 它用于在“临床协议合规性视图”中按临床状况对 为何重要 根据临床相似性对案例进行分组,以便进行方案分析。 获取方式 Epic Clarity 表:PAT_ENC_DX,列:DX_ID 示例 J18.9I21.9E11.9 | |||
| 事件结束时间 EventEndTime | 活动完成时的 `timestamp`。 | ||
| 描述 虽然许多 它支持计算主动处理时间与等待时间的对比。这对于“诊断服务周期时间” 为何重要 支持计算活动时长和资源利用率。 获取方式 请参阅 Epic EHR 文档,查找 ORDER_PROC 表中具体的结束时间列。 示例 2023-10-15T09:45:00Z2023-10-16T15:00:00Z | |||
| 再入院标记 ReadmissionFlag | 指示患者是否在 30 天内意外回诊。 | ||
| 描述 此布尔属性标识该特定诊疗阶段后 30 天内,同一患者是否发生了另一次非计划入院。它是“30 天非计划再入院率”KPI 的核心。 在分析中,这作为一个主要的结果变量。导致标记为 “True” 的流程路径将被深入分析,以找出出院计划阶段的根本原因。 为何重要 识别失效的出院流程和医疗质量问题。 获取方式 通过 SQL 查询相同 MRN 的后续就诊记录计算得出。 示例 truefalse | |||
| 出院去向 DischargeDisposition | 患者出院后的去向(家、专业护理机构、死亡)。 | ||
| 描述 此属性记录患者离开医院后的去向,在“出院”活动处捕捉。 这对于“再入院风险” 为何重要 为医疗流程的结果提供背景信息。 获取方式 Epic Clarity 表:PAT_ENC,列:DISCH_DISP_C 示例 主页专业护理机构居家医疗护理 | |||
| 分诊分级 TriageAcuityLevel | 分诊期间分配给患者的严重程度评分。 | ||
| 描述 此属性指示患者病情的紧迫程度,通常采用评分制(如 ESI 1-5 级),在“分诊完成”活动期间捕捉。 它支持在“基于严重程度评分的资源强度” 为何重要 根据紧急程度和预期资源消耗对流程进行细分。 获取方式 请参阅 Epic EHR 文档中关于急诊日志“Acuity”字段的部分。 示例 1 - 复苏2 - 紧急3 - 迫切 | |||
| 医疗提供者 ID ProviderId | 执行该活动的个人或临床医生标识。 | ||
| 描述 此属性捕捉负责该 它被映射到“用户”通用属性,以分析资源差异和工作负载。请注意,对于自动化活动,这可能是系统用户 ID。 为何重要 支持分析不同人员之间的绩效差异和工作负荷。 获取方式 Epic Clarity 表:CLARITY_EMP,列:USER_ID 示例 EMP10023DOC5592系统 | |||
| 就诊类型 EncounterType | 患者就诊类别(如住院、急诊)。 | ||
| 描述 此属性对患者诊疗阶段的性质进行分类。常见值包括“急诊”、“住院”、“门诊”或“虚拟”。 映射到 “CaseType” 后,该字段成为过滤分析的基础。例如,“出院计划” 为何重要 为流程实例提供高层级的背景。 获取方式 Epic Clarity 表:PAT_ENC,列:ENC_TYPE_C 示例 紧急医院门诊住院 | |||
| 患者 MRN PatientMrn | 标识患者的病案号 (MRN)。 | ||
| 描述 MRN 是患者在整个医疗系统中的唯一标识符,与诊疗阶段 ID 不同。它支持跨多次就诊追踪患者病史。 此属性用于检测再入院,并为“再入院风险” 为何重要 对于识别重复就医和分析患者病史至关重要。 获取方式 Epic Clarity 表:PATIENT,列:PAT_ID 或 PAT_MRN_ID 示例 MRN-882910MRN-112003MRN-554211 | |||
| 部门名称 DepartmentName | 活动发生的医院单元或部门。 | ||
| 描述 此属性标识
为何重要 支持按组织架构进行过滤以及交接环节分析。 获取方式 Epic Clarity 表:CLARITY_DEP,列:DEPARTMENT_NAME 示例 急诊科放射科重症监护室 (ICU)儿科 | |||
| 区域名称 RegionName | 地理区域或医院院区。 | ||
| 描述 对于拥有多个院区的医疗系统,此属性可识别具体院点。它支持对不同院区的绩效进行比较。 映射至“区域(Region)”可实现多站点标杆分析,从而观察某家分院的分诊吞吐量是否优于其他分院。 为何重要 支持在整个医疗网络的不同机构间进行标杆对比。 获取方式 提取自科室或医疗机构主数据。 示例 北院区市中心西翼 | |||
| 协议遵守状态 ProtocolAdherenceStatus | 指示 `case` 是否遵循标准临床路径的状态。 | ||
| 描述 此属性将 其值可能包括“合规”、“跳过步骤”或“顺序不当”。这使临床负责人能够快速过滤不合规的 为何重要 快速识别偏离循证医疗标准的情况。 获取方式 在 Process Mining 工具内计算或通过 SQL 预处理。 示例 合规偏离路径未完成 | |||
| 开立医嘱者专业 OrderingProviderSpecialty | 申请会诊或检查的医生的医学专业。 | ||
| 描述 此属性捕捉开立医嘱者的部门或专业(如“心内科”、“肿瘤科”),用于“专家会诊延迟” 它有助于分析某些专业在获取内部服务时是否比其他专业面临更长的等待时间,从而揭示特定服务线中潜在的偏差或资源短缺。 为何重要 细分对诊断和会诊服务的需求。 获取方式 请参阅 Epic EHR 文档关于服务提供者主数据的部分。 示例 心内科内科骨科 | |||
| 是否为自动预约 IsAutomatedScheduling | 指示预约是否在无需人工干预的情况下自动执行的标记。 | ||
| 描述 此布尔属性派生自预约方式。如果预约是通过 MyChart 或自动化的 Cadence 它直接支持“随访预约自动化率”KPI,帮助运营领导者了解有多少行政负担已交由技术处理。 为何重要 衡量流程自动化的成功程度。 获取方式 提取自 SchedulingMethod。 示例 truefalse | |||
| 给药延迟时间 MedicationAdminDelay | 预定给药时间与实际给药时间之间的时间差。 | ||
| 描述 此属性计算预定给药时间与药物条形码实际扫描时间之间的偏差。这对于“给药绩效” 正值表示给药延迟。该指标可帮助护理主管识别因工作负载而影响及时护理交付的班次或单元。 为何重要 直接衡量护理工作流的遵循情况和患者安全。 获取方式 根据 MAR(给药记录)数据计算。 示例 15m-5m1h 20m | |||
| 诊断医嘱成本 DiagnosticOrderCost | 与诊断检查或处置相关的内部成本。 | ||
| 描述 此属性为“已执行诊断检查”活动分配财务价值,支持在流程图上覆盖财务维度。 虽然这不是主要的临床指标,但它可以帮助管理层了解不同流程变体的财务权重,尤其是那些涉及高资源消耗严重程度评分的变体。 为何重要 为流程效率分析增加了财务维度。 获取方式 关联至该操作的账单或成本核算表。 示例 150.001200.0045.00 | |||
| 转科等待时长 TransferWaitDuration | 转科医嘱与实际转科之间经过的时间。 | ||
| 描述 该指标测量“下达转科医嘱”与“患者已转科”之间的时间差。它是“内科转科分析”的主要 此处数值较高表示存在“压床”(患者等待床位),这会阻塞来自急诊科的上游流量。 为何重要 突出显示患者流中的物流和容量瓶颈。 获取方式 计算医嘱与转科事件之间的时间差。 示例 2h 30m45m12h | |||
| 预约方式 SchedulingMethod | 指示随访预约的预定方式。 | ||
| 描述 此属性捕捉用于预约的渠道,例如 “MyChart”、“Cadence Auto” 或“前台”。这对于“门诊随访自动化状态” 如果该值指示系统或患者主导的数字渠道,则可以将 “IsAutomated” 标记设为 true。这突显了数字化转型举措的成效。 为何重要 追踪自动化或自助工具的使用情况。 获取方式 请参阅 Epic EHR 文档关于预约创建来源的部分。 示例 MyChartCadence电话线下就诊 | |||
患者就医旅程活动
| 活动 | 描述 | ||
|---|---|---|---|
| 分诊完成 | 初步护理评估或分诊评估的完成。通常在分诊流程图归档或分诊状态变为“完成”时捕捉。 | ||
| 为何重要 “分诊吞吐量与等待时间”仪表板的关键指标,用于衡量前端效率。此处的延迟会对整个治疗路径产生连锁反应。 获取方式 PAT_ENC_HSP.TRIAGE_END_TIME 或特定 Flowsheet 行归档的 捕获 签署分诊文档或状态字段更新时记录 事件类型 explicit | |||
| 患者已出院 | 住院就诊的正式关闭。当患者从在院名单中虚拟出院时捕捉。 | ||
| 为何重要 用于计算“住院时长”的诊疗阶段正式结束。对“患者流变体发现”至关重要。 获取方式 ADT 消息 (Event A03) 或 PAT_ENC_HSP.DISCH_TIME。 捕获 行政人员完成出院流程时记录 事件类型 explicit | |||
| 患者已登记 | 系统中患者就诊记录的初始创建,标志着护理阶段的开始。当患者到达登记处或急诊科并签入 Epic 时,系统会明确捕捉到此信息。 | ||
| 为何重要 建立整个患者就医全流程的锚点,并支持计算总住院时长。这对于“分诊吞吐量与等待时间”仪表板至关重要。 获取方式 ADT 消息 (Event A04 或 A01) 或 Clarity 表 PAT_ENC (HSP_ACCOUNT_ID 创建)。 捕获 执行“签到”或“入院”操作时记录 事件类型 explicit | |||
| 诊断已确认 | 在患者问题列表或就诊诊断字段中录入确诊信息。代表调查阶段的结束。 | ||
| 为何重要 “确诊时间”KPI 所需。标记从评估到针对性治疗的过渡。 获取方式 PAT_ENC_DX 表或与该就诊关联的 PROBLEM_LIST 更新。 捕获 临床医生在“就诊诊断”活动中添加条目时记录 事件类型 explicit | |||
| 下达转科医嘱 | 将患者转移到其他病房或护理级别的请求。在系统中体现为“申请床位”或“转科医嘱”。 | ||
| 为何重要 “平均转科时间”的起点。区分临床转科决定与病床物流可用性。 获取方式 ADT_TRANSFER_ORDER 或 ORDER_PROC (床位申请)。 捕获 医生录入转科医嘱时记录 事件类型 explicit | |||
| 会诊已完成 | 专家评估的完成,通常以签署会诊记录或结束会诊医嘱为标志。 | ||
| 为何重要 “专科会诊前置时间”的终点。表示已提供专家建议,治疗计划可以继续进行。 获取方式 HNO_NOTE_TEXT(类型为会诊的笔记记录)或 ORDER_PROC 状态变为“已完成”。 捕获 根据会诊笔记创建时间或医嘱状态更新推断得出 事件类型 inferred | |||
| 出院申请已签署 | 医生正式授权患者离开医院。这是 Epic 中的一个特定医嘱条目。 | ||
| 为何重要 “出院计划与执行”中的关键里程碑。该节点与实际离院之间的时间差反映了行政流程的滞后。 获取方式 ORDER_PROC 表,其中 type 为 “Discharge Patient”。 捕获 医生签署出院申请时记录 事件类型 explicit | |||
| 出院计划已启动 | 开始准备患者出院的相关活动。通过个案管理文档或特定的“出院”医嘱类型捕捉。 | ||
| 为何重要 “出院计划与执行”仪表板的关键指标。早期启动与缩短住院时长(LOS)呈正相关。 获取方式 HSP_DISCH_PLAN 的创建,或个案经理/社工录入的第一条笔记。 捕获 根据与出院导航员的首次交互或个案管理笔记推断得出 事件类型 inferred | |||
| 已下达诊断检测医嘱 | 录入影像学(放射科)或实验室服务医嘱。当医生在 CPOE 系统中录入并签署医嘱时捕捉。 | ||
| 为何重要 “诊断服务周期时间” 获取方式 ORDER_PROC 表,其中 ORDER_TYPE 为 Lab 或 Imaging/Radiology。 捕获 当医嘱状态变为“已签署”或“激活”时记录 事件类型 explicit | |||
| 已启动治疗计划 | 为患者分配特定的临床路径或协议。当标准医嘱集或诊疗计划应用于就诊背景时,即捕捉到此信息。 | ||
| 为何重要 通过标记遵循护理标准的意图,支持“临床协议合规性视图”。从此时点起可以测量与后续计划步骤的偏差。 获取方式 ORDER_SET_BKG 或诊疗计划表,表示该就诊已关联特定协议。 捕获 临床医生选择并签署医嘱套时记录 事件类型 explicit | |||
| 已执行诊断检测 | 诊断检查的实际执行或结果归档。对于实验室检查,指处理标本时;对于影像检查,指扫描完成时。 | ||
| 为何重要 “诊断检测平均周期”KPI 的终点。对于理解临床决策支持服务的延迟至关重要。 获取方式 ORDER_PROC.PROC_END_TIME,或当状态变为 “Completed” 或 “Resulted” 时的 ORDER_STAT_HISTORY。 捕获 技师完成任务或结果接口接收到数据时记录 事件类型 explicit | |||
| 已给药 | 护士或医疗人员向患者给药的行为。记录在给药记录(MAR)中。 | ||
| 为何重要 “给药绩效”仪表板的核心事件。追踪对“既定治疗计划”的执行合规性。 获取方式 MAR_ADMIN_INFO 表,特别是操作为“已给药(Given)”或“新药袋(New Bag)”的事件。 捕获 护士扫描患者腕带和药物(BCMA)时记录 事件类型 explicit | |||
| 已请求会诊 | 由专科医生对患者进行评估的医嘱。在 Epic 中被记录为“会诊”类型的特定操作医嘱。 | ||
| 为何重要 “专家会诊提前期”KPI 的起点。有助于识别特定医学专业的短缺情况。 获取方式 ORDER_PROC 表,其中 ORDER_CLASS 为 “Consult” 或特定的转诊医嘱。 捕获 签署会诊医嘱时记录 事件类型 explicit | |||
| 已预约随访 | 为患者预约未来的门诊。在与患者记录关联的 Cadence 预约模块中捕捉。 | ||
| 为何重要 支持“随访预约自动化率”。确保护理的连续性并有助于预防再入院。 获取方式 关联至患者 ID 的 PAT_ENC_APPT,在出院时间前后创建。 捕获 在 Cadence 中确认预约时段时记录 事件类型 explicit | |||
| 患者已转科 | 患者向新部门或病房的物理移动。通过 ADT 转科 `event` 捕捉。 | ||
| 为何重要 “平均病房间转运时间”的终点。支持“院内转运分析”,用于发现医院物流中的瓶颈。 获取方式 ADT 消息 (Event A02) 或 PAT_ENC_HSP_TRANSACTION (转入)。 捕获 病区文员在普查系统中更新患者位置时记录 事件类型 explicit | |||
提取指南
步骤
- 登录 Epic Hyperspace,通过“分析 (Analytics)”或“我的报表 (My Reports)”活动启动 Reporting Workbench (RWB)。
- 创建新报表:选择“库 (Library)”选项卡,搜索模板 “就诊搜索 (Encounter Search)” 或 “患者就诊 (Patient Encounters)”。此模板可提取由 CSN(就诊序列号)标识的详细接诊信息。
- 配置条件(设置选项卡):
- 设置日期范围(例如:出院日期 = 过去 90 天),以捕获已完成的就医环节。
- 按就诊类型(例如:“住院就诊”、“急诊”)进行过滤,排除无关的门诊访问。
- 如有特定范围需求,请按科室或医疗机构进行过滤。
- 配置显示列(显示选项卡):
- 这是提取数据的关键步骤。您必须搜索并添加对应各活动时间戳的特定列。
- 添加患者标识符:
CSN(就诊事件)、MRN(患者 ID)。 - 添加人口统计学/属性:
科室、出院去向、主诊断代码、责任医生。 - 添加时间戳列:搜索类似
入院时间、分诊结束时间、出院时间、下达出院医嘱时间、首次给药时间等列(具体映射请参见查询/配置部分)。
- 运行报表,并在预览窗口中核对结果。
- 导出数据:
- 点击工具栏 > 导出 (Export)。
- 选择 CSV 或 文本(制表符分隔) 格式。
- 确保勾选“包含列标题”。
- 将文件保存为
Raw_Epic_Extract.csv。
- 数据转换(至关重要):
- RWB 导出的原始数据通常是“宽表”(每行一个就诊事件,带多个时间戳列)。
- 您需要执行“逆透视 (Unpivot)”操作,将每个时间戳列转换为事件日志中的独立行。
- 生成包含以下列的最终文件:
PatientEpisodeId、ActivityName、EventTimestamp及映射属性。
- 格式化日期:确保
EventTimestamp符合 ProcessMind 兼容的 ISO 格式(YYYY-MM-DD HH:MM:SS)。 - 最终验证:确认文件标题包含
PatientEpisodeId、ActivityName、EventTimestamp,然后上传至 ProcessMind。
配置
- 模板选择:根据 Epic 版本使用“就诊搜索 (LBF)”或“查找患者”。
- 日期范围:初始提取建议限制在 3-6 个月内,以避免超时错误(RWB 并不适合超大规模的数据批量导出)。
- 行数限制:Epic RWB 通常有行数限制(如 25,000 或 50,000 行)。请确保日期范围内的记录不超过此限制,或分批次运行。
- 权限要求:需要 Reporting Workbench 的“创建”和“导出”安全权限点。
- 运行性能:如需查询大跨度的历史数据,请在非繁忙时段操作。
- 数据粒度:此方法提供的是“就诊级别”的摘要时间戳(如“首次给药”)。除非使用专门的“审计”模板,否则它不会提取每一个循环细节(如具体每一片药的给药时间),但这对于目前的分析场景已足够。
a 查询示例 config
[REPORT CONFIGURATION SPECIFICATION]
# GENERAL SETTINGS
Application: Epic Reporting Workbench
Template_ID: Encounter_Search_LBF
Time_Horizon: Discharge Date between [Start Date] and [End Date]
Filters: Encounter Type IN ('Hospital Encounter', 'Emergency')
# COLUMN SELECTION MAPPING
# Map the following Epic RWB Columns (Display Names) to the Output Activities.
# Note: Column names may vary slightly by Epic customized build.
[MANDATORY ATTRIBUTES]
Column: Contact Serial Number (CSN) -> Target: PatientEpisodeId
Column: Patient MRN -> Target: PatientMrn
Column: Department at Discharge -> Target: DepartmentName
Column: Discharge Disposition -> Target: DischargeDisposition
Column: Primary Diagnosis ICD-10 -> Target: PrimaryDiagnosisCode
Column: Attending Provider -> Target: ProviderId
Column: Current Date -> Target: LastDataUpdate
Column: System Name (Fixed 'Epic') -> Target: SourceSystem
[ACTIVITY TIMESTAMP MAPPING]
# These columns represent the 'EventTimestamp' for the specific 'ActivityName'
1. Activity: Patient Registered
Epic_Column: Hospital Admission Time OR Check-In Time
2. Activity: Triage Completed
Epic_Column: Triage End Time OR Triage Acuity Time
3. Activity: Care Plan Initiated
Epic_Column: Care Plan Start Date
4. Activity: Diagnostic Test Ordered
Epic_Column: First Lab Order Time OR First Imaging Order Time
(Note: Select 'Earliest' if multiple columns exist)
5. Activity: Diagnostic Test Performed
Epic_Column: First Lab Result Time OR First Imaging End Time
6. Activity: Diagnosis Confirmed
Epic_Column: Principal Diagnosis Problem List Date
7. Activity: Consultation Requested
Epic_Column: Consult Order Create Time
8. Activity: Consultation Completed
Epic_Column: Consult Complete Time
9. Activity: Medication Administered
Epic_Column: First Medication Administration Time
10. Activity: Transfer Ordered
Epic_Column: Transfer Order Time
11. Activity: Patient Transferred
Epic_Column: Last Transfer In Time OR ADT Event Time
12. Activity: Discharge Planning Initiated
Epic_Column: Case Management Start Date
13. Activity: Discharge Order Signed
Epic_Column: Discharge Order Time
14. Activity: Patient Discharged
Epic_Column: Hospital Discharge Time
15. Activity: Follow-up Appointment Scheduled
Epic_Column: Discharge Follow-Up Appointment Made Date
# TRANSFORMATION LOGIC (PSEUDO-CODE)
# The export will be 'Wide'. Apply this logic to create the Event Log:
FOR EACH Row IN Exported_CSV:
EpisodeID = Row['Contact Serial Number']
FUNCTION CreateEvent(ActivityName, TimestampColumn):
IF Row[TimestampColumn] IS NOT NULL:
OUTPUT_ROW = {
'PatientEpisodeId': EpisodeID,
'ActivityName': ActivityName,
'EventTimestamp': Row[TimestampColumn],
'PatientMrn': Row['Patient MRN'],
'DepartmentName': Row['Department at Discharge'],
... [All Attributes]
}
APPEND OUTPUT_ROW TO Event_Log
# Execute for all 15 mappings defined above
CreateEvent('Patient Registered', 'Hospital Admission Time')
CreateEvent('Triage Completed', 'Triage End Time')
... [Repeat for all mapped columns]
END LOOP 步骤
申请数据库访问权限:确保您拥有 Epic Clarity 控制台的读取权限,或已连接到 Clarity 生产/报表数据库的 SQL 客户端。您需要
PAT_ENC、ORDER_PROC、CLARITY_ADT、MAR_ADMIN_INFO及其关联参考表的访问权限。识别范围与过滤 ID:在运行完整脚本前,先执行简单的探测查询,确认您所在的 Epic 实例中检验、放射、会诊和转科的具体
ORDER_TYPE_C值,因为这些类别列表(Category Lists)在不同医院之间可能存在差异。配置时间窗口:在提供的 SQL 脚本中找到基于
CONTACT_DATE或HOSP_ADMSN_TIME过滤的WHERE子句。根据需要调整提取窗口(例如:过去 6 个月)。映射自定义流程单 (可选):如果您需要分诊或出院计划的精确时间戳,而这些信息未在主就诊表中记录,请识别对应字段的特定
FLO_MEAS_ID(Flowsheet Measure ID),并更新脚本中的占位符部分。执行查询:在您的 SQL 客户端(如 SSMS、Oracle SQL Developer)中运行完整的 SQL 脚本。脚本使用
UNION ALL将不同的临床事件整合为标准化的事件日志结构。后期处理:查询会返回一个扁平列表。请确认
EventTimestamp字段无空值。如果您的中间件有要求,请将数据库特定的日期时间格式转换为 ISO 8601(YYYY-MM-DDTHH:MM:SS)。导出数据:将结果集保存为 CSV 文件。确保标题与定义的特定属性(PatientEpisodeId、ActivityName 等)一致。
上传至 ProcessMind:将 CSV 导入 ProcessMind。将
PatientEpisodeId映射为 Case ID,ActivityName映射为 Activity,EventTimestamp映射为 Timestamp。
配置
- 数据库连接:Epic Clarity(通常为 MSSQL 或 Oracle 后端)。
- 日期过滤:基于
PAT_ENC.HOSP_ADMSN_TIME或PAT_ENC.CONTACT_DATE进行过滤。为了平衡查询性能,建议初始分析的时间范围设为 3-6 个月。 - 就诊类型:脚本会自动过滤住院和急诊记录(
ENC_TYPE_C值通常为 3 和 50,但请根据ZC_ENC_TYPE进行核实)。 - 医嘱类型:需要根据本地 ZC_ORDER_TYPE 配置,对检验、影像和会诊的
ORDER_TYPE_C值进行自定义。 - 性能优化:脚本会扫描高数据量的表(
ORDER_PROC、CLARITY_ADT)。请确保已建立适当的索引,或选择在非高峰时段运行。
a 查询示例 sql
WITH Cohort AS (
SELECT
pe.PAT_ENC_CSN_ID,
pe.PAT_ID,
pe.HOSP_ADMSN_TIME,
pe.HOSP_DISCH_TIME,
pe.DEPARTMENT_ID,
dep.DEPARTMENT_NAME,
emp.NAME AS ProviderName,
pat.PAT_MRN_ID,
pe.ACUITY_LEVEL_C,
disch.NAME AS DischargeDisposition,
pe.ENC_TYPE_C
FROM PAT_ENC pe
LEFT JOIN CLARITY_DEP dep ON pe.DEPARTMENT_ID = dep.DEPARTMENT_ID
LEFT JOIN CLARITY_EMP emp ON pe.VISIT_PROV_ID = emp.PROV_ID
LEFT JOIN PATIENT pat ON pe.PAT_ID = pat.PAT_ID
LEFT JOIN ZC_DISCH_DISP disch ON pe.DISCH_DISP_C = disch.DISCH_DISP_C
WHERE pe.HOSP_ADMSN_TIME >= DATEADD(month, -6, GETDATE())
AND pe.ENC_TYPE_C IN (3, 50) -- 3=Inpatient, 50=Emergency (Verify local codes)
)
-- 1. Patient Registered
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)) AS PatientEpisodeId,
'Patient Registered' AS ActivityName,
c.HOSP_ADMSN_TIME AS EventTimestamp,
c.DepartmentName,
c.ProviderName AS ProviderId,
c.PAT_MRN_ID AS PatientMrn,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)) AS TriageAcuityLevel,
CAST(c.ENC_TYPE_C AS VARCHAR(50)) AS EncounterType,
NULL AS PrimaryDiagnosisCode,
NULL AS ReadmissionFlag,
c.DischargeDisposition,
'Epic EHR' AS SourceSystem,
GETDATE() AS LastDataUpdate
FROM Cohort c
WHERE c.HOSP_ADMSN_TIME IS NOT NULL
UNION ALL
-- 2. Triage Completed (Using Flowsheet or Triage Time)
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Triage Completed',
ISNULL(pe.TRIAGE_END_INSTANT, c.HOSP_ADMSN_TIME), -- Fallback if specific column unused
c.DepartmentName,
c.ProviderName,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN PAT_ENC pe ON c.PAT_ENC_CSN_ID = pe.PAT_ENC_CSN_ID
WHERE pe.TRIAGE_END_INSTANT IS NOT NULL
UNION ALL
-- 3. Care Plan Initiated (Based on Order Type)
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Care Plan Initiated',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C = 100 -- Placeholder: Replace with ID for Care Plan/Protocol
UNION ALL
-- 4. Diagnostic Test Ordered (Lab/Radiology)
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Diagnostic Test Ordered',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C IN (1, 2) -- Placeholder: 1=Lab, 2=Radiology (Verify local codes)
UNION ALL
-- 5. Diagnostic Test Performed (Result Time or Procedure Start)
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Diagnostic Test Performed',
COALESCE(ord2.PROC_START_TIME, ord2.PROC_ENDING_TIME, ord.ORDER_INST),
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
JOIN ORDER_PROC_2 ord2 ON ord.ORDER_PROC_ID = ord2.ORDER_PROC_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C IN (1, 2)
AND ord2.PROC_START_TIME IS NOT NULL
UNION ALL
-- 6. Diagnosis Confirmed
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Diagnosis Confirmed',
dx.NOTED_DATE,
c.DepartmentName,
c.ProviderName,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
edg.DX_NAME,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN PAT_ENC_DX dx ON c.PAT_ENC_CSN_ID = dx.PAT_ENC_CSN_ID
JOIN CLARITY_EDG edg ON dx.DX_ID = edg.DX_ID
WHERE dx.NOTED_DATE IS NOT NULL
UNION ALL
-- 7. Consultation Requested
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Consultation Requested',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C = 35 -- Placeholder: Replace with ID for Consult
UNION ALL
-- 8. Consultation Completed
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Consultation Completed',
ord.ORDER_END_TIME,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C = 35 -- Placeholder: Replace with ID for Consult
AND ord.ORDER_STATUS_C = 5 -- Placeholder: 5=Completed
AND ord.ORDER_END_TIME IS NOT NULL
UNION ALL
-- 9. Medication Administered
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Medication Administered',
mar.TAKEN_TIME,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_MED med ON c.PAT_ENC_CSN_ID = med.PAT_ENC_CSN_ID
JOIN MAR_ADMIN_INFO mar ON med.ORDER_MED_ID = mar.ORDER_MED_ID
LEFT JOIN CLARITY_EMP emp ON mar.TAKEN_USER_ID = emp.USER_ID
WHERE mar.TAKEN_TIME IS NOT NULL
AND mar.MAR_ACTION_C = 1 -- Placeholder: 1=Given
UNION ALL
-- 10. Transfer Ordered
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Transfer Ordered',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C = 60 -- Placeholder: Replace with ID for Transfer/Bed Request
UNION ALL
-- 11. Patient Transferred
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Patient Transferred',
adt.EFFECTIVE_TIME,
dep.DEPARTMENT_NAME,
c.ProviderName,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN CLARITY_ADT adt ON c.PAT_ENC_CSN_ID = adt.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_DEP dep ON adt.DEPARTMENT_ID = dep.DEPARTMENT_ID
WHERE adt.EVENT_TYPE_C = 3 -- 3=Transfer In
UNION ALL
-- 12. Discharge Planning Initiated
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Discharge Planning Initiated',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.ORDER_TYPE_C = 70 -- Placeholder: Case Management/Discharge Order Type
UNION ALL
-- 13. Discharge Order Signed
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Discharge Order Signed',
ord.ORDER_INST,
c.DepartmentName,
emp.NAME,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN ORDER_PROC ord ON c.PAT_ENC_CSN_ID = ord.PAT_ENC_CSN_ID
LEFT JOIN CLARITY_EMP emp ON ord.ORDERING_PROV_ID = emp.PROV_ID
WHERE ord.PROC_CODE = 'DISCHARGE' -- Placeholder: Filter by specific discharge procedure code
UNION ALL
-- 14. Patient Discharged
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Patient Discharged',
c.HOSP_DISCH_TIME,
c.DepartmentName,
c.ProviderName,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
WHERE c.HOSP_DISCH_TIME IS NOT NULL
UNION ALL
-- 15. Follow-up Appointment Scheduled
SELECT
CAST(c.PAT_ENC_CSN_ID AS VARCHAR(50)),
'Follow-up Appointment Scheduled',
next_pe.APPT_MADE_DATE,
c.DepartmentName,
c.ProviderName,
c.PAT_MRN_ID,
CAST(c.ACUITY_LEVEL_C AS VARCHAR(50)),
CAST(c.ENC_TYPE_C AS VARCHAR(50)),
NULL,
NULL,
c.DischargeDisposition,
'Epic EHR',
GETDATE()
FROM Cohort c
JOIN PAT_ENC next_pe ON c.PAT_ID = next_pe.PAT_ID
WHERE next_pe.APPT_MADE_DATE BETWEEN c.HOSP_ADMSN_TIME AND ISNULL(c.HOSP_DISCH_TIME, GETDATE())
AND next_pe.CONTACT_DATE > c.HOSP_ADMSN_TIME -- The appointment is for a future date relative to admission