# 药物禁配标准管理 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 药物禁配标准管理 |
| 目标 | 维护「主药—配伍禁忌药物集合—配伍结果说明」类标准主数据，并与知识库建立或解除对应关系；删除时与知识库侧保持一致 |
| 依据 | 同目录 `药物禁配标准管理功能需求-草稿.md`（**本文不修改该草稿**，仅将其可验收内容整理为正式需求表述） |

**本文范围：** 只写**功能需求、业务规则与流程**；不写库表、接口路径、报文结构、技术栈选型等技术设计。

**边界（对齐草稿第 8 条语义）：** 本模块**不设「发布 / 下架」**；不采用养殖等模块的「上架 × 知识库」双维模型。业务上只显式管理 **知识库同步状态**：**未同步** / **已同步**。

**说明：** 草稿第 8 条字面为「休药期标准…」，按业务语境理解为 **本模块（药物禁配标准）** 与休药期等标准类模块一致：**不做发布/下架**，与养殖类「双维」模型区分。

### 1.1 建议阅读顺序

**第 2 章（术语与状态）→ 第 3 章（范围与流程）→ 第 5 章（操作矩阵）→ 第 4 章（分场景细则）**。

### 1.2 编制原则（验收口径）

- **状态唯一：** 除「未同步 / 已同步」外，不在需求正文引入其它业务态用语（如已发布）。  
- **规则可判定：** 凡写「不得」「须」「至少」处，均可在测试用例中做布尔判定。  
- **列表默认检索：** 默认仅按 **主药名称** 关键字模糊检索；若产品扩展为「配伍名参与命中」，须在需求变更中单列并验收。

---

## 2. 术语与业务状态

### 2.1 业务对象（一条标准）

| 概念 | 说明 |
| --- | --- |
| **主药** | 本条禁配标准所针对的药物；在列表检索、详情与编辑中作为主维度展示（草稿中「药物名称」即主药名称） |
| **配伍药物** | 与主药存在禁配（不宜同用等）关系的药物集合；**一条标准下可有多条**，每条为一条「配伍药物名称」记录；界面可通过 **增加 / 减少** 行维护列表（与草稿「+ / -」一致）；条数与合法性约束见 **2.3** |
| **配伍结果** | 对配伍禁忌或临床提示的**简短文字说明**；**选填** |

**列表与详情中的配伍药物：** 以有序列表形式展示；顺序在业务上有展示意义时，宜与保存顺序一致。

### 2.2 知识库同步状态（唯一显式状态）

| 状态 | 含义 |
| --- | --- |
| **未同步** | 本条可在业务侧维护；知识库侧**无**与本条对应的有效条目（含新建保存后、或移出知识库成功后） |
| **已同步** | 知识库侧**已有**与本条对应的条目；业务侧**禁止编辑与删除**，仅可 **查看**、**移出知识库** |

**合法稳态：** 仅上述两种；本模块需求**不出现**「已发布 / 未发布」作为状态机用语。

**已同步状态下若要改内容：** 须 **移出知识库** → **未同步** 下完成修改（主药、配伍列表、配伍结果）→ 再 **同步知识库** → **已同步**。禁止在「已同步」下直接改业务数据并默认知识库已一致。

### 2.3 配伍药物列表的完整性（逻辑约束）

- 一条标准须至少包含 **1** 条配伍药物（否则「禁配」无指向对象）。  
- 配伍药物名称 **不允许为空**；与主药名称使用 **相同的字符长度规则**（见 **4.1**）。  
- **同一标准内**：配伍药物名称之间 **不得重复**（避免同一条标准内出现两条完全相同的配伍药名）。  
- **配伍药物名称不得与主药名称完全相同**（主药与禁忌对象应区分）。  
- 用户可通过 **增加 / 减少** 配伍药物行进行操作；减少时须满足「至少保留一条」；增加后出现空行须在保存前完成填写或通过校验阻止保存。  
- **名称比较口径：** 先做 **首尾空白去除（trim）**，再判断长度、相等与去重；若项目对全角/半角等另有统一归一规则，**从其约定**，并在验收时与实现保持一致。

---

## 3. 功能范围与流程

### 3.1 功能范围

- 新增、修改、删除、分页列表、详情查看  
- 维护主药、配伍药物列表、配伍结果三类业务数据  
- 知识库：**同步至知识库**（建立对应关系）、**移出知识库**（解除对应关系）  
- 删除时与知识库侧一致性（见 **4.4**）  
- 错误与提示与**项目统一习惯**一致（不规定具体错误码或报文字段名）

### 3.2 状态迁移（示意）

```mermaid
stateDiagram-v2
    [*] --> 未同步: 新建保存
    未同步 --> 已同步: 同步知识库成功
    已同步 --> 未同步: 移出知识库成功
    未同步 --> [*]: 删除成功
```

### 3.3 关键路径（文字）

1. **新建**：填写主药、至少一条配伍药物、可选配伍结果 → 保存后 → **未同步**。  
2. **进入知识库**：**未同步** 下「同步知识库」成功 → **已同步**。  
3. **修改已入库内容**：**已同步** →「移出知识库」→ **未同步** → 本地修改保存 →「同步知识库」→ **已同步**。  
4. **删除**：仅 **未同步** 可删整条；已同步须先移出；删除与知识库侧一致性见 **4.4**。

### 3.4 常见场景串联（便于评审对齐）

