package com.yhy.module.core.enums;

import cn.iocoder.yudao.framework.common.exception.ErrorCode;

/**
 * YHY Core 错误码枚举类
 *
 * yhy-core 模块，使用 1-010-000-000 段
 */
public interface ErrorCodeConstants {

    // ========== 工料机类别模块 1-010-001-000 ==========
    ErrorCode RESOURCE_CATEGORY_NOT_EXISTS = new ErrorCode(1_010_001_000, "工料机类别不存在");
    ErrorCode RESOURCE_CATEGORY_CODE_DUPLICATE = new ErrorCode(1_010_001_001, "已经存在代码为【{}】的工料机类别");
    ErrorCode RESOURCE_CATEGORY_HAS_ITEMS = new ErrorCode(1_010_001_002, "该类别下存在工料机项，无法删除");

    // ========== 资源库模块 1-010-002-000 ==========
    ErrorCode RESOURCE_CATALOG_NOT_EXISTS = new ErrorCode(1_010_002_000, "资源库不存在");
    
    // ========== 工料机项模块 1-010-003-000 ==========
    ErrorCode RESOURCE_ITEM_NOT_EXISTS = new ErrorCode(1_010_003_000, "工料机项不存在");

    // ========== 工料机机类树模块 1-010-004-000 ==========
    ErrorCode RESOURCE_CATEGORY_TREE_NOT_EXISTS = new ErrorCode(1_010_004_000, "工料机机类树节点不存在");
    ErrorCode RESOURCE_CATEGORY_TREE_NOT_TYPE = new ErrorCode(1_010_004_001, "该节点不是工程类型节点");
    ErrorCode RESOURCE_CATEGORY_TREE_NOT_SPECIALTY = new ErrorCode(1_010_004_002, "该节点不是工料机专业节点");

    // ========== 定额目录模块 1-010-005-000 ==========
    ErrorCode QUOTA_CATALOG_ITEM_NOT_EXISTS = new ErrorCode(1_010_005_000, "定额目录条目不存在");
    ErrorCode QUOTA_CATALOG_ITEM_HAS_CHILDREN = new ErrorCode(1_010_005_001, "该节点存在子节点，无法删除");
    ErrorCode QUOTA_CATALOG_ITEM_NOT_SPECIALTY = new ErrorCode(1_010_005_002, "该节点不是定额专业节点");
    ErrorCode QUOTA_CATALOG_ITEM_NOT_SAME_LEVEL = new ErrorCode(1_010_005_003, "两个节点不在同一层级，无法交换排序");
    ErrorCode QUOTA_CATALOG_ITEM_ALREADY_BOUND = new ErrorCode(1_010_005_004, "该定额专业已绑定工料机专业，无法重复绑定");
    ErrorCode QUOTA_CATALOG_ITEM_CONTENT_NO_CHILDREN = new ErrorCode(1_010_005_005, "内容节点不允许添加子节点");
    ErrorCode QUOTA_CATALOG_ITEM_CONTENT_NEED_PARENT = new ErrorCode(1_010_005_006, "内容节点必须有父节点");
    ErrorCode QUOTA_CATALOG_ITEM_PARENT_NOT_DIRECTORY = new ErrorCode(1_010_005_007, "父节点必须是目录节点");
    ErrorCode QUOTA_CATALOG_ITEM_TYPE_MISMATCH = new ErrorCode(1_010_005_008, "节点类型不匹配");
    ErrorCode QUOTA_CATALOG_ITEM_PARENT_NOT_EXISTS = new ErrorCode(1_010_005_009, "父节点不存在");
    ErrorCode QUOTA_CATALOG_ITEM_SPECIALTY_NOT_FOUND = new ErrorCode(1_010_005_010, "未找到定额专业节点");

