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_ITEM_HAS_MARKET_MATERIALS = new ErrorCode(1_010_007_004, "该定额基价存在市场主材设备，请先删除市场主材后再删除定额");
    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, "工料机目录条目不存在");
    ErrorCode QUOTA_RESOURCE_PERCENT_UNIT_DOSAGE_READONLY = new ErrorCode(1_010_008_002, "单位为%的工料机不允许修改定额消耗量，因为比例需要保持不变");

    // ========== 定额市场主材设备模块 1-010-009-000 ==========
    ErrorCode QUOTA_MARKET_MATERIAL_NOT_EXISTS = new ErrorCode(1_010_009_000, "定额市场主材设备不存在");

    // ========== 定额费率项模块 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_TIER_PER_INCREMENT_ONLY_ONE = new ErrorCode(1_010_009_026, "每增加类型只允许配置一条规则");
    
    // 增量规则验证错误码
    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, "公式包含非法字符: {}");
    ErrorCode QUOTA_FEE_ITEM_RATE_ITEM_NOT_DIRECTORY = new ErrorCode(1_010_011_009, "取费项只能关联目录类型的费率项");
    ErrorCode QUOTA_FEE_ITEM_SYSTEM_ROW_CANNOT_DELETE = new ErrorCode(1_010_011_010, "系统行不可删除");
    ErrorCode QUOTA_FEE_ITEM_SYSTEM_ROW_CANNOT_MODIFY_CODE = new ErrorCode(1_010_011_011, "系统行的代号不可修改");
    ErrorCode QUOTA_FEE_ITEM_SYSTEM_ROW_CANNOT_SWAP = new ErrorCode(1_010_011_012, "系统行不可参与排序交换");
    ErrorCode QUOTA_FEE_ITEM_CODE_DUPLICATE = new ErrorCode(1_010_011_013, "代号 [{}] 已存在");


    // ========== 定额调整设置模块（第五层）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, "只能在同一定额基价下交换排序");
    ErrorCode QUOTA_ADJUSTMENT_SETTING_NOT_MATCH = new ErrorCode(1_010_011_008, "调整设置不属于该定额基价");
    ErrorCode QUOTA_ADJUSTMENT_INPUT_OUT_OF_RANGE = new ErrorCode(1_010_011_009, "类别 {0} 的输入值必须在 {1} 到 {2} 之间，当前值：{3}");

    // ========== 定额调整明细模块（第六层）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, "该清单专业尚未绑定定额基价");
    ErrorCode BOQ_CATALOG_ITEM_ROOT_EXISTS = new ErrorCode(1_010_013_011, "根节点已存在，只允许创建一个根节点");
    ErrorCode BOQ_CATALOG_ITEM_QUOTA_NOT_SPECIALTY = new ErrorCode(1_010_013_012, "只能绑定定额专业节点（specialty类型），不能绑定地区节点（region类型）");

    // ========== 清单项树模块 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_GUIDE_TREE_NOT_EXISTS = new ErrorCode(1_010_016_000, "清单指引树节点不存在");
    ErrorCode BOQ_GUIDE_TREE_CODE_DUPLICATE = new ErrorCode(1_010_016_001, "编码 [{}] 已存在");
    ErrorCode BOQ_GUIDE_TREE_HAS_CHILDREN = new ErrorCode(1_010_016_002, "该节点存在子节点，无法删除");
    ErrorCode BOQ_GUIDE_TREE_PARENT_NOT_DIRECTORY = new ErrorCode(1_010_016_003, "父节点必须是目录类型");
    ErrorCode BOQ_GUIDE_TREE_INVALID_NODE_TYPE = new ErrorCode(1_010_016_004, "无效的节点类型，只能是directory或quota");
    ErrorCode BOQ_GUIDE_TREE_QUOTA_NEED_QUOTA = new ErrorCode(1_010_016_005, "定额节点必须关联定额");
    ErrorCode BOQ_GUIDE_TREE_DIRECTORY_NO_QUOTA = new ErrorCode(1_010_016_006, "目录节点不能关联定额");
    ErrorCode BOQ_GUIDE_TREE_QUOTA_NOT_IN_RANGE = new ErrorCode(1_010_016_007, "该定额不在绑定的定额专业范围内");
    ErrorCode BOQ_GUIDE_TREE_QUOTA_NOT_CONTENT_TYPE = new ErrorCode(1_010_016_008, "只能关联定额基价第三层的内容节点");
    ErrorCode BOQ_GUIDE_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_016_009, "只能在同级节点间交换排序");
    ErrorCode BOQ_GUIDE_TREE_QUOTA_NEED_PARENT = new ErrorCode(1_010_016_010, "定额节点必须在目录下创建，不能作为根节点");

    // ========== 信息价树结构模块 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, "不允许自己关联自己");
    ErrorCode RESOURCE_MERGED_PERCENT_UNIT_NOT_ALLOWED = new ErrorCode(1_010_021_006, "单位为 % 的工料机不能成为复合工料机");
    ErrorCode RESOURCE_MERGED_CHILD_NOT_EDITABLE = new ErrorCode(1_010_021_007, "复合工料机的子工料机不允许编辑");

    // ========== 项目界面配置树模块 1-010-022-000 ==========
    ErrorCode CONFIG_PROJECT_TREE_NOT_EXISTS = new ErrorCode(1_010_022_000, "项目界面配置树节点不存在");
    ErrorCode CONFIG_PROJECT_TREE_CODE_EXISTS = new ErrorCode(1_010_022_001, "编码已存在");
    ErrorCode CONFIG_PROJECT_TREE_HAS_CHILDREN = new ErrorCode(1_010_022_002, "该节点存在子节点，无法删除");
    ErrorCode CONFIG_PROJECT_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_022_003, "只能在同级节点间交换排序");
    ErrorCode CONFIG_PROJECT_TREE_NODE_TYPE_CANNOT_CHANGE = new ErrorCode(1_010_022_004, "不允许修改节点类型");
    ErrorCode CONFIG_PROJECT_TREE_ROOT_PARENT_MUST_NULL = new ErrorCode(1_010_022_005, "根节点的父节点必须为空");
    ErrorCode CONFIG_PROJECT_TREE_ROOT_ONLY_ONE = new ErrorCode(1_010_022_006, "只能有一个根节点");
    ErrorCode CONFIG_PROJECT_TREE_PROVINCE_PARENT_REQUIRED = new ErrorCode(1_010_022_007, "省市节点必须有父节点");
    ErrorCode CONFIG_PROJECT_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_022_008, "父节点不存在");
    ErrorCode CONFIG_PROJECT_TREE_PROVINCE_PARENT_INVALID = new ErrorCode(1_010_022_009, "省市节点的父节点必须是根节点或省市节点");
    ErrorCode CONFIG_PROJECT_TREE_INDUSTRY_PARENT_REQUIRED = new ErrorCode(1_010_022_010, "行业节点必须有父节点");
    ErrorCode CONFIG_PROJECT_TREE_INDUSTRY_PARENT_INVALID = new ErrorCode(1_010_022_011, "行业节点的父节点必须是省市节点");
    ErrorCode CONFIG_PROJECT_TREE_NODE_TYPE_INVALID = new ErrorCode(1_010_022_012, "无效的节点类型");
    ErrorCode CONFIG_PROJECT_TREE_HAS_INFO = new ErrorCode(1_010_022_013, "该节点存在工程信息配置，无法删除");

    // ========== 工程信息配置模块 1-010-023-000 ==========
    ErrorCode CONFIG_PROJECT_INFO_NOT_EXISTS = new ErrorCode(1_010_023_000, "工程信息配置不存在");
    ErrorCode CONFIG_PROJECT_INFO_HAS_CHILDREN = new ErrorCode(1_010_023_001, "该节点存在子节点，无法删除");
    ErrorCode CONFIG_PROJECT_INFO_NOT_SAME_LEVEL = new ErrorCode(1_010_023_002, "只能在同级节点间交换排序");
    ErrorCode CONFIG_PROJECT_INFO_PARENT_NOT_EXISTS = new ErrorCode(1_010_023_003, "父节点不存在");
    ErrorCode CONFIG_PROJECT_INFO_TREE_NOT_INDUSTRY = new ErrorCode(1_010_023_004, "只能在行业节点下添加工程信息");

    // ========== 工作台项目管理树模块 1-010-024-000 ==========
    ErrorCode WB_PROJECT_NOT_EXISTS = new ErrorCode(1_010_024_000, "工作台项目节点不存在");
    ErrorCode WB_PROJECT_CODE_EXISTS = new ErrorCode(1_010_024_001, "项目编号已存在");
    ErrorCode WB_PROJECT_INDUSTRY_NOT_EXISTS = new ErrorCode(1_010_024_002, "行业配置不存在");
    ErrorCode WB_PROJECT_INFO_PRICE_BOOK_NOT_EXISTS = new ErrorCode(1_010_024_003, "信息价册不存在");
    ErrorCode WB_PROJECT_HAS_CHILDREN = new ErrorCode(1_010_024_004, "该节点存在子节点，无法删除");
    ErrorCode WB_PROJECT_NOT_SAME_LEVEL = new ErrorCode(1_010_024_005, "只能在同级节点间交换排序");
    ErrorCode WB_PROJECT_NODE_TYPE_CANNOT_CHANGE = new ErrorCode(1_010_024_006, "不允许修改节点类型");
    ErrorCode WB_PROJECT_NODE_TYPE_INVALID = new ErrorCode(1_010_024_007, "无效的节点类型");
    ErrorCode WB_PROJECT_PARENT_NOT_EXISTS = new ErrorCode(1_010_024_008, "父节点不存在");
    ErrorCode WB_PROJECT_PARENT_NOT_DIRECTORY = new ErrorCode(1_010_024_009, "只有目录节点才能添加子节点");
    ErrorCode WB_PROJECT_NOT_PROJECT_NODE = new ErrorCode(1_010_024_010, "该节点不是项目节点");

    // ========== 编制模式树模块 1-010-025-000 ==========
    ErrorCode WB_COMPILE_TREE_NOT_EXISTS = new ErrorCode(1_010_025_000, "编制模式树节点不存在");
    ErrorCode WB_COMPILE_TREE_HAS_CHILDREN = new ErrorCode(1_010_025_001, "该节点存在子节点，无法删除");
    ErrorCode WB_COMPILE_TREE_NOT_SAME_LEVEL = new ErrorCode(1_010_025_002, "只能在同级节点间交换排序");
    ErrorCode WB_COMPILE_TREE_NODE_TYPE_INVALID = new ErrorCode(1_010_025_003, "无效的节点类型");
    ErrorCode WB_COMPILE_TREE_PARENT_NOT_EXISTS = new ErrorCode(1_010_025_004, "父节点不存在");
    ErrorCode WB_COMPILE_TREE_ITEM_PARENT_MUST_ROOT = new ErrorCode(1_010_025_005, "单项只能在根节点下创建");
    ErrorCode WB_COMPILE_TREE_UNIT_PARENT_MUST_ITEM = new ErrorCode(1_010_025_006, "单位工程只能在单项下创建");
    ErrorCode WB_COMPILE_TREE_ROOT_EXISTS = new ErrorCode(1_010_025_007, "该项目已存在根节点");
    ErrorCode WB_COMPILE_TREE_NODE_TYPE_CANNOT_CHANGE = new ErrorCode(1_010_025_008, "不允许修改节点类型");

    // ========== 单项基本信息模块 1-010-026-000 ==========
    ErrorCode WB_ITEM_INFO_NOT_EXISTS = new ErrorCode(1_010_026_000, "单项基本信息不存在");
    ErrorCode WB_ITEM_INFO_NODE_NOT_ITEM = new ErrorCode(1_010_026_001, "该节点不是单项节点");

    // ========== 单位工程信息模块 1-010-027-000 ==========
    ErrorCode WB_UNIT_INFO_NOT_EXISTS = new ErrorCode(1_010_027_000, "单位工程信息不存在");
    ErrorCode WB_UNIT_INFO_NODE_NOT_UNIT = new ErrorCode(1_010_027_001, "该节点不是单位工程节点");
    ErrorCode WB_UNIT_INFO_CODE_EXISTS = new ErrorCode(1_010_027_002, "工程编号在该项目中已存在");

    // ========== 分部分项树模块 1-010-028-000 ==========
    ErrorCode WB_BOQ_DIVISION_NOT_EXISTS = new ErrorCode(1_010_028_000, "分部分项节点不存在");
    ErrorCode WB_BOQ_DIVISION_HAS_CHILDREN = new ErrorCode(1_010_028_001, "该节点存在子节点，无法删除");
    ErrorCode WB_BOQ_DIVISION_NOT_SAME_LEVEL = new ErrorCode(1_010_028_002, "只能在同级节点间交换排序");
    ErrorCode WB_BOQ_DIVISION_NODE_TYPE_INVALID = new ErrorCode(1_010_028_003, "无效的节点类型");
    ErrorCode WB_BOQ_DIVISION_PARENT_NOT_EXISTS = new ErrorCode(1_010_028_004, "父节点不存在");
    ErrorCode WB_BOQ_DIVISION_BOQ_PARENT_MUST_DIVISION = new ErrorCode(1_010_028_005, "清单只能在分部节点下创建");
    ErrorCode WB_BOQ_DIVISION_QUOTA_PARENT_MUST_BOQ = new ErrorCode(1_010_028_006, "定额只能在清单节点下创建");
    ErrorCode WB_BOQ_DIVISION_NODE_TYPE_CANNOT_CHANGE = new ErrorCode(1_010_028_007, "不允许修改节点类型");
    ErrorCode WB_BOQ_DIVISION_COMPILE_TREE_NOT_UNIT = new ErrorCode(1_010_028_008, "只能在单位工程节点下创建分部分项");
    ErrorCode WB_BOQ_DIVISION_DIVISION_MUST_ROOT = new ErrorCode(1_010_028_009, "分部节点只能作为根节点");
    ErrorCode WB_BOQ_DIVISION_ROOT_CANNOT_DELETE = new ErrorCode(1_010_028_010, "根目录节点不能删除");
    ErrorCode WB_BOQ_DIVISION_ROOT_CANNOT_UPDATE = new ErrorCode(1_010_028_011, "根目录节点不能编辑");
    ErrorCode WB_BOQ_DIVISION_NODE_TYPE_ERROR = new ErrorCode(1_010_028_012, "节点类型错误");
    ErrorCode WB_BOQ_DIVISION_FORMULA_INVALID = new ErrorCode(1_010_028_013, "定额工程量公式无效: {}");
    ErrorCode WB_BOQ_DIVISION_BOQ_CODE_EXISTS = new ErrorCode(1_010_028_014, "清单编码在该单位工程下已存在");
    ErrorCode WB_BOQ_DIVISION_BASE_NUMBER_FORMULA_INVALID = new ErrorCode(1_010_028_015, "基数公式无效: {}");

    // ========== 工料机消耗模块 1-010-029-000 ==========
    ErrorCode WB_BOQ_RESOURCE_NOT_EXISTS = new ErrorCode(1_010_029_000, "工料机消耗不存在");
    ErrorCode WB_BOQ_RESOURCE_DIVISION_NOT_QUOTA = new ErrorCode(1_010_029_001, "只能在定额节点下添加工料机");
    ErrorCode WB_BOQ_RESOURCE_CHILD_CONSUME_QTY_READONLY = new ErrorCode(1_010_029_002, "复合工料机的子工料机不允许修改定额消耗量");
    ErrorCode WB_BOQ_MARKET_MATERIAL_NOT_EXISTS = new ErrorCode(1_010_029_003, "市场主材设备不存在");
    ErrorCode WB_BOQ_RESOURCE_MANUAL_CONSUME_QTY_READONLY = new ErrorCode(1_010_029_004, "手动新增的工料机不允许修改定额消耗量");

    // ========== 工作台定额取费模块 1-010-030-000 ==========
    ErrorCode WB_BOQ_FEE_NOT_EXISTS = new ErrorCode(1_010_030_000, "定额取费项不存在");
    ErrorCode WB_BOQ_FEE_ZHDJ_CANNOT_DELETE = new ErrorCode(1_010_030_001, "综合单价行（ZHDJ）不可删除");
    ErrorCode WB_BOQ_FEE_ZHDJ_CODE_CANNOT_MODIFY = new ErrorCode(1_010_030_002, "综合单价行（ZHDJ）的代号不可修改");

    // ========== 公式校验模块 1-010-031-000 ==========
    ErrorCode FORMULA_INVALID = new ErrorCode(1_010_031_000, "取费项 [{}] 的计算基数公式不合法: {}");

    // ========== 统一取费设置模块 1-010-032-000 ==========
    ErrorCode UNIFIED_FEE_SETTING_NOT_EXISTS = new ErrorCode(1_010_032_000, "统一取费设置不存在");
    ErrorCode UNIFIED_FEE_SETTING_HAS_CHILDREN = new ErrorCode(1_010_032_001, "该节点存在子节点，无法删除");
    ErrorCode UNIFIED_FEE_SETTING_CODE_DUPLICATE = new ErrorCode(1_010_032_002, "编号 [{}] 已存在");
    ErrorCode UNIFIED_FEE_SETTING_NOT_SAME_CATALOG = new ErrorCode(1_010_032_003, "只能在同一模式下交换排序");
    ErrorCode UNIFIED_FEE_CHAPTER_INTERSECTION = new ErrorCode(1_010_032_004, "取费章节与 [{}] 存在交集，请重新选择");

    // ========== 统一取费子目工料机模块 1-010-033-000 ==========
    ErrorCode UNIFIED_FEE_RESOURCE_NOT_EXISTS = new ErrorCode(1_010_033_000, "统一取费子目工料机不存在");
    ErrorCode UNIFIED_FEE_RESOURCE_CODE_DUPLICATE = new ErrorCode(1_010_033_001, "编码 [{}] 已存在");
    ErrorCode UNIFIED_FEE_RESOURCE_NOT_SAME_SETTING = new ErrorCode(1_010_033_002, "只能在同一子定额下交换排序");

    // ========== 统一取费单价模块 1-010-034-000 ==========
    ErrorCode UNIFIED_FEE_NOT_EXISTS = new ErrorCode(1_010_034_000, "统一取费单价不存在");
    ErrorCode UNIFIED_FEE_HAS_CHILDREN = new ErrorCode(1_010_034_001, "该节点存在子节点，无法删除");
    ErrorCode UNIFIED_FEE_CODE_DUPLICATE = new ErrorCode(1_010_034_002, "代号 [{}] 已存在");
    ErrorCode UNIFIED_FEE_NOT_SAME_CATALOG = new ErrorCode(1_010_034_003, "只能在同一模式下交换排序");

    // ========== 工作台统一取费配置模块 1-010-035-000 ==========
    ErrorCode WB_UNIFIED_FEE_CONFIG_NOT_EXISTS = new ErrorCode(1_010_035_000, "工作台统一取费配置不存在");

    // ========== 单位工程变量设置模块 1-010-036-000 ==========
    ErrorCode QUOTA_VARIABLE_SETTING_NOT_EXISTS = new ErrorCode(1_010_036_000, "变量设置不存在");
    ErrorCode QUOTA_VARIABLE_SETTING_INVALID_NODE_TYPE = new ErrorCode(1_010_036_001, "catalogItemId 必须指向 specialty 类型的节点（定额专业）");
    ErrorCode QUOTA_VARIABLE_SETTING_INVALID_CATEGORY = new ErrorCode(1_010_036_002, "无效的类别，必须为 division/measure/other/unit_summary");
    ErrorCode QUOTA_VARIABLE_SETTING_CODE_DUPLICATE = new ErrorCode(1_010_036_003, "费用代号 [{}] 已存在");
    ErrorCode QUOTA_VARIABLE_SETTING_NOT_SAME_CATALOG = new ErrorCode(1_010_036_004, "只能在同一模式下交换排序");
    ErrorCode QUOTA_VARIABLE_SETTING_CALC_BASE_INVALID = new ErrorCode(1_010_036_005, "计算基数公式格式无效，只允许字母、数字、运算符和括号");
    ErrorCode QUOTA_VARIABLE_SETTING_CALC_BASE_VARIABLE_NOT_EXISTS = new ErrorCode(1_010_036_006, "计算基数公式中包含无效的变量: {}");
    ErrorCode QUOTA_VARIABLE_SETTING_CODE_FORMAT_INVALID = new ErrorCode(1_010_036_007, "费用代号格式无效，必须以字母开头，只能包含字母、数字、下划线");
    ErrorCode QUOTA_VARIABLE_SETTING_CODE_DUPLICATE_ACROSS_TABS = new ErrorCode(1_010_036_008, "费用代号 [{}] 已在 [{}] 标签页中使用，四个标签页不允许出现相同的费用代号");

    // ========== 审核模式模块 1-010-037-000 ==========
    ErrorCode AUDIT_MODE_NOT_EXISTS = new ErrorCode(1_010_037_000, "审核模式不存在");
    ErrorCode AUDIT_APPROVE_DIVISION_NOT_EXISTS = new ErrorCode(1_010_037_002, "审定分部分项不存在");
    ErrorCode AUDIT_MODE_ALREADY_EXISTS = new ErrorCode(1_010_037_003, "该项目已存在审核模式，每个项目只允许创建一次");

    // ========== 进度款模式模块 1-010-038-000 ==========
    ErrorCode PROGRESS_PAYMENT_MODE_NOT_EXISTS = new ErrorCode(1_010_038_000, "进度款模式不存在");

    // ========== 基数设置目录树模块 1-010-039-000 ==========
    ErrorCode CALC_BASE_CATALOG_NOT_EXISTS = new ErrorCode(1_010_039_000, "基数设置目录树节点不存在");
    ErrorCode CALC_BASE_CATALOG_CODE_DUPLICATE = new ErrorCode(1_010_039_001, "编码已存在");
    ErrorCode CALC_BASE_CATALOG_INVALID_NODE_TYPE = new ErrorCode(1_010_039_002, "无效的节点类型");
    ErrorCode CALC_BASE_CATALOG_HAS_CHILDREN = new ErrorCode(1_010_039_003, "该节点存在子节点，无法删除");
    ErrorCode CALC_BASE_CATALOG_PARENT_NOT_EXISTS = new ErrorCode(1_010_039_004, "父节点不存在");
    ErrorCode CALC_BASE_CATALOG_ROOT_EXISTS = new ErrorCode(1_010_039_005, "根节点已存在，只允许创建一个根节点");

    // ========== 基数设置目录模块 1-010-040-000 ==========
    ErrorCode CALC_BASE_DIRECTORY_NOT_EXISTS = new ErrorCode(1_010_040_000, "基数设置目录节点不存在");
    ErrorCode CALC_BASE_DIRECTORY_HAS_CHILDREN = new ErrorCode(1_010_040_001, "该节点存在子节点，无法删除");
    ErrorCode CALC_BASE_DIRECTORY_PARENT_NOT_EXISTS = new ErrorCode(1_010_040_002, "父节点不存在");
    ErrorCode CALC_BASE_DIRECTORY_NOT_SAME_LEVEL = new ErrorCode(1_010_040_003, "只能在同级节点间交换排序");

    // ========== 基数设置费率模块 1-010-041-000 ==========
    ErrorCode CALC_BASE_RATE_NOT_EXISTS = new ErrorCode(1_010_041_000, "基数设置费率不存在");

    // ========== 基数费率目录树模块 1-010-042-000 ==========
    ErrorCode CALC_BASE_RATE_CATALOG_NOT_EXISTS = new ErrorCode(1_010_042_000, "基数费率目录树节点不存在");
    ErrorCode CALC_BASE_RATE_CATALOG_CODE_DUPLICATE = new ErrorCode(1_010_042_001, "编码已存在");
    ErrorCode CALC_BASE_RATE_CATALOG_INVALID_NODE_TYPE = new ErrorCode(1_010_042_002, "无效的节点类型");
    ErrorCode CALC_BASE_RATE_CATALOG_HAS_CHILDREN = new ErrorCode(1_010_042_003, "该节点存在子节点，无法删除");
    ErrorCode CALC_BASE_RATE_CATALOG_PARENT_NOT_EXISTS = new ErrorCode(1_010_042_004, "父节点不存在");
    ErrorCode CALC_BASE_RATE_CATALOG_ROOT_EXISTS = new ErrorCode(1_010_042_005, "根节点已存在，只允许创建一个根节点");

    // ========== 基数费率目录模块 1-010-043-000 ==========
    ErrorCode CALC_BASE_RATE_DIRECTORY_NOT_EXISTS = new ErrorCode(1_010_043_000, "基数费率目录节点不存在");
    ErrorCode CALC_BASE_RATE_DIRECTORY_HAS_CHILDREN = new ErrorCode(1_010_043_001, "该节点存在子节点，无法删除");
    ErrorCode CALC_BASE_RATE_DIRECTORY_PARENT_NOT_EXISTS = new ErrorCode(1_010_043_002, "父节点不存在");
    ErrorCode CALC_BASE_RATE_DIRECTORY_NOT_SAME_LEVEL = new ErrorCode(1_010_043_003, "只能在同级节点间交换排序");

    // ========== 基数费率项模块 1-010-044-000 ==========
    ErrorCode CALC_BASE_RATE_ITEM_NOT_EXISTS = new ErrorCode(1_010_044_000, "基数费率项不存在");

    // ========== 单位工程界面配置-工作台字段设置模块 1-010-046-000 ==========
    ErrorCode CONFIG_UNIT_FIELD_NOT_EXISTS = new ErrorCode(1_010_046_000, "工作台字段设置不存在");
    ErrorCode CONFIG_UNIT_FIELD_CODE_DUPLICATE = new ErrorCode(1_010_046_001, "字段编码 [{}] 已存在");
    ErrorCode CONFIG_UNIT_FIELD_NOT_FIELDS_MAJORS = new ErrorCode(1_010_046_002, "catalogItemId 必须指向 fields_majors 类型的节点");
    ErrorCode CONFIG_UNIT_FIELD_NOT_SAME_CATALOG = new ErrorCode(1_010_046_003, "只能在同一专业类别下交换排序");

    // ========== 单位工程界面配置-工料机字段模块 1-010-047-000 ==========
    ErrorCode CONFIG_UNIT_RESOURCE_FIELD_NOT_EXISTS = new ErrorCode(1_010_047_000, "工料机字段设置不存在");
    ErrorCode CONFIG_UNIT_RESOURCE_FIELD_CODE_DUPLICATE = new ErrorCode(1_010_047_001, "字段编码 [{}] 已存在");
    ErrorCode CONFIG_UNIT_RESOURCE_FIELD_NOT_FIELDS_MAJORS = new ErrorCode(1_010_047_002, "catalogItemId 必须指向 fields_majors 类型的节点");
    ErrorCode CONFIG_UNIT_RESOURCE_FIELD_NOT_SAME_CATALOG = new ErrorCode(1_010_047_003, "只能在同一专业类别下交换排序");

    // ========== 单位工程界面配置-分部分项模板模块 1-010-048-000 ==========
    ErrorCode CONFIG_UNIT_DIV_TPL_NOT_EXISTS = new ErrorCode(1_010_048_000, "分部分项模板节点不存在");
    ErrorCode CONFIG_UNIT_DIV_TPL_HAS_CHILDREN = new ErrorCode(1_010_048_001, "该节点存在子节点，无法删除");
    ErrorCode CONFIG_UNIT_DIV_TPL_NOT_FIELDS_MAJORS = new ErrorCode(1_010_048_002, "catalogItemId 必须指向 fields_majors 类型的节点");
    ErrorCode CONFIG_UNIT_DIV_TPL_NOT_SAME_LEVEL = new ErrorCode(1_010_048_003, "只能在同级节点间交换排序");
    ErrorCode CONFIG_UNIT_DIV_TPL_INVALID_NODE_TYPE = new ErrorCode(1_010_048_004, "无效的节点类型，只能是 division 或 boq");
    ErrorCode CONFIG_UNIT_DIV_TPL_PARENT_NOT_EXISTS = new ErrorCode(1_010_048_005, "父节点不存在");
    ErrorCode CONFIG_UNIT_DIV_TPL_BOQ_PARENT_MUST_DIVISION = new ErrorCode(1_010_048_006, "清单只能在分部节点下创建");
    ErrorCode CONFIG_UNIT_DIV_TPL_INVALID_TAB_TYPE = new ErrorCode(1_010_048_007, "无效的标签页类型，只能是 division/measure/other/unit_summary");

    // ========== 单位工程界面配置-标签页引用模块 1-010-049-000 ==========
    ErrorCode CONFIG_UNIT_TAB_REF_NOT_EXISTS = new ErrorCode(1_010_049_000, "标签页引用不存在");
    ErrorCode CONFIG_UNIT_TAB_REF_NOT_FIELDS_MAJORS = new ErrorCode(1_010_049_001, "catalogItemId 必须指向 fields_majors 类型的节点");
    ErrorCode CONFIG_UNIT_TAB_REF_INVALID_TAB_TYPE = new ErrorCode(1_010_049_002, "无效的标签页类型，必须为 measure/other/unit_summary");
    ErrorCode CONFIG_UNIT_TAB_REF_TEMPLATE_NOT_EXISTS = new ErrorCode(1_010_049_003, "引用的模板节点不存在");
    ErrorCode CONFIG_UNIT_TAB_REF_DUPLICATE = new ErrorCode(1_010_049_004, "该标签页已引用此模板节点");
    ErrorCode CONFIG_UNIT_TAB_REF_NOT_SAME_CATALOG = new ErrorCode(1_010_049_005, "只能在同一专业类别下交换排序");

    // ========== 同步库模块 1-010-045-000 ==========
    ErrorCode SYNC_LIBRARY_DIVISION_NOT_EXISTS = new ErrorCode(1_010_045_000, "同步库节点不存在");
    ErrorCode SYNC_DIVISION_NOT_EXISTS = new ErrorCode(1_010_045_001, "分部分项节点不存在");
    ErrorCode SYNC_ONLY_BOQ_OR_DIVISION = new ErrorCode(1_010_045_002, "只有清单或分部节点才能设为同步");
    ErrorCode SYNC_ALREADY_SYNCED = new ErrorCode(1_010_045_003, "该节点已设为同步");
    ErrorCode SYNC_BOQ_NO_QUOTA = new ErrorCode(1_010_045_004, "清单节点必须有子定额才能设为同步");
    ErrorCode SYNC_UNIFIED_FEE_NOT_ALLOWED = new ErrorCode(1_010_045_005, "统一取费节点不能设为同步");
    ErrorCode SYNC_COMPILE_TREE_NOT_EXISTS = new ErrorCode(1_010_045_006, "单位工程不存在");
    ErrorCode SYNC_NOT_SYNCED = new ErrorCode(1_010_045_007, "该节点未设为同步");
    ErrorCode SYNC_LIBRARY_HAS_BINDINGS = new ErrorCode(1_010_045_008, "同步库还有绑定关系，请先解除所有同步");

}
