pensions
Version:
``` $ npm install --save pensions
457 lines (387 loc) • 16 kB
text/typescript
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;
}
}