certflow.services.model_spec_parser module

型号→口径/压力 解析器(消减导入黄标,TAPD #1000192 / BLUEPRINT §8.2 第③处缺口)

VBA 时代空白口径靠人工 inputbox 补录(对标 function.vb),PySide6 版当前 normalize_spec 仅解析 product_spec 字符串、normalize_pn 仅从型号后缀/字典 取压力,导致「合同口径空白」「型号内嵌 DN/PN 未被提取」两类行直接黄标。

本解析器从**产品型号**内嵌的显式标识反推口径/压力,作为 DNService.resolve_caliber / PNService.resolve_pn 的**兜底**:

  • 口径:型号内嵌 DN150 / DN100*80 → 口径值(150 / 100*80);

  • 压力:显式 PN16``(PN bar,MPa=PN/10)、英制 ``CLASS1500 / CL1500 (磅级→Lb)、以及型号后缀嵌入的**标准公称压力代号**(如 J61Y-160160 → 16MPa、 EF/PZ-320P320 → 32MPa、BEDDZY-250250 → 25MPa)。仅白名单内标准 代号采信,杜绝流水号误判(如 ...-13 不再误作 1.3MPa)。

设计约束(对齐验收标准): - 不改写 ``product_spec``(合同口径),只供 product_spec_norm / pressure_value; - 无型号源 / 未命中显式标识时**返回空、不伪造**,仍走黄标 + 校正队列; - 纯正则解析、无副作用,便于单测锁定。

class certflow.services.model_spec_parser.ModelSpecParser[源代码]

基类:object

从产品型号提取口径/压力的纯解析器(兜底 DNService/PNService)。

所有方法均为无副作用的静态/类方法,输入型号字符串,输出解析结果; 无法解析时返回空串/空 pn_display,绝不伪造。

classmethod parse_caliber(model)[源代码]

从型号内嵌的 DNxxx 提取口径值。

参数:

model (str | None) -- 产品型号,如 "BQ647Y-25P/DN150" / "DN100*80"

返回:

口径值("150" / "100*80");无内嵌 DN 时返回 ""

返回类型:

str

classmethod parse_pressure(model)[源代码]

从型号内嵌标识反推公称压力。

优先级:显式 PNxx > 英制 CLASSxx > 型号后缀嵌入压力编码。

参数:

model (str | None) -- 产品型号,如 "KHBF-25-PN320" / "CLASS1500-150A"

返回:

{"pn_value", "pn_unit", "pn_display", "source"}; 无法解析时 pn_display""source"unknown"

返回类型:

dict