# 我的预约（专家）— 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 我的预约（专家）（牧业养殖科技服务） |
| 目标 | 为**已绑定科技专家身份**的登录用户提供「面向本人的科技服务预约」查询与处置能力：筛选预约单、查看详情、对**待确认**预约执行**确认接诊**或**拒绝接诊**；对**已完成**预约查看用户评价 |
| 使用端 | 业务后台（若依管理端）；登录用户须为「畜牧科技资源管理」中为该专家**已分配账号**的专家端角色用户 |
| 修订依据 | 同目录 `我的预约(专家)功能需求-草稿.md`、界面原型（`Snipaste_2026-05-20_18-40-47.jpg`、`Snipaste_2026-05-20_18-42-32.jpg`、`Snipaste_2026-05-20_18-43-23.jpg`）；并关联分析 **我的预约（兽医）**、**我的预约（机构）** 正式需求与原型 |

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

---

## 2. 术语与业务对象

### 2.1 专家预约单（一条记录）

- 表示牧民/用户在**移动端「预约服务」**中选择某位**已发布科技专家**（「预约服务-专家」Tab）后提交的一条预约申请。  
- 预约单在业务上**归属该专家**（与当前登录账号所绑定的专家资源一一对应）；本模块**仅展示并操作「属于当前登录专家」的单据**。  
- 一条预约单包含：预约人、预约日期、预约时段、联系电话、服务地址、服务需求、状态、（若已拒绝）拒绝理由，以及（若已完成且用户已评价）评价信息等。

### 2.2 当前登录人（服务提供方视角）

- 指通过「畜牧科技资源管理」**分配账号**（专家端角色，权限字符 **`exp`**，库中常见 `role_id=101`）登录后台的**专家本人**。  
- 列表、详情与写操作的数据范围：**自动限定为当前账号绑定的专家资源下的预约记录**；不得查看或操作其他专家的预约。

### 2.3 预约人（需求方）

- 在移动端填写预约信息的用户（姓名、电话、地址、需求等）；本模块**只读展示**，不在此维护预约人档案。

### 2.4 服务评价（用户侧产生、专家侧只读）

- 用户在移动端预约状态为 **已完成** 后，可对本次专家指导服务提交评价（见移动端「写评价」原型）。  
- 评价维度包括：**到场准时**（星级）、**服务态度**（星级）、**指导效果**（星级）、**综合评价**（文字，移动端限制 **100 字**以内）。  
- 本模块**不提供**代用户提交或修改评价；专家仅**查看**已提交的评价内容。

### 2.5 接单制定位（与机构登记制区分）

| 模式 | 含义 | 本模块 |
| --- | --- | --- |
| **接单制** | 用户提交后进入「待确认」，专家须确认或拒绝 | **是** |
| **登记制** | 用户提交后即「已预约」，后台仅查阅 | **否**（见机构模块） |

---

## 3. 关联需求分析（专家 / 兽医 / 机构）

三模块同属「**我的预约**」产品族：均为**服务提供方**在后台处理「指向自己的预约」。差异来自**业务域**、**资源来源**、**状态机**及**是否含评价能力**。

### 3.1 三端定位对照

| 维度 | 我的预约（专家） | 我的预约（兽医） | 我的预约（机构） |
| --- | --- | --- | --- |
| 所属业务 | **牧业养殖科技服务** | 牧业疫病诊疗服务 | 牧业疫病诊疗服务 |
| 预约对象 | **科技专家**（「预约服务-专家」） | **兽医人员**（「预约服务-兽医」） | **诊疗机构**（「预约服务-诊疗机构」） |
| 账号来源 | **畜牧科技资源管理**-专家分配账号 | 畜牧医疗资源管理-兽医分配账号 | 畜牧医疗资源管理-机构分配账号 |
| 专家/兽医角色 | **`exp`**（常见 101） | **100**（`vet`） | **102**（`ins`） |
| 移动端提交后 | **待确认**，待专家处置 | **待确认**，待兽医处置 | **已预约**（无待确认） |
| 后台处置 | **确认 / 拒绝** + 已完成**查评价** | **确认 / 拒绝** | **仅查看** |
| 拒绝理由 | 拒绝时**必填**（≤100 字） | 同左 | 无 |
| 服务评价 | **已完成**可查看评价及详情星级 | **本期不做** | **无** |
| 列表字段 | **完整**（含时段、地址、需求、拒绝理由） | **完整** | **精简**（人、日期、电话、状态） |