    // ========== 定额子目树模块 1-010-006-000 ==========
    ErrorCode QUOTA_CATALOG_TREE_NOT_EXISTS = new ErrorCode(1_010_006_000, "定额子目树节点不存在");
    ErrorCode QUOTA_CATALOG_TREE_HAS_CHILDREN = new ErrorCode(1_010_006_001, "该节点存在子节点，无法删除");
    ErrorCode QUOTA_CATALOG_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_006_002, "父节点不存在");
    ErrorCode QUOTA_CATALOG_TREE_PARENT_NOT_ALLOW_CHILDREN = new ErrorCode(1_010_006_003, "父节点不允许添加子节点");
    ErrorCode QUOTA_CATALOG_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_006_004, "两个节点不在同一层级");

    // ========== 定额子目模块 1-010-007-000 ==========
    ErrorCode QUOTA_ITEM_NOT_EXISTS = new ErrorCode(1_010_007_000, "定额子目不存在");
    ErrorCode QUOTA_ITEM_HAS_RESOURCES = new ErrorCode(1_010_007_001, "该定额子目存在工料机组成，无法删除");
    ErrorCode QUOTA_CATALOG_ITEM_NOT_CONTENT = new ErrorCode(1_010_007_002, "只有内容节点才能添加定额子目");
    ErrorCode QUOTA_SPECIALTY_NOT_BOUND = new ErrorCode(1_010_007_003, "定额专业尚未绑定工料机专业");
    ErrorCode QUOTA_SPECIALTY_NOT_FOUND = new ErrorCode(1_010_007_004, "未找到定额专业节点");

    // ========== 定额工料机组成模块 1-010-008-000 ==========
    ErrorCode QUOTA_RESOURCE_NOT_EXISTS = new ErrorCode(1_010_008_000, "定额工料机组成不存在");
    ErrorCode QUOTA_RESOURCE_OUT_OF_SCOPE = new ErrorCode(1_010_008_001, "该工料机不在定额专业的数据范围内");
    ErrorCode RESOURCE_CATALOG_ITEM_NOT_EXISTS = new ErrorCode(1_010_007_002, "工料机目录条目不存在");

    // ========== 定额费率项模块 1-010-009-000 ==========
    ErrorCode QUOTA_RATE_ITEM_NOT_EXISTS = new ErrorCode(1_010_009_000, "定额费率项不存在");
    ErrorCode QUOTA_RATE_ITEM_HAS_CHILDREN = new ErrorCode(1_010_009_001, "该费率项存在子节点，无法删除");
    ErrorCode QUOTA_RATE_ITEM_LEVEL_EXCEED = new ErrorCode(1_010_009_002, "费率项层级不能超过3级");
    ErrorCode QUOTA_RATE_ITEM_NOT_SAME_LEVEL = new ErrorCode(1_010_009_003, "只能在同级节点间交换排序");
    ErrorCode QUOTA_RATE_ITEM_NOT_SAME_MODE = new ErrorCode(1_010_009_004, "只能在同一模式下交换排序");
    ErrorCode QUOTA_RATE_ITEM_NOT_VALUE_NODE = new ErrorCode(1_010_009_005, "只有数值节点才能配置取值规则");
    ErrorCode QUOTA_RATE_ITEM_PARENT_NOT_EXISTS = new ErrorCode(1_010_009_006, "父节点不存在");
    ErrorCode QUOTA_RATE_ITEM_PARENT_NOT_SAME_MODE = new ErrorCode(1_010_009_007, "父节点不属于同一模式");
    ErrorCode QUOTA_RATE_ITEM_PARENT_NOT_DIRECTORY = new ErrorCode(1_010_009_008, "父节点必须是目录节点");
    ErrorCode QUOTA_RATE_ITEM_NOT_DIRECTORY_CANNOT_SET_EDITABLE = new ErrorCode(1_010_009_009, "只有目录节点才能设置填写属性");
    ErrorCode QUOTA_RATE_ITEM_CATALOG_NOT_RATE_MODE = new ErrorCode(1_010_009_010, "catalogItemId 必须指向 rate_mode 类型的节点");
    ErrorCode QUOTA_RATE_MODE_PARENT_REQUIRED = new ErrorCode(1_010_009_011, "创建费率模式节点必须指定父节点");
    ErrorCode QUOTA_RATE_MODE_PARENT_NOT_SPECIALTY = new ErrorCode(1_010_009_012, "费率模式节点的父节点必须是定额专业节点");
    
    // 阶梯规则验证错误码
    ErrorCode QUOTA_RATE_TIER_SEQ_DUPLICATE = new ErrorCode(1_010_009_020, "阶梯规则序号 [{}] 重复");
    ErrorCode QUOTA_RATE_TIER_THRESHOLD_INVALID = new ErrorCode(1_010_009_021, "阶梯规则 [{}] 的阈值必须为正数");
    ErrorCode QUOTA_RATE_TIER_COMPARE_TYPE_INVALID = new ErrorCode(1_010_009_022, "阶梯规则 [{}] 的比较类型无效");
    ErrorCode QUOTA_RATE_TIER_FIELD_VALUES_EMPTY = new ErrorCode(1_010_009_023, "阶梯规则 [{}] 的字段值不能为空");
    ErrorCode QUOTA_RATE_TIER_THRESHOLD_NOT_ASCENDING = new ErrorCode(1_010_009_024, "阶梯规则 [{}] 和 [{}] 的阈值必须递增");
    ErrorCode QUOTA_RATE_TIER_COMPARE_TYPE_MIXED = new ErrorCode(1_010_009_025, "阶梯规则 [{}] 和 [{}] 不能混用不同的比较类型（小于等于/小于 与 大于等于/大于）");
    
    // 增量规则验证错误码
    ErrorCode QUOTA_RATE_INCREMENT_SEQ_DUPLICATE = new ErrorCode(1_010_009_030, "增量规则序号 [{}] 重复");
    ErrorCode QUOTA_RATE_INCREMENT_BASE_THRESHOLD_INVALID = new ErrorCode(1_010_009_031, "增量规则 [{}] 的基准阈值必须为正数");
    ErrorCode QUOTA_RATE_INCREMENT_STEP_INVALID = new ErrorCode(1_010_009_032, "增量规则 [{}] 的步长必须为正数");
    ErrorCode QUOTA_RATE_INCREMENT_FIELD_INCREMENTS_EMPTY = new ErrorCode(1_010_009_033, "增量规则 [{}] 的字段增量不能为空");
    ErrorCode QUOTA_RATE_INCREMENT_BASE_THRESHOLD_NOT_ASCENDING = new ErrorCode(1_010_009_034, "增量规则 [{}] 和 [{}] 的基准阈值必须递增");

    // ========== 定额费率字段模块 1-010-010-000 ==========
    ErrorCode QUOTA_RATE_FIELD_NOT_EXISTS = new ErrorCode(1_010_010_000, "定额费率字段不存在");
    ErrorCode QUOTA_RATE_FIELD_BINDING_OUT_OF_RANGE = new ErrorCode(1_010_010_001, "绑定的节点不在当前定额专业范围内");
    ErrorCode QUOTA_RATE_FIELD_NODE_ALREADY_BOUND = new ErrorCode(1_010_010_002, "该节点已被其他虚拟字段绑定");

    // ========== 定额费率字段标签模块 1-010-010-100 ==========
    ErrorCode QUOTA_RATE_FIELD_LABEL_NOT_EXISTS = new ErrorCode(1_010_010_100, "定额费率字段标签不存在");
    ErrorCode QUOTA_RATE_FIELD_LABEL_NAME_DUPLICATE = new ErrorCode(1_010_010_101, "字段标签名称已存在");
    ErrorCode QUOTA_RATE_FIELD_LABEL_IN_USE = new ErrorCode(1_010_010_102, "字段标签正在使用中，无法删除");
    ErrorCode QUOTA_RATE_FIELD_LABEL_NOT_SAME_MODE = new ErrorCode(1_010_010_103, "两个标签不属于同一模式节点");

    // ========== 定额取费项模块 1-010-011-000 ==========
    ErrorCode QUOTA_FEE_ITEM_NOT_EXISTS = new ErrorCode(1_010_011_000, "定额取费项不存在");
    ErrorCode QUOTA_FEE_ITEM_CATALOG_NOT_RATE_MODE = new ErrorCode(1_010_011_001, "catalogItemId 必须指向 rate_mode 类型的节点");
    ErrorCode QUOTA_FEE_ITEM_CUSTOM_CODE_DUPLICATE = new ErrorCode(1_010_011_002, "自定义序号 [{}] 已存在");
    ErrorCode QUOTA_FEE_ITEM_NOT_SAME_CATALOG = new ErrorCode(1_010_011_003, "只能在同一模式下交换排序");
    ErrorCode QUOTA_FEE_CALC_BASE_FORMULA_EMPTY = new ErrorCode(1_010_011_004, "计算基数公式不能为空");
    ErrorCode QUOTA_FEE_CALC_BASE_VARIABLES_EMPTY = new ErrorCode(1_010_011_005, "计算基数变量不能为空");
    ErrorCode QUOTA_FEE_CALC_BASE_INVALID_PRICE_CODE = new ErrorCode(1_010_010_006, "无效的价格代码: {}");
    ErrorCode QUOTA_FEE_CALC_BASE_FORMULA_BRACKET_MISMATCH = new ErrorCode(1_010_010_007, "公式括号不匹配");
    ErrorCode QUOTA_FEE_CALC_BASE_FORMULA_INVALID_CHAR = new ErrorCode(1_010_010_008, "公式包含非法字符: {}");

    // ========== 定额调整设置模块（第五层）1-010-011-000 ==========
    ErrorCode QUOTA_ADJUSTMENT_SETTING_NOT_EXISTS = new ErrorCode(1_010_011_000, "定额调整设置不存在");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_QUOTA_ITEM_NOT_EXISTS = new ErrorCode(1_010_011_001, "定额子目不存在");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_NAME_DUPLICATE = new ErrorCode(1_010_011_002, "调整设置名称重复");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_TYPE_INVALID = new ErrorCode(1_010_011_003, "调整类型无效");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_RULES_INVALID = new ErrorCode(1_010_011_004, "调整规则格式无效");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_HAS_DETAILS = new ErrorCode(1_010_011_005, "调整设置下存在明细，无法删除");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_REFERENCED = new ErrorCode(1_010_011_006, "调整设置被其他明细引用，无法删除");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_NOT_SAME_QUOTA_ITEM = new ErrorCode(1_010_011_007, "只能在同一定额子目下交换排序");

    // ========== 定额调整明细模块（第六层）1-010-012-000 ==========
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_NOT_EXISTS = new ErrorCode(1_010_012_000, "定额调整明细不存在");
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_SETTING_NOT_EXISTS = new ErrorCode(1_010_012_001, "调整设置不存在");
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_CODE_NOT_EXISTS = new ErrorCode(1_010_012_002, "引用的调整设置不存在");
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_CODE_NOT_SAME_SPECIALTY = new ErrorCode(1_010_012_003, "引用的调整设置不在同一定额专业");
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_CODE_CIRCULAR = new ErrorCode(1_010_012_004, "调整明细引用形成循环");
    ErrorCode QUOTA_ADJUSTMENT_DETAIL_NOT_SAME_SETTING = new ErrorCode(1_010_012_005, "只能在同一调整设置下交换排序");

    // ========== 清单配置目录树模块 1-010-013-000 ==========
    ErrorCode BOQ_CATALOG_ITEM_NOT_EXISTS = new ErrorCode(1_010_013_000, "清单配置目录树节点不存在");
    ErrorCode BOQ_CATALOG_ITEM_CODE_DUPLICATE = new ErrorCode(1_010_013_001, "编码 [{}] 已存在");
    ErrorCode BOQ_CATALOG_ITEM_INVALID_NODE_TYPE = new ErrorCode(1_010_013_002, "无效的节点类型");
    ErrorCode BOQ_CATALOG_ITEM_SPECIALTY_LOCKED = new ErrorCode(1_010_013_003, "该清单专业已绑定，不可修改或删除");
    ErrorCode BOQ_CATALOG_ITEM_HAS_CHILDREN = new ErrorCode(1_010_013_004, "该节点存在子节点，无法删除");
    ErrorCode BOQ_CATALOG_ITEM_NOT_SPECIALTY = new ErrorCode(1_010_013_005, "该节点不是清单专业节点");
    ErrorCode BOQ_CATALOG_ITEM_ALREADY_BOUND = new ErrorCode(1_010_013_006, "该清单专业已绑定定额基价");
    ErrorCode BOQ_CATALOG_ITEM_QUOTA_NOT_FIRST_LEVEL = new ErrorCode(1_010_013_007, "只能绑定定额基价第一层节点");
    ErrorCode BOQ_CATALOG_ITEM_PARENT_NOT_EXISTS = new ErrorCode(1_010_013_008, "父节点不存在");
    ErrorCode BOQ_CATALOG_ITEM_NOT_SAME_LEVEL = new ErrorCode(1_010_013_009, "只能在同级节点间交换排序");
    ErrorCode BOQ_CATALOG_ITEM_NOT_BOUND_QUOTA = new ErrorCode(1_010_013_010, "该清单专业尚未绑定定额基价");

    // ========== 清单项树模块 1-010-014-000 ==========
    ErrorCode BOQ_ITEM_TREE_NOT_EXISTS = new ErrorCode(1_010_014_000, "清单项树节点不存在");
    ErrorCode BOQ_ITEM_TREE_CODE_DUPLICATE = new ErrorCode(1_010_014_001, "编码 [{}] 已存在");
    ErrorCode BOQ_ITEM_TREE_HAS_CHILDREN = new ErrorCode(1_010_014_002, "该节点存在子节点，无法删除");
    ErrorCode BOQ_ITEM_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_014_003, "父节点不存在");
    ErrorCode BOQ_ITEM_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_014_004, "只能在同级节点间交换排序");

    // ========== 清单子项模块 1-010-015-000 ==========
    ErrorCode BOQ_SUB_ITEM_NOT_EXISTS = new ErrorCode(1_010_015_000, "清单子项不存在");
    ErrorCode BOQ_SUB_ITEM_CODE_DUPLICATE = new ErrorCode(1_010_015_001, "编码 [{}] 已存在");
    ErrorCode BOQ_SUB_ITEM_NOT_SAME_TREE = new ErrorCode(1_010_015_002, "只能在同一清单项树下交换排序");

    // ========== 清单明细树模块 1-010-016-000 ==========
    ErrorCode BOQ_DETAIL_TREE_NOT_EXISTS = new ErrorCode(1_010_016_000, "清单明细树节点不存在");
    ErrorCode BOQ_DETAIL_TREE_CODE_DUPLICATE = new ErrorCode(1_010_016_001, "编码 [{}] 已存在");
    ErrorCode BOQ_DETAIL_TREE_HAS_CHILDREN = new ErrorCode(1_010_016_002, "该节点存在子节点，无法删除");
    ErrorCode BOQ_DETAIL_TREE_PARENT_NOT_DIRECTORY = new ErrorCode(1_010_016_003, "父节点必须是目录类型");
    ErrorCode BOQ_DETAIL_TREE_INVALID_NODE_TYPE = new ErrorCode(1_010_016_004, "无效的节点类型");
    ErrorCode BOQ_DETAIL_TREE_CONTENT_NEED_QUOTA = new ErrorCode(1_010_016_005, "内容节点必须关联定额");
    ErrorCode BOQ_DETAIL_TREE_DIRECTORY_NO_QUOTA = new ErrorCode(1_010_016_006, "目录节点不能关联定额");
    ErrorCode BOQ_DETAIL_TREE_QUOTA_NOT_IN_RANGE = new ErrorCode(1_010_016_007, "该定额不在绑定的定额专业范围内");
    ErrorCode BOQ_DETAIL_TREE_QUOTA_NOT_CONTENT_TYPE = new ErrorCode(1_010_016_008, "只能关联定额基价第三层的内容节点");
    ErrorCode BOQ_DETAIL_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_016_009, "只能在同级节点间交换排序");

    // ========== 信息价树结构模块 1-010-017-000 ==========
    ErrorCode INFO_PRICE_TREE_NOT_EXISTS = new ErrorCode(1_010_017_000, "信息价树节点不存在");
    ErrorCode INFO_PRICE_TREE_CODE_DUPLICATE = new ErrorCode(1_010_017_001, "编码 [{}] 已存在");
    ErrorCode INFO_PRICE_TREE_HAS_CHILDREN = new ErrorCode(1_010_017_002, "该节点存在子节点，无法删除");
    ErrorCode INFO_PRICE_TREE_HAS_BOOKS = new ErrorCode(1_010_017_003, "该节点存在信息价册，无法删除");
    ErrorCode INFO_PRICE_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_017_004, "父节点不存在");
    ErrorCode INFO_PRICE_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_017_005, "只能在同级节点间交换排序");
    ErrorCode INFO_PRICE_TREE_NOT_SAME_ENUM_TYPE = new ErrorCode(1_010_017_006, "只能在同一枚举类型下交换排序");
    ErrorCode INFO_PRICE_TREE_INVALID_ENUM_TYPE = new ErrorCode(1_010_017_007, "无效的枚举类型");

    // ========== 信息价册模块 1-010-018-000 ==========
    ErrorCode INFO_PRICE_BOOK_NOT_EXISTS = new ErrorCode(1_010_018_000, "信息价册不存在");
    ErrorCode INFO_PRICE_BOOK_TIME_OVERLAP = new ErrorCode(1_010_018_001, "时间段与已有数据重叠");
    ErrorCode INFO_PRICE_BOOK_TIME_INVALID = new ErrorCode(1_010_018_002, "结束时间必须大于等于开始时间");
    ErrorCode INFO_PRICE_BOOK_INVALID_PUBLISH_STATUS = new ErrorCode(1_010_018_003, "无效的发布状态");
    ErrorCode INFO_PRICE_BOOK_HAS_ITEMS = new ErrorCode(1_010_018_004, "该信息价册存在条目，无法删除");

    // ========== 信息价分类树模块 1-010-019-000 ==========
    ErrorCode INFO_PRICE_CATEGORY_TREE_NOT_EXISTS = new ErrorCode(1_010_019_000, "信息价分类树节点不存在");
    ErrorCode INFO_PRICE_CATEGORY_TREE_CODE_DUPLICATE = new ErrorCode(1_010_019_001, "编码 [{}] 已存在");
    ErrorCode INFO_PRICE_CATEGORY_TREE_HAS_CHILDREN = new ErrorCode(1_010_019_002, "该节点存在子节点，无法删除");
    ErrorCode INFO_PRICE_CATEGORY_TREE_HAS_RESOURCES = new ErrorCode(1_010_019_003, "该节点存在工料机信息，无法删除");
    ErrorCode INFO_PRICE_CATEGORY_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_019_004, "父节点不存在");
    ErrorCode INFO_PRICE_CATEGORY_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_019_005, "只能在同级节点间交换排序");
    ErrorCode INFO_PRICE_CATEGORY_TREE_CONTENT_NO_CHILDREN = new ErrorCode(1_010_019_006, "内容节点不允许添加子节点");
    ErrorCode INFO_PRICE_CATEGORY_TREE_INVALID_NODE_TYPE = new ErrorCode(1_010_019_007, "无效的节点类型");

    // ========== 信息价工料机信息模块 1-010-020-000 ==========
    ErrorCode INFO_PRICE_RESOURCE_NOT_EXISTS = new ErrorCode(1_010_020_000, "信息价工料机信息不存在");
    ErrorCode INFO_PRICE_RESOURCE_CODE_DUPLICATE = new ErrorCode(1_010_020_001, "编码 [{}] 已存在");
    ErrorCode INFO_PRICE_RESOURCE_ONLY_UNDER_CONTENT_NODE = new ErrorCode(1_010_020_002, "只有内容节点才能添加工料机信息");
    ErrorCode INFO_PRICE_RESOURCE_HAS_PRICES = new ErrorCode(1_010_020_003, "该工料机信息存在价格历史，无法删除");
    ErrorCode INFO_PRICE_RESOURCE_NOT_SAME_CATEGORY = new ErrorCode(1_010_020_004, "只能在同一分类节点下交换排序");

    // ========== 信息价工料机价格历史模块 1-010-021-000 ==========
    ErrorCode INFO_PRICE_RESOURCE_PRICE_NOT_EXISTS = new ErrorCode(1_010_021_000, "信息价工料机价格历史不存在");
    ErrorCode INFO_PRICE_RESOURCE_PRICE_TIME_OVERLAP = new ErrorCode(1_010_021_001, "时间段与已有数据重叠");
    ErrorCode INFO_PRICE_RESOURCE_PRICE_TIME_INVALID = new ErrorCode(1_010_021_002, "结束时间必须大于等于开始时间");
    ErrorCode INFO_PRICE_RESOURCE_PRICE_TIME_NOT_CONTINUOUS = new ErrorCode(1_010_021_003, "时间段必须与前一条记录连续，期望开始时间为 [{}]");

    // ========== 复合工料机模块 1-010-021-000 ==========
    ErrorCode RESOURCE_MERGED_NOT_EXISTS = new ErrorCode(1_010_021_000, "复合工料机不存在");
    ErrorCode RESOURCE_MERGED_SOURCE_NOT_EXISTS = new ErrorCode(1_010_021_001, "复合工料机引用的数据源不存在");
    ErrorCode RESOURCE_MERGED_CALC_BASE_INVALID = new ErrorCode(1_010_021_002, "计算基数配置无效");
    ErrorCode RESOURCE_MERGED_CALC_BASE_CATEGORY_NOT_FOUND = new ErrorCode(1_010_021_003, "计算基数引用的类别在同组中未找到");
    ErrorCode RESOURCE_MERGED_FORMULA_PARSE_ERROR = new ErrorCode(1_010_021_004, "公式解析失败");
    ErrorCode RESOURCE_MERGED_SELF_REFERENCE = new ErrorCode(1_010_021_005, "不允许自己关联自己");

}
