15 KiB
NMPA 注册资料法规核查与整改闭环开发计划(第二批:完整闭环补齐)
一、第二批目标
第二批在第一批主链路通过后执行,补齐完整整改闭环和交互能力:
适用条件对话选择框
-> waiting_user 暂停恢复
-> 附件 4 申报资料目录规则对齐
-> 整包复核
-> 缺失项复核
-> mock 通知留痕
-> 更完整的过程产物
-> 更强的前端交互和验收测试
飞书真实 CLI/API、规则管理前端、自动填写目标文件不在第二批落地,进入 docs/6.待办计划/第二阶段暂缓事项.md。
二、阶段总览
| 阶段 | 名称 | 目标 | 验收 |
|---|---|---|---|
| RR2-1 | 适用条件确认 | 对话选择框确认产品类别、注册类型、临床评价路径等 | waiting_user 可暂停恢复 |
| RR2-2 | 附件 4 规则对齐与核查能力增强 | 按《体外诊断试剂注册申报资料要求及说明》扩展完整目录规则、章节、一致性、RAG 引用和文本抽取范围 | 能识别附件 4 一级/二级目录缺失和关键字段问题 |
| RR2-3 | 整包复核 | 基于新的汇总批次创建新的法规核查批次 | 可追溯来源批次 |
| RR2-4 | 缺失项复核 | 针对原 Issue 执行复核并更新状态 | 生成 review_record |
| RR2-5 | mock 通知留痕 | 对 blocking/high/medium 写 mock 通知记录 | 报告展示通知记录 |
| RR2-6 | 前端和总体验收 | 条件选择框、复核入口、通知/复核记录展示 | 全量测试通过 |
三、RR2-1 适用条件确认
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-1-001 | 实现适用条件候选识别 | services/info_extract.py |
| RR2-1-002 | 工作流支持 waiting_user 暂停 |
regulatory_review/workflow.py |
| RR2-1-003 | 实现条件确认接口 | regulatory_review/views.py |
| RR2-1-004 | 实现对话选择框 UI | templates/home.html、static/js/app.js |
| RR2-1-005 | 确认后从 rule_scope 或下一节点恢复 |
workflow.py |
| RR2-1-006 | 增加测试 | tests/test_regulatory_condition.py、tests/test_regulatory_frontend.py |
确认字段
以下选项来自既有第二阶段功能/详细设计:RegulatoryInfoExtract 输出产品类别、注册类型、临床评价路径,功能设计中明确注册类型包括“首次注册、变更注册、延续注册等”,临床评价路径包括“临床试验、免临床、同品种比对等”。因此 Demo 版按下表实现。
| 字段 | 交互 |
|---|---|
| 产品类别 | 体外诊断试剂 / 医疗器械 / 其他 |
| 注册类型 | 首次注册 / 变更注册 / 延续注册 |
| 临床评价路径 | 临床试验 / 免临床 / 同品种比对 / 待确认 |
| 产品名称 | 文本输入 |
| 型号规格 | 文本输入 |
| 预期用途 | 文本输入 |
验证命令
pytest tests/test_regulatory_condition.py tests/test_regulatory_frontend.py tests/test_regulatory_workflow.py
Codex 执行提示
请实现法规适用条件候选识别、waiting_user 暂停恢复和对话选择框确认。用户确认前工作流不得继续执行规则裁剪。
四、RR2-2 附件 4 规则对齐与核查能力增强
新增口径:附件 4 必须结构化入规则库
第一批主链路已经可以演示,但现有 Demo YAML 只覆盖 5 类规则:产品技术要求、说明书、注册检验报告、临床评价资料、安全和性能基本原则清单。经人工确认,第一批链路可通过;但与附件《体外诊断试剂注册申报资料要求及说明》相比,规则覆盖仍不完整。第二批 RR2-2 必须将附件 4 的申报资料目录结构补入规则库,并作为完整性和章节核查的主要依据。
附件来源:
docs/0.原始材料/附件 4 体外诊断试剂注册申报资料要求及说明.doc
如附件仍为旧版 .doc,允许在开发阶段通过 Pandoc、LibreOffice headless、Word COM 或受控脚本转换为 .docx/.txt 中间产物;中间产物只用于规则抽取和测试夹具,不改变第一阶段文件页数统计口径。
附件 4 目录覆盖范围
第二批 Demo 规则至少覆盖以下一级和二级标题。规则应支持“章节目录”类目录项、资料文件项、条件适用项和推荐项的区分。
| 一级目录 | 二级目录/资料项 |
|---|---|
| 1. 监管信息 | 1.1 章节目录、1.2 申请表、1.3 术语/缩写词列表、1.4 产品列表、1.5 关联文件、1.6 申报前与监管机构的联系情况和沟通记录、1.7 符合性声明 |
| 2. 综述资料 | 2.1 章节目录、2.2 概述、2.3 产品描述、2.4 预期用途、2.5 申报产品上市历史、2.6 其他需说明的内容 |
| 3. 非临床资料 | 3.1 章节目录、3.2 产品风险管理资料、3.3 体外诊断试剂安全和性能基本原则清单、3.4 产品技术要求及检验报告、3.5 分析性能研究、3.6 稳定性研究、3.7 阳性判断值或参考区间研究、3.8 其他资料 |
| 4. 临床评价资料 | 4.1 章节目录、4.2 临床评价资料 |
| 5. 产品说明书和标签样稿 | 5.1 章节目录、5.2 产品说明书、5.3 标签样稿、5.4 其他资料 |
| 6. 质量管理体系文件 | 6.1 综述、6.2 章节目录、6.3 生产制造信息、6.4 质量管理体系程序、6.5 管理职责程序、6.6 资源管理程序、6.7 产品实现程序、6.8 质量管理体系的测量/分析和改进程序、6.9 其他质量体系程序信息、6.10 质量管理体系核查文件 |
规则分级默认值
| 规则类型 | 默认风险 | 说明 |
|---|---|---|
| 一级目录整体缺失 | high | 如缺少“监管信息”“综述资料”“非临床资料”等完整章节 |
| 关键法定资料缺失 | blocking | 申请表、符合性声明、产品技术要求及检验报告等 |
| 关键技术/评价资料缺失 | high | 产品风险管理资料、分析性能研究、稳定性研究、临床评价资料、产品说明书、标签样稿等 |
| 条件适用资料缺失 | medium/high | 如上市历史、申报前沟通记录、其他资料;需结合 RR2-1 适用条件判断 |
| 章节目录缺失 | medium | 各一级目录下的章节目录缺失,影响资料可追溯性 |
与现有第一批链路的差异修正
| 当前能力 | 第二批修正 |
|---|---|
| 完整性核查只按文件名和相对路径匹配 | 增加目录名、首页文本/前若干页文本、章节标题候选匹配 |
| YAML 只覆盖 5 个 Demo 条目 | 扩展为附件 4 一级/二级目录规则,保留第一批 5 条并映射到附件 4 对应章节 |
| 章节核查只检查说明书储存条件/有效期/样本要求 | 改为同时检查申报资料目录结构和说明书内部关键章节 |
RAG 可能跳过 .doc 材料 |
附件 4 必须可被转换或抽取,构建 RAG 前输出可读文本抽取状态 |
| 一致性只检查产品名称、型号规格、预期用途 | 保留这三项,并增加管理类别、分类编码、注册类型、临床评价路径等候选字段 |
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-2-001 | 将附件 4 .doc 抽取为可测试的结构化目录夹具 |
tests/fixtures/regulatory/attachment4_outline.json 或同等 fixture |
| RR2-2-002 | 扩展 YAML 规则,覆盖附件 4 一级/二级目录、别名、适用条件、风险等级和整改建议 | rules/nmpa_ivd_registration_v1.yaml |
| RR2-2-003 | 增强规则加载校验,确保附件 4 必填目录项都有规则 ID、关键词、风险等级和 citation_query | services/rule_loader.py |
| RR2-2-004 | 增强完整性核查,支持文件名、目录名、首页文本/前若干页文本、章节标题候选匹配 | services/completeness_check.py、services/text_extract.py |
| RR2-2-005 | 增强文本抽取,缓存章节候选、字段候选、首页文本和抽取状态 | services/text_extract.py、storage.py |
| RR2-2-006 | 增强章节核查,支持附件 4 目录层级、别名、近似标题和证据片段 | services/structure_check.py |
| RR2-2-007 | 增强一致性核查,支持产品名称、型号规格、预期用途、管理类别、分类编码、注册类型、临床评价路径等来源值 | services/consistency_check.py |
| RR2-2-008 | RAG 引用写入 rag_result_json 过程产物,并记录附件 4 文本抽取/索引状态 |
services/rag_citation.py、storage.py |
| RR2-2-009 | 增加附件 4 对齐测试 | tests/test_regulatory_rule_loader.py、tests/test_regulatory_completeness.py、tests/test_regulatory_structure.py、tests/test_regulatory_consistency.py、tests/test_regulatory_rag.py |
验收样例
| 样例条件 | 预期 |
|---|---|
| 文件包缺少“监管信息/申请表” | 生成 blocking 或 high 问题,并引用附件 4 监管信息要求 |
| 文件包缺少“产品风险管理资料” | 生成 high 问题,category 为 completeness |
| 文件包缺少“分析性能研究”或“稳定性研究” | 生成 high 问题,给出补充研究资料建议 |
| 文件包有产品技术要求但无检验报告 | 生成 blocking 问题,规则映射到 3.4 |
| 文件包有产品说明书但无标签样稿 | 生成 high 问题,规则映射到 5.3 |
| 文件包缺少质量管理体系文件 | 生成 high 问题,规则映射到第 6 章 |
附件 4 .doc 未能抽取 |
RAG 构建命令失败或明确报告附件 4 抽取失败,不允许静默跳过该核心材料 |
验证命令
pytest tests/test_regulatory_rule_loader.py tests/test_regulatory_completeness.py tests/test_regulatory_structure.py tests/test_regulatory_consistency.py tests/test_regulatory_rag.py
Codex 执行提示
请先将附件 4《体外诊断试剂注册申报资料要求及说明》结构化为规则覆盖清单,再增强 YAML、完整性核查、章节核查、一致性核查和 RAG 过程产物。第二批必须覆盖附件 4 的 1-6 章一级目录和主要二级目录;证据必须包含文件路径、命中片段、字段名或规则 ID,便于人工复核。附件 4 作为核心法规材料,不允许在 RAG 构建中静默跳过。
五、RR2-3 整包复核
口径
整包复核不是修改原法规核查批次,而是基于新的成功 FileSummaryBatch 创建新的 RegulatoryReviewBatch。新批次记录来源批次信息,用于报告中展示“复核来源”。
复核入口不新增独立页面。前端通过法规核查工作流卡片展示复核入口,用户点击后由 AI 在对话区发起确认与引导。
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-3-001 | 新增整包复核启动接口 | regulatory_review/views.py |
| RR2-3-002 | 支持指定新的 file_summary_batch_id |
workflow.py |
| RR2-3-003 | 记录 source/regenerated_from 信息 | RegulatoryReviewBatch.condition_json 或独立字段 |
| RR2-3-004 | 报告展示整包复核来源 | services/export.py |
| RR2-3-005 | 增加测试 | tests/test_regulatory_rectification.py |
验证命令
pytest tests/test_regulatory_rectification.py tests/test_regulatory_workflow.py
Codex 执行提示
请实现整包复核:用户完成新的文件汇总后,可基于新 FileSummaryBatch 创建新的 RegulatoryReviewBatch,并在报告中追溯原核查批次。
六、RR2-4 缺失项复核
口径
缺失项复核针对原 RegulatoryIssue 更新状态,不新建完整法规核查批次。系统可读取补充文件对应的新 FileSummaryBatch,只对指定问题重新匹配相关规则。
缺失项复核同样不新增独立页面。卡片只展示入口和状态,具体确认动作通过 AI 对话完成,例如确认复核哪些问题、使用哪个补充文件汇总批次。
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-4-001 | 实现缺失项复核服务 | services/rectification_review.py |
| RR2-4-002 | 支持 issue_ids + file_summary_batch_id 输入 | views.py |
| RR2-4-003 | 复核通过更新 review_passed,不通过更新 review_failed |
services/rectification_review.py |
| RR2-4-004 | 生成 review_record 过程产物 |
storage.py |
| RR2-4-005 | 报告展示复核记录 | services/export.py |
| RR2-4-006 | 增加测试 | tests/test_regulatory_rectification.py |
验证命令
pytest tests/test_regulatory_rectification.py
Codex 执行提示
请实现缺失项复核。复核不重新跑完整法规核查工作流,只针对指定 RegulatoryIssue 和补充文件汇总批次更新问题状态,并生成 review_record 产物。
七、RR2-5 mock 通知留痕
口径
真实飞书暂缓。第二批只在 blocking/high/medium 风险项出现时创建 RegulatoryNotificationRecord(channel=mock),用于报告留痕和第三阶段接入。
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-5-001 | 实现 mock notifier | services/feishu_notifier.py |
| RR2-5-002 | 风险等级 blocking/high/medium 写通知记录 | workflow.py |
| RR2-5-003 | 通知记录进入 Markdown/Excel/JSON 报告 | services/export.py |
| RR2-5-004 | 增加测试 | tests/test_regulatory_notification.py |
验证命令
pytest tests/test_regulatory_notification.py tests/test_regulatory_export.py
Codex 执行提示
请实现 mock 通知留痕。不要接真实飞书 CLI/API;只为阻断项、高风险、中风险写 RegulatoryNotificationRecord,并在报告中展示。
八、RR2-6 前端和总体验收
任务
| 编号 | 内容 | 文件 |
|---|---|---|
| RR2-6-001 | 前端显示条件确认卡片 | templates/home.html、static/js/app.js |
| RR2-6-002 | 前端通过工作流卡片展示整包复核入口,并由 AI 对话确认 | static/js/app.js |
| RR2-6-003 | 前端通过工作流卡片展示缺失项复核入口,并由 AI 对话确认 | static/js/app.js |
| RR2-6-004 | 卡片展示通知和复核摘要 | templates/home.html、static/js/app.js |
| RR2-6-005 | 补 Playwright 或前端测试 | tests/test_regulatory_frontend.py |
| RR2-6-006 | 全量回归 | 全项目 |
验证命令
python manage.py check
pytest
Codex 执行提示
请完善法规核查前端交互,包含条件选择框、卡片式整包复核入口、卡片式缺失项复核入口、AI 对话确认、mock 通知和复核记录展示。不要新增独立复核页面。最后运行 python manage.py check 和 pytest 全量验收。
九、第二批 Codex 目标模式提示词
请按 docs/5.开发计划/2.NMPA注册资料法规核查与整改闭环-第二批完整闭环.md 执行第二阶段第二批开发。
前提:
第一批主链路已经完成并通过全量测试。
目标:
补齐法规核查完整整改闭环,包括适用条件对话选择框、waiting_user 暂停恢复、附件 4 申报资料目录规则对齐、整包复核、缺失项复核、mock 通知留痕、增强章节/一致性核查和前端交互。
执行规则:
1. 从第一批完成后的稳定分支创建 codex/YYYYMMDD-NMPA法规核查完整闭环 分支。
2. 按 RR2-1 到 RR2-6 顺序执行。
3. 每阶段完成后运行对应验证命令。
4. RR2-2 必须覆盖附件 4 的 1-6 章一级目录和主要二级目录,不能只保留第一批 5 条 Demo 规则。
5. 不接真实飞书 CLI/API。
6. 不做规则管理前端。
7. 不做自动填写目标文件。
8. 最后运行 python manage.py check 和 pytest 全量验收。