Patient & eMR 信息架构、字段取数与前台业务流转 PRD

日常业务与测试阅读请使用患者、预约、到诊与护理业务 PRD。本页保留工程细节、历史变更与取数参考;已知冲突见实现记录

项目 内容
版本 1.14
日期 2026-09-12
适用分支 dev/theron-li
责任线 Line A(Patient / Appointment / Registration / Cashier)、Line B(Consultation / Clinical History)、Line C(Dispensing 承接)
实现边界 本轮复用现有 Patient、Appointment、Visit、Attachment、保险卡 metadata 与版本审计表;保留 Check-in 回填、统一文件上传、队列历史与 Preview 修复,并补充 Insurance / Corporate membership / Staff benefit 卡种来源及患者持卡来源快照,不新增 Patient 业务状态或保险卡表字段。2026-08-30 起的 Provider / STG Functional Test 权限增量已回滚。

配套审查ui_review_evidence.md#patient-emr-audit 记录当前实机问题、优先级和验收口径。下文截图为 2026-08-18 当前原型证据,不等同于目标验收稿。

1. 问题陈述

现有 Patient & eMR 页面混用了患者主档、预约备注、Visit、Consultation、处方、药房履约和迁移附件等不同粒度的数据,导致同一字段在多个页面语义不一致:例如把内部 Visit ID 显示为 Chit Number、把签署时间当作就诊日期、把历史自定义 HTML Note 拆成 SOAP、把处方与药房订单合并成同一种 Medication、以及把仅保留元数据的附件呈现为可预览文件。

本 PRD 以“患者主档是患者级事实、Visit 是一次到诊、Consultation 是一次临床记录、订单/附件必须保留来源关系”为基础,定义前台业务流转、页面职责、元素取数及 fallback 规则,使开发、迁移、测试和 UAT 使用同一语义。

2. 目标

  1. 患者在 Patient & eMR、预约新增/编辑等入口使用同一套患者主档字段和校验规则。
  2. Patient No.、MRN、Visit ID、Chit Number 各自只在有真实来源时按正确名称展示。
  3. Consultation History 能正确呈现本地 SOAP 和迁移的 Custom/HTML Note,并保留日期、医生、诊所、来源与签署信息。
  4. Medication History 明确区分医生处方与药房履约,不在临床历史页面展示价格。
  5. Attachment 明确区分 Available、Metadata only 和 Unavailable;无文件或 OCR 时不提供虚假预览入口。
  6. Vital Trends 覆盖现有结构化生命体征并保留 Visit、诊所、医生、记录人和来源上下文。
  7. 所有已实现的患者队列以同一姓名链接进入对应 Patient & eMR,并保留 Patient、Visit、Clinic 和返回来源。

3. 非目标

4. 用户与核心任务

5. 端到端业务流转

flowchart LR
    A["Search patient"] --> B{"Existing patient found?"}
    B -- Yes --> C["Select patient master"]
    B -- No --> D["Create patient: name + phone + ID required"]
    D --> E["Duplicate check"]
    E --> C
    C --> F["Create appointment"]
    F --> G{"Appointment confirmed?"}
    G -- No --> H["Calendar only; listed after confirmed appointments"]
    G -- Yes, same day --> I["Registration Queue: Awaiting check-in"]
    I --> J["Check in"]
    J --> K["Continue to preparation"]
    K --> L["Ready for consultation"]
    L --> M["Consultation Queue"]
    M --> N["In consultation"]
    N --> O["Ready for cashier"]
    O --> P["Checkout completed"]
    P --> Q["Financial completed: payment / receivable arrangement recorded"]
    Q --> R["Closed at first clinical signature +24h when no blocker"]

5.1 允许的回退

当前节点 允许回退 约束
Confirmed appointment Unconfirmed 保留原预约和审计记录;从 Registration Queue 移除
Preparation Awaiting check-in / Checked-in 仅有权限人员;记录原因
Ready for consultation Preparation 回退后才允许修改预约/准备信息
In consultation Consultation Queue / Ready for consultation 不删除已有草稿;记录操作者和原因
Ready for cashier In consultation 护士发现处方、Lab/Imaging 或临床内容未完成时使用
Checkout completed Ready for cashier 仅在允许的重开时间窗及权限下
Closed 最终态;不可回退、不可修改历史事实

