海报确认、文案生成、海报生成增加服务端失败关闭门禁,绑定文件哈希、解析快照哈希和确认数据哈希,并返回 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:通过,仅有换行符提示
16 lines
654 B
Python
16 lines
654 B
Python
"""PPT 模板适用范围的确定性规则。"""
|
|
|
|
|
|
def template_scope_compatible(
|
|
template_data: dict,
|
|
company_ids: list[str] | tuple[str, ...],
|
|
product_ids: list[str] | tuple[str, ...],
|
|
) -> bool:
|
|
"""模板设置适用范围时,全部输入保司和产品都必须被覆盖。"""
|
|
allowed_companies = set(template_data.get("applicableCompanyIds") or [])
|
|
allowed_products = set(template_data.get("applicableProductIds") or [])
|
|
return (
|
|
(not allowed_companies or all(item in allowed_companies for item in company_ids))
|
|
and (not allowed_products or all(item in allowed_products for item in product_ids))
|
|
)
|