
上個(gè)月有個(gè)朋友問我,說他們公司花了三周時(shí)間把幾百份PDF轉(zhuǎn)成了eCTD格式,結(jié)果交上去第二天就被打了回來,原因是"技術(shù)驗(yàn)證未通過"。他很納悶,明明每個(gè)文件都能正常打開,目錄看起來也沒問題,怎么就過不了?
這事兒其實(shí)挺常見的。很多人第一次接觸eCTD申報(bào),以為就是把掃描件打包成電子格式,頂多再做個(gè)目錄頁。但真相是,eCTD根本不是一個(gè)"文件夾"的概念,它是一個(gè)精密的數(shù)字化體系,里面有嚴(yán)格的邏輯關(guān)系。技術(shù)文檔審查查的不是"你能不能打開這個(gè)文件",而是"這個(gè)文件在監(jiān)管機(jī)構(gòu)的系統(tǒng)里能不能被正確解析、索引和關(guān)聯(lián)"。
說白了,eCTD審查是在看一組看不見的邏輯鏈條有沒有斷。
咱們得先搞清楚一個(gè)基本點(diǎn):eCTD的技術(shù)審查和醫(yī)學(xué)審查是兩回事。醫(yī)學(xué)同事關(guān)心的是你寫的藥效數(shù)據(jù)對(duì)不對(duì),毒理實(shí)驗(yàn)設(shè)計(jì)合不合理;技術(shù)審查關(guān)心的則是這些資料能不能被監(jiān)管機(jī)構(gòu)的電子系統(tǒng)識(shí)別。用個(gè)不太恰當(dāng)?shù)谋扔鳎t(yī)學(xué)審查看病歷寫得有沒有價(jià)值,技術(shù)審查看病歷的字跡清不清楚、頁碼對(duì)不對(duì)、有沒有缺頁。
在康茂峰處理過的項(xiàng)目里,技術(shù)審查通常集中在四個(gè)層面:

這里面最容易被忽視的是XML層面。eCTD的骨架是一套基于DTD(文檔類型定義)的XML文件,它定義了每一個(gè)leaf元素(也就是具體的PDF文件)該放在哪里、叫什么名字、和前一個(gè)版本什么關(guān)系。審查系統(tǒng)會(huì)把這個(gè)XML丟進(jìn)驗(yàn)證器,一旦發(fā)現(xiàn)你的標(biāo)簽嵌套有問題,或者必需的屬性沒填,直接報(bào)錯(cuò)。
做技術(shù)審查的時(shí)候,有些問題肉眼根本看不出來,必須用工具掃描。康茂峰的團(tuán)隊(duì)在早期的項(xiàng)目里踩過不少這樣的坑,后來總結(jié)了一份 checklist,今天挑幾個(gè)最容易翻車的點(diǎn)說說。
module 2到module 5的書簽結(jié)構(gòu)是有嚴(yán)格規(guī)范的。比如2.1 CTD的Table of Contents,下面掛的必須是各個(gè)子模塊的標(biāo)題,而且層級(jí)不能跳。很多申辦方在生成PDF時(shí),書簽帶上了亂碼或者多余的空格,這在人工瀏覽時(shí)可能看不出差別,但監(jiān)管機(jī)構(gòu)的系統(tǒng)讀到這種不規(guī)范的字符,可能會(huì)直接判定書簽結(jié)構(gòu)損壞。
更隱蔽的是"假書簽"——看起來有書簽,實(shí)際上指向的是頁碼而不是命名目標(biāo)。這種在本地Adobe Reader里點(diǎn)擊能跳轉(zhuǎn),但到了監(jiān)管端的服務(wù)器環(huán)境里就可能失效。
如果你的申報(bào)資料里包含臨床研究報(bào)告,那STF文件就是重中之重。這個(gè)XML文件要把每個(gè)研究報(bào)告拆分成研究標(biāo)識(shí)、研究階段、研究目的等多個(gè)屬性。審查的時(shí)候系統(tǒng)會(huì)檢查這些標(biāo)簽值是否在受控詞匯表里。
比如你用了一個(gè)自創(chuàng)的研究階段代碼,而不是CTD規(guī)范里定義的"Phase I"、"Phase II",系統(tǒng)就會(huì)標(biāo)記為無效。康茂峰遇到過客戶把"Phase I/II"寫成"Phase I-II",中間用連字符而不是斜杠,這種細(xì)微差別也會(huì)導(dǎo)致驗(yàn)證警告。
這是基礎(chǔ)中的基礎(chǔ),但出錯(cuò)率極高。所有提交的PDF必須是PDF/A格式或者至少符合PDF 1.4以上標(biāo)準(zhǔn),不能設(shè)置打開密碼,不能有限制打印或復(fù)制的安全策略。更重要的是,所有字體必須完全嵌入,不能是子集嵌入或者引用系統(tǒng)字體。