### 3.2 状态模型对照

```mermaid
flowchart LR
    subgraph 专家与兽医["专家 / 兽医（接单制·本文档属专家侧）"]
        A1[待确认] -->|确认接诊| B1[已确认]
        A1 -->|拒绝接诊| C1[已拒绝]
        A1 -->|用户取消| D1[已取消]
        B1 -->|服务完成| E1[已完成]
        B1 -->|用户取消| D1
        E1 -->|用户写评价| R1[含评价信息]
    end
    subgraph 机构["机构（登记制）"]
        A2[已预约] -->|用户取消| D2[已取消]
        A2 -->|服务完成| E2[已完成]
    end
```

| 状态 | 专家本模块 | 兽医模块 | 机构模块 | 说明 |
| --- | --- | --- | --- | --- |
| **待确认** | ✓ | ✓ | — | 用户已提交，等待专家确认或拒绝 |
| **已预约** | — | — | ✓ | 仅机构；专家列表**不出现** |
| **已确认** | ✓ | ✓ | — | 服务方已确认；可 **完成接诊** |
| **已拒绝** | ✓ | ✓ | — | 服务方拒绝，须展示拒绝理由 |
| **已取消** | ✓ | ✓ | ✓ | 用户取消（规则允许时） |
| **已完成** | ✓ | ✓ | ✓ | 服务结束；专家可**查看评价** |

> **本期约定（专家）：** 状态与兽医一致，共 **五种**：待确认、已取消、已确认、已拒绝、已完成。**不出现**机构的「已预约」，避免与「已确认」语义混淆。

### 3.3 与兽医模块的差异（本期范围）

| 能力 | 专家（本文档） | 兽医（关联文档） |
| --- | --- | --- |
| 接单处置 | 待确认可确认/拒绝；规则同兽医 | 同左 |
| 列表/详情业务字段 | 同左（完整列） | 同左 |
| 已完成-操作 | **查看**、**查看评价** | **仅查看** |
| 详情-评价区 | **已完成**展示三维度星级 + 综合评价 | **不展示** |
| 评价列表弹窗 | **有**（评价人、评价时间、综合评价） | **无** |
| 业务域与资源 | 养殖科技 / 科技资源 | 疫病诊疗 / 医疗资源 |

处置逻辑与兽医**对齐**；差异集中在 **已完成后的评价只读能力**，为专家模块独有。

### 3.4 与机构模块的差异（本期范围）

| 能力 | 专家（本文档） | 机构（关联文档） |
| --- | --- | --- |
| 模式 | **接单处置型** | **登记查看型** |
| 写操作 | 确认、拒绝 | **无** |
| 状态数 | **五种** | **三种**（已预约/已取消/已完成） |
| 评价 | 有 | 无 |
| 列表 | 含时段、地址、需求、拒绝理由 | 列表精简，详情补全 |

### 3.5 与上下游模块关系

| 上游/平行模块 | 关系 |
| --- | --- |
| **畜牧科技资源管理** | 专家须**已发布**且已**分配账号**，本模块才有菜单与数据；可预约时段、收费标准等约束在**用户提交预约时**校验，本模块展示结果即可 |
| **移动端预约服务** | 用户选择专家、填写预约信息并提交 → **待确认**；专家确认/拒绝 → 用户侧同步；用户可取消 → **已取消**；履约结束 → **已完成**；用户可 **写评价**（本模块只读查看） |
| **我的预约（兽医）** | 同属预约服务族、接单制类似，但**业务域与资源不同**；列表**数据隔离** |
| **我的预约（机构）** | 同一「预约服务」不同 Tab；**数据隔离**；机构为登记制，专家不处理机构预约 |
| **在线指导 / 现场服务**（若实施） | 可与 **已确认** 预约衔接履约；完成后由整体业务置 **已完成**；评价由用户在移动端提交 |

### 3.6 统一预约与三端隔离（业务层约定）

- 牧民在「预约服务」中分别向**专家、兽医、机构**发起预约，为**不同预约对象**的独立记录。  
- 专家后台**仅**处理「指向本专家」的记录；不因同一用户同时预约了某机构或兽医而出现在专家列表中。  
- 专家侧**不提供**将预约转派机构/兽医、代取消、改期等运营能力（须由用户移动端或另立流程，本期不做）。

