fix(投资): 全部改为「按表头定位」——目标明细表不再写死列号 + 同名列按数据消歧
背景(用户追问):这个程序是不是只跟列取数据,而不是按表头定位?
核查后:源文件本来就是按表头(FIELD_PAT 正则)定位列,但目标明细表确实是把列号写死的,
且同名字段命中多列时的消歧规则(取“命中词最短”)选错了列。
改动:
1. 格式探测.py:pick_columns 抽出为公共函数(合并区消歧 + 同名列消歧);profile 改为使用它。
- 两级表头:命中落在跨多列合并区时,排除其它字段更深的子表头所占列,只剩唯一一列才采用。
- 同名列:同一字段命中多列时,优先“表头下方真的有数字”的那一列,同分取更靠左的。
2. 匹配与校验.py:read_target 改为按表头定位目标明细表列(母版默认列位仅兜底),
关键列与母版不符 → 弹窗「目标表列位置与预期不符」(警告);非关键列按默认 → 提示。
3. 市州月报解析.py:pick_columns 改为调用公共实现(口径唯一);
新增 解析校验_<月>.tsv 的「列位」列,并在 解析报告 里新增「各源文件识别到的列位」一节。
4. 新增弹窗规则 15(源文件缺关键列)/16(目标表列位与预期不符)/17(目标表个别列按母版默认),共 17 条。
实测修正:
- 武汉物流「自开始建设累计」原先误取 P 列(自开始建设累计新增建筑面积),求和为 0 却没报错;
修复后取 H 列,项目行求和 = 146313.9,与目标表武汉市场州行 H 列完全一致。
- 武汉客运《站场固投(南山、汉口站)》无「自年初累计」列表头 → 新增 1 条警告(与用户 Q5 口径一致)。
回归:变更清单 147 条中仅 6 行变化(武汉物流该字段由空→实值),其余逐字不变;
弹窗 47 项(阻断 0 / 警告 10 / 提示 37);连跑两次 7 个产出文件 SHA256 一致。
文档:弹窗提示规则加「六、取列机制」(说明哪些按表头、哪些按位置);测试报告补第二轮 C11–C17 / P06–P08;工作日结第十节。