5.2 浏览器本地预览旅程

为便于在没有可用临床 API 的本地预览中验证页面衔接,/preview/ 路由允许同一合成患者按以下顺序跨 App 流转:

  1. Appointment Calendar 建立或选择明确标记为 Preview only 的 Appointment。
  2. Reception / Registration 读取同一 Appointment;Check-in 时建立浏览器本地 Preview Visit,并保留 Patient、Appointment、Visit 和来源关系。
  3. Visit 经 Preparation 进入 Ready for consultation 后,Consultation Queue 才显示该患者。
  4. Consultation 开始时只更新浏览器本地 Preview Visit,不调用真实临床写入 API;Reset demo 清除整条本地旅程。

该能力仅是源代码中的本地预览基础,不是生产持久化、部署、端到端联调或 UAT 证据。普通桌面路由不得读取或写入这套合成旅程;专用预览路由不得混入不可用开发 API 的错误横幅或真实队列数据。Reception 仍通过用户显式 Apply filters 刷新,不以旧版自动日期监听替代已确认的 STG 交互。

5.3 Appointment 与 Registration 的关系

  1. 只有当天且已确认的 Appointment 进入 Registration Queue。
  2. 未确认预约继续保留在 Appointment Calendar,并在当日已确认记录后展示。
  3. 在 Reception 新增 Appointment 时,成功保存后进入 Awaiting check-in,但不会自动创建 Visit 或自动 Check-in。
  4. Appointment 新增与编辑至少要求选择已保存且具有稳定 patient_id 的患者、Assigned Provider、预约日期、有效时间和 Service Type。仅输入姓名或保留上一位患者的显示字段不得保存;切换/清除患者时必须同时清除旧 patient_id。前端在提交前逐字段提示,后端重复校验;缺少医生、时间或稳定患者关联不得保存 Booked / Confirmed Appointment。
  5. Patient identity、payer/insurance 等已在患者主档或预约阶段完成的字段由系统读取状态,不要求护士再次手工勾选“已确认”。
  6. 已有 patient_id 的患者打开 Check-in 时,系统必须重新读取当前 Patient & eMR 主档,并以主档中的姓名、Patient No.、主手机号、HKID / passport 和证件类型作为表单默认值;Appointment 快照仅在主档对应字段为空或主档读取失败时作为 fallback,不得用空白、旧值或脱敏值覆盖主档。
  7. Check-in 以本次加载的 Patient 主档值作为编辑基线。值未发生实质变化(忽略大小写、空格、连字符和括号等格式差异)时不得再次执行新患者 duplicate verification;仅当用户确实补充或更正身份字段时,才检查是否与另一患者主档冲突并记录版本与审计。
  8. Check-in 表单须显式提交实际编辑过的身份字段。Appointment 快照中未经用户修改的旧值、组合姓名、脱敏值或格式差异不得覆盖已完整的 Patient 主档,也不得触发 duplicate verification;未标记为已编辑的预约快照值只可用于补全患者主档的空字段。
  9. Appointment 已明确选择 Self-pay 或有效保险快照时,Check-in 必须继承该 payer / coverage 状态;只有 Appointment 未记录 payer 或用户确实需要改正时才要求重新选择。异步加载 Patient 主档不得替换表单响应式对象或令已继承字段在输入控件中变为空白。
  10. Registration 的主操作依次为:Check inContinue to preparationReady for consultation

5.4 队列顺序、人工调整与排队中取消

  1. Reception / Registration Queue 默认按实际到达时间从早到晚展示;尚未到店、只有 Appointment 的记录才以预约时间作为 fallback。In consultationReady for cashier 是追踪状态,固定排在仍可由 Reception 操作的记录之后。
  2. Reception 可以在列表最左侧使用上移 / 下移按钮调整同一运营分组内的患者先后顺序;不得把下游追踪状态混入当前叫号顺序。当前实现保留本次已加载队列的人工顺序;跨终端共享和持久化 queue rank 仍需独立后端字段与并发规则。
  3. Modify appointment 内提供 Cancel appointment,仅适用于仍在 Reception 可控范围内的 Appointment / Visit。取消必须填写原因,Appointment 保留为 Cancelled,不得物理删除。
  4. Appointment 已产生活动 Visit 时,取消通过同一服务端事务把关联 Visit 更新为 Cancelled,并分别写入 Appointment / Visit 状态事件和审计;任一更新失败则整体回滚。已进入只读临床完成状态的 Visit 不允许从 Reception 取消。
  5. 已经 Ready for consultation 的患者必须先用 Previous stage 回到 Preparation 并记录回退原因,才允许修改或取消 Appointment;已经 In consultation 的患者走临床中止 / 回退流程,不复用前台取消预约。