---

## 4. 预约状态与状态机（专家）

### 4.1 状态定义

| 状态 | 含义 | 本模块可执行操作 |
| --- | --- | --- |
| **待确认** | 用户已提交，等待专家确认或拒绝 | 查看、**确认接诊**、**拒绝接诊** |
| **已确认** | 专家已确认，待履约 | 查看、**完成接诊** |
| **已拒绝** | 专家已拒绝 | **仅查看**（须能看拒绝理由） |
| **已取消** | 预约已取消（通常为用户在移动端操作） | **仅查看** |
| **已完成** | 服务已结束 | 查看、**查看评价**（若用户已评价则有内容；未评价则提示或无数据） |

### 4.2 状态迁移（专家侧动作与用户侧）

```mermaid
stateDiagram-v2
    [*] --> 待确认: 用户在移动端提交专家预约
    待确认 --> 已确认: 专家确认接诊
    待确认 --> 已拒绝: 专家拒绝接诊(必填理由)
    待确认 --> 已取消: 用户取消预约
    已确认 --> 已完成: 服务完成(业务闭环)
    已确认 --> 已取消: 用户取消(若规则允许)
    已完成 --> [*]: 用户可选写评价(移动端)
```

**约束：**

- 专家侧**不得**将状态改为「已取消」；**不得**对已确认/已拒绝/已取消/已完成记录再次确认或拒绝；**已确认**时可 **完成接诊**。  
- 专家侧**不得**代替用户提交或修改评价。  
- 若列表或详情出现 **已预约**，视为**数据错误或类型串单**，按异常处理（不展示或提示联系管理员），**不应**提供确认/拒绝按钮。

### 4.3 并发与幂等

- 对同一条 **待确认** 记录，**确认接诊**与**拒绝接诊**互斥；成功后状态变更，重复点击应提示「当前状态不允许该操作」。  
- 若用户同时将预约取消为 **已取消**，专家侧确认/拒绝应失败并提示状态已变更（如「该预约已取消，无法操作」）。  
- **查看评价**为只读查询，不改变预约状态。

---

## 5. 功能范围

### 5.1 本期实现

| 能力 | 说明 |
| --- | --- |
| 分页列表 | 筛选 + 默认仅当前专家预约；**§6.1** |
| 查看详情 | 全字段只读；已完成含评价区；**§6.2** |
| 确认接诊 | 仅 **待确认**；**§6.3** |
| 拒绝接诊 | 仅 **待确认**；必填拒绝理由；**§6.4** |
| 查看评价 | 仅 **已完成**；列表弹窗；**§6.5** |
| 工具栏 | 列表页 **搜索**、**重置** |

### 5.2 本期不实现

| 项 | 说明 |
| --- | --- |
| 专家代用户写评价 / 改评价 | 评价仅在移动端由用户提交 |
| 专家主动取消预约、改期、改地址、改时段 | 须由用户移动端或另立运营流程 |
| 导出、批量确认/拒绝、消息推送配置 | 原型与草稿未要求 |
| 兽医/机构预约的跨类型查询 | 严格数据隔离 |
| 将评价能力扩展到兽医端 | 属产品单独立项；兽医本期不做 |

---

## 6. 详细功能需求

### 6.1 预约记录列表

| 项 | 规则 |
| --- | --- |
| 数据范围 | **仅**当前登录账号绑定专家的预约记录 |
| 分页 | 默认每页 **20** 条 |
| 排序 | 默认 **预约日期倒序**，同日按 **创建时间倒序**（或预约时段开始时间倒序，以实现为准，须稳定） |
| 工具栏 | **搜索**、**重置** |

**筛选条件**

| 筛选项 | 规则 |
| --- | --- |
| 预约人 | 选填；对**预约人姓名** **模糊**匹配 |
| 预约日期 | 选填；**起止日期**（`yyyy-MM-dd`）；含起止日当天；开始日期不得晚于结束日期 |
| 状态 | 选填；**精确**匹配五种状态之一；空则不过滤 |

**列表列（展示，与后台原型一致）**

