docs\投资\工具\匹配与校验.py(新增,**只读**)| 能力 | 实现 |
|---|---|
| 读目标明细表 | 客运 输出\X月客运站投资明细表.xlsx 的 明细 表;物流 输出\X月物流站场投资明细.xls 的 分项目投资完成情况 表。自动跳过合计/分类行,只留项目行 |
| 读投资系统查询结果 | 输入\模板_查询结果(投资系统-客运+物流 YYYY.M).xls;按文件名或「时期」列识别年月,自动区分**本期**(权威对照)与**上月**(校验基数) |
| 名称匹配 | ① 精确匹配:统一全角/半角括号、去空白后相等 → 更新 ② 疑似同一项目:再去掉括号字符与结尾「项目」二字后相等,或相似度 ≥0.90 → 不自动合并、不重复新增,列入人工确认 ③ 相似 0.80–0.90:仍按新增,但给出「请确认是否同一项目」提示 |
| 三方数值比对 | 市州月报 ⇄ 投资系统(本期):自开始建设累计 / 自年初累计 / 本月完成,容差 0.05 |
| 月度校验 | 本月自年初累计 = 上月自年初累计 + 本月完成(上月值取**上月**那份投资系统文件的 G 列,按用户口径 a) |
| 输出 | 变更清单_<YYYY-MM>.tsv(动作/目标行号/6 列新值)+ 匹配校验报告_<YYYY-MM>.md |
Python 3.14 + _pylibs(xlrd/openpyxl);数据:2026 年 7 月;全程只读,不写任何目标表。
| 编号 | 用例 | 预期 | 实际 | 结论 |
|---|---|---|---|---|
| M01 | 读两张目标明细表并识别项目行 | 只识别项目行,排除合计/分类行 | 客运 49 行、物流 99 行 | ✅ 通过 |
| M02 | 与市州月报解析结果(151 行)按名称匹配 | 精确匹配 + 待定 + 新增 三类互斥且总数守恒 | 客运 45+0+3=48 ✓(另目标表独有 4);物流 94+3+6=103 ✓(另目标表独有 5) | ✅ 通过 |
| M03 | 名称写法不同不得重复新增 | 宽松等价/≥0.90 相似 → 归入「疑似同一项目」 | 物流 3 个命中:鄂湘赣商贸物流中心一期⇄(一期)、荆门北站顺洋物流基地⇄…基地项目、荆门智慧冷链物流园⇄…园项目;均**未**进入新增 |
✅ 通过 |
| M04 | 相似但差异较大的不得自动合并,要提示 | 0.80–0.90 给出人工确认提示 | 客运 郑万高铁南漳综合客运枢纽 ⇄ 郑万高铁巴东综合客运枢纽 0.83(实为**不同项目**:南漳属襄阳、巴东属恩施)→ 按新增处理并提示;物流 崇阳县综合物流园及配套设施建设项目 ⇄ 崇阳县国家级综合物流枢纽… 0.82 → 提示 |
✅ 通过 |
| M05 | 三方数值比对(市州月报 ⇄ 投资系统本期) | 逐项目比对三个字段 | 客运 0 处不一致;物流 2 处:九州通沃田国际供应链中心项目 自年初累计 8000 vs 4200(差 −3800,**真实差异,需业务确认**)、神农架物流园 自开始建设累计 7535.45 vs 7535.5(差 0.05,舍入) |
✅ 通过 |
| M06 | 投资系统里查不到的项目不得计为差错 | 单列一节,不计入差异 | 客运 9 个、物流 15 个(如 黄石新港国胜智慧公路港、武汉万吨·华中冷链港…),单独列出 | ✅ 通过 |
| M07 | 月度校验:缺上月文件时的行为 | 按用户口径 (a) 提示「需每月放一份」,**不阻断**、不误报 | 本期只有 2026.7 的查询结果 → 报告写明「月度校验:跳过(未找到上月投资系统数据表)」 | ✅ 通过 |
| M08 | 变更清单可直接驱动写入侧 | 每条含 品类/动作/目标行号/项目名称/6 列新值 | 变更清单_2026-07.tsv 共 148 条(更新 139 + 新增 9),列名与目标表列一一对应 |
✅ 通过 |
| M09 | 只读性 | 源文件与目标表均不被修改 | 目标表/源文件哈希未变 | ✅ 通过 |
| # | 现象 | 判定 |
|---|---|---|
| 1 | 九州通沃田国际供应链中心项目 自年初累计:市州月报 8000 / 投资系统 4200 |
真实数值不一致,差 3800 → 按需求「存在数据不一致的弹窗提示」处理 |
| 2 | 3 处名称写法不同(物流) | 疑似同一项目 → 程序**不合并、不重复新增**,弹窗提示人工确认 |
| 3 | 客运 郑万高铁南漳 / 郑万高铁巴东 相似度 0.83 |
实为**两个不同项目**,说明匹配阈值不能一味调低 |
| 4 | 9 个将新增的项目(客运 3 + 物流 6) | 含黄石隐藏行项目 阳新县焦山物流仓储中心(证明隐藏行必须取) |
| 5 | 缺「上月投资系统数据表」 | 按用户口径 (a):每月需再放一份**上月**的查询结果;缺失时校验跳过并提示 |
变更清单_2026-07.tsv + 校验报告 + _bak_ 备份策略 + 输出目录 输出\2026年7月\。