瀏覽代碼

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuCost

Tony Kang 3 年之前
父節點
當前提交
41bbfe40cd
共有 2 個文件被更改,包括 724 次插入261 次删除
  1. 454 0
      web/over_write/js/henan_2022.js
  2. 270 261
      web/over_write/js/sichuan_2013.js

+ 454 - 0
web/over_write/js/henan_2022.js

@@ -0,0 +1,454 @@
+if (typeof feeRateObject !== "undefined") {
+  feeRateObject.feeRateSpecialHandle = function (subRate, value) {
+    let result = {};
+    if (subRate.name == "综合里程(km)" && value && value < 3) {
+      //综合里程3km以内按3km算
+      result.valueKey = "3";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
+    }
+    if (subRate.name == "工地转移(km)" && value && value < 50) {
+      //工地转移50km以内按50km算
+      result.valueKey = "50";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
+    }
+    if (subRate.name == "施工进出场(km)" && value && value < 5) {
+      //施工进出场5km以内按5km算
+      result.valueKey = "5";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
+    }
+    return result;
+  };
+}
+
+// 清单基数
+const littleFixNames = ["小修", "养护检查预算", "日常养护预算"];
+const progression = ["养护单位(业主)管理费", "工程监理费", "设计文件审查费"];
+const deficiency = { 养护工程监理费: 10000, 设计文件审查费: 10000 };
+if (typeof baseFigureMap !== "undefined") {
+  const { fixedFlag } = commonConstants;
+  const budgetMap = {
+    // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
+    建筑安装工程费: {
+      base: "JZAZGCF",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+    "建筑安装工程费(不含设备费)": {
+      base: "JZAZGCFBHSB",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+    定额建筑安装工程费: {
+      base: "DEJZAZGCF",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+    "养护单位(业主)管理费": {
+      isProgressive: true,
+      base: "YHDWYZGLF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    信息化费: {
+      base: "YHXMXXHF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    工程监理费: {
+      isProgressive: true,
+      base: "YHGCJLF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+      engineeringList: littleFixNames,
+    },
+    设计文件审查费: {
+      isProgressive: true,
+      base: "SJWJSCF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+      engineeringList: ["大修", "中修"],
+    },
+    施工场地建设费: {
+      isProgressive: true,
+      base: "SGCDJSF",
+      fixedFlag: null,
+      filter: [fixedFlag.CONSTRUCTION_PLANT_COST],
+      pick: true,
+    },
+    // 显示:除清单固定类别是“一二三四部分合计”的以外部分可显示。
+    一二三四部分合计: {
+      base: "YESSBFHJ",
+      fixedFlag: fixedFlag.ONE_TO_FOUR_TOTAL,
+      filter: [fixedFlag.ONE_TO_FOUR_TOTAL],
+      pick: false,
+    },
+    // 显示:仅“价差预备费”可显示
+    价差预备费: {
+      base: "JCYBF",
+      fixedFlag: null,
+      filter: [fixedFlag.SPREAD_BUDGET_FEE],
+      pick: true,
+    },
+  };
+  const boqMap = {
+    //仅允许用于固定类别是“第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;
+}
+
+// 是否是小修
+const isLittleFix = (engName) => {
+  return littleFixNames.some((name) => new RegExp(name).test(engName));
+};
+
+if (typeof baseFigureTemplate !== "undefined") {
+  const { fixedFlag } = commonConstants;
+  baseFigureTemplate.budget = {
+    // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的建安费。
+    JZAZGCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
+    },
+    // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
+    JZAZGCFBHSB(tender) {
+      const engName = projectObj.project.property.engineeringName;
+      if (isLittleFix(engName)) {
+        // 小修的没有设备购置固定行
+        const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
+        const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+        const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "common");
+        return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
+      } else {
+        return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, "common");
+      }
+    },
+    JZAZGCFBHAQSCF(tender) {
+      return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, "common");
+    },
+    // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
+    DEJZAZGCF(tender) {
+      const engName = projectObj.project.property.engineeringName;
+      const feeField = "rationCommon";
+      if (isLittleFix(engName)) {
+        // 小修的没有设备购置固定行
+        const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, feeField);
+        const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+        const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
+        return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+      } else {
+        const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+        //建安费扣除定额设备购置费
+        const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, deductFlags, tender, feeField, false);
+        //定额设备购置费
+        const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, "equipment");
+        const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, "tax");
+        return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+      }
+    },
+    DEJZAZGCFBHZXF(tender) {
+      // 定额建筑安装工程费(不含专项费用)
+      return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SPECIAL_COST], tender, "rationCommon", true);
+    },
+    // 设备费 算法:取清单固定类别是“设备购置”的建安费
+    SBF(tender) {
+      return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, "common");
+    },
+    // 设备费 算法:取清单固定类别是“设备购置”的定额建安费
+    DESBF(tender) {
+      return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, "rationCommon");
+    },
+    // 养护工程费 算法:取清单固定类别是“养护工程费”的金额。
+    YHGCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, "common");
+    },
+    // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
+    DEYHGCF(tender) {
+      const engName = projectObj.project.property.engineeringName;
+      const feeField = "rationCommon";
+      if (isLittleFix(engName)) {
+        // 小修的没有设备购置固定行
+        const baseFee = cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, feeField);
+        const fixedNode = projectObj.project.mainTree.items.find((node) => node.getFlag() === fixedFlag.MAINTENANCE_FEE);
+        const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
+        return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+      } else {
+        const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+        //建安费扣除定额设备购置费
+        const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
+        //定额设备购置费
+        const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, "equipment");
+        const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, "tax");
+        return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+      }
+    },
+    // 养护单位(业主)管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
+    YHDWYZGLF(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护单位(业主)管理费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护单位(业主)管理费(未单独设置) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+    YHDWYZGLFWDDSZ(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护单位(业主)管理费(未单独设置)",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+    YHGCJLF(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护工程监理费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护工程监理费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+    YHGCJLFLXGC(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护工程监理费(路线工程)",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护工程监理费(桥梁及隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+    YHGCJLFQLJSDGC(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护工程监理费(桥梁及隧道工程)",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 设计文件审查费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+    SJWJSCF(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "设计文件审查费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护项目信息化费 (大中修):取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.32%计算。不足10000取10000
+    // 养护项目信息化费 (小修):算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.2%计算。信息化管理费不足5000元时按5000元计取。
+    YHXMXXHF(tender) {
+      const engName = projectObj.project.property.engineeringName;
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (isLittleFix(engName)) {
+        const fee = (baseFee * 0.002).toDecimal(decimalObj.bills.totalPrice);
+        return fee > 0 && fee < 5000 ? 5000 : fee;
+      } else {
+        const fee = (baseFee * 0.0032).toDecimal(decimalObj.bills.totalPrice);
+        return fee > 0 && fee < 10000 ? 10000 : fee;
+      }
+    },
+    // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+    YHGCSJFLXGC(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护工程设计费(路线工程)",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 养护工程设计费(独立桥梁、隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+    YHGCSJFQLSDGC(tender) {
+      const baseFee = this["DEJZAZGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护工程设计费(独立桥梁、隧道工程)",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 施工场地建设费 算法:以{定额养护工程费}为基数,采用累进办法计算
+    SGCDJSF(tender) {
+      const baseFee = this["DEJZAZGCFBHZXF"](tender);
+      // 小修保养类别,施工场地建设费的计算基数定额建筑安装工程费超过30000000元时,不进行累进计算,直接按500000元计取。
+      const engName = projectObj.project.property.engineeringName;
+      if (isLittleFix(engName) && baseFee > 30000000) {
+        return 500000;
+      }
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "施工场地建设费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 一二三四部分合计 算法:取清单固定类别是“一二三四部分合计”的金额
+    YESSBFHJ(tender) {
+      return cbTools.getBaseFee(fixedFlag.ONE_TO_FOUR_TOTAL, tender, "common");
+    },
+    /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+            价差预备费 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章清单行的暂估合价
+    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);
+    },
+  };
+}
+
+if (typeof module !== "undefined") {
+  // 甘肃养护,项目属性-小数位数,费率小数位数默认为2。
+  const defaultDecimal = {
+    bills: { unitPrice: 2, totalPrice: 0 },
+    ration: { quantity: 3, unitPrice: 2, totalPrice: 0 },
+    glj: { quantity: 3, unitPriceHasMix: 2, unitPrice: 2 },
+    feeRate: 4,
+    quantity_detail: 4,
+    material: 5, //三材系数
+    process: 6,
+    marketPriceProcess: 2,
+    temProcess: 6,
+  };
+
+  module.exports = {
+    progression,
+    deficiency,
+    defaultDecimal,
+  };
+}
+// 不显示但可的基数
+const invisibleBases = ["设备费", "定额设备费"];
+
+if (typeof projectObj !== "undefined") {
+  projectObj.isInsertEquipmentVisable = function (selected) {
+    if (projectObj.project.property.valuationType !== "ration") {
+      //属于预算项目的情况下,在固定清单可见
+      const engName = projectObj.project.property.engineeringName;
+      //属于的固定清单
+      const belongFlag = cbTools.getBelongFlag(selected);
+      if (isLittleFix(engName)) {
+        if (belongFlag && belongFlag === fixedFlag.MAINTENANCE_FEE) {
+          return true;
+        }
+      } else {
+        if (belongFlag && belongFlag === fixedFlag.EQUIPMENT_ACQUISITION_FEE) {
+          return true;
+        }
+      }
+      return false;
+    }
+    return true;
+  };
+}

+ 270 - 261
web/over_write/js/sichuan_2013.js

@@ -1,314 +1,323 @@
 let isSC2013 = true;
 
 function overwriteRationCalcBases(taxType) {
-    if (typeof rationCalcBases == 'undefined') return;
-    for (let key in rationCalcBases) delete rationCalcBases[key];
+  if (typeof rationCalcBases == "undefined") return;
+  for (let key in rationCalcBases) delete rationCalcBases[key];
 
-    rationCalcBases['人工费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['材料费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['施工机械使用费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['商品砼费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['外购砼构件费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptMarketPrice, isTender);
-    };
-};
+  rationCalcBases["人工费"] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
+  };
+  rationCalcBases["材料费"] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
+  };
+  rationCalcBases["施工机械使用费"] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
+  };
+  rationCalcBases["商品砼费"] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
+  };
+  rationCalcBases["外购砼构件费"] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptMarketPrice, isTender);
+  };
+}
 
 (function overwriteFeeTypes() {
-    if (typeof cpFeeTypes == 'undefined') return;
-    cpFeeTypes = [
-        { type: 'marketDirect', name: '直接费' },
-        { type: 'marketDirectWork', name: '直接工程费' },
-        { type: 'marketLabour', name: '人工费' },
-        { type: 'marketMaterial', name: '材料费' },
-        { type: 'marketMachine', name: '施工机械使用费' },
-        { type: 'otherFee', name: '其他工程费' },
-        { type: 'otherFee1', name: '其他工程费I' },
-        { type: 'otherFee2', name: '其他工程费II' },
-        { type: "indirect", name: '间接费' },
-        { type: 'manage', name: '企业管理费' },
-        { type: 'force', name: '规费' },
-        { type: 'profit', name: '利润' },
-        { type: 'tax', name: '税金' },
-        { type: 'common', name: '建安费' }
-    ];
+  if (typeof cpFeeTypes == "undefined") return;
+  cpFeeTypes = [
+    { type: "marketDirect", name: "直接费" },
+    { type: "marketDirectWork", name: "直接工程费" },
+    { type: "marketLabour", name: "人工费" },
+    { type: "marketMaterial", name: "材料费" },
+    { type: "marketMachine", name: "施工机械使用费" },
+    { type: "otherFee", name: "其他工程费" },
+    { type: "otherFee1", name: "其他工程费I" },
+    { type: "otherFee2", name: "其他工程费II" },
+    { type: "indirect", name: "间接费" },
+    { type: "manage", name: "企业管理费" },
+    { type: "force", name: "规费" },
+    { type: "profit", name: "利润" },
+    { type: "tax", name: "税金" },
+    { type: "common", name: "建安费" },
+  ];
 })();
 
