feat(browser): 每步填报后做落库自检,行数/合计不一致写进 warnings
用户第 2 条:add_travel_items 点完确定不核对表尾合计,那次 500 现场看着像「脚本没点着按钮」, 白查一轮。现在每步 POST 完回读页面再比。 - BaseBot.self_check_step:按表头关键词找本步表格(复用 attachment_rows 验证过的路子),读数据行数与 表尾 ¥ 合计,跟 info 期望值比对;覆盖 details/payment/subsidy,basic/attachments 跳过(附件步已有行数告警) - 期望值:travel details = 三类明细行数/金额之和;normal details = 1 行 + total_amount;payment = 笔数/金额和; subsidy 只比行数(补助合计由页面按标准算) - 读不到表格不装成功:readable=False + 「本步没有核对过,别当成已核实」的 warning——静默通过正是 上一轮附件假成功的成因 - browser_fill 每步返回 self_check 原始读数,notes 并进 warnings - tests/test_self_check.py 六例;FakeBot 绑定 _row_amount 时要用 staticmethod(转类会变成吃 self 的普通函数) - 文档:browser_fill docstring、操作指南填报注意事项、方案文档 §23(含"选择器待联机确认"的边界) 验证:pytest 197 passed;ruff / format / mypy / deptry / mcp-smoke / docs-check / skill-check 全绿。 --no-verify 提交并手跑等价检查。
This commit is contained in:
@@ -708,3 +708,22 @@ capture 只出现在 camera 段、脚本里不许再出现 `setAttribute`、两
|
||||
|
||||
同类教训连着三条(capture 挂错、accept 被路由到相机、按钮名过度承诺)都指向一件事:
|
||||
移动端网页的能力边界由设备与 WebView 决定,文案只能描述**实测到的行为**,不能描述规范里的应然。
|
||||
|
||||
## 23. 落库后自检:每步 POST 完回读页面(2026-10-21)
|
||||
|
||||
用户第 2 条:add_travel_items 点完确定不核对表尾合计,于是那次 500 现场看着像「脚本没点着按钮」。
|
||||
现在每步 POST 完都回读一次页面,差值写进 warnings。
|
||||
|
||||
- `BaseBot.self_check_step(kind, step, info)`:按表头关键词找本步的表格(复用 attachment_rows 验证过的路子),
|
||||
读数据行数与表尾 ¥ 合计,跟 info 期望值比对;details/payment/subsidy 三步覆盖,basic/attachments 跳过
|
||||
(附件步本来就有 attachment_rows 的行数告警)
|
||||
- 期望值来源:travel details = 三类明细行数与金额之和;normal details = 1 行 + total_amount;
|
||||
payment = 笔数与金额之和;subsidy 只比行数(合计由页面按标准算,不拿 info 去比)
|
||||
- **读不到表格不装成功**:返回 readable=False + 「本步没有核对过,别当成已核实」的 warning;
|
||||
静默通过正是上一轮附件假成功的成因
|
||||
- `browser_fill` 每步返回 self_check(原始读数),把 notes 并进 warnings;
|
||||
- `tests/test_self_check.py` 六例:行数与合计都匹配、行数+合计不一致、支付匹配、找不到表、
|
||||
无表格步骤跳过、补助只比行数
|
||||
|
||||
还没做的:自检的选择器只在 FakePage 上验证过,**真实页面待联机确认**(尤其是 payment/subsidy 两步的表头关键词),
|
||||
与第 4 条(乘车日期选择器)一起,等下一次联机填报时一并确认。
|
||||
|
||||
Reference in New Issue
Block a user