spec.md 13 KB

registration-flow Specification

Purpose

定义 PRI-MP-REG-001 预约挂号基础流程,包括挂号入口、须知确认、就诊人依赖、科室/医生/号源选择、实际费用查询、提交校验、锁号和支付确认衔接。写操作严格遵循旧版顺序,由用户点击提交或确认后执行;页面生命周期不得自动触发。

Requirements

Requirement: REQ-REG-001-01 挂号页路由与入口

系统 MUST 提供预约挂号主页面,并通过统一入口可发现。

  • MUST:挂号页路由为 pages/index/pages/register/register,在 app.json 的 pages 数组中注册。
  • MUST:utils/homeRoute.js 白名单包含 pages/index/pages/register/register(type: navigateTo)。
  • MUST:utils/homeMenu.js 的 DEFAULT-REG 条目 routePath 为 /pages/index/pages/register/register。
  • MUST:首页"预约挂号"入口点击后进入真实挂号页,不再跳转导诊 tab。
  • MUST:医院简介"预约挂号"入口(如 hospitalIntro.onGoRegister 存在)指向真实挂号页。

Scenario: 预约挂号入口

  • Given 用户位于首页或医院简介页
  • When 用户点击"预约挂号"入口
  • Then 系统 MUST 导航至 /pages/index/pages/register/register,不得跳转至导诊 tab 或其他临时页。

Requirement: REQ-REG-001-02 挂号须知

系统 MUST 在挂号前向用户展示挂号须知,用户完成阅读确认后方可进入选择流程。

  • MUST:保留 02010011 的医院须知配置读取,并支持旧源码 03100136(openID、hospCode、type: O)返回的 NoticeContent 富文本作为优先内容或回退内容。
  • MUST:当医院富文本缺失或读取失败时,完整展示旧版结构化须知(就诊凭证、按时就诊、退号/取消预约、候诊安排、医生停诊处理及结束语),并在存在时展示院区配置文案;不得退化为单段笼统提示。
  • MUST:须知加载完成后开始 5 秒阅读倒计时;倒计时未结束时确认 CTA 不可操作,即使用户已勾选确认。
  • MUST:对 H10 展示旧流程中“取消预约”和“爽约处理”的院区差异规则;其他院区展示通用退号规则。
  • MUST:须知失败时提供可见的重新加载入口,不得出现不可操作空白页。

Scenario: 阅读倒计时与确认

  • Given 用户进入挂号须知页且内容已加载
  • When 用户勾选须知但 5 秒倒计时尚未结束
  • Then 系统 MUST 保持 CTA 禁用并显示剩余阅读秒数。
  • When 倒计时结束且用户已勾选须知
  • Then 系统 MUST 允许进入科室选择流程。

Scenario: 医院未配置富文本

  • Given 当前医院未返回 NoticeContent
  • When 用户进入挂号须知页
  • Then 系统 MUST 展示可滚动的完整结构化须知,且不以单段通用提示替代。

Requirement: REQ-REG-001-03 患者选择

系统 MUST 复用 PRI-MP-USER-001 契约展示当前就诊人,支持切换。

  • MUST:使用 pri-patient-card 展示当前就诊人(姓名、脱敏手机、脱敏证件、默认标识)。
  • MUST:使用 pri-patient-sheet 提供就诊人切换入口(visible、pick、close 事件)。
  • MUST:无就诊人时展示"请添加就诊人"提示,不实现新增就诊人功能。
  • MUST:通过 patientSelector.loadPatientList() 加载就诊人列表。
  • MUST:通过 patientSelector.onPatientChange(listener) 监听患者切换事件。
  • MUST NOT:不调用就诊人新增/编辑/删除/绑卡/实名/OCR/人脸识别接口。

Scenario: 患者选择

  • Given 挂号页已加载
  • When 用户未选择就诊人
  • Then 系统 MUST 展示空态提示;用户点击切换后展示 pri-patient-sheet,选中后更新患者卡。

Requirement: REQ-REG-001-04 科室列表

系统 MUST 按旧源码 03100037 的 allLoc 树形结构完成科室选择,避免将一级展示节点误作可预约科室。

  • MUST:一级科室只作为分组入口;点击一级科室后展示其二级科室,不得直接以一级节点查询医生。
  • MUST:只有二级科室或搜索结果中的可预约叶子节点可以写入 selectedDept 并进入医生列表。
  • MUST:搜索命中二级科室时展示其所属一级科室,帮助用户确认科室归属。
  • MUST:当一级科室未配置二级科室时,提供明确提示,不得出现无响应点击。

