gansu_2021.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. if (typeof feeRateObject !== 'undefined') {
  2. feeRateObject.feeRateSpecialHandle = function (subRate, value) {
  3. let result = {};
  4. if (subRate.name == "综合里程(km)" && value && value < 3) {//综合里程3km以内按3km算
  5. result.valueKey = "3";
  6. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  7. }
  8. if (subRate.name == "工地转移(km)" && value && value < 50) {//工地转移50km以内按50km算
  9. result.valueKey = "50";
  10. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  11. }
  12. if (subRate.name == "施工进出场(km)" && value && value < 5) {//施工进出场5km以内按5km算
  13. result.valueKey = "5";
  14. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  15. }
  16. return result;
  17. }
  18. }
  19. // 清单基数
  20. const progression = ['养护单位(业主)管理费', '养护单位(业主)管理费(未单独设置)', '养护工程监理费', '养护工程监理费(路线工程)', '养护工程监理费(桥梁及隧道工程)', '设计文件审查费', '养护工程设计费(路线工程)', '养护工程设计费(独立桥梁、隧道工程)', '施工场地建设费'];
  21. const deficiency = { '养护工程监理费': 10000, '设计文件审查费': 10000 };
  22. if (typeof baseFigureMap !== 'undefined') {
  23. const { fixedFlag } = commonConstants;
  24. const budgetMap = {
  25. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
  26. '建筑安装工程费': {
  27. base: 'JZAZGCF',
  28. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  29. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  30. pick: false,
  31. },
  32. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
  33. '建筑安装工程费(不含设备费)': {
  34. base: 'JZAZGCFBHSB',
  35. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  36. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  37. pick: false
  38. },
  39. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
  40. '定额建筑安装工程费': {
  41. base: 'DEJZAZGCF',
  42. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  43. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  44. pick: false
  45. },
  46. '设备费': {
  47. base: 'SBF',
  48. fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
  49. filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
  50. pick: false
  51. },
  52. '定额设备费': {
  53. base: 'DESBF',
  54. fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
  55. filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
  56. pick: false
  57. },
  58. // 显示:除清单固定类别是“养护工程费”的以外部分可显示
  59. '养护工程费': {
  60. base: 'YHGCF',
  61. fixedFlag: fixedFlag.MAINTENANCE_FEE,
  62. filter: [fixedFlag.MAINTENANCE_FEE],
  63. pick: false
  64. },
  65. // 显示:除清单固定类别是“养护工程费”的以外部分可显示。
  66. '定额养护工程费': {
  67. base: 'DEYHGCF',
  68. fixedFlag: fixedFlag.MAINTENANCE_FEE,
  69. filter: [fixedFlag.MAINTENANCE_FEE],
  70. pick: false
  71. },
  72. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  73. '养护单位(业主)管理费': {
  74. isProgressive: true,
  75. base: 'YHDWYZGLF',
  76. fixedFlag: null,
  77. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  78. pick: true,
  79. },
  80. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  81. '养护单位(业主)管理费(未单独设置)': {
  82. isProgressive: true,
  83. base: 'YHDWYZGLFWDDSZ',
  84. fixedFlag: null,
  85. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  86. pick: true,
  87. },
  88. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。 仅小修保养类别可以显示
  89. '养护工程监理费': {
  90. isProgressive: true,
  91. base: 'YHGCJLF',
  92. fixedFlag: null,
  93. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  94. pick: true,
  95. engineeringList: ['小修'],
  96. },
  97. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  98. '养护工程监理费(路线工程)': {
  99. isProgressive: true,
  100. base: 'YHGCJLFLXGC',
  101. fixedFlag: null,
  102. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  103. pick: true,
  104. engineeringList: ['大修', '中修'],
  105. },
  106. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  107. '养护工程监理费(桥梁及隧道工程)': {
  108. isProgressive: true,
  109. base: 'YHGCJLFQLJSDGC',
  110. fixedFlag: null,
  111. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  112. pick: true,
  113. engineeringList: ['大修', '中修'],
  114. },
  115. // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
  116. '设计文件审查费': {
  117. isProgressive: true,
  118. base: 'SJWJSCF',
  119. fixedFlag: null,
  120. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  121. pick: true,
  122. engineeringList: ['大修', '中修']
  123. },
  124. '养护项目信息化费': {
  125. base: 'YHXMXXHF',
  126. fixedFlag: null,
  127. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  128. pick: true,
  129. },
  130. // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
  131. '养护工程设计费(路线工程)': {
  132. isProgressive: true,
  133. base: 'YHGCSJFLXGC',
  134. fixedFlag: null,
  135. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  136. pick: true,
  137. engineeringList: ['大修', '中修']
  138. },
  139. // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
  140. '养护工程设计费(独立桥梁、隧道工程)': {
  141. isProgressive: true,
  142. base: 'YHGCSJFQLSDGC',
  143. fixedFlag: null,
  144. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  145. pick: true,
  146. engineeringList: ['大修', '中修']
  147. },
  148. '施工场地建设费': {
  149. isProgressive: true,
  150. base: 'SGCDJSF',
  151. fixedFlag: null,
  152. filter: [fixedFlag.CONSTRUCTION_PLANT_COST],
  153. pick: true,
  154. },
  155. // 显示:除清单固定类别是“一二三四部分合计”的以外部分可显示。
  156. '一二三四部分合计': {
  157. base: 'YESSBFHJ',
  158. fixedFlag: fixedFlag.ONE_TO_FOUR_TOTAL,
  159. filter: [fixedFlag.ONE_TO_FOUR_TOTAL],
  160. pick: false,
  161. },
  162. // 显示:仅“价差预备费”可显示
  163. '价差预备费': {
  164. base: 'JCYBF',
  165. fixedFlag: null,
  166. filter: [fixedFlag.SPREAD_BUDGET_FEE],
  167. pick: true,
  168. },
  169. };
  170. const boqMap = {
  171. //仅允许用于固定类别是“第100章至700章清单”以外的清单
  172. '专项暂定合计': {
  173. base: 'ZXZDHJ',
  174. fixedFlag: null,
  175. filter: [fixedFlag.ONE_SEVEN_BILLS],
  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. baseFigureMap.budget = budgetMap;
  191. baseFigureMap.boq = boqMap;
  192. }
  193. if (typeof baseFigureTemplate !== 'undefined') {
  194. const { fixedFlag } = commonConstants;
  195. baseFigureTemplate.budget = {
  196. // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的建安费。
  197. JZAZGCF(tender) {
  198. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  199. },
  200. // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
  201. JZAZGCFBHSB(tender) {
  202. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, 'common');
  203. },
  204. // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
  205. DEJZAZGCF(tender) {
  206. const feeField = 'rationCommon';
  207. const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
  208. //建安费扣除定额设备购置费
  209. const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, deductFlags, tender, feeField, false);
  210. //定额设备购置费
  211. const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, 'equipment');
  212. const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
  213. return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
  214. },
  215. // 设备费 算法:取清单固定类别是“设备购置”的建安费
  216. SBF(tender) {
  217. return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'common');
  218. },
  219. // 设备费 算法:取清单固定类别是“设备购置”的定额建安费
  220. DESBF(tender) {
  221. return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'rationCommon');
  222. },
  223. // 养护工程费 算法:取清单固定类别是“养护工程费”的金额。
  224. YHGCF(tender) {
  225. return cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, 'common');
  226. },
  227. // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
  228. DEYHGCF(tender) {
  229. const feeField = 'rationCommon';
  230. const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
  231. //建安费扣除定额设备购置费
  232. const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
  233. //定额设备购置费
  234. const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, 'equipment');
  235. const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
  236. return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
  237. },
  238. // 养护单位(业主)管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
  239. YHDWYZGLF(tender) {
  240. const baseFee = this['DEJZAZGCF'](tender);
  241. if (!tender) {
  242. calcBase.baseProgressiveFee = baseFee;
  243. }
  244. return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  245. },
  246. // 养护单位(业主)管理费(未单独设置) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  247. YHDWYZGLFWDDSZ(tender) {
  248. const baseFee = this['DEJZAZGCF'](tender);
  249. if (!tender) {
  250. calcBase.baseProgressiveFee = baseFee;
  251. }
  252. return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费(未单独设置)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  253. },
  254. // 养护工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  255. YHGCJLF(tender) {
  256. const baseFee = this['DEJZAZGCF'](tender);
  257. if (!tender) {
  258. calcBase.baseProgressiveFee = baseFee;
  259. }
  260. return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  261. },
  262. // 养护工程监理费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  263. YHGCJLFLXGC(tender) {
  264. const baseFee = this['DEJZAZGCF'](tender);
  265. if (!tender) {
  266. calcBase.baseProgressiveFee = baseFee;
  267. }
  268. return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  269. },
  270. // 养护工程监理费(桥梁及隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  271. YHGCJLFQLJSDGC(tender) {
  272. const baseFee = this['DEJZAZGCF'](tender);
  273. if (!tender) {
  274. calcBase.baseProgressiveFee = baseFee;
  275. }
  276. return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(桥梁及隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  277. },
  278. // 设计文件审查费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  279. SJWJSCF(tender) {
  280. const baseFee = this['DEJZAZGCF'](tender);
  281. if (!tender) {
  282. calcBase.baseProgressiveFee = baseFee;
  283. }
  284. return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  285. },
  286. // 养护项目信息化费 (大中修):取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.32%计算。不足10000取10000
  287. // 养护项目信息化费 (小修):算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.2%计算。信息化管理费不足5000元时按5000元计取。
  288. YHXMXXHF(tender) {
  289. const engName = projectObj.project.property.engineeringName;
  290. const baseFee = this['DEJZAZGCF'](tender);
  291. if (/小修/.test(engName)) {
  292. const fee = (baseFee * 0.002).toDecimal(decimalObj.bills.totalPrice);
  293. return fee > 0 && fee < 5000 ? 5000 : fee;
  294. } else {
  295. const fee = (baseFee * 0.0032).toDecimal(decimalObj.bills.totalPrice);
  296. return fee > 0 && fee < 10000 ? 10000 : fee;
  297. }
  298. },
  299. // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  300. YHGCSJFLXGC(tender) {
  301. const baseFee = this['DEJZAZGCF'](tender);
  302. if (!tender) {
  303. calcBase.baseProgressiveFee = baseFee;
  304. }
  305. return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  306. },
  307. // 养护工程设计费(独立桥梁、隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  308. YHGCSJFQLSDGC(tender) {
  309. const baseFee = this['DEJZAZGCF'](tender);
  310. if (!tender) {
  311. calcBase.baseProgressiveFee = baseFee;
  312. }
  313. return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(独立桥梁、隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  314. },
  315. // 施工场地建设费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
  316. SGCDJSF(tender) {
  317. const baseFee = this['DEYHGCF'](tender);
  318. if (!tender) {
  319. calcBase.baseProgressiveFee = baseFee;
  320. }
  321. return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  322. },
  323. // 一二三四部分合计 算法:取清单固定类别是“一二三四部分合计”的金额
  324. YESSBFHJ(tender) {
  325. return cbTools.getBaseFee(fixedFlag.ONE_TO_FOUR_TOTAL, tender, 'common');
  326. },
  327. /* 价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
  328. 价差预备费 P * [(1+i)^(n-1) -1]
  329. P——建筑安装工程费总额(元);
  330. i——年工程造价增涨率(%);
  331. n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
  332. */
  333. JCYBF(tender) {
  334. //建筑安装工程费作为基数
  335. const installFee = this['JZAZGCF'](tender);
  336. //年造价增涨
  337. const costGrowthRate = calcBase.project.property.costGrowthRate
  338. ? calcBase.project.property.costGrowthRate
  339. : 0;
  340. //增涨计费年限
  341. const growthPeriod = projectObj.project.property.growthPeriod
  342. ? calcBase.project.property.growthPeriod
  343. : 0;
  344. //= P * [(1+i)^(n-1) -1]
  345. return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
  346. }
  347. };
  348. baseFigureTemplate.boq = {
  349. //{专项暂定合计}
  350. // 第100章至700章清单行的暂估合价
  351. 'ZXZDHJ': function (tender) {
  352. return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
  353. },
  354. //{100章以外清单合计}
  355. // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
  356. // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
  357. 'YBZYHQDHJ': function (tender) {
  358. let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
  359. if (!oneToSeven) {
  360. return 0;
  361. }
  362. //100-700章固定节点的所有子节点
  363. let allChildren = [];
  364. function getChildren(nodes) {
  365. allChildren = allChildren.concat(nodes);
  366. for (let node of nodes) {
  367. if (node.children.length > 0) {
  368. getChildren(node.children);
  369. }
  370. }
  371. }
  372. getChildren(oneToSeven.children);
  373. //扣除的节点:100章的节点[100-200)
  374. let deductNodes = allChildren.filter(cbTools.withingOneHundred);
  375. //计算金额
  376. let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
  377. return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
  378. }
  379. };
  380. }
  381. if (typeof module !== 'undefined') {
  382. // 甘肃养护,项目属性-小数位数,费率小数位数默认为2。
  383. const defaultDecimal = {
  384. bills: {unitPrice: 2, totalPrice: 0},
  385. ration: {quantity: 3, unitPrice: 2, totalPrice: 0},
  386. glj: {quantity: 3, unitPriceHasMix: 2, unitPrice: 2},
  387. feeRate: 4,
  388. quantity_detail: 4,
  389. material:5,//三材系数
  390. process: 6,
  391. marketPriceProcess: 2,
  392. temProcess:6
  393. };
  394. module.exports = {
  395. progression,
  396. deficiency,
  397. defaultDecimal
  398. };
  399. }
  400. // 不显示但可的基数
  401. const invisibleBases = ['设备费', '定额设备费'];