Skip to content

Latest commit

 

History

History
168 lines (111 loc) · 7.24 KB

File metadata and controls

168 lines (111 loc) · 7.24 KB

匹配与差异计算规则

设计原则

BOQ Diff 的匹配规则遵循四个原则:

  1. 确定性:输入、映射和参数相同时,结果相同。
  2. 可解释:每个配对都记录匹配类型、分数和理由。
  3. 保守性:歧义候选进入待确认,不为了提高匹配率而强行配对。
  4. 身份与变化分离:名称、项目特征、单位和编码用于识别项目;工程量与价格主要用于比较变化。

一条基准项最多匹配一条对比项,反之亦然。已在前一阶段确定的配对不会在后一阶段被重复使用。

原始值、规范值和数值

界面和报告保留原始显示值,匹配使用派生的规范值。文本规范化至少包含:

  • Unicode NFKC;
  • 全角空格转换为普通空格;
  • 去除首尾空格,合并连续空白;
  • 英文字母转为小写;
  • 常见中文标点使用统一形式;
  • m2 等单位形成可比较值;
  • 保留可能改变含义的数字、规格和型号。

项目编码按文本处理,优先读取 Excel 单元格的显示文本,以尽量保留 001234 之类的前导零。规范化不会把编码强制转换成数字。

数值解析支持 Excel 数字、千分位逗号、前后空格、全角空格、人民币符号、负号和括号负数。公式单元格只在文件中存在可安全读取的缓存结果时使用该结果;应用不重新计算公式,也不伪造缺失值。

不参与匹配的行

以下行默认不作为清单项目参与匹配:

  • 完全空白行;
  • 明显章节标题行;
  • 合计、小计或总计行;
  • 只有名称,但没有编码、单位、工程量和价格的说明行。

排除行必须保留来源文件、工作表、原始行号和排除原因,并导出到“未参与行”。分类规则应偏保守;无法明确判断时,允许使用者回到字段预览核对。

分阶段匹配

第一阶段:唯一编码精确匹配

同时满足以下条件时直接配对:

  • 两边项目编码均非空;
  • 规范化编码完全一致;
  • 该编码在基准版和对比版中各出现一次。

匹配理由记录为“项目编码唯一且一致”。

第二阶段:重复编码消歧

当同一规范化编码在任一侧出现多次时,不按行号或出现顺序直接配对。算法在相同编码组内比较:

  • 项目名称;
  • 项目特征;
  • 单位。

单位一致和项目特征相似的组合优先。配对使用固定排序与确定性选择策略;同分时按稳定的来源顺序打破计算顺序,但不会仅因行号接近而提高身份相似度。理由记录为“重复编码消歧”并附相似度。

如果多个组合非常接近,项目进入待确认。

第三阶段:精确特征匹配

对仍未配对的项目,当项目名称、项目特征和单位的规范值完全一致时,可视为明确匹配。这一阶段覆盖缺失编码以及编码发生变化的情况。

若两侧非空编码不同,差异中必须突出“项目编码变化”,不能因为项目已经配对而隐藏编码差异。

第四阶段:模糊候选匹配

只处理前三阶段后仍未匹配的清单项目。为避免对所有剩余行进行全量两两比较,先利用单位、关键词、规格数字或倒排索引缩小候选集。每条基准项最多进入约 50 个候选的相似度计算。

默认加权信号为:

信号 权重
项目名称 30%
项目特征 45%
单位 20%
编码局部信息 5%

字符串相似度算法必须可测试且不调用 AI。默认判定区间为:

  • 分数大于或等于 0.88:在没有近似并列候选时可自动匹配;
  • 分数大于或等于 0.72 且小于 0.88:进入待确认;
  • 分数低于 0.72:不自动配对,剩余两侧分别成为删除和新增候选。

若第一候选和第二候选分数非常接近,即使第一候选达到高可信阈值,也进入待确认。实现使用的阈值、候选限制和歧义判定参数应随报告导出,便于复核和版本追踪。

待确认操作

每条待确认基准项最多展示三个候选,并逐项显示编码、名称、项目特征、单位、匹配分数和理由。复核人员可以:

  • 确认某个候选为匹配项;
  • 判定基准项已删除;
  • 跳过,继续保留待确认;
  • 撤销本次人工决定。

人工确认会改变最终配对和金额统计,因此导出报告必须标明是否经过人工确认。未处理的待确认项不计入“已确认净金额影响”。

字段差异

匹配后比较以下字段:

  • 项目编码;
  • 项目名称;
  • 项目特征;
  • 单位;
  • 工程量;
  • 综合单价;
  • 合价。

默认数值容差为:

字段 容差
工程量 0.000001
综合单价 0.01 元
合价 0.01 元

差值绝对值不超过容差时,该数值字段视为未变化。容差可以在高级设置中修改,并应写入“比较参数”。文本差异使用规范值判断,但详情与报告展示原始值。

每个变化字段显示基准值、对比值、绝对变化和百分比变化。百分比通常为 (对比值 - 基准值) / 基准值。当基准值为零或必要数值缺失时,不生成 InfinityNaN 或误导性百分比,而显示“基准为 0”或“无法计算”。

有效合价与来源

有效合价按以下顺序确定:

  1. 源文件合价可以安全解析时,使用原合价,来源标记为 original
  2. 原合价为空,但工程量和综合单价都有效时,使用二者乘积,来源标记为 calculated
  3. 缺少必要数值时,不生成合价,来源标记为 missing

计算合价不能伪装成源文件原值。公式无安全缓存结果时同样不能伪造数值。

金额影响

状态 金额影响
已匹配项目 对比版有效合价减基准版有效合价
新增项目 对比版有效合价
删除项目 0 减基准版有效合价
待确认项目 不计入已确认净影响,单独汇总待确认金额

任一侧缺少计算所需的有效合价时,该项目金额影响显示“无法计算”,不能按零处理。最终净影响只汇总已经确定且金额可计算的项目。

状态与匹配信息

结果状态包括 addedremovedchangedunchangedpending。匹配结果同时保留:

  • 基准版和对比版来源行;
  • 匹配阶段或类型;
  • 置信度;
  • 人类可读的匹配理由;
  • 人工确认状态;
  • 字段变化;
  • 金额影响和合价来源。

已知限制

  • 相似度衡量文本接近程度,不理解合同、工法或计价规则。
  • 规范化不能解决所有编码体系和单位语义差异。
  • 标题、合计和章节识别依赖可测试的机械规则,特殊模板仍可能需要人工映射和核对。
  • 公式不会在浏览器内重新计算,缺少缓存结果时可能无法得到金额。
  • 结果不能判断漏项、组价合理性、市场价格或标准合规性。

改变权重、阈值、规范化或金额规则属于用户可观察行为,应更新测试、本文档和变更日志。