5.5 Financial Completed、Closed 与未结应收

  1. Encounter 关闭与保险公司实际回款时间分离。临床已签署、Checkout 与付款 / 应收安排已记录、Pharmacy / V-Lab 等即时 Handoff 已接收,且不存在未处理的患者安全或收费阻断时,Encounter 具备关闭条件。
  2. 系统以第一次 Review & Complete 临床签署时间为基准;满足关闭条件后,在该时间满 24 小时自动进入不可逆 Closed。付款或 Checkout 不重新起算 24 小时。
  3. 保险未回款或患者欠款进入独立 Accounts Receivable / Outstanding Payment,不阻止 Encounter Closed。长期等待的 Lab / Imaging 结果可在 Closed 后以关联 Result Event 回传并要求 Doctor Acknowledgement。
  4. Closed 后不得恢复原 Encounter;后续退款、冲正、保险回款分配和临床更正必须创建与原记录关联的财务或临床事件,并保留原事实。

6. 全局数据语义

6.1 标识符

UI 名称 首选取数 Fallback 禁止规则
Patient No. clinic_patients.virtus_patient_no clinic_patients.mrn 不显示内部 patient_id/id
MRN / legacy reference clinic_patients.mrn 与 Patient No. 相同时不重复显示
Chit Number visit.metadata.legacy_chit_numlegacy_chit_num/chit_num/chit_number/chit_no/chit_id 不得用 Visit ID 冒充 Chit
Visit reference visit_no,其次 visit_id/id 无 Chit 时显示 Visit #...
Investigation order clinic_investigation_orders.id / service code 不使用价格作为临床标识

6.2 日期

UI 语义 取数优先级
就诊日期 visit_dateconsultation_dateencounter_date
次级 fallback completed_at/complete_datesigned_atappointment_time/arrival_time/created_at
Consultation 签署时间 consultation.signed_at,只作为签署元数据展示,不替代就诊日期
Attachment 时间 uploaded_atupdated_atcreated_at
Vital 时间 vital.recorded_at/measured_at/created_at → 所属 Visit 日期

6.3 空值与迁移数据

7. 页面规格与取数

7.1 Patient Directory

页面职责

查找患者、创建患者、选择患者并在右侧同一工作区切换患者级 Tab;不得跳转到脱离当前上下文的新页面。

元素与取数

元素 数据来源 / 逻辑 交互
姓名 `name_en
主编号 `virtus_patient_no
手机 mobile 与主编号同一信息行
DOB / Sex dobsex 第二行辅助信息,不与标识混排
诊所 当前患者 clinic_name 或 Active Operating Unit 单独一行
搜索 姓名、手机、HKID、Patient No./MRN 不要求用户先选搜索类型

Patient & eMR 的身份查询、资料维护及病历读取采用 Frontoffice §2Platform 数据分类 的现行规则:同集团具角色查询权限者可检索/查看基础信息,敏感字段默认隐藏并经独立申请查看及审计;修改/确认另查诊所资格,公共医疗信息另查角色授权,受限问诊正文及历史附件另查医生授权。原仅Active Operating Unit active link的搜索限制已被取代;初始未搜索、无匹配和接口失败仍分别呈现。

Appointment Calendar 的新增 / 编辑预约患者选择属于不同业务任务:在用户输入统一患者查询后,可在获授权的 Medical Group 患者主档中查找已有患者,当前诊所患者优先展示,跨诊所结果明确标识。返回跨诊所候选的检索须记录操作者、当前诊所、工作流目的、结果数量和请求上下文,但不得在明文审计字段中保存 HKID、电话或原始搜索词。用户确认身份并保存预约时,后端再建立或恢复 Patient + Active Operating Unit 关系,记录操作者、来源、原因、前后状态和请求上下文;此后该患者才能出现在 Patient & eMR 的本诊所目录中。取消患者选择或未保存预约不得提前建立诊所关系。

