17 KiB
2. 法规完整性检查详细设计
1. 设计目标
本步骤承接“资料包导入与目录汇总”的输出,目标是对照 NMPA 体外诊断试剂注册申报资料要求,检查当前资料包是否齐套、章节点是否匹配、资料是否错放、是否存在需要人工复核的完整性问题。
本步骤需要完成以下业务结果:
- 识别当前审核任务适用的法规流程,V1 默认使用
registration注册申报流程。 - 装载本地法规规则包,默认以公告附件包为主规则来源。
- 将资料包目录结果与法规目录模板进行匹配。
- 区分已提供、缺失、疑似提供、错放、待人工复核等状态。
- 对缺失、错放和不确定项生成完整性风险等级和处理建议。
- 通过 RAG 检索法规原文证据,但不把 RAG 命中结果作为最终裁判。
- 输出结构化
registration_completeness_report,供 Chat 页面、Audit 和后续风险预警使用。
本步骤不负责产品字段抽取,不负责跨文档字段一致性检查,不负责最终综合风险报告。它只产出法规完整性维度的结论和证据。
2. 所属模块与边界
2.1 Scenarios
apps.scenarios 负责定义“法规完整性核查”任务入口。
建议配置项:
scenario_id:registration_completeness_checkworkflow_type:registrationrequired_input:registration_overview_reportrule_package:nmpa_ivd_registration_v1enable_rag_evidence:trueoutput_schema:registration_completeness_report
2.2 Documents
apps.documents 提供第一步生成的文档主数据和目录汇总结果。
本步骤读取:
- 批次信息。
- 文件相对路径。
- 文件名。
- 文件类型。
- 页数。
- 章节点。
- 文档角色。
- 处理状态。
- 待人工复核标记。
2.3 Agent Core
agent_core 是本步骤的执行主体,负责编排规则包加载、流程识别、规则匹配、完整性判定、法规证据检索和报告生成。
本步骤建议产生以下中文 Skill:
法规完整性检查Skill法规规则包加载Skill法规流程识别Skill资料要求匹配Skill缺失错放判定Skill法规证据检索Skill完整性报告生成Skill
2.4 RAG
RAG 只负责证据定位和解释引用。
RAG 可以回答:
- 当前缺失项对应公告附件中的哪段要求。
- 当前章节点属于哪类资料要求。
- 当前格式要求来源于哪份附件。
RAG 不负责决定:
- 某资料是否必交。
- 当前资料是否合规。
- 缺失项是否高风险。
这些结论必须来自结构化规则。
2.5 Audit
apps.audit 记录本次完整性检查的输入、规则版本、匹配结果、缺失项、证据和错误。
审计中必须保留:
batch_idscenario_idworkflow_typerule_package_idrule_versionselected_document_idsmatched_itemsmissing_itemsmisplaced_itemsmanual_review_itemsevidence_refs
3. 输入输出
3.1 输入
{
"batch_id": 1001,
"scenario_id": "registration_completeness_check",
"workflow_type": "registration",
"rule_package_id": "nmpa_ivd_registration_v1",
"chapter_scope": ["CH1"],
"selected_document_ids": [1, 2, 3],
"enable_rag_evidence": true
}
其中 chapter_scope 可为空。为空时默认检查当前批次已识别章节点及 V1 默认范围;演示首版建议优先检查 CH1,同时保留全六章规则结构。
3.2 输出
本步骤输出 registration_completeness_report:
{
"report_type": "registration_completeness_report",
"batch_id": 1001,
"workflow_type": "registration",
"rule_package_id": "nmpa_ivd_registration_v1",
"rule_version": "2026-06-03",
"chapter_scope": ["CH1"],
"summary": {
"required_item_count": 8,
"provided_item_count": 6,
"missing_item_count": 1,
"suspected_item_count": 1,
"misplaced_item_count": 0,
"manual_review_item_count": 1,
"highest_risk_level": "high",
"pass_status": "failed"
},
"matched_items": [],
"missing_items": [],
"misplaced_items": [],
"manual_review_items": [],
"evidence_refs": [],
"suggestions": []
}
3.3 结果状态
| 状态 | 含义 |
|---|---|
provided |
已提供,命中文档和章节点 |
missing |
必交资料未找到 |
suspected |
疑似提供,但命名、章节点或文档角色不确定 |
misplaced |
文件存在,但章节点或路径位置不匹配 |
manual_review_required |
规则无法直接判断,需人工复核 |
not_applicable |
当前流程或适用条件下不要求 |
4. 主工作流
用户发起法规完整性检查
-> 读取资料包目录汇总结果
-> 确认法规流程类型
-> 装载法规规则包
-> 展开章节和必交项规则
-> 将实际文档与规则项匹配
-> 判定已提供/缺失/疑似/错放/待复核
-> 映射风险等级与处理建议
-> 检索法规原文证据
-> 生成完整性检查报告
-> 写入审计留痕
-> 返回 Web/飞书可展示结果
5. 节点详细设计
5.1 节点一:读取目录汇总结果
业务功能:
- 根据
batch_id读取第一步产出的registration_overview_report。 - 校验资料包是否完成目录汇总。
- 过滤当前检查范围内的文档。
- 收集待人工复核文档,作为完整性检查的不确定性输入。
使用技术:
- Django ORM
- JSONField
- Pydantic 或 dataclass schema 校验
产生方法:
load_overview_report(batch_id) -> RegistrationOverviewReportselect_documents_for_completeness(report, chapter_scope, selected_document_ids) -> list[DocumentFact]collect_document_uncertainties(documents) -> list[DocumentUncertainty]
对应 Skill:
法规完整性检查Skill
5.2 节点二:法规流程识别
业务功能:
- 确认当前任务属于注册申报、变更备案、变更注册还是延续注册。
- V1 默认使用
registration。 - 如果用户选择了不支持流程,返回业务化提示。
- 防止把变更或延续规则误用于首次注册申报。
使用技术:
- 场景配置 YAML
- 批次字段
workflow_type - 规则包元数据
产生方法:
resolve_workflow_type(batch, scenario_config, user_input) -> WorkflowTypeResultvalidate_workflow_supported(workflow_type, rule_package) -> bool
对应 Skill:
法规流程识别Skill
5.3 节点三:法规规则包加载
业务功能:
- 加载本地结构化法规规则文件。
- 校验规则版本、适用流程和章节结构。
- 按“章 -> 条 -> 要求项 -> 模板字段”四级结构展开规则。
- 区分资料要求层、结构目录层和格式模板层。
使用技术:
- YAML 规则文件
- Pydantic schema
- Django cache 或内存缓存
- 规则版本号
建议规则目录:
configs/registration/rules/
nmpa_ivd_registration_v1.yaml
chapter_catalog.yaml
risk_mapping.yaml
规则项示例:
rule_package_id: nmpa_ivd_registration_v1
workflow_type: registration
version: "2026-06-03"
chapters:
- chapter_code: CH1
chapter_name: 监管信息
requirements:
- requirement_id: CH1.4
requirement_name: 申请表
required: true
expected_document_roles:
- application_form
risk_level_if_missing: high
evidence_query: "体外诊断试剂 注册申报 申请表 监管信息"
产生方法:
load_rule_package(rule_package_id) -> RulePackagevalidate_rule_package(rule_package) -> RulePackageValidationResultexpand_requirement_items(rule_package, workflow_type, chapter_scope) -> list[RequirementItem]
对应 Skill:
法规规则包加载Skill
5.4 节点四:资料要求匹配
业务功能:
- 将当前资料包文档与法规要求项进行匹配。
- 优先使用章节点编码匹配。
- 其次使用文档角色匹配。
- 再使用文件名和资料名称关键词匹配。
- 保留匹配证据和匹配置信度。
匹配优先级:
document.chapter_code == requirement.requirement_iddocument.document_role in requirement.expected_document_roles- 文件名命中规则关键词。
- 相对路径命中章节名称。
- 人工修正字段命中。
使用技术:
- Python 规则匹配
- 字符串标准化
- 简单中文关键词匹配
- 可选 rapidfuzz 模糊匹配,V1 谨慎使用
产生方法:
match_documents_to_requirements(documents, requirements) -> RequirementMatchSetmatch_by_chapter_code(document, requirement) -> MatchEvidence | Nonematch_by_document_role(document, requirement) -> MatchEvidence | Nonematch_by_keywords(document, requirement) -> MatchEvidence | Nonecalculate_match_confidence(evidences) -> str
对应 Skill:
资料要求匹配Skill
5.5 节点五:缺失、错放与待复核判定
业务功能:
- 对每个法规要求项生成完整性状态。
- 判断必交项是否缺失。
- 判断文件是否存在但错放章节。
- 判断疑似提供但证据不足的情况。
- 将第一步处理失败或页数待复核文件纳入不确定性。
判定规则:
| 条件 | 状态 |
|---|---|
| 必交项有高置信匹配文档 | provided |
| 必交项无任何匹配文档 | missing |
| 有低置信匹配文档 | suspected |
| 文档角色匹配但章节点不匹配 | misplaced |
| 文档本身待人工复核 | manual_review_required |
| 规则项不适用于当前流程 | not_applicable |
使用技术:
- Python 规则引擎
- 风险映射 YAML
- dataclass/Pydantic 结果对象
产生方法:
evaluate_requirement_status(requirement, matches, document_uncertainties) -> CompletenessItemResultdetect_missing_items(requirements, matches) -> list[MissingItem]detect_misplaced_items(requirements, matches) -> list[MisplacedItem]detect_manual_review_items(requirements, matches, uncertainties) -> list[ManualReviewItem]
对应 Skill:
缺失错放判定Skill
5.6 节点六:完整性风险映射
业务功能:
- 根据规则项定义映射风险等级。
- 缺失高风险必交项时,本维度判定不通过。
- 对待复核项不直接判失败,但标记结果可信度下降。
- 生成基础处理建议。
风险等级:
highmediumlow
准入规则:
- 任一高风险缺失项:
pass_status = failed - 无高风险但存在中风险缺失项:
pass_status = review_required - 只有低风险或待复核项:
pass_status = conditional_pass - 无缺失、无错放、无待复核:
pass_status = passed
使用技术:
- 规则包内风险配置
- 本地建议模板
- Python 枚举
产生方法:
map_completeness_risk(item_result, risk_rules) -> RiskMappingResultcalculate_pass_status(item_results) -> strbuild_completeness_suggestion(item_result) -> str
对应 Skill:
缺失错放判定Skill
5.7 节点七:法规证据检索
业务功能:
- 针对缺失项、错放项和待复核项检索法规原文。
- 返回法规来源文档、章节、片段和匹配查询。
- 将证据附加到完整性结果和审计记录。
使用技术:
- Chroma 或 fallback 检索
- 本地法规原文切片
- metadata 过滤
- 关键词查询兜底
检索过滤条件:
source_role = regulationworkflow_type = registrationrule_package_id = nmpa_ivd_registration_v1chapter_code或requirement_id
产生方法:
retrieve_regulation_evidence(requirement_item, query_context) -> list[EvidenceRef]build_evidence_query(requirement_item) -> strfilter_evidence_by_metadata(results, requirement_item) -> list[EvidenceRef]
对应 Skill:
法规证据检索Skill
5.8 节点八:完整性报告生成
业务功能:
- 汇总完整性检查结果。
- 生成结构化报告。
- 生成页面展示摘要。
- 生成飞书摘要所需的短消息结构。
- 写入审计记录。
使用技术:
- Pydantic 或 dataclass schema
- JSONField
- Django template 或页面组件消费 JSON
- Audit 服务层
产生方法:
build_completeness_report(context, item_results, evidence_refs) -> RegistrationCompletenessReportbuild_completeness_summary(item_results) -> CompletenessSummarybuild_display_sections(report) -> list[DisplaySection]record_completeness_audit(report, execution_context) -> AuditLog
对应 Skill:
完整性报告生成Skill
6. Skill 清单
本步骤产生以下 Skill 设计文档:
7. 规则数据设计
7.1 规则包元数据
| 字段 | 说明 |
|---|---|
rule_package_id |
规则包标识 |
version |
规则版本 |
workflow_type |
适用流程 |
source_documents |
法规来源文档 |
effective_scope |
适用范围 |
chapter_count |
章节数量 |
7.2 要求项字段
| 字段 | 说明 |
|---|---|
requirement_id |
要求项编码,如 CH1.4 |
chapter_code |
章编码,如 CH1 |
requirement_name |
要求项名称 |
required |
是否必交 |
condition |
适用条件 |
expected_document_roles |
期望文档角色 |
keywords |
匹配关键词 |
risk_level_if_missing |
缺失风险等级 |
evidence_query |
法规证据检索查询 |
template_field_refs |
后续模板字段映射 |
7.3 匹配结果字段
| 字段 | 说明 |
|---|---|
requirement_id |
要求项编码 |
status |
完整性状态 |
matched_document_ids |
命中文档 ID |
match_confidence |
匹配置信度 |
match_evidence |
匹配证据 |
risk_level |
风险等级 |
suggestion |
处理建议 |
evidence_refs |
法规证据引用 |
8. 页面展示
Chat/工作台页面建议展示:
- 当前规则包名称和版本。
- 当前检查流程类型。
- 当前检查章节点范围。
- 总体结论。
- 缺失项数量。
- 错放项数量。
- 待人工复核数量。
- 高风险缺失项。
- 完整性检查明细表。
- 法规证据引用。
- 审计入口。
明细表字段:
- 章节点。
- 法规要求项。
- 当前状态。
- 命中文档。
- 风险等级。
- 处理建议。
- 法规依据。
9. 异常处理
- 未找到批次:返回“当前资料包不存在或已删除”。
- 目录汇总未完成:提示先完成资料包导入与目录汇总。
- 规则包不存在:任务不可执行,记录失败审计。
- 规则包版本不支持当前流程:提示流程配置错误。
- 文档章节点大量缺失:可执行,但报告标记低可信。
- RAG 检索失败:不阻断规则判断,报告中标记证据检索不可用。
- 所选文档为空:返回空范围检查结果,并提示用户选择资料范围。
- 文档仍待人工复核:完整性报告保留不确定状态。
10. 与后续步骤的接口
后续风险预警读取:
pass_statushighest_risk_levelmissing_itemsmisplaced_itemsmanual_review_itemssuggestionsevidence_refs
后续字段抽取可读取:
- 已命中的申请表、产品列表、说明书等文档 ID。
- 待人工复核文档清单。
- 当前规则包中声明的模板字段映射。
11. 测试设计
11.1 单元测试
- 规则包加载成功。
- 不支持流程被拦截。
- 章节点编码匹配成功。
- 文档角色匹配成功。
- 必交项缺失被识别。
- 错放文件被识别。
- 风险等级映射正确。
- RAG 失败不影响规则判断。
11.2 服务层测试
- 基于第一步目录汇总执行完整性检查。
- 缺失
CH1.4时输出高风险。 CH1.2目录类文档能作为命中文档进入报告。- 待复核文档会进入
manual_review_items。 - 规则包缺失时写入失败审计。
11.3 页面测试
- 页面展示规则包版本。
- 页面展示缺失项和风险等级。
- 页面展示法规证据。
- 页面展示审计入口。
- RAG 不可用时页面仍显示规则判断结果。
12. V1 实现建议
V1 建议先完成以下最小闭环:
- 基于本地 YAML 规则包实现
CH1完整性检查。 - 检查
CH1.2、CH1.4、CH1.5、CH1.9、CH1.11.1、CH1.11.5、CH1.11.6。 - 基于第一步的
chapter_code和document_role做规则匹配。 - 输出缺失项、疑似项和待复核项。
- RAG 证据检索先使用 fallback 检索,后续接 Chroma。
- 完整性报告写入审计。
增强阶段再补齐:
- 第 2 至第 6 章完整规则。
- 资料格式要求层检查。
- 安全和性能基本原则清单映射检查。
- 后台规则人工校订。
- 在线法规更新能力。