# 在线接诊（兽医）— 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 在线接诊（兽医）（牧业疫病诊疗服务） |
| 目标 | 为**已绑定兽医身份**的登录用户提供与牧民/用户的**即时在线问诊**能力：按条件检索本人接诊会话、查看历史消息、发送与接收多媒体消息，完成疫病相关的远程沟通 |
| 使用端 | 业务后台（若依管理端）；登录用户须为「畜牧医疗资源管理」中为该兽医**已分配账号**的兽医端角色用户（角色 **100**） |
| 修订依据 | 同目录 `在线接诊(兽医)功能需求-草稿.md`、界面原型（`Snipaste_2026-05-20_17-34-19.jpg`、`Snipaste_2026-05-20_17-35-41.jpg`、`Snipaste_2026-05-20_17-38-33.jpg`）；并关联分析 **AI 诊断（兽医、机构）** 草稿与原型 |

本文档**仅描述功能需求与业务规则**，不涉及数据库表结构、接口路径、请求体字段命名、HTTP 报文、权限标识命名及技术栈选型。

---

## 2. 术语与业务对象

### 2.1 接诊会话（一条会话）

- 表示**某一问诊人（牧民/用户）**与**某一接诊兽医**之间的一条**持续性的在线问诊对话**容器。  
- 会话由**会话 ID** 唯一标识；其下有多条**问诊消息**按时间顺序组成聊天记录。  
- 业务上**接诊人**为当前绑定的兽医资源对应账号；本模块**仅展示与操作「接诊人为当前登录兽医」的会话**。

### 2.2 问诊消息（单条）

- 会话内一次发送的内容单元，类型包括：**文本、图片、视频、语音**。  
- 每条消息记录发送方、接收方、发送时间、消息类型及内容（或媒体资源引用）；在界面按时间轴展示，区分「问诊人侧」与「兽医侧」气泡。

### 2.3 问诊人（需求方）

- 在**移动端「在线问诊」**向该兽医发起或继续对话的用户；本模块**展示其姓名**，**不**在此维护用户档案、不代其发起新会话（新会话由移动端创建）。

### 2.4 当前登录人（接诊兽医）

- 通过「畜牧医疗资源管理」**分配账号**登录后台的**兽医本人**。  
- 会话列表、消息读写范围均**自动限定为当前兽医**；不得查看或回复其他兽医的会话。

### 2.5 问诊类型（业务区分，非本模块菜单）

为与 **AI 诊断**、专家问诊等并行能力区分，会话在业务上带有**问诊类型**标识（如：兽医在线问诊、AI 问诊、专家在线问诊等）。  
**本模块仅处理「兽医在线问诊」类型**的会话；列表与详情**不出现** AI 会话或专家会话。

---

## 3. 关联需求分析（在线接诊 / AI 诊断）

「在线接诊（兽医）」与「AI 诊断（兽医、机构）」同属**即时消息类**产品能力，界面形态相近（左侧会话列表 + 右侧对话区），但**服务对象、数据范围与业务目的不同**，须严格隔离。

### 3.1 双模块定位对照

| 维度 | 在线接诊（兽医）（本文档） | AI 诊断（兽医、机构） |
| --- | --- | --- |
| 所属业务 | 牧业疫病诊疗服务 | 牧业疫病诊疗服务 |
| 使用角色 | **仅兽医账号** | **兽医账号 + 机构账号**（机构人员自助使用 AI） |
| 对话对象 | **真实问诊人（牧民/用户）** | **AI 助手**（无真实对方用户在线回复） |
| 业务目的 | 人工远程问诊、病情沟通、处置建议 | 自助问答、知识检索、辅助分析（**非**替代兽医接诊） |
| 会话来源 | 移动端「在线问诊」选兽医后发起/续聊 | 后台或移动端「AI」入口**新建会话**或打开历史 |
| 列表标题语义 | 问诊人姓名 + 最后一条**双方聊天**摘要 | **问答标题** + 最后一条问答摘要 |
| 右侧标题区 | **问诊人姓名** | **AI 助手** |
| 列表筛选项 | 问诊人（模糊）、会话内容（模糊） | **仅**会话内容（模糊） |
| 新建会话 | **无**（由移动端用户侧发起） | **有**「新增会话」 |
| 问诊类型标识 | **兽医在线问诊** | **AI 问诊** |

