根据2019年 新个税政策计算,实现 每月个人应缴纳 个人所得税
erbing opened this issue · 1 comments
erbing commented
/*
* 根据2019年 新个税政策计算,每月个人应缴纳 个人所得税
* e.g.
* // 年收入
* const yearIncome = [36000, 144000, 300000, 420000, 660000, 960000]
* // 对应不同阶段的税率
* const newTax = [3, 10, 20, 25, 30, 35, 45]
*
* 是否有 专项扣除
* const deduct = []
*
* calculateTax(salary, deductType)
*
* salary: 月薪
* deductType: 专项扣除类型,如果无 则为 0
*/
// 专项扣除 amount 代表每月 金额
const deduct = [
{
name: '子女教育',
type: 1,
amount: 1000
},
{
name: '继续教育',
type: 2,
amount: 400
},
{
name: '住房贷款利息',
type: 3,
amount: 1000
},
{
name: '住房租金',
type: 4,
amount: 1500
},
{
name: '赡养老人',
type: 5,
amount: 2000
},
{
name: '大病医疗',
type: 6,
amount: 6000
}
]
const calculateTax = (salary, deductType) => {
// todo
}
ali-shi commented
const calculateTax = (salary, deductType,month =12 ) => {
// todo
// 计算所交金额的级别
const returnLevel = (acc)=>{
let level = 1;
if(acc <= 36000 ){
level=1;
} else if (acc <= 144000 ) {
level=2;
} else if (acc <= 300000 ) {
level=3;
} else if (acc <= 420000 ) {
level=4;
} else if (acc <= 660000 ) {
level=5;
} else if (acc <= 960000 ) {
level=6;
} else {
level=7;
}
return level;
}
// 计算所交税金
const calcSalary = (amount, level)=>{
let newTax = {
1:{
rate:3,deduction:0,level:1
},
2:{
rate:10,deduction:2520,level:2
},
3:{
rate:20,deduction:16920,level:3
},
4:{
rate:25,deduction:31920,level:4
},
5:{
rate:30,deduction:52920,level:5
},
6:{
rate:35,deduction:85920,level:6
},
7:{
rate:45,deduction:181920,level:7
}
}
return newTax[level].rate / 100 * amount - newTax[level].deduction;
}
/**
* [description]
* @param {[type]} m [工资]
* @param {[type]} n [几个月]
* @param {[type]} salary [专项扣除金额]
* @return {[type]} [description]
*/
const calcAmount = (m,n,salary)=>{
return new Array(n).fill(m).reduce( (acc,next) =>{
acc += Number(next) - salary -5000;
return acc;
},0);
}
/**
* [description]
* @param {[type]} type [专项扣除类型]
* @return {[type]} [金额]
*/
const calcDeduct = (type)=>{
let salary = 0;
let deduct = {
1:{
name: '子女教育',
type: 1,
amount: 1000
},
2:{
name: '继续教育',
type: 2,
amount: 400
},
3:{
name: '住房贷款利息',
type: 3,
amount: 1000
},
4:{
name: '住房租金',
type: 4,
amount: 1500
},
5:{
name: '赡养老人',
type: 5,
amount: 2000
},
6:{
name: '大病医疗',
type: 6,
amount: 6000
}
}
if( Array.isArray(type) ){
type.map(item=>{
salary += deduct[item].amount;
})
} else if(typeof type === 'number'){
salary = deduct[type].amount;
}
return salary;
}
let deduct = calcDeduct(deductType);
let result = calcAmount(salary,month,deduct);
let level = returnLevel(result);
return calcSalary(result, level);
}
console.log(calculateTax(10000,[1,2,3]));