| 列名 | 说明 |
| --- | --- |
| 预约人 | — |
| 预约日期 | `yyyy-MM-dd` |
| 预约时段 | `HH:mm~HH:mm` |
| 联系电话 | — |
| 服务地址 | 过长可截断，详情看全文 |
| 服务需求 | 过长可截断 |
| 状态 | 标签展示，五种枚举；颜色宜区分（待确认/已确认/已拒绝/已取消/已完成） |
| 拒绝理由 | **已拒绝**时展示内容；其他状态可为空或「—」 |
| 操作 | 见 **§7** |

---

### 6.2 查看预约详情

| 项 | 规则 |
| --- | --- |
| 入口 | 列表行「查看」；**任意状态**均可进入 |
| 形式 | 弹窗或详情页，业务字段**只读**（不可编辑预约信息） |
| 基础字段 | 预约人、预约日期（`yyyy-MM-dd`）、预约时段（`HH:mm~HH:mm`）、联系电话、服务地址、服务需求、**状态** |
| 拒绝理由 | 状态为 **已拒绝** 时**必须展示**；其他状态不展示或为空 |
| 评价区（仅已完成） | 当状态为 **已完成** 且存在用户评价时展示：**到场准时**、**服务态度**、**指导效果**（均以**星级**展示，与移动端维度一致）、**综合评价**（全文只读） |
| 评价区（已完成但未评价） | 可不展示星级与文字，或展示「暂无评价」类提示；**不**提供补评入口 |
| 非已完成 | **不展示**评价相关字段 |
| 关闭 | 「确定」或「关闭」仅关闭弹窗；**不**改变预约状态 |

---

### 6.3 确认接诊

| 项 | 规则 |
| --- | --- |
| 前置 | 状态为 **待确认**；记录属于当前登录专家 |
| 操作 | 点击「确认接诊」；宜二次确认（如「确定接受该预约？」） |
| 结果 | 状态变为 **已确认**；记录操作人、操作时间（若平台统一要求审计） |
| 失败 | 非待确认、已取消等 → 「当前状态不允许确认接诊」 |
| 成功后 | 列表刷新；移动端用户侧应同步为已确认（由整体预约服务保证） |

---

### 6.4 拒绝接诊

| 项 | 规则 |
| --- | --- |
| 前置 | 状态为 **待确认**；记录属于当前登录专家 |
| 操作 | 点击「拒绝接诊」→ 弹出表单（与原型「拒绝接诊」弹窗一致） |
| 拒绝理由 | **必填**；trim 后 **1～100** 字；空或仅空白、超长均校验失败 |
| 结果 | 状态变为 **已拒绝**；拒绝理由在列表「拒绝理由」列及详情中回显 |
| 取消弹窗 | 不提交则状态不变 |
| 失败 | 非待确认 → 「当前状态不允许拒绝接诊」 |

---

### 6.5 查看评价

| 项 | 规则 |
| --- | --- |
| 前置 | 状态为 **已完成**；记录属于当前登录专家 |
| 入口 | 列表行「查看评价」 |
| 形式 | 弹窗或抽屉，**只读**列表 |
| 列表列 | **评价人姓名**、**评价时间**（展示格式与平台统一，如 `yyyy-MM-dd HH:mm:ss`）、**综合评价**（全文；过长可换行或截断+详情） |
| 数据范围 | 仅展示**与该条预约关联**的用户评价；通常为一条；若业务允许多条评价则全部列出 |
| 无评价数据 | 提示「暂无评价」或等价文案；不报错 |
| 与详情关系 | 详情内评价区展示**维度星级 + 综合评价**；本弹窗侧重**列表化浏览**评价人、时间与综合文字（与草稿 §9 一致）；二者数据同源、只读 |

**说明：** 星级维度（到场准时、服务态度、指导效果）以 **§6.2 详情评价区** 为主展示；列表弹窗以草稿列字段为准，若产品需在三列外增加维度列，须单独立项，本期以草稿三列 + 详情星级为准。

---

## 7. 操作与权限矩阵

| 操作 | 待确认 | 已确认 | 已拒绝 | 已取消 | 已完成 |
| --- | --- | --- | --- | --- | --- |
| 查看 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 确认接诊 | ✓ | — | — | — | — |
| 拒绝接诊 | ✓ | — | — | — | — |
| 完成接诊 | — | ✓ | — | — | — |
| 查看评价 | — | — | — | — | ✓ |

