sichuan_2018.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. // 部颁2018计价标准
  2. function overwriteRationCalcBases() {
  3. if (typeof rationCalcBases == "undefined") return;
  4. for (let key in rationCalcBases) delete rationCalcBases[key];
  5. rationCalcBases["人工费"] = function (node, isTender) {
  6. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
  7. };
  8. rationCalcBases["材料费"] = function (node, isTender) {
  9. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
  10. };
  11. rationCalcBases["施工机械使用费"] = function (node, isTender) {
  12. return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
  13. };
  14. rationCalcBases["施工机械人工费"] = function (node, isTender) {
  15. return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
  16. };
  17. rationCalcBases["设备购置费"] = function (node, isTender) {
  18. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
  19. };
  20. rationCalcBases["定额人工费"] = function (node, isTender) {
  21. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
  22. };
  23. rationCalcBases["定额材料费"] = function (node, isTender) {
  24. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
  25. };
  26. rationCalcBases["定额施工机械使用费"] = function (node, isTender) {
  27. return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptBasePrice, isTender);
  28. };
  29. rationCalcBases["定额商品砼费"] = function (node, isTender) {
  30. return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptBasePrice, isTender);
  31. };
  32. rationCalcBases["定额设备费"] = function (node, isTender) {
  33. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
  34. };
  35. rationCalcBases["定额外购砼构件费"] = function (node, isTender) {
  36. return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptBasePrice, isTender);
  37. };
  38. rationCalcBases["定额绿化苗木费"] = function (node, isTender) {
  39. return calcTools.rationBaseFee(node, [gljType.GREEN_SEEDLING], priceTypes.ptBasePrice, isTender);
  40. };
  41. }
  42. (function overwriteFeeTypes() {
  43. if (typeof cpFeeTypes == "undefined") return;
  44. cpFeeTypes = [
  45. {
  46. type: "marketLabour",
  47. name: "人工费",
  48. },
  49. {
  50. type: "marketMaterial",
  51. name: "材料费",
  52. },
  53. {
  54. type: "marketMachine",
  55. name: "施工机械使用费",
  56. },
  57. {
  58. type: "marketMachineLabour",
  59. name: "施工机械人工费",
  60. },
  61. {
  62. type: "marketEquipment",
  63. name: "设备购置费",
  64. },
  65. {
  66. type: "marketDirect",
  67. name: "直接费",
  68. },
  69. {
  70. type: "labour",
  71. name: "定额人工费",
  72. },
  73. {
  74. type: "material",
  75. name: "定额材料费",
  76. },
  77. {
  78. type: "machine",
  79. name: "定额施工机械使用费",
  80. },
  81. {
  82. type: "equipment",
  83. name: "定额设备费",
  84. },
  85. {
  86. type: "direct",
  87. name: "定额直接费",
  88. },
  89. {
  90. type: "measure",
  91. name: "措施费",
  92. },
  93. {
  94. type: "measure1",
  95. name: "措施费I",
  96. },
  97. {
  98. type: "measure2",
  99. name: "措施费II",
  100. },
  101. {
  102. type: "manage",
  103. name: "企业管理费",
  104. },
  105. {
  106. type: "force",
  107. name: "规费",
  108. },
  109. {
  110. type: "profit",
  111. name: "利润",
  112. },
  113. {
  114. type: "tax",
  115. name: "税金",
  116. },
  117. {
  118. type: "common",
  119. name: "建安费",
  120. },
  121. {
  122. type: "rationCommon",
  123. name: "定额建安费",
  124. },
  125. ];
  126. })();
  127. // 在新建分段的时候需要隐藏养护类别和费用标准
  128. if (typeof $ !== "undefined") {
  129. // 后端也有引用这个文件,后端引用时$没有定义会报错
  130. $(document).ready(function () {
  131. $("#tender-engineering-group").hide();
  132. $("#tender-feeStandard-group").hide();
  133. });
  134. }
  135. //全国工地转移、综合里程费率值修改特殊处理
  136. if (typeof feeRateObject !== "undefined") {
  137. feeRateObject.feeRateSpecialHandle = function (subRate, value) {
  138. let result = {};
  139. if (subRate.name == "工地转移(km)" && value && value < 50) {
  140. //工地转移50km以内按50km算
  141. result.valueKey = "50";
  142. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
  143. }
  144. if (subRate.name == "综合里程(km)" && value && value < 3) {
  145. //综合里程3km以内按3km算
  146. result.valueKey = "3";
  147. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
  148. }
  149. return result;
  150. };
  151. }
  152. // 清单基数
  153. const progression = ["施工场地建设费", "养护单位(业主)管理费", "建设项目信息化费", "工程监理费", "设计文件审查费", "前期工作费"];
  154. const deficiency = {};
  155. if (typeof baseFigureMap !== "undefined") {
  156. const { fixedFlag } = commonConstants;
  157. baseFigureMap.boq = {
  158. // 取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算+全额设备税金)。除清单固定类别是“建筑安装工程费”的以外部分可显示。
  159. 定额建筑安装工程费: {
  160. base: "DEJZAZGCFSBSS",
  161. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  162. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  163. pick: false,
  164. },
  165. // 取清单固定类别是“建筑安装工程费”的金额,扣除设备购置。仅固定类别为“保险费”可显示。
  166. "建筑安装工程费(不含设备费)": {
  167. base: "JZAZGCFBHSB",
  168. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  169. filter: [fixedFlag.INSURANCE_FEE],
  170. pick: true,
  171. },
  172. 各章清单合计: {
  173. base: "GZQDHJ",
  174. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  175. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  176. pick: false,
  177. },
  178. /*
  179. * 清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
  180. * 因此{100章以外合计}不设置关联的清单固定行
  181. * */
  182. // 仅允许用于固定类别为“100章清单”引用
  183. "100章以外清单合计": {
  184. base: "YBZYHQDHJ",
  185. fixedFlag: null,
  186. filter: [fixedFlag.ONE_HUNDRED_BILLS],
  187. pick: true,
  188. },
  189. // 显示:仅清单固定类别是“工程建设其他费”部分可显示
  190. "养护单位(业主)管理费": {
  191. isProgressive: true,
  192. base: "JSDWYZGLF",
  193. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  194. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  195. pick: true,
  196. },
  197. // 显示:仅清单固定类别是“工程建设其他费”部分可显示
  198. 建设项目信息化费: {
  199. isProgressive: true,
  200. base: "JSXMXXHF",
  201. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  202. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  203. pick: true,
  204. },
  205. // 显示:仅清单固定类别是“工程建设其他费”部分可显示
  206. 工程监理费: {
  207. isProgressive: true,
  208. base: "GCJLF",
  209. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  210. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  211. pick: true,
  212. },
  213. // 显示:仅清单固定类别是“工程建设其他费”部分可显示
  214. 设计文件审查费: {
  215. isProgressive: true,
  216. base: "SJWJSCF",
  217. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  218. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  219. pick: true,
  220. },
  221. // 显示:仅清单固定类别是“工程建设其他费”部分可显示
  222. 前期工作费: {
  223. isProgressive: true,
  224. base: "QQGZF",
  225. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  226. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  227. pick: true,
  228. },
  229. };
  230. }
  231. if (typeof baseFigureTemplate !== "undefined") {
  232. const { fixedFlag } = commonConstants;
  233. baseFigureTemplate.boq = {
  234. // 定额建筑安装工程费 算法:取“定额建筑安装工程费”的金额
  235. DEJZAZGCF(tender) {
  236. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "rationCommon");
  237. },
  238. DEJZAZGCFSBSS(tender) {
  239. let baseFee = this["DEJZAZGCF"](tender);
  240. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  241. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  242. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  243. return baseFee.toDecimal(decimalObj.bills.totalPrice);
  244. },
  245. JZAZGCFBHSB(tender) {
  246. let baseFee = this["JZAZGCF"](tender);
  247. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  248. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender);
  249. baseFee = (baseFee - equipmentFee).toDecimal(decimalObj.process);
  250. return baseFee.toDecimal(decimalObj.bills.totalPrice);
  251. },
  252. //{各章清单合计}
  253. // 取清单固定类别是“第100章至700章清单”的金额
  254. GZQDHJ: function (tender) {
  255. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
  256. },
  257. //{100章以外清单合计}
  258. // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
  259. // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
  260. YBZYHQDHJ: function (tender) {
  261. let oneToSeven = cbTools.findNodeByFlag(fixedFlag.CONSTRUCTION_INSTALL_FEE);
  262. if (!oneToSeven) {
  263. return 0;
  264. }
  265. //100-700章固定节点的所有子节点
  266. let allChildren = [];
  267. function getChildren(nodes) {
  268. allChildren = allChildren.concat(nodes);
  269. for (let node of nodes) {
  270. if (node.children.length > 0) {
  271. getChildren(node.children);
  272. }
  273. }
  274. }
  275. getChildren(oneToSeven.children);
  276. //扣除的节点:100章的节点[100-200)
  277. let deductNodes = allChildren.filter(cbTools.withingOneHundred);
  278. //计算金额
  279. let fullFeeField = tender ? "common.tenderTotalFee" : "common.totalFee";
  280. return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
  281. },
  282. // 养护单位(业主)管理费 算法:按“定额建筑安装工程费”总和为基数,以累进办法计算
  283. // 【变更】:算法:按【固定类别是“建筑安装工程费”的“定额建安费”,扣除“设备”的“定额设备费”*60%】为基数,以累进办法计算。
  284. JSDWYZGLF(tender) {
  285. let baseFee = baseFigureTemplate.boq["DEJZAZGCF"](tender);
  286. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  287. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  288. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  289. if (!tender) {
  290. calcBase.baseProgressiveFee = baseFee;
  291. }
  292. return calculateUtil.getProgressiveFee(
  293. baseFee,
  294. "养护单位(业主)管理费",
  295. projectObj.project.property.progressiveInterval,
  296. decimalObj.bills.totalPrice,
  297. deficiency
  298. );
  299. },
  300. // 建设项目信息化费 算法:按“定额建筑安装工程费”总和为基数,以累进办法计算
  301. // 【变更】:算法:按【固定类别是“建筑安装工程费”的“定额建安费”,扣除“设备”的“定额设备费”*60%】为基数,以累进办法计算。
  302. JSXMXXHF(tender) {
  303. let baseFee = baseFigureTemplate.boq["DEJZAZGCF"](tender);
  304. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  305. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  306. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  307. if (!tender) {
  308. calcBase.baseProgressiveFee = baseFee;
  309. }
  310. return calculateUtil.getProgressiveFee(
  311. baseFee,
  312. "建设项目信息化费",
  313. projectObj.project.property.progressiveInterval,
  314. decimalObj.bills.totalPrice,
  315. deficiency
  316. );
  317. },
  318. // 工程监理费 算法:按“定额建筑安装工程费”总和为基数,以累进办法计算
  319. // 【变更】:算法:按【固定类别是“建筑安装工程费”的“定额建安费”,扣除“设备”的“定额设备费”*60%】为基数,以累进办法计算。
  320. GCJLF(tender) {
  321. let baseFee = baseFigureTemplate.boq["DEJZAZGCF"](tender);
  322. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  323. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  324. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  325. if (!tender) {
  326. calcBase.baseProgressiveFee = baseFee;
  327. }
  328. return calculateUtil.getProgressiveFee(baseFee, "工程监理费", projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  329. },
  330. // 设计文件审查费 算法:按“定额建筑安装工程费”总和为基数,以累进办法计算
  331. // 【变更】:算法:按【固定类别是“建筑安装工程费”的“定额建安费”,扣除“设备”的“定额设备费”*60%】为基数,以累进办法计算。
  332. SJWJSCF(tender) {
  333. let baseFee = baseFigureTemplate.boq["DEJZAZGCF"](tender);
  334. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  335. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  336. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  337. if (!tender) {
  338. calcBase.baseProgressiveFee = baseFee;
  339. }
  340. return calculateUtil.getProgressiveFee(
  341. baseFee,
  342. "设计文件审查费",
  343. projectObj.project.property.progressiveInterval,
  344. decimalObj.bills.totalPrice,
  345. deficiency
  346. );
  347. },
  348. // 前期工作费 算法:按“定额建筑安装工程费”总和为基数,以累进办法计算
  349. // 变更:【算法】:按【固定类别是“建筑安装工程费”的“定额建安费”,扣除“设备”的“定额设备费”*60%】为基数,以累进办法计算。
  350. QQGZF(tender) {
  351. let baseFee = baseFigureTemplate.boq["DEJZAZGCF"](tender);
  352. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  353. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  354. baseFee = (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.process);
  355. if (!tender) {
  356. calcBase.baseProgressiveFee = baseFee;
  357. }
  358. return calculateUtil.getProgressiveFee(baseFee, "前期工作费", projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  359. },
  360. };
  361. }
  362. if (typeof projectObj !== "undefined") {
  363. projectObj.isInsertEquipmentVisable = function (selected) {
  364. return true; //全国不管是预算或者工程量清单,都是显示
  365. };
  366. projectObj.getSaveProductionCostCode = function () {
  367. //公路云里18的清单范本安全生产费是102-3的;养护云里浙江养护的安全生产费是102-4。
  368. return "102-3";
  369. };
  370. }
  371. const defaultCalcMode = 1;
  372. if (typeof module !== "undefined" && !module.nodeType) {
  373. module.exports = {
  374. progression,
  375. defaultCalcMode,
  376. deficiency,
  377. };
  378. }