Scenario: 选择二级科室进入医生列表

  • Given 03100037 返回包含一级科室和 children 二级科室的 allLoc
  • When 用户点击一级科室
  • Then 系统 MUST 留在科室选择页并展示该一级科室下的二级科室。
  • When 用户点击其中一个二级科室
  • Then 系统 MUST 使用该二级科室的 locID 查询医生列表。

Requirement: REQ-REG-001-05 医生列表

系统 MUST 提供医生列表查询和选择能力,并准确限制不可预约医生。

  • MUST:03100038 与 03100221 任一查询成功时,展示可用查询结果;仅当两者均失败时展示整体错误态。
  • MUST:03100221 请求体 SHALL 对齐旧版 chooseDoctor,仅传 hospCode 与 docDesc;科室范围如有需要 SHALL 在真实返回后按 locID 前端筛选,不得发送旧版不存在的 locID、pageIndex 或 pageSize。
  • MUST:根据后端归一后的 bookDisabled/可预约状态展示“暂不可预约”,且不可继续进入日期选择。
  • MUST:医生选择态只在当前条目身份字段匹配时高亮,不得将整个列表误渲染为已选。

Scenario: 一个医生来源失败

  • Given 用户已选择科室
  • When 03100038 或 03100221 中一个接口失败、另一个接口返回医生
  • Then 系统 MUST 展示成功返回的医生列表,并给出非阻塞刷新提示,不得显示整页失败。

Requirement: REQ-REG-001-06 日期与号源选择

系统 MUST 基于真实可预约状态提供日期、排班和号源时段选择。

  • MUST:优先使用 03100039 返回的医生可预约日期;99070002 只可作为日期展示/查询回退,不能把未知日期误标记为可预约。
  • MUST:解析 03100040 返回的余号、满号和禁用状态;已满或禁用号源应可见但不可选择。
  • MUST:当 03100040.resDetail[] 返回 price 时,号源卡片 SHALL 将其格式化为费用展示;不得只识别 resFee 等替代字段而把已返回价格错误显示为“费用待确认”。
  • MUST:用户选择具体号源后 SHALL 按旧版调用 03100105,并以 locResDetailID、patID、hisPatNo 查询实际挂号费用。03100040 未返回费用时不得默认展示 0;03100105 失败或无有效金额时,系统 MUST 显示费用待确认/重试状态并阻止提交。
  • MUST:日期和号源选择态只在唯一身份字段匹配时高亮。
  • MUST:号源卡片以 resTimeID 作为时段选择主键,并使用稳定的派生键防止异常重复 ID 导致多卡同时高亮;提交前校验须按旧流程分别传递选中 resDetailID 和 resTimeID。
  • MUST:日期加载成功后默认选择最早的可预约日期(医生详情直达时优先选择传入且可预约的日期),并在固定底部确认栏明确提示用户继续选择时段或确认。
  • MUST:当用户已在医生详情页选择可预约日期和时段后进入预约挂号,系统 MUST 跳过须知页并直达时间选择步骤;挂号页重新读取号源后,只有该时段仍可预约时才恢复其选中态。
  • MUST:挂号流程中的就诊人卡片和其“切换”按钮都 MUST 打开同一就诊人选择面板。
  • MUST:确认挂号步骤的提交 CTA MUST 固定在底部安全区,且内容区须预留足够空间以避免挂号信息被遮挡。
  • MUST:医生详情直达预约在时间选择步骤返回时 MUST 回到医生详情页;不得进入未加载科室/医生列表的上一步页面。

Scenario: 已满号源

  • Given 用户已选择日期且接口返回余号为零或禁用的号源
  • When 用户查看号源列表
  • Then 系统 MUST 显示已满状态且阻止继续确认该号源。

Scenario: 实际费用查询失败

  • Given 用户已选中可预约号源
  • When 03100105 未返回可解析金额
  • Then 系统 MUST 不进入提交步骤,显示重新获取费用入口,且不得以 0 代替服务端费用。

Requirement: REQ-REG-001-07 确认前汇总

系统 MUST 在提交前向用户展示完整的挂号信息汇总。

  • MUST:通过 03040041 获取确认前基础信息归一(参数 hospID、hospCode、locID、doctorID、患者字段)。
  • MUST:展示患者姓名、医生姓名、科室、日期、时段、费用等汇总信息。
  • MUST:无独立设计时按新版表单/订单确认类标准外推(参考 01-项目文档_docs/02-UI标准)。
  • MUST:状态矩阵覆盖加载中、接口失败。

Scenario: 确认前汇总展示

  • Given 用户已完成科室/医生/日期/时段选择
  • When 用户进入确认前汇总页
  • Then 系统 MUST 展示完整挂号信息供用户核对。