-
-
 if (typeof gljUtil !== "undefined") {
-  gljUtil.getAssUsedPrice = function(g){//四川辅助生产人工费取市场价
+  gljUtil.getAssUsedPrice = function (g) {
+    //四川辅助生产人工费取市场价
     return g.marketPrice;
-  }
+  };
   gljUtil.getElecCode = function () {
     return "865";
-  }
+  };
 }
 
 // 清单基数
-const progression = [
-  '养护单位管理费', 
-];
-const deficiency = { 
-};
-if (typeof baseFigureMap !== 'undefined') {
+const progression = ["养护单位管理费"];
+const deficiency = {};
+if (typeof baseFigureMap !== "undefined") {
   const { fixedFlag } = commonConstants;
   const budgetMap = {
-      // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
-      '公路养护工程费': {
-          base: 'GLYHGCF',
-          fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
-          filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
-          pick: false,
-      },
-      // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
-      '定额公路养护工程费': {
-          base: 'DEGLYHGCF',
-          fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
-          filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
-          pick: false,
-      },
-      // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
-      '养护单位管理费': {
-        isProgressive: true,
-        base: 'YHDWGLF',
-        fixedFlag: null,
-        filter: [fixedFlag.MAINTENANCE_EXPENSES],
-        pick: true,
-      },
-      // 显示:除清单固定类别是“公路养护工程费”、“设备购置费用”、“养护公路工程其他费用”、“一二三部分合计”的以外部分可显示
-      '一、二、三部分合计': {
-        base: 'YESBFHJ',
-        fixedFlag: fixedFlag.ONE_TO_THREE_TOTAL,
-        filter: [ fixedFlag.ONE_TO_THREE_TOTAL],
-        pick: false,
-      },
-      // 显示:仅“价差预备费”可显示
-      '价差预备费': {
-          base: 'JCYBF',
-          fixedFlag: null,
-          filter: [fixedFlag.SPREAD_BUDGET_FEE],
-          pick: true,
-      },
-      '通则扣除保险费': {
-        base: 'TEXT1',
-        fixedFlag: null,
-        filter: [fixedFlag.INSURANCE_FEE],
-        pick: true,
-      },
-      '扣除安全生产费': {
-        base: 'TEXT2',
-        fixedFlag: null,
-        filter: [fixedFlag.EP_WP_INSURANCE_FEE],
-        pick: true,
-      },
-      '扣除保险费': {
-        base: 'TEXT3',
-        fixedFlag: null,
-        filter: [fixedFlag.SAFE_COST],
-        pick: true,
-      },
-};
-  const boqMap = {
+    // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
+    公路养护工程费: {
+      base: "GLYHGCF",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
+    定额公路养护工程费: {
+      base: "DEGLYHGCF",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
 
-      //四川2013读的是 建筑安装工程费行的值
-      '各章清单合计': {
-          base: 'GZQDHJ',
-          fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
-          filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
-          pick: false
-      },
-     // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
-     '养护单位管理费': {
-        isProgressive: true,
-        base: 'YHDWGLF',
-        fixedFlag: null,
-        filter: [fixedFlag.MAINTENANCE_EXPENSES],
-        pick: true,
-      },
-      //仅允许用于固定类别是“第100章至700章清单”以外的清单
-  /*     '专项暂定合计': {
+    "养护工程费(不含保险费、施工环保、水保费、安全生产费)": {
+      base: "YHGCFBHBXHBSBAQ",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE, INSURANCE_FEE, EP_WP_INSURANCE_FEE, SAFE_COST],
+      pick: false,
+    },
+    // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+    养护单位管理费: {
+      isProgressive: true,
+      base: "YHDWGLF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    // 显示:除清单固定类别是“公路养护工程费”、“设备购置费用”、“养护公路工程其他费用”、“一二三部分合计”的以外部分可显示
+    "一、二、三部分合计": {
+      base: "YESBFHJ",
+      fixedFlag: fixedFlag.ONE_TO_THREE_TOTAL,
+      filter: [fixedFlag.ONE_TO_THREE_TOTAL],
+      pick: false,
+    },
+    // 显示:仅“价差预备费”可显示
+    价差预备费: {
+      base: "JCYBF",
+      fixedFlag: null,
+      filter: [fixedFlag.SPREAD_BUDGET_FEE],
+      pick: true,
+    },
+    通则扣除保险费: {
+      base: "TEXT1",
+      fixedFlag: null,
+      filter: [fixedFlag.INSURANCE_FEE],
+      pick: true,
+    },
+    扣除安全生产费: {
+      base: "TEXT2",
+      fixedFlag: null,
+      filter: [fixedFlag.EP_WP_INSURANCE_FEE],
+      pick: true,
+    },
+    扣除保险费: {
+      base: "TEXT3",
+      fixedFlag: null,
+      filter: [fixedFlag.SAFE_COST],
+      pick: true,
+    },
+  };
+  const boqMap = {
+    //四川2013读的是 建筑安装工程费行的值
+    各章清单合计: {
+      base: "GZQDHJ",
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+    养护单位管理费: {
+      isProgressive: true,
+      base: "YHDWGLF",
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    //仅允许用于固定类别是“第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
-      }
+    /*
+     *  清单固定行[第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') {
+if (typeof baseFigureTemplate !== "undefined") {
   const { fixedFlag } = commonConstants;
   baseFigureTemplate.budget = {
-      // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
-      GLYHGCF(tender) {
-          return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
-      },
-      // 定额公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
-      DEGLYHGCF(tender) {
-          return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'rationCommon');
-      },
-      // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
-      YHDWGLF(tender) {
-        const baseFee = this['GLYHGCF'](tender);
-        if (!tender) {
-            calcBase.baseProgressiveFee = baseFee;
-        }
-        return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
-      },
-      // 二三部分合计 算法:取清单固定类别是“一二三部分合计”的金额
-      YESBFHJ(tender) {
-        return cbTools.getBaseFee(fixedFlag.ONE_TO_THREE_TOTAL, tender, 'common');
-      },
-      TEXT1(tender) {
-        const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
-        const fullFeeField = tender ? `${feeField}.tenderTotalFee` : `${feeField}.totalFee`;
-        let genRuleNode = this.findNodeByFlag(fixedFlag.GENERAL_RULE);
-        if (!genRuleNode) {
-            return baseFee;
-        }
-        const deductionFee = projectObj.project.calcProgram.getTotalFee([genRuleNode], [calcBase.activeNode], fullFeeField);
-        return (baseFee - deductionFee).toDecimal(decimalObj.bills.totalPrice);
-      },
-      TEXT2(tender) {
-        return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, 'common');
-      },
-      TEXT3(tender) {
-        return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.INSURANCE_FEE], tender, 'common');
-      },
-      // 基本预备费 算法:以第一、二、三部分费用之和为基数按3%计取
-      JBYBF(tender) {
-        const baseFee = this['YESBFHJ'](tender);
-        return (baseFee * 0.03).toDecimal(decimalObj.bills.totalPrice);
-      },
-      /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+    // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
+    GLYHGCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
+    },
+    // 定额公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
+    DEGLYHGCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "rationCommon");
+    },
+    YHGCFBHBXHBSBAQ(tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
+    },
+    // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
+    YHDWGLF(tender) {
+      const baseFee = this["GLYHGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护单位管理费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    // 二三部分合计 算法:取清单固定类别是“一二三部分合计”的金额
+    YESBFHJ(tender) {
+      return cbTools.getBaseFee(fixedFlag.ONE_TO_THREE_TOTAL, tender, "common");
+    },
+    TEXT1(tender) {
+      const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
+      const fullFeeField = tender ? `${feeField}.tenderTotalFee` : `${feeField}.totalFee`;
+      let genRuleNode = this.findNodeByFlag(fixedFlag.GENERAL_RULE);
+      if (!genRuleNode) {
+        return baseFee;
+      }
+      const deductionFee = projectObj.project.calcProgram.getTotalFee([genRuleNode], [calcBase.activeNode], fullFeeField);
+      return (baseFee - deductionFee).toDecimal(decimalObj.bills.totalPrice);
+    },
+    TEXT2(tender) {
+      return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, "common");
+    },
+    TEXT3(tender) {
+      return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.INSURANCE_FEE], tender, "common");
+    },
+    // 基本预备费 算法:以第一、二、三部分费用之和为基数按3%计取
+    JBYBF(tender) {
+      const baseFee = this["YESBFHJ"](tender);
+      return (baseFee * 0.03).toDecimal(decimalObj.bills.totalPrice);
+    },
+    /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
           价差预备费 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);
-      }
-
+    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 = {
-
     // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
-    'GLYHGCF':function(tender) {
-        return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+    GLYHGCF: function (tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
     },
-      //{各章清单合计}
-      // 四川2013读的是 建筑安装工程费行的值
-    'GZQDHJ': function (tender) {
-        return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+    //{各章清单合计}
+    // 四川2013读的是 建筑安装工程费行的值
+    GZQDHJ: function (tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
     },
     // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
-    'YHDWGLF':function(tender) {
-        const baseFee = this['GLYHGCF'](tender);
-        if (!tender) {
-            calcBase.baseProgressiveFee = baseFee;
-        }
-        return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
-      },
-      //{专项暂定合计}
-      // 第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);
-                  }
-              }
+    YHDWGLF: function (tender) {
+      const baseFee = this["GLYHGCF"](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(
+        baseFee,
+        "养护单位管理费",
+        projectObj.project.property.progressiveInterval,
+        decimalObj.bills.totalPrice,
+        deficiency
+      );
+    },
+    //{专项暂定合计}
+    // 第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);
+        }
       }
+      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);
+    },
   };
 }
 
-
-if (typeof feeRateObject !== 'undefined') {
-    feeRateObject.feeRateSpecialHandle = function (subRate, value) {
-        let result = {};
-        if (subRate.name == "工地转移(km)" && value && value < 50) {//工地转移50km以内按不计算
-            result.valueKey = "不计";
-            result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
-        }
-        return result;
+if (typeof feeRateObject !== "undefined") {
+  feeRateObject.feeRateSpecialHandle = function (subRate, value) {
+    let result = {};
+    if (subRate.name == "工地转移(km)" && value && value < 50) {
+      //工地转移50km以内按不计算
+      result.valueKey = "不计";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
     }
+    return result;
+  };
 }
 
-
-if (typeof module !== 'undefined') {
-    const defaultDecimal = {
-        bills: {unitPrice: 2, totalPrice: 0},
-        ration: {quantity: 3, unitPrice: 2, totalPrice: 0},
-        glj: {quantity: 3, unitPriceHasMix: 2, unitPrice: 2},
-        feeRate: 2,
-        quantity_detail: 4,
-        material:5,//三材系数
-        process: 6,
-        marketPriceProcess: 2,
-        temProcess:6
-    };
-    const defaultCalcMode = 1;
+if (typeof module !== "undefined") {
+  const defaultDecimal = {
+    bills: { unitPrice: 2, totalPrice: 0 },
+    ration: { quantity: 3, unitPrice: 2, totalPrice: 0 },
+    glj: { quantity: 3, unitPriceHasMix: 2, unitPrice: 2 },
+    feeRate: 2,
+    quantity_detail: 4,
+    material: 5, //三材系数
+    process: 6,
+    marketPriceProcess: 2,
+    temProcess: 6,
+  };
+  const defaultCalcMode = 1;
   module.exports = {
-      getDefalutAssistProductionFeeRate: function () {
-          return 5
-      },
-      progression,
-      deficiency,
-      defaultCalcMode,
-      defaultDecimal
+    getDefalutAssistProductionFeeRate: function () {
+      return 5;
+    },
+    progression,
+    deficiency,
+    defaultCalcMode,
+    defaultDecimal,
   };
-
 }