预约中的 duplicate verification 只属于“创建新患者”路径。用户从普通搜索结果或 duplicate candidate 中选择已有患者时,系统必须退出新增患者模式,只保留该记录的 patient_id 并调用 Appointment 保存接口;不得再次调用 Patient create/upsert,也不得把同一患者命中为自身 duplicate。新增患者成功保存后同样先取得稳定 patient_id,再作为预约患者继续。

Appointment 页面不承担已有患者主档维护。选择已有患者后只展示姓名、Patient No.、电话、DOB、性别和 Alert 等只读摘要,并提供 Open Patient & eMR;姓名、电话、证件、保险卡等新增或修改必须在 Patient & eMR 完成。Appointment 仅可从已保存的患者保险卡中选择本次预约使用的卡,并维护本次预约专属的 Case No.、eligibility 和 insurance notes。只有 Register new patient 分支可在预约流程中填写患者建档信息和初始保险卡。

Patient Directory 不提供通用 Excel / CSV 模板、导入、导出或无明确业务日期的范围导出。患者批量迁移或治理属于权限受控的后台任务,必须另行定义对象范围、重复合并规则、校验预览、审计和失败回滚,不能复用前线目录工具栏临时暴露。

跨队列 Patient & eMR 导航

患者创建

7.2 Patient Overview

页面职责

患者主档的权威查看和编辑入口;任何业务节点触发的患者资料修正最终写回同一主档并产生版本记录。

板块 字段 取数
Identity & demographics Patient No., MRN/legacy reference, English/Chinese name, DOB, sex, identity document/country clinic_patients
Contact & communication mobile, secondary phone, WhatsApp, email, preferred language, address clinic_patients
Messaging Receive clinic messages:Yes / No / Not recorded receive_messages 三态;不是医疗授权
Caregiver emergency contact/phone clinic_patients
Clinic affiliations unit name/type, status, registration source, linked date clinic_patient_operating_unit_links + clinic_operating_units
Safety allergy/ADR/alert 的 substance、reaction、severity/certainty;详情含 item type、remarks、confirmed time clinic_patient_allergies
Insurance cards card_programme_id、programme type、programme/provider/plan 与来源快照、member/policy number、validity、eligibility、真实 primary 标记 clinic_patient_insurance_cards 引用后端 policy_card 目录;Insurance 类型来源为 Policy,Corporate membership / Staff benefit 来源为 Benefit Contract;患者 API 返回权威目录引用与历史快照,不从 Visit insurance fallback
Panel / Company company, scheme, staff/member no., grade, billing arrangement, eligibility 患者级 panel/company profile;有值才显示
External / eHealth authorisation, source, access status 预留字段;有值才显示

Insurance authority 与 Visit eligibility

  1. Benefit Contracts 模块是权益规则权威入口:Benefit Contract / Plan / Rule 管适用服务、折扣、额度和有效期;同模块下的 policy_card 是可选择 Card Programme / 官方卡图的共享后端目录。Insurance Card Master 中,Insurance 类型可关联 Policy;企业合作计划必须关联 Benefit Contract,且只允许 corporate_membershipstaff_benefit 两类。Patient & eMR 不保存第二套规则或前端硬编码目录。
  2. Patient & eMR 只维护患者实际持卡实例:card_programme_id 引用、Member / Policy Number、有效期、主卡和备注,并保存选择当时的 programme/provider/plan 快照供历史解释。Finance / Benefits Admin 维护卡目录和卡图;目录失效不删除历史持卡记录,但不可用于新选择。
  3. Registration 在 Check-in 时记录本次 Visit 的 eligibility 结果、核验方式、人员、证据和时间。Cashier 在 Invoice Post 前对过期、变更或未确认记录进行最终复核。
  4. Phase 0 允许人工核验,不把页面结果描述成保险公司实时 API 响应。已 Post 的 Invoice 保存当时适用的 Plan / Rule / Eligibility Snapshot,不随主档后来修改。

