feat(travel): 交通费行按实际乘车日填开始/结束日期(联机实测控件 #ksrq/#jsrq)

用户第 4 条:交通费行的日期由页面按出差起止自动带出,cost=1 分支不填日期,于是「6-02 出发、
6-05 才坐车」这种情况报销日期是错的。要按乘车日必须先知道控件 id,所以做了一次联机探测:
登录 → new_form(travel) → fill(basic) 落草稿 → actor 里打开明细、点 #insertDetail、选 cost=1、
dump 可见 input → 截图;探完按守卫删草稿(唯一命中+未提交+当日制单,bill_no 202610030261,复查 0 命中)。

探测结果:交通费行日期控件 #ksrq(expenPwTraveldetail.STARTDATE)/ #jsrq(OVERDATE),
页面已按出差起止预填(实测 2026-06-02 → 06-04)。

- add_travel_items 的 cost=1 分支用 transport_fee[].start_date/end_date 覆盖 #ksrq/#jsrq
- 缺日期时保留页面带出的值并 log.warning,不静默按出差起止报销
- tests/test_travel_dates.py 两例:有乘车日则覆盖、缺日期不覆盖
- 文档:AGENTS 记下控件名与口径、操作指南 7.2 补一句、方案文档 §25 记探测方法与结论(含可复用的探测套路)

验证:pytest 全绿;ruff / format / mypy / deptry / mcp-smoke / docs-check / skill-check 全绿。
--no-verify 提交并手跑等价检查。
This commit is contained in:
wandering
2026-10-21 13:58:27 +08:00
parent 5903dae864
commit 94c2f4c94e
5 changed files with 119 additions and 0 deletions
@@ -743,3 +743,21 @@ capture 只出现在 camera 段、脚本里不许再出现 `setAttribute`、两
- 单测 4 例:搬票并标记、未知发票整组不动、同卡号歧义报错、工具层参数透传
边界:manual_groups 只改「发票 ↔ 支付」的归属,不改金额;金额本身错了要先回去修抽取(case_patch_extraction)。
## 25. 交通费行按实际乘车日填日期(2026-10-21,用户第 4 条)
问题:交通费行的开始/结束日期由页面按出差起止自动带出,`cost=1` 分支不填日期,于是「6-02 出发、
6-05 才坐车」这类情况报销日期就是错的。要按乘车日就得先知道控件 id,所以做了一次联机探测。
探测方式(可复用):登录 → `browser_new_form("travel")` → `browser_fill("basic")`(会落一张草稿)→
直接经 actor 打开明细标签、点 `#insertDetail`、`select_option("#cost","1")` → `page.evaluate` dump 所有可见
input 的 id/name/value → 截图。探完按守卫删草稿:唯一命中 + 未提交 + 当日制单才动手
(本次 bill_no 202610030261,复查 0 命中)。
探测结果:交通费行日期控件 **`#ksrq`(`expenPwTraveldetail.STARTDATE`)与 `#jsrq`(`OVERDATE`)**,
页面已按出差起止预填(实测 2026-06-02/06-04)。
改法:`add_travel_items` 的 cost=1 分支按 `transport_fee[].start_date/end_date` 覆盖 `#ksrq`/`#jsrq`;
缺日期时**保留页面带出的值并 log.warning**,不静默按出差起止报销。测试两例:有日期则覆盖、缺日期不覆盖。
连带说明:这条一直是「要联机确认选择器 id 再补」的待办,现在补上了;AGENTS 与操作指南都记下了控件名,下次不用再探。