NMPA 注册资料法规核查与整改闭环开发计划(第一批:主链路)
一、已确认口径
| 问题 |
结论 |
| 第二阶段覆盖范围 |
覆盖原始需求 2、4、5:法规完整性核查、章节/一致性核查、风险预警与整改建议 |
| 原始需求 3 |
本阶段只做核查所需的信息抽取,不做自动填写目标文件 |
| 执行策略 |
第二阶段拆成两次 Codex 目标执行;第一批先打通 Demo 主链路 |
| 启动方式 |
用户对话提示词触发法规核查工作流,不做上传后自动核查 |
| 汇总批次 |
默认复用当前对话最近一次成功 FileSummaryBatch,不自动串联文件汇总 |
| 规则来源 |
Demo 先用本地 YAML;数据库记录规则版本、路径、hash、RAG 索引信息 |
| 规则差异 |
自动检测 YAML 与数据库记录差异,提示人工确认更新;第一批不做规则管理前端 |
| RAG |
必须使用向量库;默认 ChromaDB |
| Embedding |
Provider 可配置;Demo 默认 SiliconFlow Qwen/Qwen3-Embedding-4B |
| 法规材料 |
先索引 docs/0.原始材料/关于公布体外诊断试剂注册申报资料要求和批准证明文件格式的公告 |
| 法规文档抽取 |
允许使用 LibreOffice headless 转换本地法规 .doc 材料;该依赖只服务 RAG 建库,不改变第一阶段页数统计口径 |
| ChromaDB 运行方式 |
第一批采用本地持久化模式,不单独启动 Chroma Server |
| 飞书 |
第一批不接真实飞书;暂缓项写入待办计划 |
二、第一批目标
第一批只追求“可运行、可演示、可追溯”的法规核查主链路:
第一批完成后,Demo 应能展示:
| 展示项 |
内容 |
| 法规依据 |
RAG 返回本地法规材料来源和片段 |
| 完整性问题 |
如缺少注册检验报告、临床评价资料等 |
| 章节问题 |
如说明书缺少储存条件、有效期、样本要求等章节 |
| 一致性问题 |
如产品名称、型号规格、预期用途在不同文件中不一致 |
| 风险清单 |
blocking/high/medium/low/info 五级 |
| 报告下载 |
Markdown、Excel、JSON |
三、阶段拆分
| 阶段 |
名称 |
目标 |
验收 |
| RR1-0 |
准备与回归 |
确认第一阶段稳定,创建开发分支 |
pytest 通过 |
| RR1-1 |
模型与兼容改造 |
新增法规核查模型,兼容工作流/导出通用字段 |
migration 和模型测试通过 |
| RR1-2 |
YAML 规则与版本记录 |
建立 Demo 规则文件、规则版本表、hash 差异检测 |
能识别 YAML 与 DB 差异 |
| RR1-3 |
RAG 索引与检索 |
用 ChromaDB + SiliconFlow embedding 构建本地法规索引 |
能检索法规依据 |
| RR1-4 |
触发与工作流骨架 |
对话提示词触发法规核查,复用最近成功汇总批次 |
能创建并运行法规核查批次 |
| RR1-5 |
核查服务 |
完整性、基础章节、基础一致性核查 |
生成 findings |
| RR1-6 |
风险与导出 |
风险归并、Issue 落库、报告导出 |
生成助手摘要和下载文件 |
| RR1-7 |
前端与验收 |
法规核查卡片、状态恢复、Markdown 结果展示 |
全量测试通过 |
四、RR1-0 准备与回归
任务
| 编号 |
内容 |
| RR1-0-001 |
从当前稳定分支创建 codex/YYYYMMDD-NMPA法规核查主链路 |
| RR1-0-002 |
运行 python manage.py check、pytest |
| RR1-0-003 |
记录第一阶段边界:文件夹上传不作为强验收、RAR 依赖 7z、Office 页数口径可不精确 |
验证命令
Codex 执行提示
五、RR1-1 模型与兼容改造
任务
| 编号 |
内容 |
文件 |
| RR1-1-001 |
新增法规核查模型和枚举 |
review_agent/models.py |
| RR1-1-002 |
给 WorkflowNodeRun 增加 workflow_type、workflow_batch_id、node_group |
review_agent/models.py |
| RR1-1-003 |
给 WorkflowEvent 增加 workflow_type、workflow_batch_id、conversation_id |
review_agent/models.py |
| RR1-1-004 |
给 ExportedSummaryFile 增加 workflow_type、workflow_batch_id、export_category |
review_agent/models.py |
| RR1-1-005 |
保持第一阶段文件汇总写入兼容 |
review_agent/file_summary/* |
| RR1-1-006 |
生成 migration 并补模型测试 |
review_agent/migrations/、tests/test_regulatory_models.py |
新增模型
| 模型 |
说明 |
RegulatoryRuleVersion |
规则版本、YAML 路径、文件 hash、RAG 索引版本 |
RegulatoryReviewBatch |
法规核查批次 |
RegulatoryIssue |
风险问题和整改状态 |
RegulatoryArtifact |
过程产物 |
RegulatoryNotificationRecord |
mock 通知预留记录,第一批可只建表不接真实通知 |
验证命令
Codex 执行提示
六、RR1-2 YAML 规则与版本记录
任务
| 编号 |
内容 |
文件 |
| RR1-2-001 |
新建法规核查模块目录 |
review_agent/regulatory_review/ |
| RR1-2-002 |
编写 Demo YAML 规则 |
review_agent/regulatory_review/rules/nmpa_ivd_registration_v1.yaml |
| RR1-2-003 |
实现规则 hash 计算和版本记录 |
services/rule_loader.py |
| RR1-2-004 |
实现 YAML 与 DB 差异检测 |
services/rule_loader.py |
| RR1-2-005 |
增加规则版本初始化/检查管理命令 |
management/commands/regulatory_rules_check.py |
| RR1-2-006 |
增加测试 |
tests/test_regulatory_rule_loader.py |
Demo 规则至少覆盖
| 文件项 |
类型 |
风险 |
| 产品技术要求 |
required |
blocking |
| 说明书 |
required |
high |
| 注册检验报告 |
required |
blocking |
| 临床评价资料 |
conditional |
high |
| 安全和性能基本原则清单 |
recommended |
medium |
YAML 规则内容需参考本地法规资料目录:
验证命令
Codex 执行提示
七、RR1-3 RAG 索引与检索
任务
| 编号 |
内容 |
文件 |
| RR1-3-001 |
增加依赖 chromadb 和必要 HTTP 客户端 |
requirements.txt |
| RR1-3-002 |
实现 embedding provider 抽象 |
services/rag_embedding.py |
| RR1-3-003 |
实现 SiliconFlow embedding provider |
services/rag_embedding.py |
| RR1-3-004 |
实现法规文档文本抽取和切块 |
services/rag_index.py |
| RR1-3-005 |
实现 ChromaDB 持久化索引构建命令 |
management/commands/regulatory_rag_build.py |
| RR1-3-006 |
实现 RAG 引用检索服务 |
services/rag_citation.py |
| RR1-3-007 |
增加测试 |
tests/test_regulatory_rag.py |
配置
| 配置项 |
默认 |
REGULATORY_RAG_PROVIDER |
siliconflow |
REGULATORY_RAG_CHROMA_PATH |
media/regulatory_review/rag/chroma/ |
SILICONFLOW_BASE_URL |
https://api.siliconflow.cn/v1 |
SILICONFLOW_API_KEY |
从环境变量读取 |
SILICONFLOW_EMBEDDING_MODEL |
Qwen/Qwen3-Embedding-4B |
SILICONFLOW_EMBEDDING_DIMENSIONS |
1024 |
REGULATORY_RAG_COLLECTION |
nmpa_ivd_registration_v1 |
SiliconFlow Embedding API 参考:
规则
| 场景 |
处理 |
| RAG 索引不存在 |
核查时提示先构建索引,不在核查中临时构建 |
| Embedding API 不可用 |
构建命令失败,核查不启动 |
| RAG 无命中 |
规则问题仍输出,法规依据标记“原文依据待补充” |
本地法规 .doc 无法直接抽取 |
允许通过 LibreOffice headless 转换后抽取;Docker 部署说明需写明可选安装方式 |
| ChromaDB 存储 |
使用本地持久化目录,Docker 部署时通过 volume 挂载保留索引 |
验证命令
Codex 执行提示
八、RR1-4 触发与工作流骨架
任务
| 编号 |
内容 |
文件 |
| RR1-4-001 |
实现法规核查提示词路由 |
review_agent/skill_router.py |
| RR1-4-002 |
实现法规核查批次创建 |
regulatory_review/workflow.py |
| RR1-4-003 |
默认查找当前对话最近成功 FileSummaryBatch |
workflow.py |
| RR1-4-004 |
无成功汇总批次时提示用户先执行自动汇总 |
services.py |
| RR1-4-005 |
实现启动、状态、事件接口 |
regulatory_review/views.py、urls.py |
| RR1-4-006 |
接入项目 URL |
config/urls.py 或 review_agent/urls.py |
| RR1-4-007 |
增加测试 |
tests/test_regulatory_workflow.py、tests/test_regulatory_views.py |
第一批节点
验证命令
Codex 执行提示
九、RR1-5 核查服务
任务
| 编号 |
内容 |
文件 |
| RR1-5-001 |
实现统一 Finding dataclass |
regulatory_review/schemas.py |
| RR1-5-002 |
完整性核查:文件名、目录名、首页文本匹配 |
services/completeness_check.py |
| RR1-5-003 |
文本抽取:docx/pdf/xlsx/pptx/txt/md 基础文本 |
services/text_extract.py |
| RR1-5-004 |
基础章节核查:按规则关键词判断章节是否存在 |
services/structure_check.py |
| RR1-5-005 |
基础一致性核查:产品名称、型号规格、预期用途 |
services/consistency_check.py |
| RR1-5-006 |
过程产物保存和 hash |
storage.py |
| RR1-5-007 |
增加测试 |
tests/test_regulatory_completeness.py、tests/test_regulatory_text_extract.py、tests/test_regulatory_structure.py、tests/test_regulatory_consistency.py |
Demo 验收样例
测试或演示资料中至少构造:
| 条件 |
预期 |
| 有说明书 |
可匹配说明书规则 |
| 有产品技术要求 |
可匹配产品技术要求规则 |
| 缺少注册检验报告 |
生成 blocking 问题 |
| 说明书缺少储存条件章节 |
生成 high 或 medium 问题 |
| 产品名称在两个文件中不一致 |
生成 consistency 问题 |
验证命令
Codex 执行提示
十、RR1-6 风险与导出
任务
| 编号 |
内容 |
文件 |
| RR1-6-001 |
Findings 去重和风险归并 |
services/risk_assess.py |
| RR1-6-002 |
RAG 引用挂载到问题证据 |
services/risk_assess.py、services/rag_citation.py |
| RR1-6-003 |
创建 RegulatoryIssue |
services/risk_assess.py |
| RR1-6-004 |
生成 Markdown 核查报告 |
services/export.py |
| RR1-6-005 |
生成 Excel 缺失清单 |
services/export.py |
| RR1-6-006 |
生成 JSON 结果包 |
services/export.py |
| RR1-6-007 |
工作流完成后写入助手消息 |
workflow.py |
| RR1-6-008 |
增加测试 |
tests/test_regulatory_risk_assess.py、tests/test_regulatory_export.py |
对话摘要
助手消息至少包含:
验证命令
Codex 执行提示
十一、RR1-7 前端与总体验收
任务
| 编号 |
内容 |
文件 |
| RR1-7-001 |
工作流卡片支持 regulatory_review 类型 |
templates/home.html、static/js/app.js |
| RR1-7-002 |
卡片使用 workflow_type + workflow_batch_id 区分 |
static/js/app.js |
| RR1-7-003 |
显示法规核查节点和风险摘要 |
templates/home.html、static/js/app.js |
| RR1-7-004 |
页面刷新恢复法规核查卡片 |
views.py、static/js/app.js |
| RR1-7-005 |
补前端测试 |
tests/test_regulatory_frontend.py |
| RR1-7-006 |
全量回归 |
全项目 |
验证命令
如浏览器可用,再运行 Playwright 端到端验证。
Codex 执行提示
十二、第一批 Codex 目标模式提示词