产品关键信息提取与申报文件自动填表开发计划
文档信息
| 项目 |
内容 |
| 需求分析文档 |
docs/1.需求分析/3.产品关键信息提取与申报文件自动填表.md |
| 功能设计文档 |
docs/2.功能设计/3.产品关键信息提取与申报文件自动填表.md |
| 详细设计文档 |
docs/3.详细设计/3.产品关键信息提取与申报文件自动填表.md |
| 数据库设计文档 |
docs/4.数据库设计/3.产品关键信息提取与申报文件自动填表.md |
| 功能名称 |
产品关键信息提取与申报文件自动填表 |
| 所属模块 |
审核智能体 review_agent |
| 执行方式 |
单人开发 + Codex 目标模式自动化执行 |
| 计划日期 |
2026-06-07 |
| 计划版本 |
V1.0 |
一、开发计划目标
本开发计划用于指导 Codex 目标模式按阶段完成“产品关键信息提取与申报文件自动填表”功能开发。该功能作为独立工作流 application_form_fill 实现,由用户对话触发,默认复用当前对话最近成功的文件汇总批次;如本次消息带新附件,则先串联文件汇总,再执行自动填表。
本期必须完成:独立填表批次、过程产物、飞书通知记录、模板配置、注册证 .docx 模板填充、字段抽取与合并、冲突高亮、追溯清单、Word 下载、自动填表工作流卡片和权限校验。
本期明确不强制完成:PDF 转换、字段级数据库表、.doc 模板自动转换、完整安全和性能基本原则清单条目拆解。这些事项已进入 docs/6.待办计划/第二阶段暂缓事项.md。
二、已确认开发规则
| 规则项 |
内容 |
| 工作流类型 |
新增独立 application_form_fill,不塞入 regulatory_review 工作流 |
| 触发方式 |
用户对话触发,如“帮我填注册证”“给我这个内容对应的表格”“为我该方案生成申报模板” |
| 模板指定 |
用户可指定模板;未指定时按注册类型生成适用模板 |
| 文件来源 |
无新附件时复用当前对话最近成功 FileSummaryBatch;有新附件时先自动汇总 |
| 模板配置 |
放在 review_agent/application_form_fill/templates/application_form_templates_v1.yaml |
| 字段抽取 |
规则/正则与 LLM 结构化抽取并行,合并处理 |
| 冲突处理 |
说明书优先;冲突字段在 Word 中黄色底色、红色字体 |
| 输出范围 |
Demo 主链路优先 Word + Excel/JSON 追溯清单 |
| PDF |
数据结构预留,工作流节点可 skipped,不作为本期强验收 |
| 飞书 |
新增自动填表通知记录表,通知失败不阻断下载 |
| 数据库 |
新增三张表;字段级明细表暂缓 |
| Git 提交 |
每个阶段完成并验证通过后提交一次 |
| 测试要求 |
每阶段至少运行对应 pytest;前端阶段补卡片和渲染测试 |
三、总体验收标准
| 类别 |
完成标准 |
| 数据库 |
ApplicationFormFillBatch、ApplicationFormFillArtifact、ApplicationFormFillNotificationRecord 可通过 migration 落库 |
| 导出类型 |
ExportedSummaryFile.ExportType 支持 word、pdf,并兼容既有 markdown/excel/json |
| 模块结构 |
新增 review_agent/application_form_fill/ 独立模块 |
| 触发 |
用户说“帮我填注册证”等语句可触发 application_form_fill |
| 文件来源 |
无新附件时复用最近成功汇总批次;无汇总批次时提示上传资料 |
| 模板配置 |
YAML 可加载、校验,并至少配置注册证格式 .docx 已识别字段 |
| 字段抽取 |
规则/正则与 LLM 抽取结果均可留底;LLM 失败时规则结果可继续 |
| 字段合并 |
说明书优先,冲突字段进入 conflict_summary 和追溯清单 |
| Word 填充 |
能按表格行名填入注册证模板字段,缺失字段留空 |
| 冲突高亮 |
冲突字段在 Word 内黄底红字 |
| 追溯清单 |
生成 Excel/JSON,记录规则结果、LLM 结果、合并字段、冲突和来源证据 |
| 下载 |
对话框提供填好 Word 和追溯清单下载链接 |
| 工作流卡片 |
前端支持 application_form_fill 卡片,展示准备资料、选择模板、复制模板、抽取字段、填写 Word 等节点 |
| 飞书通知 |
填表完成后写通知记录,可 mock;失败不阻断文件下载 |
| 权限 |
A 对话不能查询或下载 B 对话的填表批次和导出文件 |
| 回归 |
第一批文件汇总、第二批法规核查既有测试不回归 |
四、阶段总览
| 阶段 |
名称 |
目标 |
阶段验收 |
| AFF-0 |
准备与回归 |
创建开发分支,确认现有测试基线 |
python manage.py check 和关键回归测试通过 |
| AFF-1 |
数据模型与通用导出扩展 |
新增三张表,扩展 word/pdf 导出类型 |
migration、模型测试通过 |
| AFF-2 |
模块骨架与模板配置 |
新建独立模块、YAML 配置和配置校验 |
模板配置测试通过 |
| AFF-3 |
触发与工作流骨架 |
对话触发、批次创建、节点事件和状态查询 |
可创建并运行空工作流 |
| AFF-4 |
模板选择与文件来源 |
复用最近汇总批次,支持指定/默认模板选择 |
模板选择和来源批次测试通过 |
| AFF-5 |
字段抽取与合并 |
规则/正则 + LLM 并行抽取、冲突归并和产物留底 |
字段抽取、冲突测试通过 |
| AFF-6 |
Word 填充与追溯导出 |
注册证 Word 填充、冲突高亮、Excel/JSON 追溯 |
可下载 Word 和追溯清单 |
| AFF-7 |
飞书通知与对话摘要 |
生成助手摘要、下载链接和通知记录 |
通知、摘要、下载权限测试通过 |
| AFF-8 |
前端卡片与总体验收 |
自动填表工作流卡片、状态恢复、全量回归 |
全量测试通过 |
五、AFF-0 准备与回归
AFF-0-001 创建开发分支并确认现状
| 项目 |
内容 |
| 任务类型 |
Git / 准备 |
| 前置任务 |
无 |
| 涉及文件 |
无固定文件 |
| 目标 |
从当前稳定分支创建 codex/YYYYMMDD-申报文件自动填表 开发分支,并确认工作区状态 |
| 开发步骤 |
1. 检查当前分支和 git status;2. 确认第三批设计文档存在;3. 创建开发分支;4. 记录已有未提交变更,不得回滚用户变更 |
| 验收标准 |
分支创建成功,工作区变更来源清楚 |
| 验证命令 |
git branch --show-current; git status --short |
| Codex 执行提示 |
请创建第三批自动填表开发分支,检查当前工作区状态和设计文档,不要回滚用户已有变更。 |
AFF-0-002 运行基线回归
| 项目 |
内容 |
| 任务类型 |
测试 / 回归 |
| 前置任务 |
AFF-0-001 |
| 涉及文件 |
无固定文件 |
| 目标 |
确认现有文件汇总和法规核查主流程在开发前可用 |
| 开发步骤 |
1. 运行 Django check;2. 运行文件汇总测试;3. 运行法规核查测试;4. 记录失败项并先判断是否为既有问题 |
| 验收标准 |
关键回归测试通过,或记录清楚既有失败和本阶段处理策略 |
| 验证命令 |
python manage.py check; pytest tests/test_file_summary_*.py tests/test_regulatory_*.py |
| Codex 执行提示 |
请在开发前运行 Django check 和文件汇总/法规核查关键测试,确认基线稳定。若存在既有失败,请记录,不要直接改无关代码。 |
六、AFF-1 数据模型与通用导出扩展
AFF-1-001 新增自动填表 ORM 模型
| 项目 |
内容 |
| 任务类型 |
数据库 / 后端 |
| 前置任务 |
AFF-0 |
| 涉及文件 |
review_agent/models.py |
| 目标 |
新增 ApplicationFormFillBatch、ApplicationFormFillArtifact、ApplicationFormFillNotificationRecord |
| 开发步骤 |
1. 定义批次状态枚举;2. 定义产物类型枚举;3. 定义通知状态和渠道枚举;4. 添加外键到 Conversation、User、Message、FileSummaryBatch、RegulatoryReviewBatch;5. 添加 JSONField、hash、路径、时间字段;6. 添加 db_table、索引和唯一约束 |
| 验收标准 |
模型字段、表名、索引与数据库设计一致 |
| 验证命令 |
python manage.py check |
| Codex 执行提示 |
请按 docs/4.数据库设计/3.产品关键信息提取与申报文件自动填表.md 新增自动填表三张表模型,模型集中放在 review_agent/models.py。 |
AFF-1-002 扩展导出类型和权限查询能力
| 项目 |
内容 |
| 任务类型 |
数据库 / 下载 |
| 前置任务 |
AFF-1-001 |
| 涉及文件 |
review_agent/models.py、导出下载权限相关视图 |
| 目标 |
为 ExportedSummaryFile.ExportType 增加 word、pdf,并确保下载权限支持 application_form_fill |
| 开发步骤 |
1. 扩展 ExportType.WORD;2. 扩展 ExportType.PDF;3. 检查下载接口按 workflow_type 分派权限;4. 增加 application_form_fill 反查批次的权限路径 |
| 验收标准 |
Word/ PDF 导出记录可创建;填表导出下载权限可追溯到当前用户 |
| 验证命令 |
python manage.py check; pytest tests/test_file_summary_views.py -k download |
| Codex 执行提示 |
请扩展 ExportedSummaryFile 支持 word/pdf,并让现有下载接口能通过 workflow_type=application_form_fill 校验填表批次权限。 |
AFF-1-003 生成迁移并补模型测试
| 项目 |
内容 |
| 任务类型 |
数据库 / 测试 |
| 前置任务 |
AFF-1-002 |
| 涉及文件 |
review_agent/migrations/、tests/test_application_form_fill_models.py |
| 目标 |
生成迁移并覆盖新增表的基础约束和权限关系 |
| 开发步骤 |
1. 运行 makemigrations;2. 检查 migration 只包含第三批相关变更;3. 运行 migrate;4. 测试批次创建;5. 测试产物 hash 字段;6. 测试通知重试字段;7. 测试 ExportedSummaryFile word 类型 |
| 验收标准 |
migration 可执行,模型测试通过 |
| 验证命令 |
python manage.py makemigrations review_agent; python manage.py migrate; pytest tests/test_application_form_fill_models.py |
| Codex 执行提示 |
请为第三批模型生成迁移并新增模型测试,覆盖批次、产物、通知记录和 word/pdf 导出类型。 |
AFF-1 阶段验证
七、AFF-2 模块骨架与模板配置
AFF-2-001 创建 application_form_fill 模块骨架
| 项目 |
内容 |
| 任务类型 |
后端 / 模块 |
| 前置任务 |
AFF-1 |
| 涉及文件 |
review_agent/application_form_fill/ |
| 目标 |
建立独立模块目录、常量、schemas、storage、workflow、views 和 services 包 |
| 开发步骤 |
1. 创建模块目录;2. 创建 constants.py;3. 创建 schemas.py;4. 创建 storage.py;5. 创建 workflow.py;6. 创建 views.py;7. 创建 services 子模块;8. 创建 templates 和 prompts 目录 |
| 验收标准 |
模块可 import,不影响既有应用启动 |
| 验证命令 |
python manage.py check |
| Codex 执行提示 |
请新增 review_agent/application_form_fill/ 独立模块骨架,先只放常量、schema、空服务和基础 import,不要改动法规核查模块。 |
AFF-2-002 编写模板配置 YAML
| 项目 |
内容 |
| 任务类型 |
配置 / 模板 |
| 前置任务 |
AFF-2-001 |
| 涉及文件 |
review_agent/application_form_fill/templates/application_form_templates_v1.yaml |
| 目标 |
建立模板配置,至少覆盖注册证 .docx 已识别字段 |
| 开发步骤 |
1. 定义 version;2. 定义 source_dir;3. 配置 registration_certificate;4. 配置 change_registration 为 .doc 待转换模板;5. 配置 essential_principles 为 .doc 待转换模板;6. 为注册证配置注册人名称、注册人住所、生产地址、产品名称、包装规格、主要组成成分、预期用途、储存条件及有效期、附件等字段 |
| 验收标准 |
YAML 可解析,注册证字段映射到 table_row |
| 验证命令 |
pytest tests/test_application_form_fill_template_config.py |
| Codex 执行提示 |
请新增自动填表模板配置 YAML,配置路径必须是 review_agent/application_form_fill/templates/application_form_templates_v1.yaml,先完整录入注册证表格字段。 |
AFF-2-003 实现模板配置加载与校验
| 项目 |
内容 |
| 任务类型 |
后端 / 配置 |
| 前置任务 |
AFF-2-002 |
| 涉及文件 |
review_agent/application_form_fill/services/template_config.py、tests/test_application_form_fill_template_config.py |
| 目标 |
读取、校验模板配置并计算 hash |
| 开发步骤 |
1. 实现 load_template_config();2. 实现 validate_template_config();3. 实现 compute_config_hash();4. 校验 version、source_dir、templates、code 唯一、source_file 存在、target.type 支持;5. 对 .doc 待转换模板允许配置存在但标记运行时处理 |
| 验收标准 |
有效配置通过,缺失 source_dir 或重复 code 能被测试捕获 |
| 验证命令 |
pytest tests/test_application_form_fill_template_config.py |
| Codex 执行提示 |
请实现模板配置加载和校验服务,配置错误必须返回清晰错误列表,不要在 import 时直接崩溃。 |
AFF-2 阶段验证
八、AFF-3 触发与工作流骨架
AFF-3-001 扩展意图路由
| 项目 |
内容 |
| 任务类型 |
后端 / 意图识别 |
| 前置任务 |
AFF-2 |
| 涉及文件 |
review_agent/skill_router.py、review_agent/application_form_fill/constants.py、tests/test_application_form_fill_trigger.py |
| 目标 |
用户话语命中自动填表意图时返回 application_form_fill |
| 开发步骤 |
1. 增加触发关键词;2. 支持“帮我填注册证”“对应的表格”“生成申报模板”等;3. 支持指定模板识别入口;4. 保持文件汇总和法规核查路由不回归 |
| 验收标准 |
自动填表语句触发正确,普通对话不误触发 |
| 验证命令 |
pytest tests/test_application_form_fill_trigger.py tests/test_regulatory_workflow.py -k router |
| Codex 执行提示 |
请扩展现有意图路由,新增 application_form_fill 动作。不要破坏 file_summary 和 regulatory_review 的现有触发。 |
AFF-3-002 实现批次创建和节点初始化
| 项目 |
内容 |
| 任务类型 |
后端 / 工作流 |
| 前置任务 |
AFF-3-001 |
| 涉及文件 |
review_agent/application_form_fill/workflow.py、review_agent/application_form_fill/storage.py、tests/test_application_form_fill_workflow.py |
| 目标 |
创建填表批次、生成工作目录、初始化节点 |
| 开发步骤 |
1. 实现 build_batch_no();2. 实现 build_batch_work_dir();3. 实现 create_application_form_fill_batch();4. 绑定 conversation、user、trigger_message、source_summary_batch;5. 初始化 FORM_FILL_NODE_DEFINITIONS 节点;6. 写 workflow_created 事件 |
| 验收标准 |
批次编号唯一,节点数量正确,工作目录在受控路径 |
| 验证命令 |
pytest tests/test_application_form_fill_workflow.py -k create |
| Codex 执行提示 |
请实现自动填表批次创建和节点初始化,workflow_type 必须写 application_form_fill。 |
AFF-3-003 实现工作流执行器骨架
| 项目 |
内容 |
| 任务类型 |
后端 / 工作流 |
| 前置任务 |
AFF-3-002 |
| 涉及文件 |
review_agent/application_form_fill/workflow.py、tests/test_application_form_fill_workflow.py |
| 目标 |
实现节点串行执行、状态更新、事件推送和 skipped PDF 节点 |
| 开发步骤 |
1. 实现 FormFillWorkflowExecutor.run();2. 实现 _nodes();3. 实现 _run_node();4. 每个节点写 running/success/skipped;5. pdf_convert 本期标记 skipped;6. 失败时写 batch.failed |
| 验收标准 |
空实现节点可完整跑到 success;PDF 节点 skipped |
| 验证命令 |
pytest tests/test_application_form_fill_workflow.py -k executor |
| Codex 执行提示 |
请实现自动填表工作流执行器骨架,先让节点状态可完整流转,PDF 转换节点本期标记 skipped。 |
AFF-3-004 接入流式对话启动逻辑
| 项目 |
内容 |
| 任务类型 |
后端 / 对话 |
| 前置任务 |
AFF-3-003 |
| 涉及文件 |
review_agent/services.py、review_agent/application_form_fill/views.py |
| 目标 |
用户触发自动填表时启动工作流;有附件时先自动汇总,无附件时使用最近成功汇总批次 |
| 开发步骤 |
1. 在 stream_message 中处理 application_form_fill 路由;2. 如本次存在新附件,复用文件汇总启动逻辑;3. 无新附件时查找最近成功 FileSummaryBatch;4. 无来源批次时回复请上传资料;5. 返回 workflow meta |
| 验收标准 |
对话触发能创建填表批次;无汇总批次时不崩溃 |
| 验证命令 |
pytest tests/test_application_form_fill_workflow.py -k stream |
| Codex 执行提示 |
请把 application_form_fill 接入现有 stream_message。无附件时复用最近成功汇总批次;有新附件时先自动汇总。 |
AFF-3 阶段验证
九、AFF-4 模板选择与文件来源
AFF-4-001 实现模板指定解析
| 项目 |
内容 |
| 任务类型 |
后端 / 模板选择 |
| 前置任务 |
AFF-3 |
| 涉及文件 |
review_agent/application_form_fill/services/template_select.py、tests/test_application_form_fill_template_select.py |
| 目标 |
从用户话语中识别指定模板 |
| 开发步骤 |
1. 识别注册证;2. 识别变更注册备案文件;3. 识别安全和性能基本原则清单;4. 识别全部模板;5. 未指定返回空数组 |
| 验收标准 |
指定模板语句可返回正确 template_codes |
| 验证命令 |
pytest tests/test_application_form_fill_template_select.py -k requested |
| Codex 执行提示 |
请实现用户指定模板解析,支持注册证、变更注册备案文件、安全和性能基本原则清单、全部模板。 |
AFF-4-002 实现注册类型识别和模板选择
| 项目 |
内容 |
| 任务类型 |
后端 / 模板选择 |
| 前置任务 |
AFF-4-001 |
| 涉及文件 |
review_agent/application_form_fill/services/template_select.py、tests/test_application_form_fill_template_select.py |
| 目标 |
按用户话语、法规确认条件、文件抽取识别注册类型,并选择模板 |
| 开发步骤 |
1. 用户话语识别首次注册、变更注册、备案;2. 从 source_regulatory_batch.condition_json 读取 confirmed_conditions;3. 从文件抽取候选读取 registration_type;4. 未指定模板时首次注册生成注册证 + 基本原则清单;5. 变更/备案生成变更文件 + 基本原则清单;6. 指定不适用模板允许生成但写 risk_notes |
| 验收标准 |
模板选择规则与功能设计一致 |
| 验证命令 |
pytest tests/test_application_form_fill_template_select.py |
| Codex 执行提示 |
请实现注册类型识别和默认模板选择,优先级是用户话语、已确认法规核查条件、文件抽取、unknown。 |
AFF-4-003 实现模板复制服务
| 项目 |
内容 |
| 任务类型 |
后端 / 模板 |
| 前置任务 |
AFF-4-002 |
| 涉及文件 |
review_agent/application_form_fill/services/template_repository.py、review_agent/application_form_fill/storage.py、tests/test_application_form_fill_template_repository.py |
| 目标 |
将原始模板复制到批次目录,原始模板只读 |
| 开发步骤 |
1. 根据 TemplateSpec 定位 source_file;2. 复制到 work_dir/templates;3. 记录 ApplicationFormFillArtifact(template_copy);4. .doc 且无工作模板时返回模板失败,不影响其他模板;5. 路径必须在受控工作目录内 |
| 验收标准 |
注册证 .docx 可复制;原始文件不被修改;产物 hash 写入 |
| 验证命令 |
pytest tests/test_application_form_fill_template_repository.py |
| Codex 执行提示 |
请实现模板复制服务,只允许复制到批次工作目录,不能直接写原始法规材料目录。 |
AFF-4 阶段验证
十、AFF-5 字段抽取与合并
AFF-5-001 实现规则/正则字段抽取
| 项目 |
内容 |
| 任务类型 |
后端 / 字段抽取 |
| 前置任务 |
AFF-4 |
| 涉及文件 |
review_agent/application_form_fill/services/field_extract.py、tests/test_application_form_fill_field_extract.py |
| 目标 |
从说明书、产品技术要求等文本中按标签和章节抽取字段 |
| 开发步骤 |
1. 复用 regulatory_review.services.text_extract.extract_text;2. 识别文件角色;3. 匹配 字段名:值 标签行;4. 支持多行值拼接;5. 保存 source_file、source_role、evidence、confidence、extractor=rule |
| 验收标准 |
能从测试说明书文本抽取产品名称、预期用途、储存条件、有效期、包装规格 |
| 验证命令 |
pytest tests/test_application_form_fill_field_extract.py -k rules |
| Codex 执行提示 |
请实现自动填表规则/正则字段抽取,优先覆盖注册证模板字段,抽取结果必须包含来源文件、来源角色和证据片段。 |
AFF-5-002 实现 LLM 结构化抽取封装
| 项目 |
内容 |
| 任务类型 |
后端 / LLM |
| 前置任务 |
AFF-5-001 |
| 涉及文件 |
review_agent/application_form_fill/services/field_extract.py、review_agent/application_form_fill/prompts/field_extract.md、tests/test_application_form_fill_field_extract.py |
| 目标 |
调用现有 LLM 能力输出字段 JSON,失败时降级 |
| 开发步骤 |
1. 编写字段抽取 prompt;2. 输入模板字段、文件上下文和候选文本;3. 要求输出 JSON fields/checklist_items;4. 解析 JSON;5. 捕获超时和解析失败;6. 失败返回空 LLM 结果,不阻断规则抽取 |
| 验收标准 |
monkeypatch LLM 后可解析结构化字段;LLM 异常时工作流继续 |
| 验证命令 |
pytest tests/test_application_form_fill_field_extract.py -k llm |
| Codex 执行提示 |
请实现 LLM 结构化抽取封装,必须可测试、可降级。LLM 输出解析失败不能导致整个填表批次失败。 |
AFF-5-003 实现并行抽取和产物留底
| 项目 |
内容 |
| 任务类型 |
后端 / 字段抽取 |
| 前置任务 |
AFF-5-002 |
| 涉及文件 |
review_agent/application_form_fill/services/field_extract.py、review_agent/application_form_fill/storage.py |
| 目标 |
并行执行规则/正则和 LLM 抽取,并保存 field_extract_result.json |
| 开发步骤 |
1. 使用 ThreadPoolExecutor;2. 规则和 LLM 两路并行;3. 组装 regex_results、llm_results、selected_templates、source_evidence;4. 保存 JSON;5. 写 ApplicationFormFillArtifact(field_extract_result) |
| 验收标准 |
JSON 产物包含两路结果和模板列表 |
| 验证命令 |
pytest tests/test_application_form_fill_field_extract.py -k parallel |
| Codex 执行提示 |
请实现字段并行抽取和 field_extract_result.json 产物留底,LLM 失败时也必须保存规则结果。 |
AFF-5-004 实现字段合并与冲突检测
| 项目 |
内容 |
| 任务类型 |
后端 / 字段合并 |
| 前置任务 |
AFF-5-003 |
| 涉及文件 |
review_agent/application_form_fill/services/field_merge.py、tests/test_application_form_fill_field_merge.py |
| 目标 |
合并规则和 LLM 字段,说明书优先,并生成冲突摘要 |
| 开发步骤 |
1. 实现字段值归一化;2. 实现来源优先级排序;3. 同字段多值一致时合并;4. 不一致时选择最高优先级来源;5. 说明书与其他文件冲突时标记 conflict;6. 输出 merged_fields 和 conflicts |
| 验收标准 |
说明书优先;冲突字段包含 selected_value、selected_source、conflict_values、handling |
| 验证命令 |
pytest tests/test_application_form_fill_field_merge.py |
| Codex 执行提示 |
请实现字段合并服务,严格按说明书优先处理冲突,并把冲突列表写成可用于对话摘要和追溯清单的结构。 |
AFF-5 阶段验证
十一、AFF-6 Word 填充与追溯导出
AFF-6-001 实现 Word 表格行填充
| 项目 |
内容 |
| 任务类型 |
后端 / Word |
| 前置任务 |
AFF-5 |
| 涉及文件 |
review_agent/application_form_fill/services/word_fill.py、tests/test_application_form_fill_word_fill.py |
| 目标 |
使用 python-docx 按表格行名写入注册证模板 |
| 开发步骤 |
1. 打开 docx 模板副本;2. 遍历 tables/rows/cells;3. 匹配第一列 row_label;4. 写入第二列;5. 缺失字段保持空白;6. 保存 output_path |
| 验收标准 |
产品名称、包装规格、预期用途等能写入注册证模板对应行 |
| 验证命令 |
pytest tests/test_application_form_fill_word_fill.py -k table |
| Codex 执行提示 |
请实现 Word 表格行填充服务,先支持注册证模板的两列表格行名匹配。 |
AFF-6-002 实现冲突高亮
| 项目 |
内容 |
| 任务类型 |
后端 / Word |
| 前置任务 |
AFF-6-001 |
| 涉及文件 |
review_agent/application_form_fill/services/word_fill.py、tests/test_application_form_fill_word_fill.py |
| 目标 |
冲突字段在 Word 中黄底红字 |
| 开发步骤 |
1. 对冲突字段写入 run;2. 设置字体颜色 FF0000;3. 设置单元格 shading FFFF00;4. 非冲突字段保持原样式;5. 测试读取 docx XML 验证颜色和底色 |
| 验收标准 |
冲突字段样式可在 docx XML 中验证 |
| 验证命令 |
pytest tests/test_application_form_fill_word_fill.py -k highlight |
| Codex 执行提示 |
请实现 Word 冲突高亮,冲突字段必须红色字体和黄色底色,测试需检查 docx XML。 |
AFF-6-003 创建 Word 导出记录
| 项目 |
内容 |
| 任务类型 |
后端 / 导出 |
| 前置任务 |
AFF-6-002 |
| 涉及文件 |
review_agent/application_form_fill/services/word_fill.py、review_agent/application_form_fill/workflow.py |
| 目标 |
Word 生成后写入 ExportedSummaryFile(export_type=word) 和产物记录 |
| 开发步骤 |
1. 按批次号、产品名、模板标签生成文件名;2. 保存到 work_dir/filled;3. 创建 ApplicationFormFillArtifact(filled_template);4. 创建 ExportedSummaryFile;5. 记录模板失败时错误 |
| 验收标准 |
可查询到 word 导出记录和 filled_template 产物 |
| 验证命令 |
pytest tests/test_application_form_fill_word_fill.py -k export |
| Codex 执行提示 |
请把 Word 填充结果保存为导出文件,export_type 使用 word,workflow_type 使用 application_form_fill。 |
AFF-6-004 实现追溯清单 Excel/JSON
| 项目 |
内容 |
| 任务类型 |
后端 / 导出 |
| 前置任务 |
AFF-6-003 |
| 涉及文件 |
review_agent/application_form_fill/services/traceability_export.py、tests/test_application_form_fill_traceability.py |
| 目标 |
输出字段来源追溯清单和合并结果 JSON |
| 开发步骤 |
1. 生成“字段追溯”Sheet;2. 生成“冲突字段”Sheet;3. 生成“低置信度条目”Sheet;4. 生成“生成结果”Sheet;5. 保存 Excel;6. 保存 merged_fields.json;7. 创建导出和产物记录 |
| 验收标准 |
Excel 可打开,包含字段、来源、证据、冲突、处理方式 |
| 验证命令 |
pytest tests/test_application_form_fill_traceability.py |
| Codex 执行提示 |
请实现字段来源追溯清单导出,必须包含规则/LLM 合并结果、冲突字段和生成结果。 |
AFF-6 阶段验证
十二、AFF-7 飞书通知与对话摘要
AFF-7-001 生成助手 Markdown 摘要
| 项目 |
内容 |
| 任务类型 |
后端 / 对话 |
| 前置任务 |
AFF-6 |
| 涉及文件 |
review_agent/application_form_fill/services/traceability_export.py、review_agent/application_form_fill/workflow.py |
| 目标 |
工作流完成后向当前对话写入下载链接和冲突摘要 |
| 开发步骤 |
1. 汇总 Word 导出;2. 汇总 PDF 状态为待增强;3. 汇总冲突字段;4. 添加追溯清单下载链接;5. 创建 assistant Message |
| 验收标准 |
对话中出现 Markdown 表格、Word 下载、追溯清单下载和冲突摘要 |
| 验证命令 |
pytest tests/test_application_form_fill_workflow.py -k summary |
| Codex 执行提示 |
请实现自动填表完成后的助手 Markdown 摘要,PDF 本期显示为待增强,不作为失败。 |
AFF-7-002 实现飞书通知记录和 mock 通知
| 项目 |
内容 |
| 任务类型 |
后端 / 通知 |
| 前置任务 |
AFF-7-001 |
| 涉及文件 |
review_agent/application_form_fill/services/notifier.py、tests/test_application_form_fill_notification.py |
| 目标 |
填表完成后记录通知,可 mock 发送,失败不阻断下载 |
| 开发步骤 |
1. 实现 notify_completion();2. 默认 channel=mock;3. 写 template_codes、export_ids、message_summary;4. 支持 send_status success/failed;5. 失败时记录 error_message 和 retry_count |
| 验收标准 |
通知记录可查;通知失败不影响批次核心产物 |
| 验证命令 |
pytest tests/test_application_form_fill_notification.py |
| Codex 执行提示 |
请实现自动填表通知服务,先用 mock 通知记录即可。通知失败不得阻断 Word 下载。 |
AFF-7-003 完成工作流状态归并
| 项目 |
内容 |
| 任务类型 |
后端 / 工作流 |
| 前置任务 |
AFF-7-002 |
| 涉及文件 |
review_agent/application_form_fill/workflow.py、tests/test_application_form_fill_workflow.py |
| 目标 |
根据 Word、追溯清单、通知结果标记 success/partial_success/failed |
| 开发步骤 |
1. 所有目标 Word 成功时 success;2. 至少一个 Word 成功但非关键产物失败时 partial_success;3. 所有 Word 失败时 failed;4. PDF skipped 不导致失败;5. 发送 workflow_completed 事件 |
| 验收标准 |
批次状态符合详细设计 |
| 验证命令 |
pytest tests/test_application_form_fill_workflow.py -k status |
| Codex 执行提示 |
请完成自动填表工作流状态归并,PDF skipped 不影响 success,通知失败最多导致 partial_success。 |
AFF-7 阶段验证
十三、AFF-8 前端卡片与总体验收
AFF-8-001 后端状态接口
| 项目 |
内容 |
| 任务类型 |
后端 / 接口 |
| 前置任务 |
AFF-7 |
| 涉及文件 |
review_agent/application_form_fill/views.py、review_agent/urls.py 或相关 URL 文件 |
| 目标 |
提供自动填表启动和状态查询接口 |
| 开发步骤 |
1. 新增 start 接口;2. 新增 detail/status 接口;3. 返回 batch、nodes、conflicts、exports;4. 校验 conversation/user 权限;5. 接入 URL |
| 验收标准 |
当前用户可查自己的填表批次,不能查他人批次 |
| 验证命令 |
pytest tests/test_application_form_fill_views.py |
| Codex 执行提示 |
请实现自动填表启动和状态查询接口,所有查询必须校验当前用户权限。 |
AFF-8-002 前端支持 application_form_fill 卡片
| 项目 |
内容 |
| 任务类型 |
前端 / 工作流卡片 |
| 前置任务 |
AFF-8-001 |
| 涉及文件 |
static/js/app.js、templates/home.html、静态 CSS 文件 |
| 目标 |
前端展示自动填表工作流卡片,并根据 SSE 更新节点 |
| 开发步骤 |
1. 解析 workflow_type=application_form_fill;2. 定义节点文案;3. 创建卡片;4. 更新节点状态;5. PDF 节点显示待增强/跳过;6. 页面刷新后恢复 |
| 验收标准 |
自动填表卡片可显示准备资料、选择模板、复制模板、抽取字段、填写 Word、追溯清单、飞书通知 |
| 验证命令 |
pytest tests/test_application_form_fill_frontend.py 或现有前端测试命令 |
| Codex 执行提示 |
请在现有工作流卡片逻辑中新增 application_form_fill 类型,展示自动填表节点并支持状态恢复。 |
AFF-8-003 前端展示结果和下载链接
| 项目 |
内容 |
| 任务类型 |
前端 / Markdown |
| 前置任务 |
AFF-8-002 |
| 涉及文件 |
static/js/app.js、模板和 CSS |
| 目标 |
对话框正常展示 Word 下载、追溯清单、冲突摘要 |
| 开发步骤 |
1. 确认助手 Markdown 渲染支持表格;2. 验证 Word 下载链接点击;3. 验证冲突摘要表格;4. PDF 列显示待增强 |
| 验收标准 |
对话结果可读、链接可用、PDF 待增强不被误判为失败 |
| 验证命令 |
前端/Playwright 对应测试 |
| Codex 执行提示 |
请验证并完善自动填表结果展示,确保 Markdown 表格、Word 下载链接、追溯清单链接和冲突摘要正常显示。 |
AFF-8-004 总体验收与回归
| 项目 |
内容 |
| 任务类型 |
验收 / 回归 |
| 前置任务 |
AFF-8-003 |
| 涉及文件 |
全项目 |
| 目标 |
运行全量测试,确认前三批能力均不回归 |
| 开发步骤 |
1. 运行 Django check;2. 运行自动填表测试;3. 运行文件汇总测试;4. 运行法规核查测试;5. 如可用,运行前端/Playwright 测试;6. 检查 git status |
| 验收标准 |
全量测试通过;失败项均有解释;无意外文件变更 |
| 验证命令 |
python manage.py check; pytest |
| Codex 执行提示 |
请执行第三批自动填表总体验收,运行 Django check 和 pytest 全量回归,确认文件汇总与法规核查不回归。 |
AFF-8 阶段验证
十四、测试分层要求
| 层级 |
验证内容 |
建议文件 |
| 模型测试 |
三张新表、word/pdf 导出类型、权限关系 |
tests/test_application_form_fill_models.py |
| 配置测试 |
YAML 加载、模板配置校验、hash |
tests/test_application_form_fill_template_config.py |
| 选择测试 |
触发语句、指定模板、注册类型优先级、默认模板 |
tests/test_application_form_fill_template_select.py |
| 抽取测试 |
规则/正则、LLM 降级、并行抽取、字段合并 |
tests/test_application_form_fill_field_extract.py、tests/test_application_form_fill_field_merge.py |
| Word 测试 |
表格行填充、冲突高亮、导出记录 |
tests/test_application_form_fill_word_fill.py |
| 导出测试 |
追溯清单 Excel、JSON 产物、下载权限 |
tests/test_application_form_fill_traceability.py、tests/test_application_form_fill_views.py |
| 工作流测试 |
批次创建、节点流转、状态归并、助手摘要 |
tests/test_application_form_fill_workflow.py |
| 通知测试 |
mock 通知、失败记录、重试字段 |
tests/test_application_form_fill_notification.py |
| 前端测试 |
卡片节点、PDF 待增强、下载链接、冲突摘要 |
tests/test_application_form_fill_frontend.py |
十五、Codex 自动化执行规则
| 规则 |
内容 |
| 顺序执行 |
必须从 AFF-0 到 AFF-8 顺序执行,不得跳阶段 |
| TDD |
新行为先写失败测试,再实现 |
| 当前阶段优先 |
某阶段失败时先修复当前阶段,不继续后续阶段 |
| 回归保护 |
文件汇总和法规核查已有测试不得回归 |
| PDF 边界 |
PDF 节点本期可 skipped,不为 PDF 引入强依赖 |
| 字段表边界 |
不新增字段级数据库表,后续增强已在待办计划 |
| 每阶段验证 |
每阶段完成后运行对应验证命令 |
| 每阶段提交 |
每阶段验证通过后生成提交摘要并本地提交 |
| 不覆盖变更 |
不得回滚或覆盖用户已有未提交变更 |
十六、推荐目标模式提示词
后续可直接对 Codex 输入:
十七、待执行前检查清单
| 检查项 |
状态 |
| 第三批需求分析、功能设计、详细设计、数据库设计均已存在 |
待执行时确认 |
| 当前分支是否适合创建开发分支 |
待执行时确认 |
| 是否存在用户未提交变更 |
待执行时确认 |
python-docx、openpyxl、PyYAML 是否可用 |
待执行时确认 |
| 现有文件汇总和法规核查测试是否通过 |
待执行时确认 |
执行机器是否提供 git-commit-summary skill |
待执行时确认 |
.doc 模板和 PDF 转换是否保持在待办边界内 |
待执行时确认 |