Files
DEMO-AGENT/docs/5.开发计划/2.NMPA注册资料法规核查与整改闭环-第二批完整闭环.md

243 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NMPA 注册资料法规核查与整改闭环开发计划(第二批:完整闭环补齐)
## 一、第二批目标
第二批在第一批主链路通过后执行,补齐完整整改闭环和交互能力:
```text
适用条件对话选择框
-> waiting_user 暂停恢复
-> 整包复核
-> 缺失项复核
-> mock 通知留痕
-> 更完整的过程产物
-> 更强的前端交互和验收测试
```
飞书真实 CLI/API、规则管理前端、自动填写目标文件不在第二批落地进入 `docs/6.待办计划/第二阶段暂缓事项.md`
---
## 二、阶段总览
| 阶段 | 名称 | 目标 | 验收 |
| --- | --- | --- | --- |
| RR2-1 | 适用条件确认 | 对话选择框确认产品类别、注册类型、临床评价路径等 | waiting_user 可暂停恢复 |
| RR2-2 | 核查能力增强 | 扩展章节、一致性、RAG 引用和文本抽取范围 | 复杂样例可识别更多问题 |
| 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 版按下表实现。
| 字段 | 交互 |
| --- | --- |
| 产品类别 | 体外诊断试剂 / 医疗器械 / 其他 |
| 注册类型 | 首次注册 / 变更注册 / 延续注册 |
| 临床评价路径 | 临床试验 / 免临床 / 同品种比对 / 待确认 |
| 产品名称 | 文本输入 |
| 型号规格 | 文本输入 |
| 预期用途 | 文本输入 |
### 验证命令
```bash
pytest tests/test_regulatory_condition.py tests/test_regulatory_frontend.py tests/test_regulatory_workflow.py
```
### Codex 执行提示
```text
请实现法规适用条件候选识别、waiting_user 暂停恢复和对话选择框确认。用户确认前工作流不得继续执行规则裁剪。
```
---
## 四、RR2-2 核查能力增强
### 任务
| 编号 | 内容 | 文件 |
| --- | --- | --- |
| RR2-2-001 | 扩展 YAML 规则中的必需章节和一致性字段 | `rules/nmpa_ivd_registration_v1.yaml` |
| RR2-2-002 | 增强文本抽取,缓存章节候选和字段候选 | `services/text_extract.py` |
| RR2-2-003 | 增强章节核查,支持别名、近似标题和证据片段 | `services/structure_check.py` |
| RR2-2-004 | 增强一致性核查,支持多个来源值和低置信度提示项 | `services/consistency_check.py` |
| RR2-2-005 | RAG 引用写入 `rag_result_json` 过程产物 | `services/rag_citation.py``storage.py` |
| RR2-2-006 | 增加测试 | `tests/test_regulatory_structure.py``tests/test_regulatory_consistency.py``tests/test_regulatory_rag.py` |
### 验证命令
```bash
pytest tests/test_regulatory_structure.py tests/test_regulatory_consistency.py tests/test_regulatory_rag.py
```
### Codex 执行提示
```text
请增强章节核查、一致性核查和 RAG 过程产物。证据必须包含文件路径、命中片段、字段名或规则 ID便于人工复核。
```
---
## 五、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` |
### 验证命令
```bash
pytest tests/test_regulatory_rectification.py tests/test_regulatory_workflow.py
```
### Codex 执行提示
```text
请实现整包复核:用户完成新的文件汇总后,可基于新 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` |
### 验证命令
```bash
pytest tests/test_regulatory_rectification.py
```
### Codex 执行提示
```text
请实现缺失项复核。复核不重新跑完整法规核查工作流,只针对指定 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` |
### 验证命令
```bash
pytest tests/test_regulatory_notification.py tests/test_regulatory_export.py
```
### Codex 执行提示
```text
请实现 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 | 全量回归 | 全项目 |
### 验证命令
```bash
python manage.py check
pytest
```
### Codex 执行提示
```text
请完善法规核查前端交互包含条件选择框、卡片式整包复核入口、卡片式缺失项复核入口、AI 对话确认、mock 通知和复核记录展示。不要新增独立复核页面。最后运行 python manage.py check 和 pytest 全量验收。
```
---
## 九、第二批 Codex 目标模式提示词
```text
请按 docs/5.开发计划/2.NMPA注册资料法规核查与整改闭环-第二批完整闭环.md 执行第二阶段第二批开发。
前提:
第一批主链路已经完成并通过全量测试。
目标:
补齐法规核查完整整改闭环包括适用条件对话选择框、waiting_user 暂停恢复、整包复核、缺失项复核、mock 通知留痕、增强章节/一致性核查和前端交互。
执行规则:
1. 从第一批完成后的稳定分支创建 codex/YYYYMMDD-NMPA法规核查完整闭环 分支。
2. 按 RR2-1 到 RR2-6 顺序执行。
3. 每阶段完成后运行对应验证命令。
4. 不接真实飞书 CLI/API。
5. 不做规则管理前端。
6. 不做自动填写目标文件。
7. 最后运行 python manage.py check 和 pytest 全量验收。
```