### 3.2 界面形态对照（后台）

```mermaid
flowchart TB
    subgraph 兽医接诊["在线接诊（兽医）"]
        V1[筛选: 问诊人 + 会话内容]
        V2[左: 接诊会话列表]
        V3[右: 与问诊人聊天]
    end
    subgraph AI诊断["AI 诊断（兽医、机构）"]
        A1[筛选: 会话内容]
        A2[左: 历史会话列表]
        A3[右: 与 AI 助手对话]
        A4[新增会话]
    end
```

两模块**菜单独立**、**数据列表互不可见**；避免将 AI 历史会话误展示在接诊会话列表中。

### 3.3 与移动端协同对照

| 端 | 在线接诊相关 | AI 诊断相关 |
| --- | --- | --- |
| 移动端-在线问诊 | 兽医列表 → 兽医资料 → **在线问诊**聊天；**曾问诊过则进入原会话，否则新建会话**（原型说明） | — |
| 移动端-消息 Tab | 展示与**各兽医**的会话列表（兽医名称、摘要、日期） | — |
| 移动端-AI Tab | — | 历史 AI 会话列表；**+ 创建会话**；快捷入口（养殖技巧、疾病诊疗、用药指导、设备操作等） |

牧民侧「在线问诊」产生的消息，在兽医后台「在线接诊」中可见；牧民侧不直接出现在兽医后台的 AI 诊断列表中。

### 3.4 与「我的预约（兽医）」的关系

| 关系 | 说明 |
| --- | --- |
| **业务并行** | 「我的预约」管理**预约单**（待确认/已确认等）；「在线接诊」管理**即时对话**，二者职责不同 |
| **本期不绑定预约** | **不校验**预约单状态；牧民**无需**先有「已确认」等预约即可发起或继续在线问诊；聊天模块**不读取、不拦截**预约状态（见 **§5.3**） |
| **状态独立** | 发送聊天消息**不自动**变更预约单状态；预约「已完成」由整体业务规则置位，与聊天模块解耦 |
| **数据隔离** | 预约列表与接诊会话列表**无交叉查询** |

### 3.5 机构侧说明（关联 AI 诊断）

- **机构账号**可使用 **AI 诊断** 进行自助问答；**不使用**「在线接诊（兽医）」菜单（该菜单仅兽医角色）。  
- 若机构人员需与牧民在线沟通，属其他业务（本期不在本文档范围）。  
- 兽医与机构共用 AI 诊断模块时，各自仅能看到**本人作为提问人**的 AI 历史会话。

### 3.6 数据与权限隔离（业务层约定）

- 接诊会话：`接诊人` = 当前登录兽医；`问诊类型` = 兽医在线问诊。  
- AI 会话：`提问人` = 当前登录用户；`问诊类型` = AI。  
- 同一用户可能既是兽医（接诊他人）又是 AI 提问者（自问 AI），两类会话**分表分列表**，不得合并展示。

---

## 4. 会话与消息规则

### 4.1 会话范围与时间窗

| 项 | 规则 |
| --- | --- |
| 数据范围 | **仅**当前登录兽医作为**接诊人**的会话 |
| 默认列表时间窗 | 左侧列表**默认仅展示**「最后一条消息时间」落在**最近 3 个月**内的会话（含起止日当天；起算时点须稳定） |
| 超窗会话检索 | 最后消息早于 3 个月的会话**默认不出现**；兽医填写**问诊人**或**会话内容**并点击**搜索**后，**可检索并打开**命中会话（可搜但不默认列出） |
| 排序 | 按**最后一条消息时间倒序**（最近活跃在前） |
| 会话唯一性 | 同一「问诊人 + 接诊兽医」在业务上对应**一条持续会话**（移动端续聊进入原会话；不鼓励后台重复建多条并行会话） |

### 4.1.1 会话删除/结束（兽医侧展示）

| 项 | 规则 |
| --- | --- |
| 牧民侧删除 | 牧民在移动端「消息」Tab **删除**某条与兽医的会话后，该会话在**兽医后台接诊列表中不再展示**，兽医**不可**再查看或回复（视为对该兽医侧不可见） |
| 兽医侧操作 | 兽医后台**不提供**「删除会话」「结束会话」等按钮；**不展示**已删除/已结束的会话条目 |
| 历史消息 | 对已不可见会话，本期**不提供**兽医侧恢复入口 |

