11 KiB
11 KiB
6. Word 回填导出详细设计
1. 设计目标
本步骤承接字段抽取、统一字段池、一致性核查和风险预警结果,目标是将可回填字段按模板映射写入注册申报表格或对照清单,并生成新的 Word 文件供用户下载、复核和归档。
本步骤需要完成以下业务结果:
- 选择适用的 Word 模板。
- 加载模板字段映射。
- 从统一字段池读取可回填字段。
- 根据风险报告和冲突状态执行回填拦截。
- 生成回填数据集。
- 按模板写入 Word 文档。
- 校验输出文档版式、字段落位和导出状态。
- 生成导出记录和下载入口。
- 写入审计留痕。
本步骤不重新抽取字段,不修改法规判断和风险结论。若字段冲突或高风险未处理,应阻止自动生成可报送文件,或者生成“待复核草稿版”并明确标记。
2. 所属模块与边界
2.1 Documents
apps.documents 负责保存生成后的 Word 文件、记录导出文件元数据,并提供下载入口。
2.2 Agent Core
agent_core 负责模板选择、字段映射、回填数据集构建、Word 渲染、版式校验和导出报告生成。
本步骤建议产生以下中文 Skill:
Word回填导出编排Skill模板选择Skill模板字段映射加载Skill回填字段集构建Skill回填拦截检查SkillWord模板渲染Skill导出版式校验Skill导出记录生成Skill
2.3 Audit
apps.audit 记录本次回填导出的模板版本、字段映射、回填字段、拦截状态、输出文件和失败原因。
审计中必须保留:
batch_idtemplate_idtemplate_versionfield_mapping_versionfilled_fieldsblocked_fieldsoutput_file_idexport_statuslayout_check_result
3. 输入输出
3.1 输入
{
"batch_id": 1001,
"scenario_id": "registration_word_fill_export",
"template_id": "registration_application_form_v1",
"target_output_type": "application_form",
"allow_draft_when_blocked": true,
"selected_field_keys": [
"product_name",
"detection_target",
"intended_use",
"storage_condition",
"performance_index"
]
}
3.2 输出
本步骤输出 registration_word_export_report:
{
"report_type": "registration_word_export_report",
"batch_id": 1001,
"template_id": "registration_application_form_v1",
"export_status": "draft_generated",
"summary": {
"fillable_field_count": 5,
"filled_field_count": 4,
"blocked_field_count": 1,
"manual_review_field_count": 1,
"layout_check_status": "passed"
},
"filled_fields": [],
"blocked_fields": [],
"output_file": {
"file_id": 2001,
"filename": "注册申报表格_回填草稿.docx",
"download_url": "/documents/exports/2001/download/"
}
}
4. 主工作流
用户发起 Word 回填导出
-> 读取字段池和风险报告
-> 选择目标模板
-> 加载模板字段映射
-> 构建回填字段集
-> 执行冲突和风险拦截检查
-> 渲染 Word 模板
-> 校验字段落位和版式
-> 保存导出文件
-> 生成导出报告
-> 写入审计留痕
-> 返回下载入口
5. 节点详细设计
5.1 节点一:导出上下文加载
业务功能:
- 读取资料包批次。
- 读取统一字段池。
- 读取一致性核查报告。
- 读取风险预警报告。
- 确认是否允许生成正式版或草稿版。
使用技术:
- Django ORM
- JSONField 报告快照
- dataclass/Pydantic
产生方法:
load_export_context(batch_id, template_id) -> WordExportContextload_fillable_field_pool(batch_id) -> list[FieldPoolItem]load_export_blockers(batch_id) -> ExportBlockerContext
对应 Skill:
Word回填导出编排Skill
5.2 节点二:模板选择
业务功能:
- 根据输出目标选择模板。
- 校验模板是否存在。
- 校验模板适用流程。
- 校验模板版本是否启用。
模板类型:
- 注册申报表格模板。
- 法规对照清单模板。
- 注册证或批准证明文件格式模板。
使用技术:
- 模板库模型
- Django Storage
- YAML/JSON 模板元数据
产生方法:
select_word_template(template_id, target_output_type) -> WordTemplatevalidate_template_applicability(template, workflow_type) -> TemplateValidationResultresolve_template_file_path(template) -> Path
对应 Skill:
模板选择Skill
5.3 节点三:模板字段映射加载
业务功能:
- 加载模板字段和统一字段池字段的映射关系。
- 校验模板占位符是否完整。
- 标记必填字段、可选字段和人工复核字段。
映射示例:
template_id: registration_application_form_v1
version: "2026-06-03"
mappings:
- placeholder: "{{ product_name }}"
field_key: product_name
required: true
- placeholder: "{{ intended_use }}"
field_key: intended_use
required: true
使用技术:
- YAML
- Pydantic
- 模板占位符扫描
产生方法:
load_template_field_mapping(template_id) -> TemplateFieldMappingvalidate_mapping_against_template(template, mapping) -> MappingValidationResultscan_template_placeholders(template_file) -> list[str]
对应 Skill:
模板字段映射加载Skill
5.4 节点四:回填字段集构建
业务功能:
- 从字段池读取映射字段。
- 选择推荐值。
- 过滤不可回填字段。
- 生成待回填字段集。
使用技术:
- Django ORM
- 字段池数据
- 映射规则
产生方法:
build_fill_dataset(field_pool, mapping) -> FillDatasetresolve_field_value(field_key, field_pool) -> FillValuecollect_missing_fill_values(mapping, field_pool) -> list[MissingFillValue]
对应 Skill:
回填字段集构建Skill
5.5 节点五:回填拦截检查
业务功能:
- 检查字段是否存在冲突。
- 检查字段是否待人工复核。
- 检查风险报告是否存在高风险。
- 判断是否允许生成正式版或草稿版。
拦截规则:
- 高风险未处理:禁止生成正式版。
- 字段冲突未处理:禁止自动正式回填。
- 必填字段缺失:禁止正式版。
- 允许生成草稿版时,输出文件必须标记“待复核草稿”。
使用技术:
- 风险报告
- 字段池冲突状态
- 回填策略规则
产生方法:
check_fill_blockers(fill_dataset, risk_report) -> FillBlockerResultdetermine_export_mode(blockers, allow_draft) -> strbuild_blocked_field_list(blockers) -> list[BlockedField]
对应 Skill:
回填拦截检查Skill
5.6 节点六:Word 模板渲染
业务功能:
- 打开 Word 模板。
- 替换占位符。
- 写入表格单元格。
- 保留标题层级、表格、页眉页脚、盖章位和原始样式。
- 输出新的 Word 文件。
使用技术:
python-docxdocxtpl可选- Django Storage
- 临时文件目录
产生方法:
render_word_template(template_file, fill_dataset, export_mode) -> RenderedWordFilereplace_paragraph_placeholders(document, values) -> Nonereplace_table_placeholders(document, values) -> Nonesave_rendered_document(document, output_path) -> Path
对应 Skill:
Word模板渲染Skill
5.7 节点七:导出版式校验
业务功能:
- 校验输出文件是否存在。
- 校验必填占位符是否已替换。
- 校验是否仍残留模板占位符。
- 校验基础版式元素是否存在。
- 必要时渲染预览用于人工确认。
使用技术:
python-docx- 文档占位符扫描
- 可选 LibreOffice 转 PDF
- 可选 PDF 渲染检查
产生方法:
check_export_layout(output_file, mapping) -> LayoutCheckResultdetect_unfilled_placeholders(output_file) -> list[str]validate_required_sections(output_file) -> list[LayoutWarning]
对应 Skill:
导出版式校验Skill
5.8 节点八:导出记录生成
业务功能:
- 保存输出文件记录。
- 生成下载地址。
- 生成导出报告。
- 写入审计。
使用技术:
- Django ORM
- Django Storage
- JSONField
- Audit 服务
产生方法:
create_export_file_record(batch, output_file) -> ExportedDocumentbuild_download_url(export_file) -> strbuild_word_export_report(context, result) -> RegistrationWordExportReportrecord_word_export_audit(report, context) -> AuditLog
对应 Skill:
导出记录生成Skill
6. Skill 清单
本步骤产生以下 Skill 设计文档:
- Word回填导出编排Skill
- 模板选择Skill
- 模板字段映射加载Skill
- 回填字段集构建Skill
- 回填拦截检查Skill
- Word模板渲染Skill
- 导出版式校验Skill
- 导出记录生成Skill
7. 导出模式
| 模式 | 含义 |
|---|---|
formal |
正式导出,字段无冲突且无高风险 |
draft |
草稿导出,存在待复核项但允许预览 |
blocked |
拦截导出,不生成文件 |
8. 页面展示
Word 回填导出页面建议展示:
- 模板名称和版本。
- 回填字段数量。
- 已回填字段。
- 被拦截字段。
- 导出模式。
- 版式校验结果。
- Word 下载入口。
- 审计入口。
9. 异常处理
- 模板不存在:任务失败。
- 模板字段映射缺失:任务失败。
- 必填字段缺失:正式版导出拦截。
- 字段冲突:正式版导出拦截。
- 高风险未处理:正式版导出拦截。
- Word 渲染失败:记录导出失败。
- 版式校验失败:生成文件标记待复核。
10. 与后续步骤的接口
飞书通知读取:
- 导出状态。
- 下载链接。
- 被拦截字段。
- 待复核字段。
- 责任角色。
11. 测试设计
11.1 单元测试
- 模板选择正确。
- 字段映射加载正确。
- 必填字段缺失被拦截。
- 冲突字段被拦截。
- 占位符替换正确。
- 残留占位符可识别。
11.2 服务层测试
- 能基于字段池生成 Word 草稿。
- 高风险存在时禁止正式导出。
- 导出文件记录生成。
- 导出报告写入审计。
11.3 页面测试
- 页面展示导出状态。
- 页面展示下载入口。
- 页面展示拦截原因。
- 页面展示版式校验结果。
12. V1 实现建议
V1 建议先完成以下最小闭环:
- 维护一个注册申报表格或对照清单模板。
- 支持字段占位符回填。
- 支持冲突字段和高风险拦截。
- 生成新的
.docx文件。 - 提供下载入口。
- 写入审计。
增强阶段再补齐:
- 多模板库管理。
- PDF 归档件导出。
- 高保真版式自动校验。
- 模板版本审批。
- 后台模板字段映射维护。