输出
输出在 outputs.json 的 outputs 数组中声明。每项包含稳定 ID、类型和文件名规则。支持的类型为 docx、pdf_bundle、xlsx 和 attachment_zip。
Word 输出引用包内 DOCX 模板。材料 PDF 选择材料角色、页面顺序、编号和图片布局。Excel 输出声明列、顺序、标题、基础格式和合计。附件包配置材料角色、分组目录、文件命名及清单。
一个方案可声明多份 Word 文档。每份文档的 id、label、模板和文件名由作者定义,例如“采购申请”“费用结算”或“活动说明”。核心没有固定的两份 Word,也不要求使用 reimbursement 或 acceptance ID。“报账说明”和“验收单”是 BITFSAE 包的文档名称。
默认输出与本次选择
print.default_outputs 按设置优先级合成:包的 fixed、本地覆盖或包的 default 可明确给出输出 ID 列表。没有这些设置值时,使用 scheme.default_outputs;该键也缺省时,采用输出项的 default_selected: true。任一层显式 [] 都表示全不选,不能按空值回退。注册表参考中的核心默认 [] 不取消这里的声明继承规则。
本次显式传入 output_ids: [] 表示本次不选输出;不传选择才采用上述默认。按本地方案及修订传入 output_ids_by_binding 时,每组仅使用自己的列表,空列表或缺少该组均不选。打印窗口按当前本地方案的默认值初始化勾选,并按条目的固定修订传入显式选择;临时勾选不覆盖已配置的默认值。当前默认中的输出若不属于条目的修订,就不出现在该组中。通用输出仍沿用上次选择。最终没有任何输出时,预检报告 NO_OUTPUT_SELECTED,不会自动补回 Word 或通用输出。
预检与交付
输出文件名只接受注册的上下文变量。路径会限制在目标目录内。金额按发票或实付计算;缺失金额保留为缺失,并产生诊断。收款信息按一个完整对象选择,不会逐字段拼接来源。
核心四类输出的预检均使用唯一 context.schema.json 检查完整上下文。打印 IPC 在渲染前再次执行同一校验,新旧协议、源码和外部进程一致。错误只报告 JSON Pointer 和约束,不回显账号或备注。
预检按本地方案、修订、主体和输出需要的收款人或批次分组。输出有必需缺项时整体停止,用户取消有问题的输出后重新预览。所有文件写入独立暂存目录,成功后才发布;取消、超时或写出失败不会留下交付目录。
界面修改选择或关闭对话框时使旧预览失效。预检响应返回后先核对当前表单版本,过期结果被丢弃,其输出计划也会取消,不能用它启用生成按钮。
生成时按实际工作报告阶段:
| 阶段 ID | 工作 |
|---|---|
verifying_resources | 核对原始材料与模板摘要 |
rendering_core | 核心生成 Excel 和附件 ZIP |
rendering_print | 打印组件生成 Word 和材料 PDF |
verifying_outputs | 检查所有计划产物及摘要 |
publishing | 原子保存整套交付文件 |
get_export_progress(job_id) 只返回内存中的阶段、状态及完成数,不读取数据库;它与 cancel_export(plan_id) 都不等待长导出持有的 API 锁。前端每 400 ms 查询一次。资源、核心文件及产物检查阶段可提供计数,Word/PDF 生成和保存阶段不保证细分百分比。核心写出器完成当前有界步骤后响应取消,组件进程沿用超时与取消机制。
通用总览、附件包和材料 PDF 共用配置输出的写出器。保留输出 ID 分别为 generic_overview、generic_attachments 和 generic_materials。总览和附件包可以跨方案选择;通用材料 PDF 按真实抬头拆分,包含内置及自定义角色,不依赖来源团队模板。缺发票 PDF 或不可转换材料时先阻止相关输出。
历史重新生成使用当次快照及资源摘要,资源已删除或变化时阻止重新生成,保留原结果供查看。
初始记录文件保存失败时,任务返回 EXPORT_RECORD_FAILED 并标为 failed,清理半写记录文件,使原预览失效。数据库快照和原始材料保留,修复写入条件后可调用重新生成;这次失败不发布交付目录。
本次输出选择和字段值按本地方案及修订隔离。未进批次条目所需的批次字段可作为本次临时值填写,只进入任务快照,不写入永久批次。模板只获得当前组的字段及选项,不获得其他本地副本的映射。
批次投影只提供 ID、名称、文本备注和当前组字段。空备注转为空字符串,内部 output_settings、updated_at 不进入上下文;编排器先解析批次设置,再提供本次输出的有效选项。
文件名变量的权威目录为 context_fields.json 中的 filename_fields,由轻量 filename_field_catalog() 读取。可用变量包括方案名称、抬头、批次名称、导出日期/输出 ID,以及相应作用域内的条目 ID、票号、报账人和材料角色;模板完整字段目录不意味着这些字段都能用于文件名。旧 IPC 的固定字段映射仅供 v1 兼容。
render 根据 fixture 在临时数据库中创建条目,经同一预检生成真实文件。Excel 使用核心输出器;Word 和材料 PDF 使用打印组件。fixture 可声明相对附件路径,也可用 attachments[].generate 生成虚构材料。桌面端和 CLI 都核验附件、收款对象和方案修订。
