海报确认、文案生成、海报生成增加服务端失败关闭门禁,绑定文件哈希、解析快照哈希和确认数据哈希,并返回 422 业务错误。[validators.py (line 65)](D:/work/code/python/coding/baodanagent/api/insurance/plan_data/validators.py:65) 缺失金额不再转换为 0;删除错误字段兜底和“年缴×年期=合同总保费”事实推导;里程碑冲突会阻断确认。[normalizer.py (line 14)](D:/work/code/python/coding/baodanagent/api/insurance/ppt/normalizer.py:14) PPT 渲染器支持可空金额和实际币种,缺失值显示“待确认”,避免 float(None)、空值除法等异常。 模板必须覆盖全部输入保司和产品;自动选择排序确定化,同优先级歧义时阻断。[template_selection.py (line 4)](D:/work/code/python/coding/baodanagent/api/insurance/ppt/template_selection.py:4) 场景判定写入 scenarioOverrideTrace,记录请求、模板、服务端及 Worker 最终判定。[routes.py (line 555)](D:/work/code/python/coding/baodanagent/api/insurance/ppt/routes.py:555) 前端增加哈希提交、人工调整原因、模板歧义提示及真实能力说明。 冻结三份核心 Schema,并建立 Goldens manifest、说明和评估脚本。 验证结果: 后端目标回归:111 passed, 1 skipped PPT 运行时回归:81 passed 前端生产构建和 vue-tsc:通过 Python compileall:通过 三份 Schema JSON:解析通过 git diff --check:通过,仅有换行符提示
65 lines
3.8 KiB
Markdown
65 lines
3.8 KiB
Markdown
# 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。
|