Clinic affiliation 规则

  1. 首次创建/匹配患者时,按操作人员 Active Operating Unit 自动建立第一条关系。
  2. 患者在其他诊所创建并确认 Appointment / Visit 时,系统 upsert 对应 Patient + Operating Unit 关系。
  3. 手工新增/停用属于患者资料管理能力,必须校验同一 Medical Group、权限、变更原因和审计;当前生产 API 尚未完全支持任意关系维护。
  4. 页面不展示或维护 Primary Clinic;“常看医生”由近期完成的 Consultation 汇总,不是静态患者字段。

7.3 Consultation History

信息层级

  1. 顶部横向缩略轴:就诊日期、医生、真实 Chit 或 Visit reference、状态。
  2. 详情头部:Visit type(标题)、Visit reason / booking remark(辅助)、医生、诊所、状态、签署时间、来源。
  3. 临床内容:SOAP 或 Legacy custom note、结构化 ICD-10、Vitals、Medication、Orders & procedures、Attachments。
元素 取数
标题 `visit_type
Visit reason / booking remark `visit.reason
医生/诊所 doctor_name、Operating Unit display name
SOAP consultation.history/findings/diagnosis/advice 或显式 subjective/objective/assessment/plan
ICD-10 clinic_consultation_diagnoses 的 code/title/role
Vitals clinic_visit_vitals
Source source_labelmetadata.source 映射为 Local / Migrated

7.4 Medication History

Medication History 是跨 Consultation 的检索视图,但每条记录始终保留所属 Visit、医生和诊所。

Doctor prescriptions

Pharmacy fulfilment

指标/元数据 字段
BP bp_systolic/bp_diastolic,fallback 解析 blood_pressure
Pulse pulse_bpm/pulse/heart_rate
Respiratory rate respiratory_rate_per_min/respiratory_rate/rr
SpO₂ spo2_percent/spo2
Temperature temperature_c/temperature
Weight/Height weight_kg/weightheight_cm/height
BMI/BSA bmi;无 BMI 且有身高体重可只在前端计算展示;bsa_m2/bsa 保留
上下文 Visit reference、doctor、clinic、recorded_by、source

该页面只读,不创建第二份 Vital。时间范围和指标切换只影响展示,不修改源数据。

7.6 Attachments

