192 lines
5.4 KiB
Markdown
192 lines
5.4 KiB
Markdown
---
|
||
name: citation-manager
|
||
description: 引用管理规范。规定 [src_xxx] 编号体系、sources.jsonl 字段标准、跨章节去重规则、参考文献列表生成格式(GB/T 7714)。
|
||
---
|
||
|
||
# 引用管理规范
|
||
|
||
## 一、src_id 编号规则
|
||
|
||
### 全局唯一编号
|
||
|
||
`src_id` 在整个项目内**全局唯一**,格式:`src_XXX`(3 位数字,不足补零)。
|
||
|
||
- 由 dr-analyst 在首次引用时分配
|
||
- 按发现顺序递增:`src_001`, `src_002`, ...
|
||
- 跨章节引用同一来源时,使用**相同 ID**
|
||
|
||
### 分配流程
|
||
|
||
1. dr-analyst 发现一条新信源
|
||
2. 读取 `projects/<slug>/phase2/sources.jsonl`,找当前最大 ID
|
||
3. 分配下一个 ID(如当前最大为 `src_023`,下一个为 `src_024`)
|
||
4. 写入 sources.jsonl
|
||
|
||
### 草稿中的引用格式
|
||
|
||
行内引用:`数据或观点 [src_042]`
|
||
|
||
多来源:`数据或观点 [src_042][src_058]`
|
||
|
||
---
|
||
|
||
## 二、sources.jsonl 字段标准
|
||
|
||
每行一个 JSON 对象(JSONL 格式):
|
||
|
||
```jsonl
|
||
{
|
||
"id": "src_001",
|
||
"tier": 1,
|
||
"score": 8.5,
|
||
"type": "journal",
|
||
"title": "论文标题",
|
||
"authors": ["Zhang S", "Li M"],
|
||
"year": 2024,
|
||
"venue": "Nature Medicine",
|
||
"impact_factor": 58.7,
|
||
"url": "https://doi.org/10.1038/...",
|
||
"doi": "10.1038/...",
|
||
"accessed_at": "2026-04-20",
|
||
"abstract": "2-3句摘要",
|
||
"key_data": {
|
||
"sample_size": 1200,
|
||
"primary_endpoint": "OS 改善 23%"
|
||
},
|
||
"used_in": ["ch02", "ch05.sec3"],
|
||
"conflict_of_interest": null,
|
||
"notes": "RCT 主要终点数据在 Table 2"
|
||
}
|
||
```
|
||
|
||
### type 字段枚举值
|
||
|
||
| 值 | 含义 |
|
||
|---|---|
|
||
| `journal` | 期刊论文(含综述) |
|
||
| `trial` | 临床试验(ClinicalTrials.gov 注册信息) |
|
||
| `regulatory` | 监管机构公告/审批文件 |
|
||
| `patent` | 专利文件 |
|
||
| `report` | 咨询/行业报告 |
|
||
| `disclosure` | 上市公司披露(年报/招股书/SEC)|
|
||
| `preprint` | 预印本(bioRxiv/medRxiv)|
|
||
| `news` | 专业媒体报道(Tier 3 用) |
|
||
|
||
### 必填字段
|
||
|
||
`id`, `tier`, `score`, `type`, `title`, `year`, `url`(或 `doi`)
|
||
|
||
---
|
||
|
||
## 三、去重规则
|
||
|
||
dr-pm 在 Phase 2 结束时执行去重:
|
||
|
||
```python
|
||
# 伪代码
|
||
seen_urls = {}
|
||
seen_dois = {}
|
||
unique_sources = []
|
||
|
||
for source in all_sources:
|
||
key = source.get("doi") or source.get("url")
|
||
if key not in seen_urls:
|
||
seen_urls[key] = True
|
||
unique_sources.append(source)
|
||
else:
|
||
# 合并 used_in 字段
|
||
existing = seen_urls[key]
|
||
existing["used_in"] = list(set(existing["used_in"] + source["used_in"]))
|
||
```
|
||
|
||
去重后,草稿文件里的 [src_xxx] 标注**不需要更改**,因为 ID 是全局分配的。
|
||
|
||
---
|
||
|
||
## 四、参考文献列表生成(GB/T 7714-2015)
|
||
|
||
dr-reporter 从 sources.jsonl 生成参考文献列表时,按以下格式:
|
||
|
||
### 期刊论文
|
||
```
|
||
[src_001] ZHANG S, LI M. 论文标题[J]. Nature Medicine, 2024, 30(5): 1234-1245. DOI: 10.1038/...
|
||
```
|
||
|
||
### 报告/白皮书
|
||
```
|
||
[src_042] McKinsey & Company. 报告标题[R]. McKinsey Global Institute, 2024.
|
||
```
|
||
|
||
### 监管文件
|
||
```
|
||
[src_018] FDA. NDA 申请审批公告[EB/OL]. (2024-03-15)[2026-04-20]. https://www.fda.gov/...
|
||
```
|
||
|
||
### 临床试验
|
||
```
|
||
[src_055] ClinicalTrials.gov. 试验名称 (NCT12345678)[EB/OL]. (2023-01-01)[2026-04-20]. https://clinicaltrials.gov/...
|
||
```
|
||
|
||
### 专利
|
||
```
|
||
[src_067] 发明人. 专利名称[P]. 专利号, 申请日.
|
||
```
|
||
|
||
### 排序规则
|
||
|
||
参考文献按在正文中**首次出现的顺序**排列,即 [src_001] 在最前,以此类推。
|
||
|
||
---
|
||
|
||
## 五、脚注使用边界
|
||
|
||
脚注不是行内引用的替代品,也不用于重复输入材料中已经被正文自然承载的事实。脚注只在以下场景使用:
|
||
|
||
- **法规原文或条款定位**:正文需要引用法规要求,但完整条款会打断叙事时,脚注写明法规名称、章节/条款和关键原文。
|
||
- **关键资料原文**:原文措辞本身会影响判断强度,且正文只保留管理结论时,脚注可放短摘录。
|
||
- **补充背景或术语解释**:正文读者可能需要额外背景,但展开会破坏行文节奏。
|
||
- **版权或使用限制说明**:图表、第三方材料、内部材料使用边界需要单独说明时。
|
||
|
||
禁止事项:
|
||
|
||
- 不要把“某份输入材料说过什么”机械搬到脚注;这类事实应通过正文和数字引用解决。
|
||
- 不要为每个本地材料引用都加脚注;脚注应少而精,优先服务关键判断。
|
||
- 不要用脚注堆砌证据,核心证据仍应进入正文或证据表。
|
||
|
||
推荐格式:
|
||
|
||
```markdown
|
||
正文关键判断<sup>[12]</sup>。[^1]
|
||
|
||
[^1]: ICH Q10《Pharmaceutical Quality System》第 4.1 节要求管理评审输入覆盖“results of regulatory inspections and findings, audits and commitments”,并纳入 CAPA、变更以及上次管理评审行动。
|
||
```
|
||
|
||
---
|
||
|
||
## 六、引用完整性检查(dr-chief-editor 用)
|
||
|
||
审校时检查:
|
||
1. 正文中所有 [src_xxx] 都在 sources.jsonl 里有对应记录
|
||
2. sources.jsonl 里所有 ID 在正文中都有引用(无孤立信源)
|
||
3. 所有 Tier 1 信源的 URL 或 DOI 格式正确
|
||
|
||
检查脚本(可用 bash 执行):
|
||
```bash
|
||
# 提取正文中的所有 src_id
|
||
grep -oE 'src_[0-9]+' projects/<slug>/phase4/final.md | sort -u > /tmp/cited.txt
|
||
|
||
# 提取 sources.jsonl 中的所有 id
|
||
python3 -c "
|
||
import json
|
||
ids = []
|
||
with open('projects/<slug>/phase2/sources.jsonl') as f:
|
||
for line in f:
|
||
d = json.loads(line)
|
||
ids.append(d['id'])
|
||
print('\n'.join(sorted(ids)))
|
||
" > /tmp/registered.txt
|
||
|
||
# 找差集
|
||
diff /tmp/cited.txt /tmp/registered.txt
|
||
```
|