### 4.2 消息类型与展示

| 类型 | 发送方 | 展示要求 |
| --- | --- | --- |
| **文本** | 问诊人 / 兽医 | 气泡内展示全文；过长可换行 |
| **图片** | 双方 | 缩略图展示；可点击查看大图（若平台统一支持预览） |
| **视频** | 双方 | 展示视频消息占位/封面；可点击播放（若平台支持） |
| **语音** | 双方 | 展示语音条及时长；可点击播放 |

兽医后台须能**接收**问诊人发来的各类型消息，并能**发送**各类型消息回复。

**视频、语音（本期约定）**

- **视频**、**语音**均采用**上传文件**方式发送（选择本地文件后上传），**不提供**实时音视频通话（RTC）、**不提供**后台内嵌录音/录像控件（与「仅上传文件」一致；图标入口仍为选文件）。  
- **图片**、**文本**规则不变。

### 4.3 消息同步与时效

| 项 | 规则 |
| --- | --- |
| 同步要求 | **近实时**：问诊人发送或兽医发送成功后，对方界面须在 **1 秒内** 看到新消息（含左侧列表摘要更新） |
| 实现取向 | 宜采用推送/长连接等机制；纯手动刷新**不满足**本需求 |
| 展示 | 聊天记录区按**日期分组**（如「3月30日」）及**时刻**（如「16:11」）展示，与原型一致 |
| 兽医发送成功 | 消息立即出现在当前会话兽医侧；同步至问诊人后亦须满足 1 秒内可见 |

---

## 5. 功能范围

### 5.1 本期实现

| 能力 | 说明 |
| --- | --- |
| 即时聊天布局 | 左列表 + 右对话区；**§6** |
| 接诊会话列表 | 筛选、默认 3 个月、排序；**§6.1** |
| 查看会话消息 | 选中会话加载全部历史消息；**§6.2** |
| 发送消息 | 文本、图片；视频/语音为**文件上传**；**§6.3** |
| 近实时同步 | 双向消息 **≤ 1 秒** 可见；**§4.3** |
| 超窗搜索 | 默认 3 个月列表；**搜索**可查更早会话；**§6.1** |
| 工具栏 | 列表区 **搜索**、**重置** |

### 5.2 本期不实现

| 项 | 说明 |
| --- | --- |
| 兽医后台「新建接诊会话」 | 会话由移动端用户发起；与 AI 诊断的「新增会话」不同 |
| 会话转接、多人会诊、@提醒 | 原型未要求 |
| 消息撤回、已读回执、输入中状态 | 除非平台统一 IM 规范另立，本期不做 |
| 将 AI 诊断结果一键插入接诊聊天 | 可单独立项；本期不做 |
| 机构端在线接诊、专家在线接诊后台 | 仅兽医本文档；专家/机构另模块 |
| 导出聊天记录、敏感词审核配置 | 未要求 |
| 视频/语音实时通话（RTC） | 不支持 |
| 后台内嵌录音/录像发送 | 不支持；语音/视频仅**上传文件**（见 **§5.3**） |
| 兽医侧删除/结束会话 | 不提供；牧民删除后会话对兽医**不展示** |

### 5.3 本期产品确认项（已确认）

| # | 确认项 | 本期约定 |
| --- | --- | --- |
| 1 | 消息时效 | **须近实时**；对方可见新消息的延迟 **≤ 1 秒** |
| 2 | 3 个月窗外历史 | **可搜但不默认列出**：默认列表仅最近 3 个月；**搜索**可命中更早会话并打开 |
| 3 | 与预约关系 | **暂不绑定**预约状态；不校验是否已预约/已确认 |
| 4 | 视频/语音发送方式 | **仅上传文件**；不做 RTC、不做后台内嵌录播 |
| 5 | 会话删除/结束 | 牧民删除后，兽医侧列表**不展示**该会话；兽医侧**无**删除/结束操作 |

---

## 6. 详细功能需求

### 6.1 接诊会话列表（左侧）