Requirement: REQ-REG-001-08 提交前校验

系统 MUST 在提交前做重复预约和号源有效性校验;校验通过后复用 PAY-001 的受控锁号能力,并通过统一支付承接页展示服务端返回的锁号上下文。

  • MUST:通过 03100090 做提交前校验。
  • MUST:校验通过后调用 PAY-001 的 03050234 锁号封装;仅在服务端返回有效 orderNo 时,才将患者、科室、医生、日期、号源、费用和锁号订单写入支付确认上下文,并导航到 /pages/order/pages/paymentConfirm/paymentConfirm。
  • MUST NOT:挂号页不得自行复制支付实现,或直接调用 01050002、真实支付、医保支付或 wx.requestPayment。

Scenario: 校验通过后的承接

  • Given 用户在确认前汇总页完成必填选择
  • When 03100090 校验通过
  • Then 系统 MUST 先按旧版字段执行 PAY-001 受控锁号;锁号成功后进入统一支付确认页,且不得在挂号页发起预结算或支付请求。

Requirement: REQ-REG-001-09 AI 导诊入口

系统 MUST 在挂号页提供 AI 导诊入口,供用户跳转或了解。

  • MUST:AI 导诊入口可见,位于页面适当位置(参考 page-register 布局)。
  • MUST:点击后跳转 PRI-MP-GUIDE-001 页面路由(如 PRI-MP-GUIDE-001 已开发)。
  • MUST:如 PRI-MP-GUIDE-001 尚未开发,显示"建设中"兜底提示。
  • MUST NOT:不实现真实 AI 推荐逻辑。

Scenario: AI 导诊入口

  • Given 用户位于挂号页
  • When 用户点击 AI 导诊入口
  • Then 系统 MUST 跳转至 AI 导诊页或显示"建设中"兜底。

Requirement: REQ-REG-001-10 状态矩阵

系统 MUST 覆盖以下异常和边界状态:

场景 触发条件 页面表现 操作入口
加载中 任一查询接口请求中 骨架屏/加载态 无
空数据 无科室/医生/号源 空态和说明 换日期/换科室/返回
接口失败 查询接口失败 错误提示 重试
未登录 无登录态 登录提示 触发基础登录
未绑定就诊人 无当前患者 患者选择提示 切换/去添加占位
无权限 后端返回权限错误 暂无预约权限 返回首页
号源失效 选择后后端返回无号 号源已变化 重新选择
首页入口未接通 点击首页预约挂号仍进入导诊 tab 视为入口衔接失败 修正路由白名单
越界医生详情 点击医生条进入完整医生中心 视为模块越界 改为挂号链路入口

Scenario: 异常状态处理

  • Given 任一接口返回异常状态
  • When 系统渲染挂号页
  • Then 系统 MUST 显示对应状态文案和允许的入口,不得进入不可操作空白页。

Requirement: REQ-REG-001-11 UI 还原标准

  • MUST:遵循 01-项目文档_docs/02-UI标准:主色 #1677FF、渐变、圆角 36rpx/44rpx、阴影、字号 token 与 app.wxss 保持一致。
  • MUST:page-register 布局、颜色、卡片、圆角、间距、CTA 和入口优先级高度还原。
  • MUST:医生条只展示挂号链路必要信息(姓名、科室、可预约状态),不展示完整医生详情。
  • MUST:确认前汇总按新版表单/订单确认类标准外推。

Scenario: page-register UI 还原

  • Given 用户进入预约挂号页
  • When 页面完成渲染
  • Then 系统 MUST 按新版 page-register 的布局展示挂号须知、患者选择、AI 导诊入口、科室列表、医生条和确认前汇总,并保持项目 UI token 一致。

Requirement: REQ-REG-001-12 写操作边界

系统 MUST 严格控制以下接口或能力的触发边界:

  • 03100105:号源选定后按旧版字段查询最终挂号费用,属于只读查询。
  • 03050234:仅在用户点击提交且 03100090 校验通过时按旧版字段锁号。
  • 01050002/wx.requestPayment:仅由 PAY-001 支付确认页在用户二次确认后执行。
  • 01050005/01050010/01050011:仅由 PAY-002 医保页在用户明确确认后执行。
  • 就诊人新增/编辑/删除/绑卡/实名/OCR/人脸识别接口由 USER 模块承接,不得由挂号页越界调用。

Scenario: 挂号提交受控衔接

  • Given 用户完成确认前汇总并点击提交
  • When 系统执行提交前校验
  • Then 系统 MUST 仅按旧版顺序执行 03100090 → 03050234 → PAY-001;不得在挂号页调用微信支付、医保或就诊人写入类接口。