| 场景 | 状态起点 | 用户动作 | 状态终点 / 说明 |
| --- | --- | --- | --- |
| 仅建档 | — | 新增并保存 | **未同步**；可继续改、可删、可同步 |
| 入库后纠错 | 已同步 | 移出 → 修改 → 再同步 | 回到 **已同步**；知识库与业务一致 |
| 放弃入库 | 已同步 | 移出 → 删除 | 记录删除；须满足 **4.4** 删库约定 |
| 仅查询 | 任意 | 列表/详情 | 不改变状态 |

---

## 4. 详细功能需求

### 4.1 新增

| 内容项 | 规则 |
| --- | --- |
| 主药—药物名称 | 必填；长度 **1～20** 字符（计数口径与项目全局一致）；**全表唯一**（trim 后精确匹配，与其它记录 `main_drug_name` 不可重复） |
| 配伍药物列表 | **至少 1 条**；每条名称必填，长度 **1～20** 字符（口径同上）；同条标准内名称**互不相同**且**均不得与主药名称相同**（比较规则见 **2.3** 末款） |
| 配伍结果 | **选填**；若有内容，长度不超过 **20** 字符（口径与项目全局一致） |

保存成功后：**未同步**。

---

### 4.2 列表查询

- **主药名称**：支持关键字 **模糊** 匹配（默认仅主药维度；不对单条配伍药名做列表级模糊检索，除非按 **1.2** 已做产品扩展并验收）。  
- **列表**：宜展示 **知识库同步状态**；**宜**展示配伍条目**数量**或等价摘要（便于了解禁忌范围大小，**不规定**具体 UI 形态）。  
- **分页与排序**：支持分页；默认条数、排序方向（如最新在前）与**项目列表统一规范**一致，本文不约定技术参数名。

---

### 4.3 修改

- **条件：** 仅 **未同步** 可改（**已同步** 不可改）。  
- **可改项：** 主药名称、配伍药物列表（增删行、改各条名称）、配伍结果；保存时须仍满足 **4.1** 与 **2.3**（含主药名称唯一性，修改时排除本条 `id`）。  
- **一致性：** 保存成功后，用户在同一入口再次打开列表或详情，应看到与本次保存一致的主药、配伍顺序与配伍结果（**所见即所得**，与项目刷新习惯一致）。  
- **失败：** 须有可读校验提示（如主药名称已存在、条数不足、配伍重名、与主药同名、长度越界等）。

---

### 4.4 删除

- **条件：** 仅 **未同步** 允许删除整条。**已同步** 须先 **移出知识库** 回到 **未同步** 再删。  
- **批量（若产品提供）：** 与项目同类删除一致；**同一操作内** 任一选中项不满足「未同步可删」时，**整单失败**并提示，**不**出现部分删除成功、部分仍残留且与矩阵不一致的情况（除非项目另有明确「跳过失败项」规范并已单独评审）。  
- **与知识库：** 删除前已满足「仅 **未同步** 可删」后，仍宜按项目与知识库的协作约定发起 **删除类通知**，并约定为 **幂等**（知识库侧若本无对应数据则安全忽略、不阻断本地删除），以保证删除链路一致、可验收。若协议明确规定「仅存在条目时才接收删除」，则须在协议与验收说明中单列，并与「删除时通知知识库」的表述对齐评审。  
- **交互：** 删除前宜二次确认；重要操作宜可追溯（与项目习惯一致）。

---

### 4.5 同步至知识库

- **条件：** **未同步**。  
- **互斥：** **已同步** 下不得再次执行「同步」成功路径；须拒绝或明确提示（与 **第 5 章** 一致）。  
- **结果：** 成功 → **已同步**；失败 → 仍为 **未同步**，提示可读并可重试。

---

### 4.6 移出知识库

- **条件：** **已同步**。  
- **互斥：** **未同步** 下不得执行「移出」成功路径；须拒绝或明确提示（与 **第 5 章** 一致）。  
- **结果：** 成功 → **未同步**；失败 → 仍为 **已同步**，提示可读并可重试。

---

### 4.7 查看详情

展示 **4.1** 所涉全部业务内容：主药名称、配伍药物列表（顺序与保存一致）、配伍结果（若有），并宜展示 **知识库同步状态**。**已同步** 为只读；**未同步** 在有权时可进入编辑。

---

## 5. 操作矩阵

| 知识库同步 | 查看 | 修改 | 删除 | 同步知识库 | 移出知识库 |
| :---: | :---: | :---: | :---: | :---: | :---: |
| 未同步 | ✓ | ✓ | ✓ | ✓ | — |
| 已同步 | ✓ | ✗ | ✗ | — | ✓ |

---

## 6. 错误与提示

校验失败、知识库操作失败、网络或权限问题等，提示须**统一、可读**；宜区分「输入不合法」（如配伍列表重名、少于一条）与「知识库暂不可用」，便于用户重试或求助。

---

## 7. 非功能（建议）

权限（同步、移出、删改查）、审计、列表性能等与项目同类标准模块对齐。

---

## 8. 与草稿的对应关系（不改草稿，仅说明）

| 草稿条款 | 本文位置 |
| --- | --- |
| 1 | **4.1**、**2.1**、**2.3**（「+ / -」落为增加/减少行与列表完整性规则） |
| 2 | **4.2** |
| 3 | **4.3**（并受 **2.2**、**2.3** 约束） |
| 4 | **4.4** |
| 5 | **4.7** |
| 6 | **2.2**、**5**（未同步行） |
| 7 | **2.2**、**5**（已同步行） |
| 8 | **第 1 章边界**、**2.2**、全文不出现发布/下架；**第 1 章「说明」** 对草稿笔误作语义对齐 |

草稿第 9～10 条为技术/报文与栈备忘，**不纳入**本功能需求正文；异常与错误表现遵循 **第 6 章** 及项目统一约定即可。
