Demo / Mock 数据审计与治理登记(2026-08-28)
1. 结论
本轮确认的根因不是单个页面漏接接口,而是原型开发阶段形成了三种“点状数据源”:前端硬编码业务目录、API 失败时的本地业务 fallback、应用启动时无环境隔离的业务 Seed。它们让相同业务对象在不同页面表现不一致,并可能把接口失败伪装成正常数据或成功操作。
本轮已完成第一轮治理:保险卡选择统一到后端 policy_card
目录;普通业务路由不再显示静态保险名单、假卡面、假患者/药品/药房队列、假
Catalogue、假 P0 收银数据或假 CP/WDL
交易数据;失败写操作不再本地伪成功;共享 HTTP 层已取消业务
fallback;主要运营 Demo Seed 改为本地显式 opt-in。
2. 已处理项
| 区域 | 原问题 | 本轮处理 | 当前状态 |
|---|---|---|---|
| Patient / Appointment 保险卡 | 前端 70 条名单和生成 SVG 卡面与后台维护数据无关 | 删除静态目录与生成卡面;统一读取
/api/insurance-card-programmes |
本地代码已实现;待部署/UAT |
| 保险数据模型 | policy_card、Benefit
Contracts、患者自由文本三套对象无引用 |
policy_card 作为 Card Programme 目录;患者表新增
card_programme_id,并保留 programme/provider/plan
历史快照 |
本地代码已实现;Visit eligibility / Invoice Snapshot 仍待完成 |
| Benefit Contracts 后台 | 无 Card Programme 维护入口 | 新增 Card Programmes 列表与新建/编辑/停用状态;图片仅接受官方 URL | 本地代码已实现 |
| Connected Clinic | API 失败后显示 Emily/Jason、示例药品和药房队列;写失败后仍显示成功 | 删除业务 fallback;加载失败显示空/错误;仅服务端成功后更新本地状态 | 本地代码已实现 |
| P0 Documents / Tasks / Checkout / Operations | 404 或断网时显示假附件、任务、就诊、收银会话,并可把失败的开票、收款、关账伪装成成功 | 删除 P0 API 层所有本地业务 payload;请求失败由页面处理,不再生成临时业务 ID | 本地代码已实现 |
| Clinic Dispensing | 空队列或加载失败时显示四条假处方,并允许本地推进/退回医生 | 空队列保持为空;失败显示错误;状态推进必须针对已持久化订单并由 API 成功确认 | 本地代码已实现 |
| Central Pharmacy / WDL | Warehouse API 失败时显示假价格规则、审批、库存预留、欠货、库位、QR 和供应商绩效;价格预览失败时本地按成本加 18% | 删除前端 fallback 交易与计算;所有页面只展示后端响应,失败保持可见 | 本地代码已实现;后端 seed 分类仍待 WS4 完成 |
| Catalogue & Contracts | 空库或请求失败自动显示 Demo 商品/优惠券 | 空库显示真实空状态;部分源失败显示错误,不混入 Demo | 本地代码已实现 |
| Clinical AI Copilot | 普通业务入口内置三名样例患者并送入模型 prompt | 删除样例患者;Patient Chat 只接受 launch/workspace 中已授权 patient/encounter context | 本地代码已实现 |
| 患者侧栏与重复患者工具 | 无患者上下文时显示完整假患者;代码保留按特定中文姓名注入假重复候选的测试钩子 | 无上下文显示中性空状态;删除运行时代码中的假患者和假重复候选 | 本地代码已实现 |
| 后端启动 Seed | Benefit、P0 当日 Visit/收银会话、Demo 套餐、示例患者及其疫苗/过敏/就诊补数默认写入 | 通过 VAI_ENABLE_DEMO_SEEDS=true 且 VAI_ENV
为 local/dev/development/test 才允许;共享环境强制关闭 |
本地代码已实现 |
| 角色与预览登录 | 角色、权限、测试账号、membership 与 dev auth 是当前多角色预览和本地联调入口,不属于业务 Mock | 明确保留现有
Bootstrap;local/dev/development/test/preview 可启用 dev
auth,staging、production 和未声明环境保持 SSO、失败关闭 |
已确认保留;不得随 Demo 业务数据清理删除或停用 |
3. 保留但必须隔离的合成数据
/preview/专用 Patient / Appointment / Consultation journey 可继续使用明确标注的 synthetic fixture;它不得调用临床写 API,也不得进入普通业务路由。- 单元测试 fixture、迁移 dry-run 样本和组件 Story/Preview 数据可保留,但必须位于测试或 preview 边界,不能成为运行时 fallback。
- 权限、角色、测试账号、membership、状态、文档类型、模板、诊所/服务代码等经过确认的配置或迁移主数据不是“Demo”;当前角色与测试登录 Bootstrap 明确保留,不能仅凭硬编码形式删除。
4. 仍需后续治理
| 项目 | 判断 | 下一步 |
|---|---|---|
| CP Warehouse / WDL 后端现有 seed | 前端 fallback 已移除;后端仍同时包含结构性主数据、迁移兼容和演示交易,不能整段删除 | 由 WS4 分表标注
master / migrated / fixture / operational,把 operational
fixture 移入显式本地 seed 命令 |
| 角色、测试账号与 membership | 当前平台预览、多角色界面核对和本地开发所需 | 保留现有 Bootstrap、角色选择及明确
preview/local/dev/test 环境的 dev
auth;后续认证迁移如需调整,必须作为独立决策,不纳入 Demo 数据清理 |
| 旧患者自由文本保险记录 | 历史数据没有 card_programme_id,不能自动猜测映射 |
生成可审查 migration report,按 provider/plan 精确匹配后人工确认;未匹配记录保持 legacy snapshot |
package-lock.json |
与 package.json 不同步,严格 npm ci
无法执行 |
单独做依赖锁治理并在 CI 强制 clean install;不得在本次产品变更中静默重写锁文件 |
| 现存环境里的旧 Demo 行 | 本轮只阻止继续生成,不自动删除历史数据 | 部署前用只读审计脚本列出命中项,由环境 owner 批准清理/保留;禁止启动迁移自动删业务行 |
5. 新增验收门槛
- API 返回空数组时页面必须显示空状态,不能显示内置业务记录。
- API 请求或写入失败时不得改变业务状态或显示成功消息。
- 普通路由不得引用 Patient、Appointment、Drug、Insurance、Invoice、Pharmacy 等 synthetic fixture。
- 共享环境启动不得生成患者、Visit、订单、Invoice、Payment、Benefit utilization 或其他运营记录。
- 任何可选择业务目录必须有后端 authority、稳定 ID、权限和维护入口;前端只允许展示快照,不维护第二套列表。