3. 远程访视业务流程设计

远程访视不是“打开视频聊几句”这么简单。它是一条跨越患者端、平台服务端、医护工作台与外部系统(支付、药房、急救、可穿戴设备)的端到端业务链。如果只把视频通话当作核心,忽略预约、签到、候诊、医嘱、随访与转诊之间的状态衔接,就会出现“患者已进入候诊但医生看不到”“医嘱已下达但药房未收到”“紧急转诊时急救中心拿不到定位与生命体征”等断链问题。因此,本节的重点是把远程访视拆解为可编排、可观测、可回滚的状态机,并明确每个状态的进入条件、退出条件、超时策略与异常分支。

一、端到端流程的六个阶段与关键状态

一条完整的远程访视流程可归纳为六个阶段:预约、签到、候诊、视频问诊、医嘱与随访、紧急转诊。每个阶段内部又包含若干状态。以预约为例,状态可细分为“待确认—已确认—已改期—已取消—已爽约”。签到阶段则包含“未签到—已签到—身份核验中—核验通过—核验失败”。候诊阶段包含“排队中—即将叫号—已叫号—超时未响应”。视频问诊阶段包含“连接中—通话中—暂停—结束”。医嘱与随访阶段包含“草稿—已签署—已发送—药房已接收—随访计划已生成”。紧急转诊阶段包含“触发—评估—转诊中—已接收—已闭环”。

这些状态不是孤立标签,而是由事件驱动的迁移。例如,患者点击“签到”触发“未签到→已签到”;身份核验通过后触发“已签到→核验通过”;系统按预约时间与医生空闲度将患者放入队列,触发“核验通过→排队中”。医生点击“叫号”触发“排队中→已叫号”,患者端弹出视频邀请,触发“已叫号→连接中”。只有双方媒体流建立成功,才进入“通话中”。

远程访视端到端状态机(含异常分支) 预约阶段 签到与核验 候诊队列 视频问诊 医嘱与随访 待确认 已确认 已改期 / 已取消 确认 改期/取消 未签到 身份核验中 核验通过 签到 核验通过 排队中 即将叫号 已叫号 队列推进 医生叫号 连接中 通话中 问诊结束 媒体建立 医生结束 医嘱草稿 已签署发送 随访计划生成 签署 自动生成 核验失败 失败 超时未响应 超时 连接失败 媒体失败 紧急转诊触发 评估 → 转诊中 → 已接收 → 已闭环 危急值/患者请求 重新排队 图例: 正常迁移 异常分支 回退/重试 说明:每个状态均需定义进入条件、退出条件、超时阈值与幂等事件;紧急转诊可从问诊中或候诊中直接触发,并携带定位、生命体征与过敏史。

二、状态机的设计要点:事件、守卫与超时

状态机落地时,不能只画状态框,必须为每条迁移定义三要素:触发事件、守卫条件、动作。以“排队中→已叫号”为例,触发事件是医生点击“叫号”,守卫条件是“患者在线且核验通过”,动作是“向患者端推送视频邀请并启动30秒倒计时”。如果30秒内患者未接听,则触发“已叫号→超时未响应”,系统自动将患者放回队列头部并记录一次未响应事件。若连续两次超时,则标记为“需人工介入”,由护士电话联系。

超时阈值需要按业务场景配置,而不是写死在代码里。例如,签到窗口通常设为预约时间前30分钟至后15分钟;候诊超时设为叫号后30秒;视频连接超时设为15秒;医嘱签署后药房接收超时设为5分钟。这些参数应放在配置中心,支持按科室、医生、患者类型覆盖。下面是一段状态迁移配置的示例,用JSON表达,便于平台动态加载:

{
  "state": "WAITING",
  "transitions": [
    {
      "event": "DOCTOR_CALL",
      "guard": "patient.online == true && patient.verified == true",
      "action": "pushVideoInvite(patientId, 30)",
      "next": "CALLED"
    },
    {
      "event": "TIMEOUT",
      "guard": "elapsed > 30",
      "action": "requeue(patientId, priority=high)",
      "next": "WAITING"
    }
  ]
}

守卫条件必须可测试、可审计。例如“患者在线”不能只依赖前端心跳,而应结合信令通道的WebSocket连接状态与最近一次媒体质量上报。否则会出现“显示在线但实际无法建立媒体”的假在线问题。

三、医嘱下达与随访计划的衔接

视频问诊结束后,医生在问诊界面直接开具医嘱。医嘱状态从“草稿”到“已签署”需要医生二次确认,防止误触。签署后,系统根据医嘱类型自动路由:药品类医嘱发送至药房系统,检查类医嘱发送至预约中心,康复类医嘱触发随访计划生成。随访计划不是简单的一条提醒,而应包含随访时间点、随访方式(视频/电话/量表)、随访内容模板与责任人。例如,高血压患者出院后随访计划可设为“第3天视频随访+血压上报、第7天电话随访、第30天视频随访+用药依从性量表”。

这里的关键是“医嘱—随访”的映射规则要可配置。平台应提供规则表,将医嘱编码、患者标签、随访模板关联起来。当医嘱签署事件发生时,规则引擎匹配并生成随访任务,写入任务队列。如果匹配失败,则进入“待人工配置”状态,由随访护士处理,而不是静默丢弃。

四、紧急转诊的触发与闭环

紧急转诊是远程访视中最不能出错的分支。触发条件通常包括:患者主诉胸痛/呼吸困难/意识改变、可穿戴设备上报危急值(如血氧低于90%、心率持续高于130)、医生在问诊中判断需要立即线下处置。触发后,系统应在一个动作内完成四件事:锁定当前问诊记录、抓取最近生命体征、获取患者定位、向急救中心发送转诊单。转诊单状态从“触发”到“已接收”再到“已闭环”,每一步都需要回执确认。如果急救中心在60秒内未确认接收,系统应自动升级通知,同时向患者发送“保持通话、不要移动”的指导语。

紧急转诊不能依赖医生手动填写全部信息。平台应预置转诊单模板,自动填充患者基本信息、过敏史、当前用药、最近三次生命体征与定位,医生只需补充主诉与初步判断。任何需要超过两次点击才能发出的转诊,都会在真实紧急场景中增加失败风险。

五、可观测性与状态一致性

状态机上线后,必须能回答三个问题:当前有多少患者在排队?平均候诊时长是多少?哪个状态的迁移失败率最高?因此,每个状态迁移都应产生结构化事件,写入事件流,并附带患者ID、医生ID、时间戳、耗时、结果码。基于这些事件,可以构建实时看板与告警规则。例如,“核验失败率超过5%”触发身份核验服务告警;“视频连接失败率超过3%”触发媒体服务告警;“紧急转诊未确认超过60秒”触发最高级别告警。

状态一致性方面,患者端、医生端与服务端可能因网络延迟出现短暂不一致。解决思路是服务端作为唯一事实源,客户端只做乐观展示,并以服务端推送的状态为准。每次状态变更都带版本号,客户端收到旧版本事件时丢弃,避免“已叫号”被“排队中”覆盖。对于关键操作如签到、签署医嘱、触发转诊,必须使用幂等键,防止重复提交产生重复状态。

最后,流程设计要留出人工兜底通道。无论状态机多完善,都可能出现患者设备故障、网络中断、身份核验异常等情况。平台应为护士工作台提供“强制签到”“手动排队”“代患者接听”“转诊补录”等操作,并记录操作人与原因。这些兜底操作同样进入事件流,保证事后可追溯、可复盘。远程访视的业务流程设计,本质上是在自动化效率与临床安全之间找到可配置、可观测、可回退的平衡点。