sichuan_2013.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. let isSC2013 = true;
  2. function overwriteRationCalcBases(taxType) {
  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.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
  16. };
  17. rationCalcBases['外购砼构件费'] = function (node, isTender) {
  18. return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptMarketPrice, isTender);
  19. };
  20. };
  21. (function overwriteFeeTypes() {
  22. if (typeof cpFeeTypes == 'undefined') return;
  23. cpFeeTypes = [
  24. { type: 'marketDirect', name: '直接费' },
  25. { type: 'marketDirectWork', name: '直接工程费' },
  26. { type: 'marketLabour', name: '人工费' },
  27. { type: 'marketMaterial', name: '材料费' },
  28. { type: 'marketMachine', name: '施工机械使用费' },
  29. { type: 'otherFee', name: '其他工程费' },
  30. { type: 'otherFee1', name: '其他工程费I' },
  31. { type: 'otherFee2', name: '其他工程费II' },
  32. { type: "indirect", name: '间接费' },
  33. { type: 'manage', name: '企业管理费' },
  34. { type: 'force', name: '规费' },
  35. { type: 'profit', name: '利润' },
  36. { type: 'tax', name: '税金' },
  37. { type: 'common', name: '建安费' }
  38. ];
  39. })();
  40. if (typeof gljUtil !== "undefined") {
  41. gljUtil.getAssUsedPrice = function(g){//四川辅助生产人工费取市场价
  42. return g.marketPrice;
  43. }
  44. gljUtil.getElecCode = function () {
  45. return "865";
  46. }
  47. }
  48. // 清单基数
  49. const progression = [
  50. '养护单位管理费',
  51. ];
  52. const deficiency = {
  53. };
  54. if (typeof baseFigureMap !== 'undefined') {
  55. const { fixedFlag } = commonConstants;
  56. const budgetMap = {
  57. // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
  58. '公路养护工程费': {
  59. base: 'GLYHGCF',
  60. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  61. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  62. pick: false,
  63. },
  64. // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
  65. '定额公路养护工程费': {
  66. base: 'DEGLYHGCF',
  67. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  68. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  69. pick: false,
  70. },
  71. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  72. '养护单位管理费': {
  73. isProgressive: true,
  74. base: 'YHDWGLF',
  75. fixedFlag: null,
  76. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  77. pick: true,
  78. },
  79. // 显示:除清单固定类别是“公路养护工程费”、“设备购置费用”、“养护公路工程其他费用”、“一二三部分合计”的以外部分可显示
  80. '一、二、三部分合计': {
  81. base: 'YESBFHJ',
  82. fixedFlag: fixedFlag.ONE_TO_THREE_TOTAL,
  83. filter: [ fixedFlag.ONE_TO_THREE_TOTAL],
  84. pick: false,
  85. },
  86. // 显示:仅“价差预备费”可显示
  87. '价差预备费': {
  88. base: 'JCYBF',
  89. fixedFlag: null,
  90. filter: [fixedFlag.SPREAD_BUDGET_FEE],
  91. pick: true,
  92. },
  93. '通则扣除保险费': {
  94. base: 'TEXT1',
  95. fixedFlag: null,
  96. filter: [fixedFlag.INSURANCE_FEE],
  97. pick: true,
  98. },
  99. '扣除安全生产费': {
  100. base: 'TEXT2',
  101. fixedFlag: null,
  102. filter: [fixedFlag.EP_WP_INSURANCE_FEE],
  103. pick: true,
  104. },
  105. '扣除保险费': {
  106. base: 'TEXT3',
  107. fixedFlag: null,
  108. filter: [fixedFlag.SAFE_COST],
  109. pick: true,
  110. },
  111. };
  112. const boqMap = {
  113. //四川2013读的是 建筑安装工程费行的值
  114. '各章清单合计': {
  115. base: 'GZQDHJ',
  116. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  117. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  118. pick: false
  119. },
  120. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  121. '养护单位管理费': {
  122. isProgressive: true,
  123. base: 'YHDWGLF',
  124. fixedFlag: null,
  125. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  126. pick: true,
  127. },
  128. //仅允许用于固定类别是“第100章至700章清单”以外的清单
  129. /* '专项暂定合计': {
  130. base: 'ZXZDHJ',
  131. fixedFlag: null,
  132. filter: [fixedFlag.ONE_SEVEN_BILLS],
  133. pick: false
  134. }, */
  135. /*
  136. * 清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
  137. * 因此{100章以外合计}不设置关联的清单固定行
  138. * */
  139. //仅允许用于固定类别为“100章清单”引用
  140. '100章以外清单合计': {
  141. base: 'YBZYHQDHJ',
  142. fixedFlag: null,
  143. filter: [fixedFlag.ONE_HUNDRED_BILLS],
  144. pick: true
  145. }
  146. };
  147. baseFigureMap.budget = budgetMap;
  148. baseFigureMap.boq = boqMap;
  149. }
  150. if (typeof baseFigureTemplate !== 'undefined') {
  151. const { fixedFlag } = commonConstants;
  152. baseFigureTemplate.budget = {
  153. // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
  154. GLYHGCF(tender) {
  155. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  156. },
  157. // 定额公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
  158. DEGLYHGCF(tender) {
  159. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'rationCommon');
  160. },
  161. // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
  162. YHDWGLF(tender) {
  163. const baseFee = this['GLYHGCF'](tender);
  164. if (!tender) {
  165. calcBase.baseProgressiveFee = baseFee;
  166. }
  167. return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  168. },
  169. // 二三部分合计 算法:取清单固定类别是“一二三部分合计”的金额
  170. YESBFHJ(tender) {
  171. return cbTools.getBaseFee(fixedFlag.ONE_TO_THREE_TOTAL, tender, 'common');
  172. },
  173. TEXT1(tender) {
  174. const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  175. const fullFeeField = tender ? `${feeField}.tenderTotalFee` : `${feeField}.totalFee`;
  176. let genRuleNode = this.findNodeByFlag(fixedFlag.GENERAL_RULE);
  177. if (!genRuleNode) {
  178. return baseFee;
  179. }
  180. const deductionFee = projectObj.project.calcProgram.getTotalFee([genRuleNode], [calcBase.activeNode], fullFeeField);
  181. return (baseFee - deductionFee).toDecimal(decimalObj.bills.totalPrice);
  182. },
  183. TEXT2(tender) {
  184. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, 'common');
  185. },
  186. TEXT3(tender) {
  187. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.INSURANCE_FEE], tender, 'common');
  188. },
  189. // 基本预备费 算法:以第一、二、三部分费用之和为基数按3%计取
  190. JBYBF(tender) {
  191. const baseFee = this['YESBFHJ'](tender);
  192. return (baseFee * 0.03).toDecimal(decimalObj.bills.totalPrice);
  193. },
  194. /* 价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
  195. 价差预备费 P * [(1+i)^(n-1) -1]
  196. P——建筑安装工程费总额(元);
  197. i——年工程造价增涨率(%);
  198. n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
  199. */
  200. JCYBF(tender) {
  201. //建筑安装工程费作为基数
  202. const installFee = this['JZAZGCF'](tender);
  203. //年造价增涨
  204. const costGrowthRate = calcBase.project.property.costGrowthRate
  205. ? calcBase.project.property.costGrowthRate
  206. : 0;
  207. //增涨计费年限
  208. const growthPeriod = projectObj.project.property.growthPeriod
  209. ? calcBase.project.property.growthPeriod
  210. : 0;
  211. //= P * [(1+i)^(n-1) -1]
  212. return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
  213. }
  214. };
  215. baseFigureTemplate.boq = {
  216. // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
  217. 'GLYHGCF':function(tender) {
  218. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  219. },
  220. //{各章清单合计}
  221. // 四川2013读的是 建筑安装工程费行的值
  222. 'GZQDHJ': function (tender) {
  223. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  224. },
  225. // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
  226. 'YHDWGLF':function(tender) {
  227. const baseFee = this['GLYHGCF'](tender);
  228. if (!tender) {
  229. calcBase.baseProgressiveFee = baseFee;
  230. }
  231. return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  232. },
  233. //{专项暂定合计}
  234. // 第100章至700章清单行的暂估合价
  235. 'ZXZDHJ': function (tender) {
  236. return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
  237. },
  238. //{100章以外清单合计}
  239. // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
  240. // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
  241. 'YBZYHQDHJ': function (tender) {
  242. let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
  243. if (!oneToSeven) {
  244. return 0;
  245. }
  246. //100-700章固定节点的所有子节点
  247. let allChildren = [];
  248. function getChildren(nodes) {
  249. allChildren = allChildren.concat(nodes);
  250. for (let node of nodes) {
  251. if (node.children.length > 0) {
  252. getChildren(node.children);
  253. }
  254. }
  255. }
  256. getChildren(oneToSeven.children);
  257. //扣除的节点:100章的节点[100-200)
  258. let deductNodes = allChildren.filter(cbTools.withingOneHundred);
  259. //计算金额
  260. let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
  261. return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
  262. }
  263. };
  264. }
  265. if (typeof feeRateObject !== 'undefined') {
  266. feeRateObject.feeRateSpecialHandle = function (subRate, value) {
  267. let result = {};
  268. if (subRate.name == "工地转移(km)" && value && value < 50) {//工地转移50km以内按不计算
  269. result.valueKey = "不计";
  270. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  271. }
  272. return result;
  273. }
  274. }
  275. if (typeof module !== 'undefined') {
  276. const defaultDecimal = {
  277. bills: {unitPrice: 2, totalPrice: 0},
  278. ration: {quantity: 3, unitPrice: 2, totalPrice: 0},
  279. glj: {quantity: 3, unitPriceHasMix: 2, unitPrice: 2},
  280. feeRate: 2,
  281. quantity_detail: 4,
  282. material:5,//三材系数
  283. process: 6,
  284. marketPriceProcess: 2,
  285. temProcess:6
  286. };
  287. const defaultCalcMode = 1;
  288. module.exports = {
  289. getDefalutAssistProductionFeeRate: function () {
  290. return 5
  291. },
  292. progression,
  293. deficiency,
  294. defaultCalcMode,
  295. defaultDecimal
  296. };
  297. }