有時(shí)候你用某些轉(zhuǎn)換軟件生成的PDF,看起來文字顯示正常,但技術(shù)審查工具一查,會(huì)發(fā)現(xiàn)某些特殊符號(hào)(比如希臘字母μ、α)其實(shí)用的是系統(tǒng)臨時(shí)替換的字體,而不是嵌入的TrueType或Type 1字體。這種文件在別人的電腦上打開可能就變亂碼。
eCTD要求每個(gè)文件的命名遵循特定規(guī)則:8-64個(gè)字符,只能包含字母、數(shù)字、連字符、下劃線,不能用大寫字母(除了特定的區(qū)域性文件)。文件名一旦確定,在后續(xù)的生命周期變更中必須保持一致。
MD5校驗(yàn)值是文件的"指紋"。你修改了一個(gè)標(biāo)點(diǎn)符號(hào),MD5值就變了。技術(shù)審查會(huì)核對(duì)目錄里的MD5值和實(shí)際文件的MD5值是否匹配。有些團(tuán)隊(duì)在最后一刻替換了文件但忘了更新XML里的校驗(yàn)值,這種低級(jí)錯(cuò)誤會(huì)導(dǎo)致整卷資料被退回。
eCTD之所以叫"技術(shù)文檔"而不是"電子檔案",核心就在于它強(qiáng)調(diào)模塊間的關(guān)聯(lián)性。比如你模塊2.7總結(jié)的毒性數(shù)據(jù),需要鏈接到模塊4的具體研究報(bào)告;模塊3的處方變更歷史,要指向模塊1的相關(guān)信函。
這些鏈接不是隨便寫個(gè)"詳見模塊4"就完事的,而是實(shí)實(shí)在在的XML超鏈接標(biāo)簽。審查的時(shí)候會(huì)掃描所有這些href屬性,確認(rèn)指向的目標(biāo)文件確實(shí)存在,而且在當(dāng)前遞交流程的范圍內(nèi)。
這里有個(gè)容易混淆的概念:內(nèi)鏈和外鏈。內(nèi)鏈?zhǔn)侵赶虮拘蛄校╯equence)內(nèi)部的文件,外鏈?zhǔn)侵赶蛑耙烟峤恍蛄械奈募?duì)于替換(replace)操作,外鏈必須準(zhǔn)確指向被替換文件的唯一標(biāo)識(shí)(operation number)。如果寫錯(cuò)了,系統(tǒng)會(huì)認(rèn)為你在試圖引用一個(gè)不存在的舊版本,或者更糟,指向了別人的申報(bào)資料——這在技術(shù)審查中絕對(duì)是紅線。
康茂峰在處理一個(gè)生物制品的申報(bào)時(shí),遇到過模塊3.2.P的鏈接指向了錯(cuò)誤的舊序列號(hào),原因是項(xiàng)目經(jīng)理復(fù)制了上一次的XML模板但忘了更新sequence number。這種錯(cuò)誤在人工核對(duì)幾百個(gè)鏈接時(shí)很難發(fā)現(xiàn),必須經(jīng)過自動(dòng)化工具的遍歷掃描。
雖然eCTD是國際通用格式,但不同地區(qū)的監(jiān)管機(jī)構(gòu)在細(xì)節(jié)上有各自的偏好。比如某些地區(qū)要求module 1的行政文件必須單獨(dú)打包,或者對(duì)PDF的頁面尺寸有特定要求(A4 vs Letter)。還有些地區(qū)對(duì)書簽的展開層級(jí)有明確限制,要求默認(rèn)只展開到第二層。
技術(shù)審查必須兼顧這些區(qū)域性(regional)約束。這也是為什么同樣的eCTD骨架,在提交不同地區(qū)時(shí)往往需要生成不同的"皮膚"——XML里的region屬性要設(shè)置正確,對(duì)應(yīng)的PDF書簽風(fēng)格也可能需要調(diào)整。
表格在這種審查中特別有用,比如對(duì)比不同地區(qū)對(duì)書簽深度的要求:
| 審查維度 | 通用CTD標(biāo)準(zhǔn) | 常見區(qū)域差異 |
| 書簽展開層級(jí) | 建議不超過4層 | 某些地區(qū)要求默認(rèn)僅展開前2層 |
| 文件命名大小寫 | 小寫為主 | 特定區(qū)域文件允許大寫(如MOD-1-CV) |
| PDF/X合規(guī) | PDF/A-1a或PDF 1.4 | 某些地區(qū)接受PDF/A-1b |
| STF必填字段 | study-id, study-title | 某些地區(qū)增加sponsor-study-id的格式校驗(yàn) |
市面上有不少eCTD驗(yàn)證工具,從開源的到商業(yè)化的都有。但工具只是輔助,不能完全替代人工判斷。比如工具能告訴你"書簽層級(jí)超過限制",但判斷這個(gè)層級(jí)是否影響了閱讀邏輯,還是需要人來決定。工具能檢測(cè)出"超鏈接目標(biāo)不存在",但修復(fù)這個(gè)鏈接需要理解文件之間的實(shí)際關(guān)系。
在康茂峰的實(shí)踐中,技術(shù)審查通常分三輪:第一輪用自動(dòng)化工具跑完整驗(yàn)證,篩出所有Error和Warning;第二輪人工逐條復(fù)核,特別是那些需要業(yè)務(wù)判斷的警告(比如某些書簽命名不規(guī)范但不影響功能);第三輪是模擬監(jiān)管機(jī)構(gòu)的視角,用他們的官方驗(yàn)證工具再跑一遍。
這里有個(gè)小技巧:不要只看validation report里的錯(cuò)誤列表,要看原始日志。有時(shí)候工具會(huì)報(bào)"XML parsing error",但根本原因可能是文件編碼問題——你的XML聲明是UTF-8,但實(shí)際保存時(shí)帶了BOM頭,或者某些特殊字符用了GBK編碼。這些問題在表面報(bào)告里可能只顯示為模糊的解析錯(cuò)誤,需要翻日志才能定位。
說幾個(gè)康茂峰遇到過的真實(shí)案例,都是些很小但致命的細(xì)節(jié)。
有個(gè)化學(xué)藥的補(bǔ)充申請(qǐng),只是把模塊3.2.S的中國藥典標(biāo)準(zhǔn)從2015版更新到2020版,看起來簡(jiǎn)單。但操作人員在做replace操作時(shí),把new value的attribute寫成了舊版本號(hào),結(jié)果系統(tǒng)認(rèn)為你在用2020版的標(biāo)準(zhǔn)替換2020版的標(biāo)準(zhǔn),邏輯上出現(xiàn)了閉環(huán)。這種錯(cuò)誤在遞交后第二天就被退件,理由是"生命周期操作無效"。
還有個(gè)生物制品的臨床申報(bào),所有的PDF書簽都正常,但審查工具提示"bookmark destination out of range"。查了半天發(fā)現(xiàn),某個(gè)150頁的PDF在生成書簽時(shí),最后一頁的書簽指向了第151頁,而PDF只有150頁。可能是Word轉(zhuǎn)PDF時(shí)頁碼計(jì)算錯(cuò)誤,或者是后期刪除了某些頁面但書簽沒更新。這種問題在本地瀏覽時(shí)不會(huì)暴露,因?yàn)槟J(rèn)打開的是第一頁,審查工具卻會(huì)逐條驗(yàn)證每個(gè)書簽指向的頁碼是否存在。
最隱蔽的一次是字體問題。一個(gè)中文申報(bào)資料,正文用的是宋體,看起來完全正常。但技術(shù)審查時(shí)發(fā)現(xiàn),某些生僻字(比如化學(xué)名中的特殊符號(hào))實(shí)際使用的是操作系統(tǒng)臨時(shí)映射的字體,而不是嵌入的CID字體。結(jié)果是,在監(jiān)管機(jī)構(gòu)的Linux服務(wù)器上打開時(shí),這些字顯示為方框。解決方案是把這些字符做成內(nèi)嵌的矢量圖形,或者確保使用了完整的Unicode字體嵌入。
如果你正在準(zhǔn)備eCTD遞交,技術(shù)審查環(huán)節(jié)最好前置到整個(gè)申報(bào)資料準(zhǔn)備的早期。不要等所有文件都寫完、簽完字、蓋好章了,才想起來轉(zhuǎn)成eCTD格式。那時(shí)候發(fā)現(xiàn)問題,返工成本極高。
康茂峰的建議是建立一個(gè)"技術(shù)合規(guī)檢查表",在文件生成的每個(gè)節(jié)點(diǎn)就做部分驗(yàn)證。比如:
另外,養(yǎng)成良好的命名習(xí)慣。很多技術(shù)錯(cuò)誤源于混亂的臨時(shí)文件命名。建議在整個(gè)準(zhǔn)備過程中,所有中間文件都保留版本號(hào),且版本號(hào)規(guī)則要和eCTD的生命周期操作對(duì)應(yīng)起來。這樣即使最后一天發(fā)現(xiàn)某個(gè)PDF有問題,也能快速定位它屬于哪個(gè)序列、該用replace還是append操作。
關(guān)于審查的頻率,如果是首次遞交(original application),建議在提交前至少進(jìn)行三次完整的技術(shù)審查,間隔一周左右。因?yàn)閑CTD準(zhǔn)備周期往往很長,期間可能會(huì)有軟件環(huán)境變更(比如Adobe Acrobat自動(dòng)更新),這些變更有時(shí)會(huì)影響PDF的生成方式。多次審查能捕獲這種漸進(jìn)式的變化。
最后提醒一點(diǎn):技術(shù)審查過了不代表申報(bào)資料完美無缺,但至少能保證監(jiān)管機(jī)構(gòu)能正常打開、閱讀和索引你的資料。在這個(gè)基礎(chǔ)上,醫(yī)學(xué)和合規(guī)內(nèi)容才可能被審評(píng)員看到。說白了,技術(shù)審查是入場(chǎng)券,不是獎(jiǎng)狀。過了這一關(guān),真正的科學(xué)審評(píng)才開始。
