UNPKG

pensions

Version:

``` $ npm install --save pensions

457 lines (387 loc) 16 kB
import service from './src/service/service'; /* * get reduced unredeced precentages * @param type, years, months,circular, salary */ export function getPrecentage(type: string, years: number, months: number, circular: string, salary: number) { if(circular == "2015-1"){ circular = "2015"; } var presentageObject = service.presentages.getPresentages(type, years, months, circular, salary); return presentageObject; } /* * get reduced unredeced precentages for military * @param type, years, months,circular, salary */ export function getPrecentageforMilitary(type: string, years: number, months: number, circular: string, salary: number, offeredto:string) { var presentageObject = service.presentages.getPresentagesForMilitary(type, years, months, circular, salary, offeredto); return presentageObject; } /* * get 2020 salary and increment values * @parms scale, grade, circular, salary, retired_date, increment_date */ export function get2020Salary(scale: string, grade: string, circular: string, salary: number, retired_date: string, increment_date: string) { if(circular == "2015-1"){ circular = "2015"; } var salaryObject = service.salary2020.get2020Salary(scale, grade, circular, salary, retired_date, increment_date) return salaryObject; } /* * calculate annual consolidate salary and annual consolidate salary in 2020 * @param basicSalary */ export function annualSalaryCalculation(basicSalary: number) { let annualSalary = basicSalary * 12; return annualSalary; } /* * calculate gross salary both current and 2020 * @param basicSalary, increment, allowance */ export function grossSalaryCalculation(basicSalary: number, increment: number, allowance: number) { let grossSalary = (basicSalary * 12) + +increment + +allowance; return grossSalary; } /* * calculate reduced and unreduced pension both current and 2020 * @params grossSalary, precentage */ export function reducedUnreducedCalculation(grossSalary: number, precentage: number) { let reducedUnreduced = ((grossSalary * precentage) / 100) / 12; return reducedUnreduced; } /* * calculate gross gratuity * @param grossSalary, unreducedPrecentage */ export function grossGratuityCalculation(grossSalary: number, unreducedPrecentage: number) { let grossGratuity = ((grossSalary * unreducedPrecentage) / 100) * 2; return grossGratuity; } /* * calculate net gratuity * @param grossGratuity, govDeduction */ export function netGratuityCalculation(grossGratuity: number, govDeduction: number) { let netGratuity = grossGratuity - govDeduction; return netGratuity; } /* * calculate revised net gratuity * @param oldGrossGratuity, newGrossGratuity, govDeduction */ export function revisedNetGratuityCalculation(oldGrossGratuity: number, newGrossGratuity: number, govDeduction: number) { let netGratuity = newGrossGratuity - (oldGrossGratuity + +govDeduction); return netGratuity; } /* * calculate total service period * @param trainedPeriod, wnodDeductionPeriod, pensionablePeriod */ export function netServicePeriodCalculation(trainedPeriod: Duration, wnodDeductionPeriod: Duration, pensionablePeriod: Duration) { var trainedYY = trainedPeriod.years; var trainedMM = trainedPeriod.months; var trainedDD = trainedPeriod.days; var wnopYY = wnodDeductionPeriod.years; var wnopMM = wnodDeductionPeriod.months; var wnopDD = wnodDeductionPeriod.days; var pensionableYY = pensionablePeriod.years; var pensionableMM = pensionablePeriod.months; var pensionableDD = pensionablePeriod.days; var trainedDays = (trainedYY * 12 * 30) + +(trainedMM * 30) + +trainedDD; var wnopDays = (wnopYY * 12 * 30) + +(wnopMM * 30) + +wnopDD; var pensionabeDays = (pensionableYY * 12 * 30) + +(pensionableMM * 30) + +pensionableDD; var serviceDays = trainedDays + +wnopDays + +pensionabeDays; var servicePeriod = new Duration(); servicePeriod.years = Math.floor(serviceDays / 360); servicePeriod.months = Math.floor((serviceDays % 360) / 30); servicePeriod.days = Math.floor((serviceDays % 360) % 30); return servicePeriod; } /* * calculate net no pay leaves * @ param noPayLeaves, noPaySetoff */ export function netNoPayLeaveCalculation(noPayLeave: Duration, noPaySetOff: Duration) { var noPayYY = noPayLeave.years; var noPayMM = noPayLeave.months; var noPayDD = noPayLeave.days; var setOffYY = noPaySetOff.years; var setOffMM = noPaySetOff.months; var setOffDD = noPaySetOff.days; var noPayDays = (noPayYY * 12 * 30) + +(noPayMM * 30) + +noPayDD; var setOffDays = (setOffYY * 12 * 30) + +(setOffMM * 30) + +setOffMM; var netNoPayDays = noPayDays - setOffDays; var netNoPay = new Duration(); netNoPay.years = Math.floor(netNoPayDays / 360); netNoPay.months = Math.floor((netNoPayDays % 360) / 30); netNoPay.days = Math.floor((netNoPayDays % 360) % 30); return netNoPay; } /* * calculate total nopay set off * @param governmentSetOff, foreignSetOff, governmentSetOffMore */ export function netNoPaySetOffCalculation(governmentSetOff: Duration, foreignSetOff: Duration, governmentSetOffMore: Duration) { var governmentSetOffYY = governmentSetOff.years; var governmentSetOffMM = governmentSetOff.months; var governmentSetOffDD = governmentSetOff.days; var foreignSetOffYY = foreignSetOff.years; var foreignSetOffMM = foreignSetOff.months; var foreignSetOffDD = foreignSetOff.days; var governmentSetOffMoreYY = governmentSetOffMore.years; var governmentSetOffMoreMM = governmentSetOffMore.months; var governmentSetOffMoreDD = governmentSetOffMore.days; var governmentSetOffDays = (governmentSetOffYY * 12 * 30) + +(governmentSetOffMM * 30) + +governmentSetOffDD; var foreignSetOffDays = (foreignSetOffYY * 12 * 30) + +(foreignSetOffMM * 30) + +foreignSetOffDD; var governmentSetOffMoreDays = (governmentSetOffMoreYY * 12 * 30) + +(governmentSetOffMoreMM * 30) + +governmentSetOffMoreDD; var netNoPaySetoff = governmentSetOffDays + +foreignSetOffDays + +governmentSetOffMoreDays; var setOffPeriod = new Duration(); setOffPeriod.years = Math.floor(netNoPaySetoff / 360); setOffPeriod.months = Math.floor((netNoPaySetoff % 360) / 30); setOffPeriod.days = Math.floor((netNoPaySetoff % 360) % 30); return setOffPeriod; } /* * calculate reduce no pay amount * @param servicePeriod */ export function reduceNoPayCalculation(servicePeriod: Duration) { var reduceNoPay = new Duration(); if (servicePeriod.years >= 30) { var serviceYY = servicePeriod.years; var serviceMM = servicePeriod.months; var serviceDD = servicePeriod.days; var serviceDays = (serviceYY * 12 * 30) + +(serviceMM * 30) + +serviceDD; //30 years = 10800 days var constantDays = 10800; var reduceDays = serviceDays - constantDays; reduceNoPay.years = Math.floor(reduceDays / 360); reduceNoPay.months = Math.floor((reduceDays % 360) / 30); reduceNoPay.days = Math.floor((reduceDays % 360) % 30); return reduceNoPay; } else { return reduceNoPay; } } /* * calculate deductable percentage 1% for every 6 months * @param serviceYears, serviceMonths */ export function deductablePercentageCalculation(serviceYears: number, serviceMonths: number) { let deductablePercentage = 0; if (serviceYears < 25) { if (serviceMonths < 6) { deductablePercentage = (25 - serviceYears) * 2; } else { deductablePercentage = (25 - (serviceYears + +0.5)) * 2; } return deductablePercentage; } else { return deductablePercentage; } } /* * calculate deductable percentage 1% for every 6 months for judge * @param serviceYears, serviceMonths, designation value * 14 = High court judge * 15 = Other judicial officers */ export function deductablePercentageForJudge(serviceYears: number, serviceMonths: number, designationValue: number) { let deductablePercentage = 0; if (serviceYears < designationValue) { if (serviceMonths < 6) { deductablePercentage = (designationValue - serviceYears) * 2; } else { deductablePercentage = (designationValue - (serviceYears + +0.5)) * 2; } return deductablePercentage; } else { return deductablePercentage; } } /* * calculate deductable percentage of no pay * @param netNoPay */ export function noPayDeductablePercentageCalculation(netNoPay : Duration){ let noPayPercentage = ((netNoPay.years * 12) + +netNoPay.months) * 0.2; return noPayPercentage; } /* * calculate net percentage after deduct * @param percentage, deductablePercentage, noPayPercentage */ export function netPercentageCalculation(percentage: number, deductablePercentage: number, noPayPercentage: number) { let netPercentage = percentage - (deductablePercentage + +noPayPercentage); return netPercentage; } /* * calculate revision arrears * @ param newBasic, oldBasic,effectDate,processDate */ export function revisionArrears (newBasic:number, oldBasic: number , effectDate: Date , toDate:Date ){ // var newBasic = 25549.84; // var oldBasic = 24979.83; // var effectDate = new Date("2011-01-01"); // var toDate = new Date("2017-07-31"); //calculate months for pay arrears var yearsDifference =toDate.getFullYear()-effectDate.getFullYear(); var monthsDifference=toDate.getMonth()-effectDate.getMonth(); var arrearsMonths = (monthsDifference-1)+(yearsDifference*12); //calculate dates for pay arrears var totalDatesOfEffMonth =new Date(effectDate.getFullYear(), effectDate.getMonth()+1, 0).getDate(); var arrearsDatesOfEffectdate=totalDatesOfEffMonth-effectDate.getDate()+1; var totalDatesOfToMonth =new Date(toDate.getFullYear(), toDate.getMonth()+1, 0).getDate(); var arrearsDatesOfToDate =toDate.getDate(); //calculate total arrears (total arrears for full months + arrears for remain dates in effective months + arrears for remain dates in process months ) var totalArrears= ((newBasic-oldBasic)*arrearsMonths)+((newBasic-oldBasic)*(arrearsDatesOfEffectdate/totalDatesOfEffMonth))+((newBasic-oldBasic)*(arrearsDatesOfToDate/totalDatesOfToMonth)); return totalArrears; } /* * calculate pension arrears * @ param basicSalary, retiredDate ,processDate */ export function pensionArrears (reducedSalary : number, retiredDate : Date , proceDate : Date ){ //var reducedSalary=25000; var data = { "circularDates": [{ "index":1, "startDate": "2006-01-02", "endDate": "2014-10-31", "cla":3525, "ota":0, "months":105, "days":1/30 }, { "index":2, "startDate": "2014-11-01", "endDate": "2015-03-31", "cla":3525, "ota":2500, "months":5, "days":0 }, { "index":3, "startDate": "2015-04-01", "endDate": "2016-01-01", "cla":3525, "ota":3500, "months":09, "days":1/31 }, { "index":4, "startDate": "2016-01-02", "endDate": "2020-01-01", "cla":3525, "ota":0, "months":59, "days":30/31 }] } var periodArray = data.circularDates; //var retDate = new Date("2015-03-30"); //var retiredDate =retDate.toISOString().substring(0, 10); //var proceDate=new Date("2017-08-31"); //var proceDate =proceDate.toISOString().substring(0, 10); var effectIndex =0; var arrearsOfEffectedSection=0; var arrearsOfFullsection=0; var arrearsOfLastSection=0; for (i = 0; i < periodArray.length ; i++) { var obj = periodArray[i] //calculate arrears for section in retired date if (retiredDate >= obj.startDate && retiredDate <= obj.endDate){ var effectIndex =obj.index; var effectCla =obj.cla; var effectOta =obj.ota; var arrPrePart=prePartOfSection(retiredDate,obj.cla,obj.ota,reducedSalary); if(i==periodArray.length-1){ var arrmiddlePart=middlePartOfSection(retiredDate,proceDate,obj.cla,obj.ota,reducedSalary); var arrPostPart=postPartOfSection(proceDate,obj.cla,obj.ota,reducedSalary); }else{ var arrmiddlePart=middlePartOfSection(retiredDate,obj.endDate,obj.cla,obj.ota,reducedSalary); var arrPostPart=postPartOfSection(obj.endDate,obj.cla,obj.ota,reducedSalary); } arrearsOfEffectedSection =arrPrePart+arrmiddlePart+arrPostPart; } //calculate arrears for sections after effected retired date in section if (effectIndex<obj.index && effectIndex>0 ){ if (retiredDate <'2016-01-02' && obj.index >3 ){ var cla=3525; var ota=3500; }else{ var cla=obj.cla; var ota=obj.ota; } if (proceDate > obj.startDate && proceDate < obj.endDate){ var arrPrePart =prePartOfSection(obj.startDate,cla,ota,reducedSalary); var arrmiddlePart=middlePartOfSection(obj.startDate,proceDate,cla,ota,reducedSalary); var arrPostPart =postPartOfSection(proceDate,cla,ota,reducedSalary); var arrearsOfLastSection=arrPrePart+arrmiddlePart+arrPostPart; }else{ var arrearsOfFullsection=(cla+ota+reducedSalary)*(obj.months+obj.days); } } } //console.log("efected"+arrearsOfEffectedSection); //console.log("full"+arrearsOfFullsection); //console.log("last"+arrearsOfLastSection); //calculate total arrears var totalArrears= arrearsOfEffectedSection+arrearsOfFullsection+arrearsOfLastSection; //console.log("total"+totalArrears) ; } /* * calculate pension arrears for pre part of a section * @ param basicSalary, cla , ota , startDate */ function prePartOfSection(startdate,cla,ota,redsalary){ var startdate = new Date(startdate); var totalDatesOfStartMonth =new Date(startdate.getFullYear(), startdate.getMonth()+1, 0).getDate(); var calDatesOfStartMonth=totalDatesOfStartMonth-startdate.getDate()+1; var arrears =(redsalary+cla+ota)*(calDatesOfStartMonth/totalDatesOfStartMonth); return arrears; } /* * calculate pension arrears for middle part of a section * @ param basicSalary, cla , ota , startDate,enddate */ function middlePartOfSection(startdate,enddate,cla,ota,redsalary){ var startdate = new Date(startdate); var enddate = new Date(enddate); var yearsDifference=enddate.getFullYear()-startdate.getFullYear(); var monthsDifference=enddate.getMonth()-startdate.getMonth(); //calculate months for pay arrears var arrearsMonths = (monthsDifference-1)+(yearsDifference*12); var arrears =(redsalary+cla+ota)*arrearsMonths; return arrears; } /* * calculate pension arrears for post part of a section * @ param basicSalary, cla , ota , enddate */ function postPartOfSection(enddate,cla,ota,redsalary){ var end = new Date(enddate); var totalDatesOfEndMonth =new Date(end.getFullYear(), end.getMonth()+1, 0).getDate(); var calDatesOfEndMonth=end.getDate(); var arrears =(redsalary+cla+ota)*(calDatesOfEndMonth/totalDatesOfEndMonth); return arrears; } class Duration { years; months; days; constructor() { this.years = 0; this.months = 0; this.days = 0; } }