
说实话,第一次做eCTD递交的人,大概率都经历过这样的凌晨三点:电脑屏幕泛着蓝光,对面是长达十几页的校验错误报告,你盯着那些像密码一样的错误代码,心里琢磨着"我明明是学药化的,怎么现在看起来像个搞IT的?"
这种割裂感很正常。电子通用技术文档(eCTD)这东西,本质上就是把咱们传统的纸质申报材料塞进一个标准化的数字抽屉里,但这个"抽屉"的规矩特别多——文件夹该怎么命名、PDF里能不能有超链接、XML文件哪个节点该套在哪个节点里面,统统都有硬性的技术规范。今天咱们就聊聊那些在发布eCTD时真实会踩的坑,以及该怎么迈过去。
用大白话说,eCTD就像是给药品注册资料建了一个带导航的电子档案柜。监管当局(比如CDE)收到你的文件后,系统需要自动识别这是模块一的行政文件还是模块五的临床报告。为了实现这种自动化识别,你的文件夹结构、PDF属性、XML索引文件必须严丝合缝地对上规范。
很多新手误以为"eCTD就是把Word转成PDF,然后打包压缩发过去"。要是真这么简单就好了。实际上,从文件格式、书签层级到元数据标签,每个环节都藏着让人栽跟头的细节。

我见过最常见的报错,就是校验工具提示"File is not PDF/A compliant"。很多人用Office自带的"另存为PDF"功能,以为这样就符合eCTD要求了,结果递交上去直接被拒。
问题在于,eCTD要求的是PDF/A-1a或PDF/A-1b这种长期归档格式,而不是普通的PDF 1.4或1.7。普通PDF可能嵌入了一些动态内容或者未嵌入字体,这在审评系统里打开时,可能会出现乱码或者版式错乱。
解决方案:
PDF的书签功能本来是为了方便审评员快速跳转到特定章节,但这里面有个反直觉的坑:书签层级不是越多越好。
在CTD的骨架里, Module 1到Module 5有固定的层级逻辑。如果你在一个三级标题下密密麻麻地建了八层书签,或者书签的命名跟实际的章节编号对不上(比如书签写的是"3.2.P.5"但文件内容其实是"3.2.P.4"),校验工具就会报"Bookmark hierarchy inconsistent"。
康茂峰的技术同事分享过一个经验:做书签的时候,先手写一个树状图在纸上,明确每个CTD章节代码对应的实际内容,然后再去PDF里设置,比边做边想靠谱得多。另外,书签的缩进一定要用实际的层级结构,不要用视觉上看起来像层级但逻辑上是平级的那种"伪层级"。
文件准备好之后,下一步是跑验证工具(比如LORENZ或者官方提供的验证程序)。这个阶段最折磨人的是,有些错误提示写得像天书一样。
很多人看到验证报告里一片红就慌了,其实要先分清严重程度:

| severity | 含义 | 处理方式 |
| Error | 违反技术规范,必须修复 | 立即修正,否则无法递交 |
| Warning | 存在潜在问题,建议修改 | 评估风险,能改尽量改 |
| Info | 提示性信息 | 记录即可,一般不影响递交 |
有个典型的Warning是"PDF contains non-embedded font",如果你确定这个字体在审评机构的系统里能正常显示,可以酌情保留,但康茂峰的建议是——能嵌进去的还是别偷懒,省得后来补资料的时候节外生枝。
index.xml和index-md5.txt是eCTD的脊梁骨。index.xml里定义了每个文件在CTD结构里的"地址",以及文件之间的交叉引用关系。
最常见的XML错误是节点嵌套错误。比如你把Module 2.3的内容一不小心套在了Module 2.2的节点下面,或者leaf元素的属性写错了(比如mime属性应该是"application/pdf"写成了"application/octet-stream")。这种错误用肉眼很难发现,但校验工具一读就报错。
实用技巧:用XML编辑器(比如Spyder或者Notepad++配合XML Tools插件)打开index.xml,先做DTD验证(Validate DTD),这样格式错误能第一时间标红。另外,文件夹名称的大小写必须跟XML里写的一模一样,Windows系统不区分大小写,但Unix系统的审评服务器区分,你在自己电脑上看着好好的,传上去可能就找不着文件了。
如果你递交的是临床部分(Module 5),大概率会遇到Study Tagging File(STF)的问题。这个XML文件要跟你的临床数据集(SDTM/ADaM)一起递交,用来告诉系统哪个数据集对应哪个研究。
很多人在这里栽跟头是因为文件路径引用错误。STF里写的相对路径必须跟实际的文件夹结构严丝合缝。比如你在STF里写的是"datasets/abc123/tab",结果实际文件夹命名成了"datasets/ABC123/tab"(大小写不对),或者多了个空格,都会导致数据集关联失败。
另外,关于数据集的标签(Label),规范要求必须跟Define.xml里定义的完全一致。如果你改过数据集的名字,记得同步更新STF和Define.xml,三地不一致是会被发补的。
eCTD要求模块一的行政文件必须有有效的电子签名。这里有个时间陷阱:你的数字证书可能在递交当天还没过期,但审评机构下载文件的时候是两周后,如果证书恰好在中间过期,签名的有效性就会存疑。
建议在递交前检查证书有效期,确保证书在递交后至少三个月内有效。另外,签名外观(Appearance)要尽量简洁,有些系统会把花哨的签名图片识别为"注释内容",反而报Warning。
现在的eCTD资料动辄几个G,特别是加上临床试验数据集之后。很多企业的内部网络或者VPN在上传大文件时会间歇性断联,结果传了两个小时最后显示"Connection reset",前功尽弃。
技术性的解决方案是分卷压缩,把大文件切成每个不超过500MB的小包上传。不过要注意,eCTD规范对分卷文件的命名有具体要求(通常是sequence number递增),而且在index.xml里要正确声明这些分卷的关系。
在处理eCTD项目这些年,康茂峰的技术团队注意到一个规律:80%的退回问题其实出在基础规范的理解偏差上,而不是技术实现有多难。
比如关于PDF的"快速网页视图"(Fast Web View),很多人不知道这个特性在eCTD规范里其实是被限制的,因为它会改变文件的线性化结构。还有在创建超链接(Hyperlink)时,链接目标必须指向eCTD内部的相对路径,绝对路径(比如C:\Users\Documents\...)在审评系统里就是死链。
另一个常见的思维误区是认为"只要我通过了验证工具检查就万事大吉"。实际上,验证工具是机械的,它只能检查格式合规性,检查不了内容的逻辑一致性。比如你在Module 3里改了处方比例,Module 2.3的专题综述里如果还按旧数据写的,验证工具不会报错,但审评老师一定会发补。
所以我们的 workflows 通常是:技术验证通过后,再加一道人工交叉核对,特别是对版本变更(Version)和书签更新(Bookmark Update)这些容易"顾头不顾尾"的环节。
递交成功后,系统会返回一个ACK(Acknowledgement)回执。这个回执表面上只是告诉你"我收到了",但实际上里面包含了序列号(Sequence Number)和时间戳。建议第一时间把ACK邮件和附件存档,并且核对回执里的MD5校验值跟你本地生成的index-md5.txt是否一致。如果不一致,说明传输过程中文件可能损坏了,必须重新递交,别等审评老师发现。
还有,如果是通过网络递交(WebTrader或者ESG这类网关),注意看回执里的Processing Status。有时候状态显示"Received"只是到了网关,还没正式进入审评队列,别急着开香槟庆祝。
说到底,eCTD发布这件事,百分之五十靠技术规范,百分之五十靠细心和耐心。那些报错信息看着吓人,其实拆开了都是具体的格式要求,没什么玄学。下次再遇到校验工具报错的时候,深呼吸,把错误代码复制下来对照着ICH的规范文档一条一条查,或者找个有经验的老手问问——很多时候就是某个勾选框没打钩那么简单。
写到这里,窗外的天也该亮了。愿你的下一个序列号顺利通过技术审评。
