患者就医旅程数据模板
患者就医旅程数据模板
- 用于临床背景分析的建议属性
- 跟踪流程的关键节点
- Epic EHR数据提取专项指南
患者就医旅程属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间戳 EventTimestamp | 活动发生的准确日期和时间。 | ||
| 说明 此属性记录事件在Epic系统中登记的准确时间,用于排列活动顺序并计算各类时长指标,例如住院时长和周期时间。 准确记录此字段对于识别瓶颈至关重要。它为起点和终点提供时间依据,支持分诊吞吐量和确诊时间仪表板。 重要性 可用于计算周期时间、前置时间和流程顺序。 获取途径 根据来源表选择相应的时间戳列,例如EFFECTIVE_TIME、ORDER_TIME。 示例 2023-10-15T08:30:00Z2023-10-15T09:15:22Z2023-10-16T14:20:00Z | |||
| 患者就诊阶段 PatientEpisodeId | 用于唯一标识特定患者就诊或护理阶段的标识符。 | ||
| 说明 患者就诊阶段是流程挖掘的主要案例标识符。它将同一段连续护理期间的所有临床、行政和后勤事件归为一组,例如住院或急诊就诊。在Epic Clarity中,这通常对应联系序列号(CSN)或就诊ID。 分析此属性可重建患者从头到尾的就诊历程,并将分诊、诊断、治疗和出院活动关联为一个完整的流程实例。 重要性 这是将不同事件关联到同一流程案例的基础键。 获取途径 Epic Clarity表:PAT_ENC,列:PAT_ENC_CSN_ID 示例 200459112200459113200459114200459115 | |||
| 活动名称 ActivityName | 执行的具体临床或行政操作。 | ||
| 说明 此属性记录患者就诊过程中发生的事件名称,例如“患者已登记”“已给药”或“已签署出院医嘱”。它是定义流程顺序的核心要素。 在分析中,此字段构成流程图中的节点。系统会根据EHR中的各类交易代码和医嘱状态生成此字段,形成便于阅读的事件日志。 重要性 它定义流程步骤,并支持工作流可视化。 获取途径 根据CLARITY_ADT、ORDER_PROC和ORDER_MED表生成。 示例 完成分诊开立诊断检查患者出院完成给药 | |||
| 数据最近更新时间 LastDataUpdate | 数据提取或最近刷新的时间戳。 | ||
| 说明 此属性表示记录最近一次经过ETL管道处理的时间。它不同于事件时间戳,可用于监控数据的新鲜度。 分析人员可据此判断仪表板是否反映实时情况,或是否存在数据延迟,从而影响分诊等待时间等KPI的准确性。 重要性 有助于评估流程挖掘数据的时效性和可靠性。 获取途径 ETL系统时间戳。 示例 2023-10-27T23:59:59Z2023-10-28T06:00:00Z | |||
| 源系统 SourceSystem | 数据的记录系统,通常为Epic EHR。 | ||
| 说明 此属性用于标识数据来源。此视图的数据主要来自Epic EHR;如果与独立的LIS(实验室信息系统)或计费系统等其他系统的数据合并,此属性也很有用。 分析时,它有助于追踪数据来源。如果某些事件缺失或与源数据不符,也便于排查问题。 重要性 它提供数据来源的可追溯性和背景信息。 获取途径 硬编码,或根据连接字符串配置生成。 示例 Epic EHREpic ClarityEpic Caboodle | |||
| 主要诊断代码 PrimaryDiagnosisCode | 表示主要诊断的ICD-10代码或内部代码。 | ||
| 说明 此属性记录患者确诊的病情,通常在“确诊”活动中填写。 它用于按临床病情对案例分组,以支持临床方案一致性视图。映射到“产品”后,分析人员可以了解不同病情对应的护理流程有何差异。 重要性 按临床相似性对案例分组,以便分析诊疗方案。 获取途径 Epic Clarity表:PAT_ENC_DX,列:DX_ID 示例 J18.9I21.9E11.9 | |||
| 事件结束时间 EventEndTime | 活动完成时的时间戳。 | ||
| 说明 许多事件是瞬时发生的,但诊断检查或会诊等活动会持续一段时间。此属性记录活动完成时间。 它可用于计算实际处理时间和等待时间,尤其适用于诊断服务周期时间仪表板。 重要性 可用于计算活动时长和资源利用率。 获取途径 有关ORDER_PROC中的具体结束时间列,请参阅Epic EHR文档。 示例 2023-10-15T09:45:00Z2023-10-16T15:00:00Z | |||
| 再入院标记 ReadmissionFlag | 表示患者是否在30天内意外再次入院。 | ||
| 说明 此布尔属性用于识别同一患者在30天内是否因非计划入院再次入院。它是30天非计划再入院率KPI的核心数据。 在分析中,它是重要的结果变量。分析人员会检查标记为“True”的流程路径,以查找出院计划阶段的问题根源。 重要性 用于识别出院流程问题和护理质量问题。 获取途径 通过SQL查询同一MRN对应的后续就诊记录计算得出。 示例 truefalse | |||
| 出院去向 DischargeDisposition | 患者出院后的去向,例如回家、前往专业护理机构或死亡。 | ||
| 说明 此属性记录患者离开医院后的去向,在“患者已出院”活动中填写。 它是再入院风险仪表板的重要依据,因为出院后前往专业护理机构(SNF)的患者与回家的患者,再入院风险特征不同。 重要性 为护理流程结果提供背景信息。 获取途径 Epic Clarity表:PAT_ENC,列:DISCH_DISP_C 示例 回家专业护理机构居家护理 | |||
| 分诊紧急程度 TriageAcuityLevel | 分诊时为患者评定的病情严重程度。 | ||
| 说明 此属性表示患者病情的紧急程度,通常按等级划分,例如ESI 1至5级。该属性在“分诊完成”活动中记录。 它可用于按严重程度评分分析资源需求强度。病情严重程度高的患者与病情较轻的患者会经历不同的流程路径,此字段有助于区分这些流程变体。 重要性 根据紧急程度和预期资源消耗划分流程。 获取途径 有关急诊日志中的病情严重程度字段,请参阅Epic EHR文档。 示例 1 - 复苏2 - 紧急3 - 急迫 | |||
| 医务人员ID ProviderId | 执行活动的用户或临床人员标识符。 | ||
| 说明 此属性记录负责事件的工作人员唯一ID,例如给药的护士或签署出院医嘱的医生。 该属性映射到通用属性“用户”,用于分析不同人员的工作差异和工作量。对于自动执行的活动,此处可能记录系统用户ID。 重要性 可用于分析不同工作人员的绩效差异和工作量。 获取途径 Epic Clarity表:CLARITY_EMP,列:USER_ID 示例 EMP10023DOC5592SYSTEM | |||
| 就诊类型 EncounterType | 患者就诊的分类,例如住院或急诊。 | ||
| 说明 此属性用于对患者就诊阶段分类。常见值包括“急诊”“住院”“门诊”或“远程就诊”。 此字段映射到“案例类型”,是筛选分析数据的基础。例如,出院计划仪表板主要适用于住院就诊,而分诊则针对急诊就诊。 重要性 为流程实例提供整体背景信息。 获取途径 Epic Clarity表:PAT_ENC,列:ENC_TYPE_C 示例 急诊医院门诊住院 | |||
| 患者病历号 PatientMrn | 用于标识患者的病历号。 | ||
| 说明 MRN是患者在医疗系统中的唯一标识符,与就诊阶段ID不同,可用于追踪患者多次就诊的历史记录。 此属性用于识别再入院,并关联不同就诊阶段,以支持再入院风险仪表板。它映射到通用模型中的“客户”。 重要性 对于识别重复就诊和分析患者病史至关重要。 获取途径 Epic Clarity表:PATIENT,列:PAT_ID或PAT_MRN_ID 示例 MRN-882910MRN-112003MRN-554211 | |||
| 科室名称 DepartmentName | 活动发生的医院病区或科室。 | ||
| 说明 此属性标识事件发生的职能地点,例如急诊科、放射科或普通外科病区。它是院内病区转移分析的重要依据。 数据可用于按科室划分流程图,帮助管理者区分本病区的瓶颈与全院范围的问题。 重要性 可用于按组织筛选数据并分析交接情况。 获取途径 Epic Clarity表:CLARITY_DEP,列:DEPARTMENT_NAME 示例 急诊科放射科ICU儿科 | |||
| 区域名称 RegionName | 地理区域或医院院区。 | ||
| 说明 对于拥有多个院区的医疗系统,此属性用于标识医疗机构所在地,可比较不同医院的绩效。 映射到“区域”后,可进行多院区对标,了解哪家医院的分诊吞吐量管理得更好。 重要性 可用于比较医疗网络中不同医疗机构的表现。 获取途径 根据科室或医疗机构主数据生成。 示例 北院区市中心西翼 | |||
| 开单医生专科 OrderingProviderSpecialty | 申请会诊或检查的医生所属专科。 | ||
| 说明 此属性记录开单医生所属科室或专科,例如心脏科、肿瘤科。它用于专科会诊等待时间仪表板。 它有助于分析不同专科使用院内服务时的等待时间是否存在差异,从而发现特定服务线可能存在的不公平情况或资源短缺。 重要性 按需求类别划分诊断和会诊服务。 获取途径 有关医务人员主数据,请参阅Epic EHR文档。 示例 心脏科内科骨科 | |||
| 是否自动排班 IsAutomatedScheduling | 用于标记预约是否在没有工作人员介入的情况下完成。 | ||
| 说明 此布尔属性根据预约方式生成。如果通过MyChart或Cadence自动化工作流完成预约,则该值为True。 它直接支持随访预约自动化率KPI,帮助运营管理者了解技术为行政工作减轻了多少负担。 重要性 用于衡量流程自动化成效。 获取途径 根据SchedulingMethod生成。 示例 truefalse | |||
| 诊断检查费用 DiagnosticOrderCost | 诊断检查或操作对应的内部费用。 | ||
| 说明 此属性为“完成诊断检查”活动赋予财务金额,可在流程图中叠加财务信息。 虽然它不是主要临床指标,但有助于管理部门了解不同流程变体的财务影响,尤其是涉及高资源需求严重程度评分的流程。 重要性 为流程效率分析增加财务维度。 获取途径 与相关操作关联的计费或成本核算表。 示例 150.001200.0045.00 | |||
| 诊疗方案遵循状态 ProtocolAdherenceStatus | 表示案例是否遵循标准临床路径的状态。 | ||
| 说明 此属性将案例中的活动顺序与定义的参考模型(标准操作规程)进行比较,用于支持临床方案一致性视图。 可能的值包括“符合要求”“跳过步骤”或“顺序错误”。临床负责人可据此快速筛选出不符合要求的案例,无需逐一检查每张流程图。 重要性 可快速识别偏离循证护理标准的情况。 获取途径 在流程挖掘工具中计算,或通过SQL预处理。 示例 符合要求偏离要求未完成 | |||
| 转移等待时长 TransferWaitDuration | 从开具转移医嘱到实际完成转移所经过的时间。 | ||
| 说明 此指标衡量“已开具转移医嘱”与“患者已转移”之间的时间差,是院内病区转移分析的主要数据点。 数值较高表示患者可能在等待床位,这会阻碍急诊科上游流程的推进。 重要性 用于发现患者流转中的后勤和容量瓶颈。 获取途径 根据医嘱和转移事件的时间戳差值计算。 示例 2小时30分钟45分钟12小时 | |||
| 预约方式 SchedulingMethod | 表示随访预约的方式。 | ||
| 说明 此属性记录预约所用的渠道,例如“MyChart”“Cadence自动排班”或“前台”。它是门诊随访自动化状态仪表板的重要依据。 如果该值表示通过系统或患者自主使用的数字渠道预约,则可将“IsAutomated”标记设为true。此属性可用于评估数字化转型举措的成效。 重要性 用于追踪自动化或自助工具的使用情况。 获取途径 有关预约创建来源,请参阅Epic EHR文档。 示例 MyChartCadence电话现场预约 | |||
患者就医旅程活动
| 活动 | 说明 | ||
|---|---|---|---|
| 完成分诊 | 完成初步护理评估或分诊评估。通常在提交分诊流程表,或分诊状态变为“Complete”时记录。 | ||
| 重要性 对于衡量前端效率的“分诊处理量与等待时间”仪表板至关重要。此处的延误会影响整个护理路径。 获取途径 PAT_ENC_HSP.TRIAGE_END_TIME,或特定流程表行的提交时间戳(FLO_MEASUREMENT)。 采集 分诊记录签署或状态字段更新时记录 事件类型 explicit | |||
| 患者出院 | 正式结束住院就诊记录,患者从住院名册中移除时记录。 | ||
| 重要性 用于计算“住院时间”的就医过程正式终点,也是“患者流转路径变体发现”的重要事件。 获取途径 ADT Feed(事件A03),或PAT_ENC_HSP.DISCH_TIME。 采集 行政人员完成出院工作流时记录 事件类型 explicit | |||
| 患者完成登记 | 系统中首次创建患者就诊记录,标志着护理过程开始。患者到达登记处或急诊科并在Epic中完成登记时,系统会明确记录此事件。 | ||
| 重要性 为整个患者就医过程确定起点,并支持计算总住院时间。也是“分诊处理量与等待时间”仪表板的重要数据。 获取途径 ADT Feed(事件A04或A01),或Clarity表PAT_ENC(创建HSP_ACCOUNT_ID)。 采集 执行“Check In”或“Admit”事务时记录 事件类型 explicit | |||
| 确认诊断 | 将确诊结果录入患者问题列表或就诊诊断字段,标志着检查阶段结束。 | ||
| 重要性 “明确诊断所需时间”KPI所需事件,标志着流程从评估转入针对性治疗。 获取途径 PAT_ENC_DX表,或与就诊记录关联的PROBLEM_LIST更新。 采集 临床人员在就诊诊断活动中添加记录时记录 事件类型 explicit | |||
| 启动出院计划 | 开始为患者出院做准备,通过病例管理记录或特定的“Discharge”医嘱类型记录。 | ||
| 重要性 “出院计划与执行”仪表板的关键事件。提前启动出院计划与缩短住院时间相关。 获取途径 创建HSP_DISCH_PLAN,或病例管理人员/社会工作者首次录入记录。 采集 根据首次使用出院导航工具或首次录入病例管理记录的时间推断 事件类型 inferred | |||
| 启动护理计划 | 为患者指定具体的临床路径或方案。在就诊记录中应用标准医嘱集或护理计划时记录。 | ||
| 重要性 此事件标记了遵循护理标准的意图,是“临床方案一致性视图”的依据。从此时起可衡量后续计划步骤的偏离情况。 获取途径 ORDER_SET_BKG或护理计划表,显示方案已关联至就诊记录。 采集 临床人员选择并签署医嘱集时记录 事件类型 explicit | |||
| 完成会诊 | 完成专科评估,通常以签署会诊记录或关闭会诊医嘱为标志。 | ||
| 重要性 “专科会诊响应时间”的终点,表示专科意见已提供,护理计划可以继续推进。 获取途径 HNO_NOTE_TEXT(类型为Consult的已提交记录),或ORDER_PROC状态变为Completed。 采集 根据会诊记录创建时间或医嘱状态更新时间推断 事件类型 inferred | |||
| 完成患者转运 | 将患者实际转至新的科室或病区,通过ADT转运事件记录。 | ||
| 重要性 “病区间平均转运时间”的终点,也支持“院内病区转运分析”,以发现医院协调中的瓶颈。 获取途径 ADT Feed(事件A02),或PAT_ENC_HSP_TRANSACTION(Transfer In)。 采集 病区文员在Census中更新患者位置时记录 事件类型 explicit | |||
| 完成给药 | 护士或医疗服务提供方为患者给药,并记录在用药管理记录(MAR)中。 | ||
| 重要性 “用药执行情况”仪表板的核心事件,用于追踪“制定治疗计划”后的方案执行情况。 获取途径 MAR_ADMIN_INFO表中action为“Given”或“New Bag”的事件。 采集 护士扫描患者腕带和药品条码(BCMA)时记录 事件类型 explicit | |||
| 完成诊断检查 | 实际执行诊断检查或提交检查结果。实验室检查在样本处理时记录,影像检查则在扫描完成时记录。 | ||
| 重要性 “诊断检查平均周期时间”KPI的终点。对于了解临床决策支持服务中的延误至关重要。 获取途径 ORDER_PROC.PROC_END_TIME,或状态变为“Completed”或“Resulted”时的ORDER_STAT_HISTORY记录。 采集 技术人员完成任务或结果接口收到数据时记录 事件类型 explicit | |||
| 已安排随访预约 | 为患者预约未来的门诊就诊,并记录在与患者档案关联的Cadence排班模块中。 | ||
| 重要性 用于支持“随访预约自动化率”。确保护理连续性,并有助于预防再入院。 获取途径 PAT_ENC_APPT与患者ID关联,在接近出院时创建。 采集 在Cadence中确认预约时段后记录 事件类型 explicit | |||
| 开立诊断检查 | 开立影像学(放射科)或实验室检查医嘱。医生在CPOE系统中录入并签署医嘱时记录。 | ||
| 重要性 “诊断服务周期时间”仪表板的起点。如果此处医嘱量很大,却没有相应结果,则可能存在瓶颈。 获取途径 ORDER_PROC表中ORDER_TYPE为Lab或Imaging/Radiology的记录。 采集 医嘱状态变为“Signed”或“Active”时记录 事件类型 explicit | |||
| 开立转运医嘱 | 申请将患者转至其他科室或护理级别。在系统中记录为“Bed Request”或“Transfer Order”。 | ||
| 重要性 “病区间平均转运时间”的起点,用于区分临床转运决策与床位实际可用之间的时间。 获取途径 ADT_TRANSFER_ORDER或ORDER_PROC(Bed Request)。 采集 医生录入转运医嘱时记录 事件类型 explicit | |||
| 申请会诊 | 申请专科医生评估患者。在Epic中记录为特定的“Consult”程序医嘱类型。 | ||
| 重要性 “专科会诊响应时间”KPI的起点,有助于识别特定专科的人员短缺。 获取途径 ORDER_PROC中ORDER_CLASS为“Consult”的记录,或特定转诊医嘱。 采集 会诊医嘱签署时记录 事件类型 explicit | |||
| 签署出院医嘱 | 医生正式批准患者离院,在Epic中作为特定医嘱录入。 | ||
| 重要性 “出院计划与执行”的关键节点。从签署医嘱到患者实际离院的间隔反映了行政处理延误。 获取途径 ORDER_PROC中类型为“Discharge Patient”的记录。 采集 医生签署出院医嘱时记录 事件类型 explicit | |||
数据提取指南
步骤
- 登录Epic Hyperspace,通过Analytics或My Reports活动启动Reporting Workbench(RWB)。
- 创建新报告:选择Library选项卡,搜索模板**“Encounter Search”或“Patient Encounters”**。该模板可检索通过CSN(联系序列号)识别的联系级详细信息。
- 配置筛选条件(Settings选项卡):
- 设置日期范围(例如,出院日期=最近90天),以提取已完成的就诊记录。
- 按就诊类型筛选(例如“住院就诊”“急诊”),排除无关的门诊记录。
- 如需限定范围,可按部门或机构筛选。
- 配置显示列(Display选项卡):
- 这是关键的数据提取步骤。您必须搜索并添加与所需活动时间戳对应的列。
- 添加患者标识符:
CSN(患者就诊记录)、MRN(患者ID)。 - 添加人口统计信息/属性:
部门、出院去向、主要诊断代码、Provider。 - 添加时间戳列:搜索
Admission Time、Triage End Time、Discharge Time、Discharge Order Time、First Med Admin Time等列。(具体映射请参阅查询/配置部分。)
- 运行报告,并在预览窗口中检查结果。
- 导出数据:
- 点击Toolbar > Export。
- 选择CSV或**Text (Tab Delimited)**格式。
- 确认已勾选“包含列标题”。
- 将文件保存为
Raw_Epic_Extract.csv。
- 转换数据(关键步骤):
- RWB导出的是“宽表”数据集,每个患者就诊记录占一行,包含多个时间戳列。
- 您必须对数据进行逆透视(重塑),将每个时间戳列转换为事件日志中的独立行。
- 创建包含以下列的最终文件:
PatientEpisodeId、ActivityName、EventTimestamp及映射后的属性。
- 设置日期格式:确保
EventTimestamp采用兼容ProcessMind的ISO格式(YYYY-MM-DD HH:MM:SS)。 - 最终验证:确认文件包含
PatientEpisodeId、ActivityName和EventTimestamp列标题,然后上传到ProcessMind。
配置
- 模板:根据Epic版本使用“Encounter Search”(LBF)或“Find Patients”。
- 日期范围:初次提取建议限制为3至6个月,以避免超时(RWB并非为大规模批量提取而优化)。
- 行数限制:Epic RWB通常设有行数上限(例如25,000或50,000行)。请确保日期范围内的数据不超过上限,或分批运行。
- 权限:需要Reporting Workbench的“Create”和“Export”安全权限。
- 性能:查询较长历史范围时,建议在非高峰时段运行。
- 粒度:此方法提供就诊级汇总时间戳(例如“首次用药管理”),不会提取每次循环中的所有记录(例如每一粒药物的给药记录),除非使用专门的“Audit”模板;此类模板很少用于此场景。
查询示例 sql
[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 Console的读取权限,或可通过SQL客户端连接Clarity生产数据库或报表数据库。您需要访问
PAT_ENC、ORDER_PROC、CLARITY_ADT、MAR_ADMIN_INFO及相关参考表的权限。确定范围和筛选ID:运行完整脚本前,先执行小规模探索性查询,确定您所在Epic实例中检验、放射科、会诊和转运对应的
ORDER_TYPE_C值。这些自定义列表(类别列表)因医院而异。配置时间范围:在提供的SQL脚本中找到按
CONTACT_DATE或HOSP_ADMSN_TIME筛选的WHERE子句,并调整为所需的数据提取时间范围(例如最近6个月)。映射自定义流程记录单(可选):如果需要获取主就诊表中没有的分诊或出院计划精确时间戳,请确定这些字段对应的
FLO_MEAS_ID(流程记录单测量ID),并更新脚本中的占位部分。执行查询:在SQL客户端(例如SQL Server Management Studio、Oracle SQL Developer)中运行完整SQL脚本。脚本使用
UNION ALL将不同临床事件合并为统一的标准事件日志结构。后处理:查询会返回扁平列表。请确认
EventTimestamp不为空。如果中间件有要求,将数据库特定的日期时间格式转换为ISO 8601格式(YYYY-MM-DDTHH:MM:SS)。导出数据:将结果集保存为CSV文件。确保列标题与定义的属性一致(PatientEpisodeId、ActivityName等)。
上传至ProcessMind:将CSV导入ProcessMind。将
PatientEpisodeId映射为案例ID,将ActivityName映射为活动,将EventTimestamp映射为时间戳。
配置
- 数据库连接: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)。请确保使用适当的索引,或在非高峰时段运行。
查询示例 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 立即优化患者就医旅程,缩短周期时间
识别临床瓶颈,将周期时间缩短30%。
无需信用卡……几分钟即可完成设置。