元素 取数/规则
名称 `title
类型 document type + legacy raw label 分类
文件名 file_name;迁移只保留 label 时显示 legacy_raw_label
存储状态 storage_status:Available / Metadata only / Unavailable
上下文 clinic、Visit/Chit、Visit date、uploaded_by、uploaded_at、source
OCR 仅存在 ocr_fields/ocr_result/ocr_text 时显示
打开条件 存储可用或存在 OCR 内容;Metadata only 且无 OCR 时禁用

预览弹窗统一命名为 Attachment details;不再把所有附件都称为 OCR result。

7.7 Vaccine 与 Communication

7.8 当前界面展示与页面结构

7.8.1 Patient Directory / Overview

页面采用左侧 Patient Directory、右侧患者详情的同一工作区结构。患者姓名、诊所归属和常看医生固定在详情头部,Overview 与各类历史通过右侧 Tab 切换,不跳转到新的患者页面。

Patient Overview current runtime issue

当前证据:Overview 内容区因运行错误空白,且新增患者弹窗关闭后重复校验错误仍残留。该截图是 P0 缺陷证据,不是目标布局。

目标布局顺序:

  1. Identity & contact;
  2. Clinic affiliations 与常看医生;
  3. Insurance 与 Panel / Company;
  4. Allergy / ADR / Alert;
  5. Caregiver、Messaging、External/eHealth 等低频信息。

Overview 默认只读,提供单一明确的 Edit。编辑使用统一 Save / Cancel、版本冲突和变更原因,不为每个卡片创造独立保存机制。

7.8.2 New Patient、二维码与重复校验

New Patient form

Patient self-entry QR

Duplicate patient check

界面规则:

7.8.3 Insurance card selector

桌面 Patient & eMR 的保险 / 企业合作卡先从共享后端 Card Programme 目录选择,再带出 programme type、payer / sponsor、plan 及来源快照并填写患者卡号、保单号和有效期。Insurance 类型的来源为 Policy;Corporate membership / Staff benefit 的来源为对应类型 Benefit Contract。H5 的企业 / 合作机构计划从共享 Benefit Contract 中状态及有效期合格的 corporate_membership / staff_benefit Plan 选择;不在 Patient 主档中建第二份前端名单。H5 必须通过当前 Intake Draft 的有效令牌调用专用的脱敏公共目录端点,只返回当前诊所可选的 ID、类型、payer / sponsor、programme / plan 名称和官方卡面;公网 H5 不得直接使用需要 benefits.read 的内部管理 API。目录为空时显示可跳过的治理空状态,不展示内置名单或生成卡面。桌面端目标交互使用可搜索 combobox/弹层、常用卡优先和虚拟滚动;图片仅使用后台配置的官方 URL。当前 H5 preview 使用明确标记的示例目录证明交互,不能作为生产目录或已完成联调的验收证据;此前截图也不能继续作为当前验收证据,待目标环境部署后重拍。

7.8.4 Consultation 与 Medication

Consultation History

Medication History

Consultation 横向轴只负责定位日期、医生、Visit/Chit 与状态;详情承载 SOAP、结构化 ICD-10、Vitals、Medication、Orders 和 Attachments。Medication 专题页按 Doctor prescriptions 与 Pharmacy fulfilment 分区,汇总必须分别计数,不得把药房订单称为 Rx。

Vaccine History

Vital Trends

Vaccine 只展示现有 service 数据;缺少 canonical registry 时不新增批号等字段。Vital 的指标切换、趋势图和明细共用同一源数据;指标栏和宽表必须在 1280px 下有清楚的滚动/折行提示,并覆盖 RR、Height、BMI、BSA、Visit 和来源。

7.8.6 Attachments 与识别结果

Attachments

Attachment details and OCR preview

附件跨 Visit 检索并逐条校验来源授权,每个文件保留所属 Visit/Chit。本次关联护士可上传、查看、删除;历史记录须有效医生授权,前台不得管理附件。目标弹窗采用 Original / Extracted fields / Full text 分区或 Tab;Metadata only 使用明显的不可点击样式并解释原因。

7.8.7 Communication History

Communication History empty state

正式业务模式下,本期空状态应紧凑说明“不支持/无 canonical source”,不构造虚假记录,也不增加无功能筛选。无记录不能被解释为患者从未与诊所沟通。独立 Preview 模式可以使用明确标记为 Preview data 的本地合成通讯记录,以验证 channel、purpose、outcome、operator 与 time 的布局;该 fixture 不调用写 API,也不得与真实患者记录混合。

7.8.8 Appointment Calendar

Appointment Calendar

Calendar 采用工作周与选中日 50/50 布局;状态与 Consultation Type 分开筛选。两个并列 Grid 必须共用同一个起始小时、固定 30 分钟刻度和滚动位置;Appointment 与 Block-out 按真实持续时间计算高度,同一 clock time 在两侧映射到同一时间轴位置。选中日 Grid 不能因为卡片内容较多而撑高一个 slot,否则后续时间会整体错位;详细字段由 List 或详情弹窗承接。

预览必须提供稳定 fixture,覆盖患者最低识别信息、Unconfirmed、Confirmed、Cancelled、Block-out、Non-consultation、Prescription-only、Treatment/Procedure 与 Day Procedure,以便验证时间、颜色、操作和回退。同一位本地合成患者还应贯通 Patient & eMR 的 Overview、Consultation、Medication、Vaccine、Vital、Attachment 与 Communication 页签,并始终明确标记 Preview 边界。

新增 Appointment 只能选择 BookedConfirmedArrivedChecked-inCompletedCancelled 属于下游工作流状态,不得通过新增或普通编辑表单直接写入;进入下游阶段后,状态字段只读,由对应业务动作推进。取消 Appointment 是独立的不可逆状态动作,必须二次确认、要求填写原因并把原因写入可审计记录;关闭或取消弹窗不得产生状态变化。

7.8.9 Registration Queue、Check-in 与 Preparation

Registration Queue

Check-in

Pre-consultation preparation

Registration 的界面顺序为 Queue → Check-in → Preparation → Ready for consultation。Patient information、payer 和 consent 必须区分 Automatic、User confirmed 与 Missing,并展示取数来源;Preparation 的 chief complaint、Vitals、pre-check 和附件写入 Visit intake,不覆盖医生 Consultation SOAP。

Check-in 必须核对并补齐姓名、主手机号和 HKID / passport。用户在 Check-in 中修正或补录的三项信息先写回同一 clinic_patients 主档,并生成 Patient version 与 audit,再创建 / 复用 Visit;任何一项缺失都不得进入 Preparation、Ready for consultation 或后续 Encounter 状态。服务端状态转换必须重复执行该门禁,不能只依赖前端禁用。

队列页不常驻展示成功消息或“请先补齐资料”一类预期流程提示。字段缺失、payer 未选择等可由当前操作解决的校验只在对应 Check-in / Preparation 弹窗内展示并在关闭后清除;真实的队列加载、Patient 主档读取或写入 API 异常仍须在受影响区域提供错误和重试信息。

Visit attachment 使用统一文件注册与 clinic_document_attachments 关联,不保存仅存在浏览器内存的文件名。入口在 Checked in、Preparation 和 In consultation 均保持可见;上传后刷新 Registration Queue 或 Patient Documents 仍可读取。状态标签使用内嵌边框 / ring,表格行裁切时不得缺失上下边线;患者资料表单同一区块的输入控件在桌面端使用一致列宽,图标必须解析为明确语义图标而不是通用占位。

从 Preparation 回退 Check-in、或从 Ready 回退 Preparation 都必须填写原因;原因未填写或提交进行中时,确认按钮保持禁用。筛选、Tab 和列表切换不改变 Visit 状态,不应使用不可逆操作的确认样式。

7.9 全局界面状态与响应式要求

本节补充 Patient & eMR、Appointment 与 Registration 场景要求;共享圆角、字号、控件尺寸、颜色、阴影、图标、Tooltip、焦点态和桌面验收规则统一遵循 desktop_ui_design_system.md

每个页面/弹窗必须定义以下状态,不能只给正常有数据截图:

状态 最低要求
Loading 保留页面骨架和患者上下文;禁止整页闪空
Empty 说明是否本期支持、为何为空和可执行的下一步
Error 说明受影响区域、重试方式;弹窗错误关闭后不得泄漏到主页面
Permission denied 保留只读上下文,说明缺少的权限,不展示可编辑假按钮
Read-only / locked 明确原因和允许的回退路径
Metadata only 与 Available 明显区分,并禁用不可用预览
Unsaved / version conflict Save/Cancel、变更原因、最新版本对比与重新加载

视觉与响应式基线:

8. API 与后端影响

本轮允许的只读响应扩展

_visit_summarymedication_orders 增加:

保留既有价格字段以避免破坏 Cashier/其他消费者,但 Patient & eMR 不展示它们。

不改表结构

9. 优先级

P0 — 本轮

P1 — 后续

P2 — 预留

10. 验收标准

标识与日期

Patient Overview

Consultation / Medication

Attachments / Vitals

流程

界面与状态

11. 成功指标

12. 未决问题

  1. [Engineering / Data,阻塞 Phase 0 实现] 按已确认 authority contract 落地患者持卡实例、Visit eligibility 与 Invoice Snapshot 的生产表 / API;技术 Schema 不得改变 Benefit Contracts 为规则权威源的产品决定。
  2. [Business / Data Governance,阻塞 P1] 哪些角色可以手工新增或停用同集团 Clinic affiliation,审批和变更原因格式是什么?
  3. [Clinical,非阻塞] Custom legacy note 是否需要后续拆分/映射成 SOAP,还是永久只读保留原貌?
  4. [Compliance / Product,阻塞 UAT] Registration 的 Privacy、eHealth、AI scribe consent 各自 canonical source、版本、有效期和确认责任是什么?

13. 实现文件索引

14. PRD 变更与发布治理

  1. 任何改变用户可见行为、业务规则、流程 / 状态转换、字段语义、权限、安全控制或验收标准的实现,必须在同一轮工作中更新本 PRD 或其对应的 canonical PRD;PRD 未同步时不得把该项视为完整交付。
  2. 纯内部重构、测试输出、构建信息和部署元数据继续记录在技术文档或 change log;只有当它们改变产品契约时才进入 PRD,避免把 PRD 写成代码流水账。
  3. PRD 必须区分 已有代码路径本地验证通过目标环境已部署UAT 已接受,不得用页面可见或静态预览替代后端联调与验收证据。
  4. 本 PRD、配套 backlog 或截图资产变化后,必须重建并发布到既有 Vercel PRD 站点,验证稳定 URL 可访问;PRD 站点发布不代表 AI-CLIP 应用已发布。

2026-09-07 患者自填审核、保障资料与护士修正

用户来源:本轮 Patient & eMR 截图反馈四项要求;本节取代 §7.8.2 中提交后常规 Possible Match/护士再次关联的旧设计。完整业务契约见 frontoffice_business_prd.md §3。

  1. 审核容器填满 App 可用宽高,按容器而非浏览器媒体查询响应;审核时收起患者搜索栏与重复待办横幅。列表+详情在窄窗口改为上下结构,不缩小正文或裁剪主要动作。
  2. 重复防范保留在提交前:服务端按令牌限定的 Intake Draft 匹配,经患者明确确认本人后绑定对应 Patient,或者确认新患者;提交携带不透明确认凭据。普通审核只显示结果,不重复比较同一患者。关联不代表获准覆盖主档、创建 Clinic affiliation 或完成就诊身份核验。
  3. H5 和审核完整显示共享 Card Programme 名称/类型、保险公司或企业、Plan、个人卡号/Member/Employee No.、Policy/Scheme No.、生效和到期日期。无保障可跳过,选卡后个人编号必填;患者填写不会自动完成 Eligibility。
  4. 获授权 Nurse/Reception 可修正自填的身份、联系方式、额外资料及保障。复用 PatientInformationForm 的 self-entry 视图及 PatientInsuranceCardsEditor,不复制第二套主档/卡种表单;患者 Consent 和关联 ID 不可在此直接修改。
  5. 每次保存真实修正必须有原因,保留不可覆盖的原始提交和逐次操作者/角色、诊所、时间、字段前后值。批准、拒绝、待澄清亦记录事件,后两者必须有原因。已处理记录仍可在 Reviewed 查看原始信息和历史;编辑未保存关闭须确认丢弃。
  6. 姓名/手机/DOB/性别/证件类型或号码发生实质修正后,原确认失效,由护士核实身份并记录依据后才可批准(2026-09-14 用户确认,取代要求病人重填);格式化空格、括号等变化不重复要求。不会在护士审核页直接改关联或强制新建,服务器最终写入仍须检查匹配、权限、版本及并发。
  7. 当前实现为受控前端预览:合成数据和历史保存在页面会话,刷新重置;真实路由不显示合成审核待办。H5 POST /:token/identity-check 目标返回 matched | new-patient | needs-clinic-help,可确认结果带 confirmation_token 和最小脱敏 candidate;提交增加 identity_confirmation: { confirmation_token, patient_confirmed: true }。正式服务端必须校验绑定的 Draft、患者、身份版本、有效期与一次性使用,不能信任客户端状态。端点及跨端持久化/审计/主档写入仍待开发。

2026-09-07 预约付款安排与患者持有计划边界

policy_card 是保险/企业/员工计划共用目录,clinic_patient_insurance_cards 是患者持有实例;Policy 与 Benefit Contract 来源保持各自类型。Appointment/Registration 使用一个 Insurance & Benefit Programme 入口选择已持有计划。本次选择、资格与备注属于预约/Visit,不改变患者默认计划。完整规则见 Frontoffice §4.3。

2026-09-07 用户追加确认:Patient & eMR 的 Insurance card 维护界面亦需对齐。编辑页签、共享编辑器和 Overview 统一为 Insurance & Benefit Programmes,三类计划共用入口、字段按类型显示,Primary 改 Patient default。换计划清旧个人资料、同计划保留;类型与来源不可在读回或维护时降为 insurance。完整契约见 Frontoffice §4.4;公开合成编辑仅页面会话,真实版本审计与 UAT 分别验证。

2026-09-07 人工计划审核边界

患者主档维护保险/企业/员工计划资料,不能将患者默认、卡面有效或主档资格字段视为本次已获保障。Appointment/Check-in 使用人工审核确认按钮,记录计划/变化/有效期核对、资格及预先申请结果;保存后由服务器记录审核人和时间。计划或就诊日期变更需重新审核,主档变化不自动覆盖历史 Visit Snapshot。输入和准备门禁以 Frontoffice §4.4 为准。