| 项 | 规则 |
| --- | --- |
| 标题 | 「接诊会话」（与原型一致） |
| 数据范围 | **仅**当前兽医的兽医在线问诊会话；**排除**牧民已删除且对兽医不可见的会话（**§4.1.1**） |
| 时间范围 | **默认**仅最近 3 个月内有最后消息的会话；**搜索**时可查更早会话（**§4.1**、**§5.3**） |

**筛选条件**

| 筛选项 | 规则 |
| --- | --- |
| 问诊人 | 选填；对**问诊人姓名** **模糊**匹配；**不受**默认 3 个月限制（搜索时全量匹配） |
| 会话内容 | 选填；对会话内消息**文本内容**（及可检索的标题/摘要字段）**模糊**匹配；**不受**默认 3 个月限制 |
| 工具栏 | **搜索**（触发后按条件查询，可含超 3 个月会话）、**重置**（恢复默认列表，仅 3 个月） |
| 默认进入 | 未点击搜索或已重置时，列表**仅**展示最近 3 个月会话 |

**列表项展示（与原型一致）**

| 元素 | 说明 |
| --- | --- |
| 头像 | 问诊人头像占位或默认图 |
| 问诊人姓名 | — |
| 最后一条内容 | 展示该会话**最新一条消息**的摘要（文本截断；非文本类型可用固定文案如「[图片]」「[语音]」「[视频]」） |
| 问诊日期 | 以**最后消息日期**展示，格式如「M月D日」（如 3月30日） |
| 选中态 | 选中某条后高亮，右侧加载该会话 |

**空列表**

- 无会话时展示友好提示（如「暂无接诊会话」）。

---

### 6.2 会话详情与聊天记录（右侧）

| 项 | 规则 |
| --- | --- |
| 入口 | 点击左侧某条接诊会话 |
| 顶部标题 | 展示当前会话的**问诊人姓名**（与左侧一致） |
| 聊天区 | 展示该会话**全部**历史消息（**不受**列表默认 3 个月限制；分页加载以实现为准，须能看全历史） |
| 气泡布局 | 问诊人消息在**一侧**（如左），兽医消息在**另一侧**（如右）；带头像占位 |
| 未选会话 | 右侧可为空状态提示（如「请选择接诊会话」） |

**只读约束**

- 历史消息**不可编辑、不可删除**（除非平台统一 IM 规范另定管理员能力，本期兽医侧不做）。

---

### 6.3 发送消息（右侧输入区）

| 项 | 规则 |
| --- | --- |
| 文本输入 | 多行文本框；支持输入病情回复、指导建议等 |
| 图片 | 选择本地图片文件上传并发送 |
| 语音 | 选择本地**语音文件**上传并发送（**非**后台内嵌录音） |
| 视频 | 选择本地**视频文件**上传并发送（**非**后台内嵌录像）；须**可接收并展示**问诊人上传的视频消息 |
| 发送按钮 | 「发送」；文本须非空；图片/音视频须已选文件 |
| 发送成功 | 消息近实时出现在聊天区（**§4.3**）；更新左侧列表摘要与时间 |

**发送身份**

- 消息发送方均为**当前登录兽医**；接收方为该会话的**问诊人**。

**失败处理**

- 发送失败须提示原因（网络、文件过大、格式不支持等），消息**不**虚假展示为已成功。

---

### 6.4 与 AI 诊断的互斥说明（产品层）

| 场景 | 在线接诊（兽医） | AI 诊断 |
| --- | --- | --- |
| 兽医想查历史与牧民聊天 | 使用本模块 | 不使用 |
| 兽医想用 AI 查养殖/疾病知识 | 不使用 | 使用 AI 诊断 |
| 机构人员问 AI | 无菜单 | 使用 AI 诊断 |

两模块**不得**共用同一左侧列表或会话 ID 空间。

---

## 7. 业务流程

### 7.1 兽医后台使用流程

```mermaid
flowchart TD
    A[兽医登录后台] --> B[进入在线接诊兽医]
    B --> C[可选: 问诊人/会话内容筛选]
    C --> D[搜索/重置]
    D --> E[左侧接诊会话列表]
    E --> F{选择会话?}
    F -->|是| G[右侧展示问诊人姓名与历史消息]
    G --> H[输入文本或选择图片/语音/视频]
    H --> I[点击发送]
    I --> J[消息入列并更新列表摘要]
    J --> G
    F -->|否| E
```

