# 药典数据准备操作指南

> 版本：v1.0  
> 适用于：数据录入人员、药典内容整理人员

---

## 一、数据格式

药典数据使用 JSON 格式，每条药品一个对象。**必须严格遵循以下 Schema：**

```json
{
  "drug_id": "H20000001",
  "name": "阿莫西林",
  "name_en": "Amoxicillin",
  "pinyin": "Amoxilin",
  "category": "化学药",
  "subcategory": "β-内酰胺类抗生素",
  "sections": {
    "性状": "...",
    "鉴别": "...",
    "检查": "...",
    "含量测定": "...",
    "类别": "...",
    "贮藏": "...",
    "制剂": "...",
    "用法与用量": "...",
    "禁忌": "...",
    "不良反应": "...",
    "注意事项": "..."
  },
  "source": {
    "version": "2020年版",
    "volume": "二部",
    "page": "567-569"
  }
}
```

### 字段说明

| 字段 | 类型 | 必填 | 说明 |
|------|------|:---:|------|
| `drug_id` | 字符串 | ✅ | 唯一标识。化学药格式 `H` + 8 位数字，中药 `Z` + 8 位数字，生物制品 `S` + 8 位数字 |
| `name` | 字符串 | ✅ | 药品通用名（中文） |
| `name_en` | 字符串 | | 英文名 |
| `pinyin` | 字符串 | | 汉语拼音 |
| `category` | 字符串 | ✅ | **必须为以下值之一**：`化学药` `中药` `生物制品` `辅料` |
| `subcategory` | 字符串 | | 药理分类，如 `β-内酰胺类抗生素` `清热药` `解热镇痛抗炎药` |
| `sections` | 对象 | ✅ | 药品各栏目内容，见下方栏目说明 |
| `source.version` | 字符串 | ✅ | 药典版本，如 `2020年版` |
| `source.volume` | 字符串 | ✅ | 部，如 `一部` `二部` `三部` `四部` |
| `source.page` | 字符串 | ✅ | 页码，如实填写 |

### sections 栏目说明

| 栏目名 | 说明 | 示例 |
|--------|------|------|
| `性状` | 药品的物理形态、颜色、气味、溶解性 | 本品为白色结晶性粉末... |
| `鉴别` | 化学鉴别方法 | (1) 取本品约10mg... |
| `检查` | 质量标准检查项 | 酸度 取本品0.5g... |
| `含量测定` | 有效成分含量测定方法 | 照高效液相色谱法... |
| `类别` | 药品药理类别 | β-内酰胺类抗生素 |
| `贮藏` | 保存条件 | 遮光，密封保存 |
| `制剂` | 该药的制剂类型 | 片剂、胶囊剂、注射剂 |
| `用法与用量` | 给药方式、剂量 | 口服，一次0.5g... |
| `禁忌` | 禁忌症 | 对本品过敏者禁用 |
| `不良反应` | 已知不良反应 | 常见恶心、呕吐... |
| `注意事项` | 使用注意 | 孕妇慎用... |

> **原则**：逐字照搬药典原文，不要改写、不要省略、不要添加个人理解。

---

## 二、文件准备

### 步骤 1：创建 JSON 文件

在 `data-pipeline/data/` 目录下创建 `.json` 文件，数组格式：

```
data-pipeline/
└── data/
    ├── sample_drugs.json      ← 示例数据（已有4条，可参考）
    ├── chem_drugs.json         ← 化学药数据（你创建的）
    ├── tcm_drugs.json          ← 中药数据
    └── biologics.json          ← 生物制品数据
```

### 步骤 2：验证格式

```bash
# 在项目根目录执行
python3 -c "
import json
with open('data-pipeline/data/你的文件.json') as f:
    data = json.load(f)
print(f'共 {len(data)} 条，第1条药品名：{data[0][\"name\"]}')
"
```

### 步骤 3：入库

```bash
# 修改 data-pipeline/ingest.py 中最后几行的文件路径，或直接执行：
source .venv/bin/activate
python3 -c "
import asyncio, json, sys
sys.path.insert(0, 'data-pipeline')
from ingest import ingest_drugs
asyncio.run(ingest_drugs('data-pipeline/data/你的文件.json'))
"
```

---

## 三、数据来源

| 来源 | 方式 | 说明 |
|------|------|------|
| **药典 PDF 拷贝粘贴** | 手动 | 打开药典 PDF，逐个药品复制粘贴到 JSON 模板 |
| **NMPA 官网说明书** | 半自动 | 通过批准文号搜索，复制说明书内容 |
| **结构化表格** | Excel → JSON | 如有 Excel 格式的药品数据表，可写脚本批量转换 |

### 从药典 PDF 录入技巧

1. 用 Adobe Acrobat 或任意 PDF 阅读器打开《中国药典》
2. Ctrl+F 搜索药品名
3. 逐栏目复制到 JSON 模板
4. **特别注意**：化学符号上标下标（如 `C₁₆H₁₈O₉`），建议保留为普通文本 `C16H18O9`

---

## 四、批量导入模板

如果数据量大，可以先填 Excel 再脚本转换。Excel 表头如下：

| drug_id | name | category | subcategory | 性状 | 鉴别 | 检查 | 含量测定 | 类别 | 贮藏 | 制剂 | 用法与用量 | 禁忌 | 不良反应 | 注意事项 | version | volume | page |
|---------|------|----------|-------------|------|------|------|---------|------|------|------|-----------|------|---------|---------|---------|--------|------|

---

## 五、常见问题

**Q: 一个药品的栏目太多，有些没有内容怎么办？**
A: 不填该栏目即可，sections 中只保留有内容的栏目。

**Q: 来源页码怎么写？**
A: 如实写药典原文所在页码。如 `567-569`（跨页），`216`（单页）。

**Q: drug_id 怎么编？**
A: 化学药用批准文号去掉地区码，如国药准字H20000001 → `H20000001`。中药同理。没有批准文号的药品按 `H00000001` 自增编号。

**Q: 入库后怎么更新？**
A: 修改 JSON 文件重新执行入库脚本即可，脚本会 `ON CONFLICT DO UPDATE` 自动覆盖同名 drug_id。
