certflow.utils.status_inference module

状态推断模块

从自由文本 execution_status 中推断标准化的 production_status, 并支持提取日期信息。

规则设计原则: - 优先级从高到低:发货 > 完成 > 生产中 > 待生产 - 日期格式自动识别:2024/03/15已发、2024-03-20发完 等 - 默认返回"待生产"

配置驱动: - 状态枚举、推断规则、查询关键词均从 config.yaml 的 production_status 节点加载 - 调用 init_from_config() 后,所有硬编码回退值被配置值覆盖

class certflow.utils.status_inference.StatusInference[源代码]

基类:object

从自由文本执行情况中推断生产状态

execution_status 是历史自由文本字段,内容格式不统一:
  • "2024/03/15已发"

  • "已发货"

  • "2024-03-20发完"

  • "生产中"

  • "完成"

  • ""(空值)

通过正则匹配将自由文本映射到标准化的 production_status。

配置驱动:调用 init_from_config() 从 config.yaml 加载推断规则和查询关键词。

示例

>>> StatusInference.infer("2024/03/15已发")
'已发货'
>>> StatusInference.infer("生产中")
'生产中'
>>> StatusInference.infer(None)
'待生产'
>>> StatusInference.extract_date("2024/03/15已发")
'2024-03-15'
STATUS_RULES: list[tuple[str, str]] = [('(部分发|分批发|已发部分)', '部分发货'), ('(已发|发完|发货|发运|已交付|已发出)', '已发货'), ('\\d{4}[/-]\\d{1,2}[/-]\\d{1,2}\\s*(已发|发货|发运)', '已发货'), ('(完成|完工|已完|制作完成)', '已完成'), ('(生产中|加工中|制作中)', '生产中'), ('(待生产|未开始|未生产|未加工)', '待生产')]
QUERY_KEYWORDS: dict[str, str] = {'已发货': '已发', '已完成': '完成', '生产中': '生产', '部分发货': '部分'}
classmethod init_from_config(config_path=None)[源代码]

从配置文件初始化状态推断模块

在应用启动时调用一次,从 config.yaml 的 production_status 节点加载: - 状态枚举值 (values) - 默认状态 (default) - 推断规则 (inference_rules) - 查询关键词 (query_keywords)

优先使用项目 ConfigLoader(支持 !include 语法), 回退到标准 yaml.safe_load(仅当配置不含自定义标签时)。

参数:

config_path (str | None) -- 配置文件路径,为 None 时自动查找

返回类型:

None

classmethod infer(execution_status)[源代码]

从执行情况推断生产状态

参数:

execution_status (str | None) -- 执行情况的原始文本,如 "2024/03/15已发"

返回:

推断的状态,如 "已发货",无匹配时返回默认状态

返回类型:

Literal['待生产', '生产中', '已完成', '已发货', '部分发货']

classmethod get_query_keyword(status)[源代码]

获取状态对应的查询关键词(用于模糊匹配 execution_status)

参数:

status (str) -- 标准化状态值,如 "已发货"

返回:

查询关键词,如 "已发",未配置时返回原状态值

返回类型:

str

classmethod load_rules_from_config(config)[源代码]

从配置字典加载规则(向后兼容旧接口)

参数:

config (dict[str, Any]) -- 配置字典,支持两种格式: - 旧格式:{"status_rules": [(pattern, status), ...]} - 新格式:{"inference_rules": [{"patterns": [...], "set_to": "..."}, ...]}

返回类型:

None

示例

>>> config = {
...     "status_rules": [
...         ("已发|发完", "已发货"),
...         ("完成", "已完成"),
...     ]
... }
>>> StatusInference.load_rules_from_config(config)
classmethod extract_date(execution_status)[源代码]

从执行情况中提取日期(如有)

支持格式: - 2024/03/15 - 2024-03-15 - 2024年03月15日 - 24/03/15(两位数年份)

参数:

execution_status (str | None) -- 原始文本

返回:

提取的日期(YYYY-MM-DD格式)或 None

返回类型:

str | None