### 7.2 与移动端协同（牧民发起/续聊）

```mermaid
sequenceDiagram
    participant 牧民
    participant 移动端
    participant 兽医后台

    牧民->>移动端: 在线问诊-选择兽医
    alt 曾与该兽医问诊过
        移动端->>移动端: 进入原会话
    else 首次
        移动端->>移动端: 创建新会话
    end
    牧民->>移动端: 发送文本/图片/视频/语音(文件)
    移动端-->>兽医后台: 近实时同步(≤1秒)
    兽医后台->>兽医后台: 接诊会话列表可见更新

    兽医后台->>兽医后台: 回复消息(文件上传)
    兽医后台-->>移动端: 近实时同步(≤1秒)
    牧民->>移动端: 查看兽医回复

    opt 牧民删除会话
        移动端->>移动端: 会话对兽医不可见
        Note over 兽医后台: 列表不展示该会话
```

**要点：**

1. 会话**由移动端创建或续接**，兽医后台**不创建**新接诊会话。  
2. 双方消息**双向同步**；兽医仅回复**属于自己**的会话。  
3. 与 **AI 诊断** 无自动串联；牧民在 AI 中的提问**不会**出现在兽医接诊列表。

### 7.3 与 AI 诊断流程的并行关系

```mermaid
flowchart LR
    subgraph 牧民侧
        M1[在线问诊选兽医]
        M2[AI Tab 问 AI]
    end
    subgraph 兽医后台
        V[在线接诊]
        A[AI 诊断]
    end
    M1 --> V
    M2 -.->|不经由兽医后台| AI移动端
    兽医本人 --> V
    兽医本人 --> A
```

---

## 8. 业务数据要素（逻辑层，非表结构）

实施时需持久化以下**业务信息**（字段命名与存储方式由技术方案定义）：

| 逻辑对象 | 要点 |
| --- | --- |
| 会话 | 会话 ID；问诊人标识、问诊人姓名；接诊人标识、接诊人姓名；问诊类型（**兽医在线问诊**）；问题标题（可选，首问摘要或会话标题）；最后消息时间 |
| 消息 | 所属会话 ID；发送方/接收方标识与姓名；消息类型（文本/图片/视频/语音）；内容或媒体资源引用；发送时间 |

**与 AI 诊断存储的差异：** AI 会话的问诊类型为 **AI**，提问人为**当前登录用户本人**，无「接诊人-问诊人」双方真人对话结构。

---

## 9. 提示约定（示例）

| 场景 | 示例文案 |
| --- | --- |
| 搜索无结果 | 未找到匹配的接诊会话 |
| 默认列表 | 仅展示最近 3 个月会话；更早记录请使用搜索 |
| 空列表 | 暂无接诊会话 |
| 未选会话 | 请选择接诊会话 |
| 发送失败 | 发送失败，请重试 |
| 文本为空 | 请输入消息内容 |
| 文件限制 | 图片/视频/语音不符合要求时的具体提示（大小、格式以实现为准） |
| 无权限 | 无权查看该会话 |
| 非本兽医会话 | 无权查看该会话 / 会话不存在 |

---

## 10. 非功能建议（业务侧）

- 会话与消息查询须限定**当前兽医**，防止越权查看他兽医的问诊记录。  
- **消息投递**：端到端可见延迟 **≤ 1 秒**（**§5.3**）；验收时须在双端同时在线场景下抽检。  
- 图片、视频、语音上传须符合平台**文件大小与格式**统一规范。  
- 列表与聊天的时间、日期展示格式与移动端、AI 诊断模块**保持一致**。  
- 界面支持 **i18n**（汉语 + 藏文）。  
- 消息量大时聊天区宜支持**滚动加载**或分页，避免一次加载过慢；左侧列表仍按最后消息时间排序。  
- 高敏感场景下可考虑操作审计（查看会话、发送消息），与平台统一要求一致。

---

## 11. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 依据草稿与原型整理；补充与 AI 诊断（兽医、机构）关联分析；明确与我的预约、移动端在线问诊协同；剔除技术栈与接口表述；定义消息类型与会话隔离规则 |
| 1.1 | 纳入产品确认：近实时≤1秒；超3个月可搜不默认列出；不绑定预约；音视频仅上传文件；牧民删除后会话兽医侧不展示 |
