henan_richang_2022.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. // 河南日常养护(2022)
  2. let filterByProjectKind = true;
  3. function overwriteRationCalcBases() {
  4. if (typeof rationCalcBases == "undefined") return;
  5. rationCalcBases = {
  6. 人工费: function (node, isTender) {
  7. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
  8. },
  9. 材料费: function (node, isTender) {
  10. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
  11. },
  12. 施工机械使用费: function (node, isTender) {
  13. return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptMarketPrice, isTender);
  14. },
  15. 施工机械人工费: function (node, isTender) {
  16. return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
  17. },
  18. 定额商品砼费: function (node, isTender) {
  19. return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptBasePrice, isTender);
  20. },
  21. 定额外购砼构件费: function (node, isTender) {
  22. return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptBasePrice, isTender);
  23. },
  24. 定额绿化苗木费: function (node, isTender) {
  25. return calcTools.rationBaseFee(node, [gljType.GREEN_SEEDLING], priceTypes.ptBasePrice, isTender);
  26. },
  27. 设备购置费: function (node, isTender) {
  28. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
  29. },
  30. 定额人工费: function (node, isTender) {
  31. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
  32. },
  33. 定额材料费: function (node, isTender) {
  34. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
  35. },
  36. 定额施工机械使用费: function (node, isTender) {
  37. return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptBasePrice, isTender);
  38. },
  39. 定额设备购置费: function (node, isTender) {
  40. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
  41. },
  42. 指标人工费: function (node, isTender) {
  43. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
  44. },
  45. 指标材料费: function (node, isTender) {
  46. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
  47. },
  48. 指标施工机械使用费: function (node, isTender) {
  49. return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptBasePrice, isTender);
  50. },
  51. 指标设备购置费: function (node, isTender) {
  52. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
  53. },
  54. };
  55. }
  56. function overwriteFeeTypesWhenHasProperty(engineeringName) {
  57. if (typeof cpFeeTypes == "undefined") return;
  58. cpFeeTypes = [
  59. { type: "marketLabour", name: "人工费" },
  60. { type: "marketMaterial", name: "材料费" },
  61. { type: "marketMachine", name: "施工机械使用费" },
  62. { type: "marketMachineLabour", name: "施工机械人工费" },
  63. { type: "marketEquipment", name: "设备购置费" },
  64. { type: "marketDirect", name: "直接费" },
  65. ];
  66. if (engineeringName === "日常养护") {
  67. cpFeeTypes.push(
  68. { type: "labour", name: "定额人工费" },
  69. { type: "material", name: "定额材料费" },
  70. { type: "machine", name: "定额施工机械使用费" },
  71. { type: "equipment", name: "定额设备费" },
  72. { type: "direct", name: "定额直接费" }
  73. );
  74. } else {
  75. cpFeeTypes.push(
  76. { type: "indexLabour", name: "指标人工费" },
  77. { type: "indexMaterial", name: "指标材料费" },
  78. { type: "indexMachine", name: "指标施工机械使用费" },
  79. { type: "indexEquipment", name: "指标设备购置费" },
  80. { type: "indexDirect", name: "指标直接费" },
  81. { type: "indexCommon", name: "指标建安费" }
  82. );
  83. }
  84. cpFeeTypes.push(
  85. { type: "measure", name: "措施费" },
  86. { type: "manage", name: "企业管理费" },
  87. { type: "force", name: "规费" },
  88. { type: "profit", name: "利润" },
  89. { type: "tax", name: "税金" },
  90. { type: "common", name: "建安费" },
  91. { type: "rationCommon", name: "定额建安费" }
  92. );
  93. }
  94. if (typeof feeRateObject !== "undefined") {
  95. feeRateObject.feeRateSpecialHandle = function (subRate, value) {
  96. let result = {};
  97. if (subRate.name == "综合里程(km)" && value && value < 3) {
  98. //综合里程3km以内按3km算
  99. result.valueKey = "3";
  100. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
  101. }
  102. if (subRate.name == "工地转移(km)" && value && value < 50) {
  103. //工地转移50km以内按50km算
  104. result.valueKey = "50";
  105. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
  106. }
  107. if (subRate.name == "施工进出场(km)" && value && value < 5) {
  108. //施工进出场5km以内按5km算
  109. result.valueKey = "5";
  110. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
  111. }
  112. return result;
  113. };
  114. }
  115. // 清单基数
  116. const littleFixNames = ["小修", "养护检查预算", "日常养护预算"];
  117. const progression = ["养护管理单位项目管理费", "工程监理费", "设计文件审查费"];
  118. const deficiency = { 工程监理费: 10000, 设计文件审查费: 10000 };
  119. if (typeof baseFigureMap !== "undefined") {
  120. const { fixedFlag } = commonConstants;
  121. const budgetMap = {
  122. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
  123. 建筑安装工程费: {
  124. base: "JZAZGCF",
  125. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  126. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  127. pick: false,
  128. },
  129. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
  130. "建筑安装工程费(不含设备费)": {
  131. base: "JZAZGCFBHSB",
  132. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  133. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  134. pick: false,
  135. },
  136. "建筑安装工程费(不含安全生产费)": {
  137. base: "JZAZGCFBHAQSCF",
  138. // fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  139. fixedFlag: null,
  140. filter: [fixedFlag.SAFE_COST],
  141. pick: true,
  142. },
  143. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
  144. 定额建筑安装工程费: {
  145. base: "DEJZAZGCF",
  146. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  147. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  148. pick: false,
  149. projectKind: ["日常养护"],
  150. },
  151. "定额建筑安装工程费(不含专项费用)": {
  152. base: "DEJZAZGCFBHZXF",
  153. fixedFlag: null,
  154. filter: [fixedFlag.SPECIAL_COST],
  155. pick: true,
  156. projectKind: ["日常养护"],
  157. },
  158. 指标建筑安装工程费: {
  159. base: "DEJZAZGCF",
  160. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  161. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  162. pick: false,
  163. projectKind: ["日常养护年度预算"],
  164. },
  165. "指标建筑安装工程费(不含专项费用)": {
  166. base: "DEJZAZGCFBHZXF",
  167. fixedFlag: null,
  168. filter: [fixedFlag.SPECIAL_COST],
  169. pick: true,
  170. projectKind: ["日常养护年度预算"],
  171. },
  172. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  173. 养护管理单位项目管理费: {
  174. isProgressive: true,
  175. base: "YHGLDWXMGLF",
  176. fixedFlag: null,
  177. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  178. pick: true,
  179. },
  180. 信息化费: {
  181. isProgressive: true,
  182. base: "YHXMXXHF",
  183. fixedFlag: null,
  184. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  185. pick: true,
  186. },
  187. 工程监理费: {
  188. isProgressive: true,
  189. base: "YHGCJLF",
  190. fixedFlag: null,
  191. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  192. pick: true,
  193. },
  194. 前期工作费: {
  195. isProgressive: true,
  196. base: "QQGZF",
  197. fixedFlag: null,
  198. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  199. pick: true,
  200. },
  201. 施工场地建设费: {
  202. isProgressive: true,
  203. base: "SGCDJSF",
  204. fixedFlag: null,
  205. filter: [fixedFlag.CONSTRUCTION_PLANT_COST],
  206. pick: true,
  207. },
  208. // 显示:除清单固定类别是“一二三四部分合计”的以外部分可显示。
  209. 一二三四部分合计: {
  210. base: "YESSBFHJ",
  211. fixedFlag: fixedFlag.ONE_TO_FOUR_TOTAL,
  212. filter: [fixedFlag.ONE_TO_FOUR_TOTAL],
  213. pick: false,
  214. },
  215. // 显示:仅“价差预备费”可显示
  216. 价差预备费: {
  217. base: "JCYBF",
  218. fixedFlag: null,
  219. filter: [fixedFlag.SPREAD_BUDGET_FEE],
  220. pick: true,
  221. },
  222. };
  223. const boqMap = {
  224. //仅允许用于固定类别是“第100章至700章清单”以外的清单
  225. 专项暂定合计: {
  226. base: "ZXZDHJ",
  227. fixedFlag: null,
  228. filter: [fixedFlag.ONE_SEVEN_BILLS],
  229. pick: false,
  230. },
  231. /*
  232. * 清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
  233. * 因此{100章以外合计}不设置关联的清单固定行
  234. * */
  235. //仅允许用于固定类别为“100章清单”引用
  236. "100章以外清单合计": {
  237. base: "YBZYHQDHJ",
  238. fixedFlag: null,
  239. filter: [fixedFlag.ONE_HUNDRED_BILLS],
  240. pick: true,
  241. },
  242. 定额建筑安装工程费: {
  243. base: "DEJZAZGCF",
  244. fixedFlag: null,
  245. filter: [fixedFlag.ONE_HUNDRED_BILLS],
  246. pick: true,
  247. },
  248. };
  249. baseFigureMap.budget = budgetMap;
  250. baseFigureMap.boq = boqMap;
  251. }
  252. // 是否是小修
  253. const isLittleFix = (engName) => {
  254. return littleFixNames.some((name) => new RegExp(name).test(engName));
  255. };
  256. if (typeof baseFigureTemplate !== "undefined") {
  257. const { fixedFlag } = commonConstants;
  258. baseFigureTemplate.budget = {
  259. // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的建安费。
  260. JZAZGCF(tender) {
  261. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
  262. },
  263. // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
  264. JZAZGCFBHSB(tender) {
  265. // const engName = projectObj.project.property.engineeringName;
  266. // if (isLittleFix(engName)) {
  267. // 小修的没有设备购置固定行
  268. const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, "common");
  269. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  270. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "common");
  271. return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
  272. // } else {
  273. // return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, "common");
  274. // }
  275. },
  276. JZAZGCFBHAQSCF(tender) {
  277. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, "common");
  278. },
  279. // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
  280. DEJZAZGCF(tender) {
  281. // const engName = projectObj.project.property.engineeringName;
  282. const feeField = "rationCommon";
  283. // if (isLittleFix(engName)) {
  284. // 小修的没有设备购置固定行
  285. const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, feeField);
  286. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  287. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  288. return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
  289. // } else {
  290. // const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
  291. // //建安费扣除定额设备购置费
  292. // const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, deductFlags, tender, feeField, false);
  293. // //定额设备购置费
  294. // const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, "equipment");
  295. // const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, "tax");
  296. // return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
  297. // }
  298. },
  299. DEJZAZGCFBHZXF(tender) {
  300. // 定额建筑安装工程费(不含专项费用)
  301. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SPECIAL_COST], tender, "rationCommon", true);
  302. },
  303. // 设备费 算法:取清单固定类别是“设备购置”的建安费
  304. SBF(tender) {
  305. return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, "common");
  306. },
  307. // 设备费 算法:取清单固定类别是“设备购置”的定额建安费
  308. DESBF(tender) {
  309. return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, "rationCommon");
  310. },
  311. // 养护工程费 算法:取清单固定类别是“养护工程费”的金额。
  312. YHGCF(tender) {
  313. return cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, "common");
  314. },
  315. // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
  316. DEYHGCF(tender) {
  317. // const engName = projectObj.project.property.engineeringName;
  318. const feeField = "rationCommon";
  319. // if (isLittleFix(engName)) {
  320. // 小修的没有设备购置固定行
  321. const baseFee = cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, feeField);
  322. const fixedNode = projectObj.project.mainTree.items.find((node) => node.getFlag() === fixedFlag.MAINTENANCE_FEE);
  323. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  324. return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
  325. // } else {
  326. // const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
  327. // //建安费扣除定额设备购置费
  328. // const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
  329. // //定额设备购置费
  330. // const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, "equipment");
  331. // const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, "tax");
  332. // return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
  333. // }
  334. },
  335. // 养护管理单位项目管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
  336. YHGLDWXMGLF(tender) {
  337. const baseFee = this["DEJZAZGCF"](tender);
  338. if (!tender) {
  339. calcBase.baseProgressiveFee = baseFee;
  340. }
  341. return calculateUtil.getProgressiveFee(
  342. baseFee,
  343. "养护管理单位项目管理费",
  344. projectObj.project.property.progressiveInterval,
  345. decimalObj.bills.totalPrice,
  346. deficiency
  347. );
  348. },
  349. // 工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  350. YHGCJLF(tender) {
  351. const baseFee = this["DEJZAZGCF"](tender);
  352. if (!tender) {
  353. calcBase.baseProgressiveFee = baseFee;
  354. }
  355. return calculateUtil.getProgressiveFee(baseFee, "工程监理费", projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  356. },
  357. // 前期工作费 以{定额建筑安装工程费}为基数,采用累进办法计算。仅清单固定类别是“养护工程其他费”部分可显示。
  358. QQGZF(tender) {
  359. const baseFee = this["DEJZAZGCF"](tender);
  360. if (!tender) {
  361. calcBase.baseProgressiveFee = baseFee;
  362. }
  363. return calculateUtil.getProgressiveFee(baseFee, "前期工作费", projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  364. },
  365. // 养护工程监理费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  366. YHGCJLFLXGC(tender) {
  367. const baseFee = this["DEJZAZGCF"](tender);
  368. if (!tender) {
  369. calcBase.baseProgressiveFee = baseFee;
  370. }
  371. return calculateUtil.getProgressiveFee(
  372. baseFee,
  373. "养护工程监理费(路线工程)",
  374. projectObj.project.property.progressiveInterval,
  375. decimalObj.bills.totalPrice,
  376. deficiency
  377. );
  378. },
  379. // 养护工程监理费(桥梁及隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  380. YHGCJLFQLJSDGC(tender) {
  381. const baseFee = this["DEJZAZGCF"](tender);
  382. if (!tender) {
  383. calcBase.baseProgressiveFee = baseFee;
  384. }
  385. return calculateUtil.getProgressiveFee(
  386. baseFee,
  387. "养护工程监理费(桥梁及隧道工程)",
  388. projectObj.project.property.progressiveInterval,
  389. decimalObj.bills.totalPrice,
  390. deficiency
  391. );
  392. },
  393. // 设计文件审查费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  394. SJWJSCF(tender) {
  395. const baseFee = this["DEJZAZGCF"](tender);
  396. if (!tender) {
  397. calcBase.baseProgressiveFee = baseFee;
  398. }
  399. return calculateUtil.getProgressiveFee(
  400. baseFee,
  401. "设计文件审查费",
  402. projectObj.project.property.progressiveInterval,
  403. decimalObj.bills.totalPrice,
  404. deficiency
  405. );
  406. },
  407. // {信息化费} 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。仅清单固定类别是“养护工程其他费”部分可显示。(计算结果去掉不足10000元时按10000元计取)
  408. YHXMXXHF(tender) {
  409. const baseFee = this["DEJZAZGCF"](tender);
  410. if (!tender) {
  411. calcBase.baseProgressiveFee = baseFee;
  412. }
  413. return calculateUtil.getProgressiveFee(baseFee, "信息化费", projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  414. },
  415. // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  416. YHGCSJFLXGC(tender) {
  417. const baseFee = this["DEJZAZGCF"](tender);
  418. if (!tender) {
  419. calcBase.baseProgressiveFee = baseFee;
  420. }
  421. return calculateUtil.getProgressiveFee(
  422. baseFee,
  423. "养护工程设计费(路线工程)",
  424. projectObj.project.property.progressiveInterval,
  425. decimalObj.bills.totalPrice,
  426. deficiency
  427. );
  428. },
  429. // 养护工程设计费(独立桥梁、隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  430. YHGCSJFQLSDGC(tender) {
  431. const baseFee = this["DEJZAZGCF"](tender);
  432. if (!tender) {
  433. calcBase.baseProgressiveFee = baseFee;
  434. }
  435. return calculateUtil.getProgressiveFee(
  436. baseFee,
  437. "养护工程设计费(独立桥梁、隧道工程)",
  438. projectObj.project.property.progressiveInterval,
  439. decimalObj.bills.totalPrice,
  440. deficiency
  441. );
  442. },
  443. // 施工场地建设费 算法:以{定额养护工程费}为基数,采用累进办法计算
  444. SGCDJSF(tender) {
  445. const baseFee = this["DEJZAZGCFBHZXF"](tender);
  446. // 小修保养类别,施工场地建设费的计算基数定额建筑安装工程费超过30000000元时,不进行累进计算,直接按500000元计取。
  447. // const engName = projectObj.project.property.engineeringName;
  448. // if (isLittleFix(engName) && baseFee > 30000000) {
  449. // return 500000;
  450. // }
  451. if (!tender) {
  452. calcBase.baseProgressiveFee = baseFee;
  453. }
  454. return calculateUtil.getProgressiveFee(
  455. baseFee,
  456. "施工场地建设费",
  457. projectObj.project.property.progressiveInterval,
  458. decimalObj.bills.totalPrice,
  459. deficiency
  460. );
  461. },
  462. // 一二三四部分合计 算法:取清单固定类别是“一二三四部分合计”的金额
  463. YESSBFHJ(tender) {
  464. return cbTools.getBaseFee(fixedFlag.ONE_TO_FOUR_TOTAL, tender, "common");
  465. },
  466. /* 价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
  467. 价差预备费 P * [(1+i)^(n-1) -1]
  468. P——建筑安装工程费总额(元);
  469. i——年工程造价增涨率(%);
  470. n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
  471. */
  472. JCYBF(tender) {
  473. //建筑安装工程费作为基数
  474. const installFee = this["JZAZGCF"](tender);
  475. //年造价增涨
  476. const costGrowthRate = calcBase.project.property.costGrowthRate ? calcBase.project.property.costGrowthRate : 0;
  477. //增涨计费年限
  478. const growthPeriod = projectObj.project.property.growthPeriod ? calcBase.project.property.growthPeriod : 0;
  479. //= P * [(1+i)^(n-1) -1]
  480. return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
  481. },
  482. // 设计文件审查费(一阶段) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  483. // 设计文件审查费(一阶段)和 设计文件审查费(二阶段)两个基数计算后金额不满2000元均应按2000元计。
  484. SJWJSCFYJD(tender) {
  485. const baseFee = this["DEJZAZGCF"](tender);
  486. if (!tender) {
  487. calcBase.baseProgressiveFee = baseFee;
  488. }
  489. const rst = calculateUtil.getProgressiveFee(
  490. baseFee,
  491. "设计文件审查费(一阶段)",
  492. projectObj.project.property.progressiveInterval,
  493. decimalObj.bills.totalPrice,
  494. deficiency
  495. );
  496. return Math.max(rst, 2000);
  497. },
  498. SJWJSCFEJD(tender) {
  499. const baseFee = this["DEJZAZGCF"](tender);
  500. if (!tender) {
  501. calcBase.baseProgressiveFee = baseFee;
  502. }
  503. const rst = calculateUtil.getProgressiveFee(
  504. baseFee,
  505. "设计文件审查费(二阶段)",
  506. projectObj.project.property.progressiveInterval,
  507. decimalObj.bills.totalPrice,
  508. deficiency
  509. );
  510. return Math.max(rst, 2000);
  511. },
  512. GCSJFYJD(tender) {
  513. const baseFee = this["DEJZAZGCF"](tender);
  514. if (!tender) {
  515. calcBase.baseProgressiveFee = baseFee;
  516. }
  517. return calculateUtil.getProgressiveFee(
  518. baseFee,
  519. "工程设计费(一阶段)",
  520. projectObj.project.property.progressiveInterval,
  521. decimalObj.bills.totalPrice,
  522. deficiency
  523. );
  524. },
  525. GCSJFEJD(tender) {
  526. const baseFee = this["DEJZAZGCF"](tender);
  527. if (!tender) {
  528. calcBase.baseProgressiveFee = baseFee;
  529. }
  530. return calculateUtil.getProgressiveFee(
  531. baseFee,
  532. "工程设计费(二阶段)",
  533. projectObj.project.property.progressiveInterval,
  534. decimalObj.bills.totalPrice,
  535. deficiency
  536. );
  537. },
  538. ZBDLFJBDBZF(tender) {
  539. const baseFee = this["DEJZAZGCF"](tender);
  540. if (!tender) {
  541. calcBase.baseProgressiveFee = baseFee;
  542. }
  543. return calculateUtil.getProgressiveFee(
  544. baseFee,
  545. "招标代理费及标底编制费",
  546. projectObj.project.property.progressiveInterval,
  547. decimalObj.bills.totalPrice,
  548. deficiency
  549. );
  550. },
  551. ZBDLFJBDBZFWSXZBDL(tender) {
  552. const baseFee = this["DEJZAZGCF"](tender);
  553. if (!tender) {
  554. calcBase.baseProgressiveFee = baseFee;
  555. }
  556. return calculateUtil.getProgressiveFee(
  557. baseFee,
  558. "招标代理费及标底编制费(未实行招标代理)",
  559. projectObj.project.property.progressiveInterval,
  560. decimalObj.bills.totalPrice,
  561. deficiency
  562. );
  563. },
  564. };
  565. baseFigureTemplate.boq = {
  566. //{专项暂定合计}
  567. // 第100章至700章清单行的暂估合价
  568. ZXZDHJ: function (tender) {
  569. return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, "estimate");
  570. },
  571. //{100章以外清单合计}
  572. // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
  573. // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
  574. YBZYHQDHJ: function (tender) {
  575. let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
  576. if (!oneToSeven) {
  577. return 0;
  578. }
  579. //100-700章固定节点的所有子节点
  580. let allChildren = [];
  581. function getChildren(nodes) {
  582. allChildren = allChildren.concat(nodes);
  583. for (let node of nodes) {
  584. if (node.children.length > 0) {
  585. getChildren(node.children);
  586. }
  587. }
  588. }
  589. getChildren(oneToSeven.children);
  590. //扣除的节点:100章的节点[100-200)
  591. let deductNodes = allChildren.filter(cbTools.withingOneHundred);
  592. //计算金额
  593. let fullFeeField = tender ? "common.tenderTotalFee" : "common.totalFee";
  594. return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
  595. },
  596. // 清单项目基数:{定额建筑安装工程费} 算法:取清单固定类别是“第100章至700章清单”的定额建安费(其中定额设备费按40%计算,税金是全额计算)。显示:只有清单固定类别是“第100章清单总则”的部分可显示。
  597. DEJZAZGCF(tender) {
  598. const baseFee = cbTools.getBaseFee(fixedFlag.ONE_SEVEN_BILLS, tender, "rationCommon");
  599. const fixedNode = projectObj.project.mainTree.roots.find((node) => node.getFlag() === fixedFlag.ONE_SEVEN_BILLS);
  600. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, "equipment");
  601. return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
  602. },
  603. };
  604. }
  605. if (typeof module !== "undefined") {
  606. // 甘肃养护,项目属性-小数位数,费率小数位数默认为2。
  607. const defaultDecimal = {
  608. bills: { unitPrice: 2, totalPrice: 0 },
  609. ration: { quantity: 3, unitPrice: 2, totalPrice: 0 },
  610. glj: { quantity: 3, unitPriceHasMix: 2, unitPrice: 2 },
  611. feeRate: 4,
  612. quantity_detail: 4,
  613. material: 5, //三材系数
  614. process: 6,
  615. marketPriceProcess: 2,
  616. temProcess: 6,
  617. };
  618. module.exports = {
  619. progression,
  620. deficiency,
  621. defaultDecimal,
  622. };
  623. }
  624. // 不显示但可的基数
  625. const invisibleBases = ["设备费", "定额设备费"];
  626. if (typeof projectObj !== "undefined") {
  627. projectObj.isInsertEquipmentVisable = function (selected) {
  628. if (projectObj.project.property.valuationType !== "ration") {
  629. //预算项目中,右键“插入设备”,仅在第一部分中显示。
  630. return projectObj.project.Bills.isConstructionInstall(selected);
  631. }
  632. return true;
  633. };
  634. }