- 模块级：**列表查询**、**详情**、**确认**、**拒绝**、**查看评价** 须按按钮粒度授权（具体标识由实施阶段定义）。  
- 无「专家」绑定关系的账号：不应看到本菜单，或进入后列表为空并可有友好提示（见 **§9**）。

---

## 8. 业务流程

### 8.1 模块总览（专家后台）

```mermaid
flowchart TD
    A[专家账号登录后台] --> B[进入我的预约专家]
    B --> C[列表筛选]
    C --> D{选择记录}
    D --> E[查看详情]
    D --> F{状态?}
    F -->|待确认| G[确认接诊]
    F -->|待确认| H[拒绝接诊+理由]
    F -->|已完成| I[查看评价列表]
    F -->|其他| E
    G --> J[已确认]
    H --> K[已拒绝]
    I --> L[关闭]
    E --> C
```

### 8.2 与移动端协同（用户侧摘要）

```mermaid
sequenceDiagram
    participant 用户
    participant 移动端
    participant 专家后台

    用户->>移动端: 预约服务-专家 Tab
    用户->>移动端: 选择专家、日期时段、填写信息
    移动端->>移动端: 校验专家可约等
    移动端-->>专家后台: 生成预约 状态=待确认
    专家后台->>专家后台: 列表可见 待确认

    alt 专家确认
        专家后台->>专家后台: 确认接诊
        移动端-->>用户: 状态=已确认
    else 专家拒绝
        专家后台->>专家后台: 拒绝+理由
        移动端-->>用户: 状态=已拒绝 可见理由
    else 用户取消
        用户->>移动端: 取消预约(二次确认)
        移动端-->>专家后台: 状态=已取消
    end

    alt 服务完成
        Note over 移动端,专家后台: 业务闭环置 已完成
        用户->>移动端: 写评价(三维度星+综合评价)
        专家后台->>专家后台: 查看评价/详情评价区
    end
```

1. 用户在「预约服务」**专家** Tab 选择专家、日期时段并提交 → 专家侧 **待确认**（移动端同显，可「取消预约」且宜二次确认）。  
2. 专家 **确认** → 用户侧 **已确认**；专家 **拒绝**（必填理由）→ 用户侧 **已拒绝**并可见理由。  
3. 用户在允许状态下 **取消** → 专家侧 **已取消**，确认/拒绝不可用。  
4. 服务完成后业务置 **已完成** → 用户可在移动端 **写评价**；专家侧 **查看评价** 与详情评价区只读展示。

### 8.3 与兽医/机构流程的并行关系（产品层）

| 用户一次可能行为 | 专家后台 | 兽医后台 | 机构后台 |
| --- | --- | --- | --- |
| 只预约某专家 | 有记录 | 无 | 无 |
| 只预约某兽医 | 无 | 有记录 | 无 |
| 只预约某机构 | 无 | 无 | 有记录 |
| 分别预约专家+兽医 | 各看各的 | 各看各的 | — |

三端列表**互不影响**；专家人员**无需**在专家模块处理兽医或机构预约。

---

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

| 场景 | 示例文案 |
| --- | --- |
| 日期筛选 | 「结束日期不能早于开始日期」 |
| 拒绝理由 | 「请填写拒绝理由」「拒绝理由不能超过 100 字」 |
| 状态操作 | 「当前状态不允许确认接诊」「当前状态不允许拒绝接诊」「该预约已取消，无法操作」 |
| 数据范围 | 「未绑定专家资源，无法查询预约」 |
| 成功 | 「确认接诊成功」「拒绝接诊成功」 |
| 评价 | 「暂无评价」 |
| 空列表 | 「暂无预约记录」 |

---

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

- 列表与写操作须限定**当前专家**，防止越权查看或操作他专家预约。  
- 确认、拒绝、查看评价（若平台要求）记**操作审计**。  
- 日期、时段、状态、星级展示格式与移动端、兽医/机构模块**保持一致**，便于运营对照。  
- 界面支持 **i18n**（汉语 + 藏文）；状态标签颜色与原型一致。  
- 已完成且未评价时，「查看评价」与详情评价区的空态宜统一，避免用户误以为系统故障。

---

## 11. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 依据专家草稿与原型整理；补充与兽医、机构关联分析；明确接单制五态与评价只读能力；剔除技术栈、接口与统一响应格式表述；对齐移动端写评价与后台查看评价分工 |
