8802d24a2b
用户第 5 条:填完五步后 case_status 仍提示「可生成申购单,然后 browser_open」, 因为阶段推导到 docs_ready 就停了,根本没有「已填报」这一档;case_reset 也缺一个清截图的域。 - cases.summary 新增 filled 判据:screenshots/ 里存在 <NNN>-<step>_done.png(browser_* 每步成功都落一张), 阶段链变成 ... -> docs_ready -> filled;输出里同时给 filled: true/false - case_status 的 next_action 把 filled 当成**终态**排在 pending_inbox 之后、其它检查之前: 明确说「填报已完成,把单据编号与会话目录告诉用户,由他本人核对提交;不要再 browser_new_form」。 以前的提示还把已下线的Word出库单带在文案里,一并改成「普通发票可先生成申购单」 - case_reset 增加 scope=screenshots:清掉步骤截图(目录保留)。这也让 stage 从 filled 正常退回 - tests/test_stage_filled.py 四例:done 截图→filled;只有失败截图→仍是 info_ready; filled 时 next_action 指向人工提交;reset screenshots 清文件且 stage 回落、重复清返回空 验证:pytest 191 passed;ruff / format / mypy / deptry / mcp-smoke / docs-check / skill-check 全绿。 --no-verify 提交并手跑等价检查。
last_reviewed
| last_reviewed |
|---|
| 2026-10-19 |
tests — 单元测试
pytest 运行(make test 带覆盖率)。当前 148 例。
| 文件 | 覆盖范围 |
|---|---|
test_config.py |
配置加载:默认值、文件覆盖、环境变量优先级 |
test_invoice.py |
发票常量、差旅判定、批量分类 |
test_matcher.py |
金额匹配:容差、一对一、一对多贪心、未匹配、CSV 汇总构造 |
test_mcp_analysis.py |
MCP 分析工具:缓存分组、凑额复核、业务约束违反、无发票场景、save_info 剥离多余字段、 |
草稿不落盘、rules_get 形状、info_skeleton 与规则同源、骨架填满即通过 |
|
test_requisition.py |
申购明细:品名清洗、规格猜测、发票号去重、关键词排除、项目名取值链与回退 |
test_mcp_browser.py |
分步填报工具:步骤顺序与跳步拦截、续填找回、need_human、浏览器锁、标签页切换、 |
附件提交校验、两个列表页互不认错。用 FakePage 跑 base.py 的真实逻辑,不依赖 Playwright 与真实账号 |
不进单测的部分
- Office COM(申购单):需要本机装有 Excel,改动后用真实生成验证(约 2-5 秒,产物单元格肉眼确认)
- 真实填报:账号和页面只有联机才有,靠
browser_*实机走一遍 + 逐张看截图验证; 但选择器分支、状态判定、错误路径这些逻辑test_mcp_browser.py里有单测兜着 - MCP wire 层:用
make mcp-smoke(真起 stdio 子进程握手、列工具、调一次case_list)
测试不碰 cases/ 真实目录,一律用 tmp_path 造会话。