# PPT 与海报生成全链路首迭代实施记录 日期:2026-08-02 依据:`PPT与海报生成全链路详细修复计划书_20260802.md` ## 1. 本轮范围 本轮完成计划书“立即执行的第一轮迭代”中的 P0-A、P0-B、P0-C,并建立 Goldens 与三份核心 Schema 的基础设施。计划书中 Phase 1~6 的长期改造不在本轮范围内。 ## 2. 已完成变更 ### P0-A 确认与生成门禁 - 确认时校验文件实际 SHA-256、上传记录哈希和前端提交哈希一致。 - 确认时校验解析快照哈希,阻断基于过期解析结果的确认。 - 对币种、年龄、缴费金额、关键利益字段、产品匹配和来源页执行服务端业务校验。 - 手工修改关键字段必须填写覆盖原因;确认快照写入 Schema 版本和各级哈希。 - 海报生成和文案重生成再次执行同一套门禁,禁止绕过确认接口直接生成。 - 业务校验失败统一返回 HTTP 422;审计日志仅记录哈希和覆盖原因,不写完整敏感快照。 ### P0-B 数字口径纠偏 - 缺失或无效数字保留为 `None`,不再归一成 0。 - 移除重疾险、IUL 中不同语义字段之间的兜底映射。 - 移除“年缴保费 × 缴费年期 = 合同总保费”的事实字段推导,只保留明确标记的派生估算字段。 - IRR、回本年和比较指标遇到缺失值时不参与计算。 - 海报显式里程碑与表格冲突时记录未解决冲突,不再静默覆盖。 - PPT 渲染按保单币种展示;缺失数字显示“待确认”;可空金额路径不再执行除法、求和或 `float(None)`。 ### P0-C 模板确定性 - 模板必须覆盖当前全部保司和全部产品,而不是任意命中一个即通过。 - 自动模板选择采用稳定排序;最高优先级并列时阻断并要求显式选择。 - 前端模板列表采用相同的全量适用规则和确定性排序,并展示歧义提示。 - 管理端明确说明 `slidesConfig` 目前仅控制视觉/元数据,不宣称能控制业务页面结构。 - 任务记录 `scenarioOverrideTrace`,包含请求场景、模板场景标签、服务端检测场景、Worker 检测场景和最终场景。 ### Schema 与 Goldens - 冻结 `field-value.schema.json`、`document-ir.schema.json`、`plan-data-snapshot.schema.json` 首版草案。 - 新增 Goldens manifest、使用说明和评估脚本;脚本在样本不足时以阻断状态退出。 - 新增 Schema 评审记录,明确迁移 036/037 前仍需产品、精算、合规确认的业务决策。 ## 3. 验证结果 - 后端目标回归:111 passed,1 skipped(系统 Python 未安装 `python-pptx`)。 - 使用工作区文档运行时复跑 PPT 相关测试:81 passed,无跳过。 - 前端生产构建:通过。 - Vue TypeScript 检查:通过。 - Python `compileall`:通过。 - `git diff --check`:通过(仅有仓库既有换行符提示)。 ## 4. 未解决项与外部依赖 - Goldens 当前为 0/10:仓库内没有经脱敏、经业务批准的真实计划书样本,不能用虚构样本替代基线。 - 迁移 036/037 未创建:需先完成 Schema 评审记录中的业务决策,避免把未确认语义固化进数据库。 - 前端 ESLint 暂不能执行:项目使用 ESLint 9,但仓库没有 `eslint.config.js`/`mjs`/`cjs` flat config;本轮以生产构建和 `vue-tsc` 作为前端静态验证。 - Phase 1~6(完整事实模型、Document IR 持久化、场景规则库、Poster RenderDocument、模板克隆增强、可观测性与发布治理)仍按原计划书继续推进。 ## 5. 下一轮入口条件 1. 提供至少 10 份脱敏且获批的真实计划书样本及人工标准答案。 2. 产品、精算、合规共同确认三份 Schema 的待决项。 3. 决策通过后再创建迁移 036/037,并进入 Phase 1/2。