|
|
@@ -71,3 +71,363 @@ function overwriteRationCalcBases() {
|
|
|
{ type: 'rationCommon', name: '定额建安费' }
|
|
|
];
|
|
|
})();
|
|
|
+
|
|
|
+
|
|
|
+// 清单基数
|
|
|
+const progression = [
|
|
|
+ '施工场地建设费', '养护管理单位项目管理费', '养护项目信息化费', '工程监理费', '设计文件审查费(一阶段)', '设计文件审查费(二阶段)',
|
|
|
+ '采用一阶段设计的工程设计费、招标费', '采用二阶段设计的工程设计费、招标费', '独立立项进行维修、加固的桥梁工程设计费、招标费',
|
|
|
+ '独立立项进行维修、加固的隧道工程设计费、招标费', '独立立项进行维修、加固的机电工程设计费、招标费'
|
|
|
+];
|
|
|
+const deficiency = {
|
|
|
+ '设计文件审查费(一阶段)': 2000, '设计文件审查费(二阶段)': 2000, '采用一阶段设计的工程设计费、招标费': 5000, '采用二阶段设计的工程设计费、招标费': 5000,
|
|
|
+ '独立立项进行维修、加固的桥梁工程设计费、招标费': 5000, '独立立项进行维修、加固的隧道工程设计费、招标费': 5000, '独立立项进行维修、加固的机电工程设计费、招标费': 5000
|
|
|
+};
|
|
|
+if (typeof baseFigureMap !== 'undefined') {
|
|
|
+ const { fixedFlag } = commonConstants;
|
|
|
+ const budgetMap = {
|
|
|
+ // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
|
|
|
+ '建筑安装工程费': {
|
|
|
+ base: 'JZAZGCF',
|
|
|
+ fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
|
|
|
+ filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
|
|
|
+ pick: false,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“安全生产费”可显示。
|
|
|
+ '建筑安装工程费(不含安全生产费)': {
|
|
|
+ base: 'JZAZGCFBHSC',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.SAFE_COST],
|
|
|
+ pick: true
|
|
|
+ },
|
|
|
+ // 显示:除“建筑安装工程费”以外部分可显示
|
|
|
+ '建筑安装工程费(不含设备费)': {
|
|
|
+ base: 'JZAZGCFBHSB',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
|
|
|
+ pick: false,
|
|
|
+ },
|
|
|
+ // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
|
|
|
+ '定额建筑安装工程费': {
|
|
|
+ base: 'DEJZAZGCF',
|
|
|
+ fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
|
|
|
+ filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
|
|
|
+ pick: false
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“专项费用”可显示。
|
|
|
+ '定额建筑安装工程费(不含专项费用)': {
|
|
|
+ base: 'DEJZAZGCFBHZXFY',
|
|
|
+ fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
|
|
|
+ filter: [fixedFlag.SPECIAL_COST],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“专项费用”可显示
|
|
|
+ '施工场地建设费': {
|
|
|
+ isProgressive: true,
|
|
|
+ base: 'SGCDJSF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.SPECIAL_COST],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '养护管理单位项目管理费': {
|
|
|
+ isProgressive: true,
|
|
|
+ base: 'YHDWGLF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '养护项目信息化费': {
|
|
|
+ isProgressive: true,
|
|
|
+ base: 'YHXMXXHF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '工程监理费': {
|
|
|
+ isProgressive: true,
|
|
|
+ base: 'GCJLF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '设计文件审查费(一阶段)': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 2000,
|
|
|
+ base: 'SJWJSCFYJD',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '设计文件审查费(二阶段)': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 2000,
|
|
|
+ base: 'SJWJSCFEJD',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '采用一阶段设计的工程设计费、招标费': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 5000,
|
|
|
+ base: 'CYYJDSJDGCSJFZBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '采用二阶段设计的工程设计费、招标费': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 5000,
|
|
|
+ base: 'CYEJDSJDGCSJFZBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '独立立项进行维修、加固的桥梁工程设计费、招标费': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 5000,
|
|
|
+ base: 'DLLXJXWXJGDQLGCSJFZBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '独立立项进行维修、加固的隧道工程设计费、招标费': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 5000,
|
|
|
+ base: 'DLLXJXWXJGDSDGCSJFZBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
|
|
|
+ '独立立项进行维修、加固的机电工程设计费、招标费': {
|
|
|
+ isProgressive: true,
|
|
|
+ deficiency: 5000,
|
|
|
+ base: 'DLLXJXWXJGDJDGCSJFZBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.MAINTENANCE_EXPENSES],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ // 显示:仅“价差预备费”可显示
|
|
|
+ '价差预备费': {
|
|
|
+ base: 'JCYBF',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.SPREAD_BUDGET_FEE],
|
|
|
+ pick: true,
|
|
|
+ },
|
|
|
+ };
|
|
|
+ const boqMap = {
|
|
|
+ //仅允许用于固定类别是“第100章至700章清单”以外的清单
|
|
|
+ '各章清单合计': {
|
|
|
+ base: 'GZQDHJ',
|
|
|
+ fixedFlag: fixedFlag.ONE_SEVEN_BILLS,
|
|
|
+ filter: [fixedFlag.ONE_SEVEN_BILLS],
|
|
|
+ pick: false
|
|
|
+ },
|
|
|
+ //仅允许用于固定类别是“第100章至700章清单”以外的清单
|
|
|
+ '专项暂定合计': {
|
|
|
+ base: 'ZXZDHJ',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.ONE_SEVEN_BILLS],
|
|
|
+ pick: false
|
|
|
+ },
|
|
|
+ /*
|
|
|
+ * 清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
|
|
|
+ * 因此{100章以外合计}不设置关联的清单固定行
|
|
|
+ * */
|
|
|
+ //仅允许用于固定类别为“100章清单”引用
|
|
|
+ '100章以外清单合计': {
|
|
|
+ base: 'YBZYHQDHJ',
|
|
|
+ fixedFlag: null,
|
|
|
+ filter: [fixedFlag.ONE_HUNDRED_BILLS],
|
|
|
+ pick: true
|
|
|
+ }
|
|
|
+ };
|
|
|
+ baseFigureMap.budget = budgetMap;
|
|
|
+ baseFigureMap.boq = boqMap;
|
|
|
+}
|
|
|
+
|
|
|
+if (typeof baseFigureTemplate !== 'undefined') {
|
|
|
+ const { fixedFlag } = commonConstants;
|
|
|
+ baseFigureTemplate.budget = {
|
|
|
+ // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
|
|
|
+ JZAZGCF(tender) {
|
|
|
+ return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
|
|
|
+ },
|
|
|
+ // 建筑安装工程费(不含安全生产费) 算法:取清单固定类别是“建筑安装工程费”的金额,扣除“安全生产费”的金额。
|
|
|
+ JZAZGCFBHSC(tender) {
|
|
|
+ return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, 'common');
|
|
|
+ },
|
|
|
+ // 建筑安装工程费(不含设备费) 算法:取清单固定类别是“建筑安装工程费”的金额,扣除设备的金额。
|
|
|
+ JZAZGCFBHSB(tender) {
|
|
|
+ const baseFee = this['JZAZGCF'](tender);
|
|
|
+ const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
|
|
|
+ const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender);
|
|
|
+ return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ },
|
|
|
+ // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费。
|
|
|
+ DEJZAZGCF(tender) {
|
|
|
+ return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'rationCommon');
|
|
|
+ },
|
|
|
+ // 定额建筑安装工程费(不含专项费) 算法:取清单固定类别是“建筑安装工程费”的“定额建安费”,扣除“专项费用”的“定额建安费”。
|
|
|
+ DEJZAZGCFBHZXFY(tender) {
|
|
|
+ //建安费扣除设备费
|
|
|
+ return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SPECIAL_COST], tender, 'rationCommon');
|
|
|
+ },
|
|
|
+ // 施工场地建设费 算法:以{定额建筑安装工程费(不含专项费用) }为基数,采用累进办法计算。
|
|
|
+ SGCDJSF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCFBHZXFY'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 养护管理单位项目管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
|
|
|
+ YHDWGLF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '养护管理单位项目管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 养护项目信息化费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
|
|
|
+ YHXMXXHF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '养护项目信息化费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
|
|
|
+ GCJLF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 设计文件审查费(一阶段) 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ SJWJSCFYJD(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费(一阶段)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 设计文件审查费(二阶段) 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ SJWJSCFEJD(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费(二阶段)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 采用一阶段设计的工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ CYYJDSJDGCSJFZBF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '采用一阶段设计的工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 采用二阶段设计的工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ CYEJDSJDGCSJFZBF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '采用二阶段设计的工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 独立立项进行维修、加固的桥梁工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ DLLXJXWXJGDQLGCSJFZBF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的桥梁工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 独立立项进行维修、加固的隧道工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ DLLXJXWXJGDSDGCSJFZBF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的隧道工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ // 独立立项进行维修、加固的机电工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
|
|
|
+ DLLXJXWXJGDJDGCSJFZBF(tender) {
|
|
|
+ const baseFee = this['DEJZAZGCF'](tender);
|
|
|
+ if (!tender) {
|
|
|
+ calcBase.baseProgressiveFee = baseFee;
|
|
|
+ }
|
|
|
+ return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的机电工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
|
|
|
+ },
|
|
|
+ /* 价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
|
|
|
+ 价差预备费 P * [(1+i)^(n-1) -1]
|
|
|
+ P——建筑安装工程费总额(元);
|
|
|
+ i——年工程造价增涨率(%);
|
|
|
+ n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
|
|
|
+ */
|
|
|
+ JCYBF(tender) {
|
|
|
+ //建筑安装工程费作为基数
|
|
|
+ const installFee = this['JZAZGCF'](tender);
|
|
|
+ //年造价增涨
|
|
|
+ const costGrowthRate = calcBase.project.property.costGrowthRate
|
|
|
+ ? calcBase.project.property.costGrowthRate
|
|
|
+ : 0;
|
|
|
+ //增涨计费年限
|
|
|
+ const growthPeriod = projectObj.project.property.growthPeriod
|
|
|
+ ? calcBase.project.property.growthPeriod
|
|
|
+ : 0;
|
|
|
+ //= P * [(1+i)^(n-1) -1]
|
|
|
+ return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ baseFigureTemplate.boq = {
|
|
|
+ //{各章清单合计}
|
|
|
+ // 取清单固定类别是“第100章至700章清单”的金额
|
|
|
+ 'GZQDHJ': function (tender) {
|
|
|
+ return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'common');
|
|
|
+ },
|
|
|
+ //{专项暂定合计}
|
|
|
+ // 第100章至700章清单行的暂估合价
|
|
|
+ 'ZXZDHJ': function (tender) {
|
|
|
+ return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
|
|
|
+ },
|
|
|
+ //{100章以外清单合计}
|
|
|
+ // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
|
|
|
+ // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
|
|
|
+ 'YBZYHQDHJ': function (tender) {
|
|
|
+ let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
|
|
|
+ if (!oneToSeven) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ //100-700章固定节点的所有子节点
|
|
|
+ let allChildren = [];
|
|
|
+ function getChildren(nodes) {
|
|
|
+ allChildren = allChildren.concat(nodes);
|
|
|
+ for (let node of nodes) {
|
|
|
+ if (node.children.length > 0) {
|
|
|
+ getChildren(node.children);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ getChildren(oneToSeven.children);
|
|
|
+ //扣除的节点:100章的节点[100-200)
|
|
|
+ let deductNodes = allChildren.filter(cbTools.withingOneHundred);
|
|
|
+ //计算金额
|
|
|
+ let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
|
|
|
+ return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|