
一:名词解释
-
税前月收入:即税前工资,指交纳个人所得税之前的总工资
-
应纳税所得额:指按照税法规定确定纳税人在一定期间所获得的所有应税收入减除在该纳税期间依法允许减除的各种支出后的余额
-
税率:是对征税对象的征收比例或征收额度
-
速算扣除数:指为解决超额累进税率分级计算税额的复杂技术问题,而预先计算出的一个数据,可以简化计算过程
-
扣税额:是指实际缴纳的税额
-
税后工资:是指扣完税后实际到手的工资收入
二:计算规则
要实现个人所得税计算器,需要了解如下计算规则:(2011)
| 规则编号 | 名称 | 描述 |
|---|---|---|
| 1 | 计算应纳税所得额 | 应纳税所得额为税前工资减去3500 |
| 2 | 设置税率,应纳税所得额<=1500 税率为0.03, | 速算扣除数为0 |
| 3 | 设置税率,应纳税所得额在1500至4500之间 | 税率为0.1,速算扣除数为105 |
| 4 | 设置税率,应纳税所得额在4500志9000之间 | 税率为0.2,速算扣除数为555 |
| 5 | 设置税率,应纳税所得额在9000志35000之间 | 税率为0.25,速算扣除数为1005 |
| 6 | 设置税率,应纳税所得额在35000至55000之间 | 税率为0.3,速算扣除数为2755 |
| 7 | 设置税率,应纳税所得额在55000至80000之间 | 税率为0.35,速算扣除数为5505 |
| 8 | 设置税率,应纳税所得额在80000以上 | 税率为0.45 速算扣除数为13505 |
| 9 | 计算税后工资 | 扣税额=应纳税所得额*税率-速算扣除数 税后工资=税前工资-扣税额 |
税前工资:10000
应缴纳所得税:10000-3500 = 6500
税率:0.2
速算扣除数:555
扣税额:6500 * 0.2 - 555 = 745
税后工资:10000 - 745 = 9255
三:实体
public class Calculation {
private double wage;//税前工资
private double wagemore;//应纳税所得额
private double cess;//税率
private double preminus;//速算扣除数
private double wageminus;//扣税额
private double actualwage;//税后工资
}
四:规则文件
package calculation
import com.itheima.drools.entity.Calculation
rule "个人所得税:计算应纳税所得额(税前工资如果大于0就先减到3500免征收额度)"
enabled true
salience 3
no-loop true
date-effective "2011-09-01" //生效日期
when
$cal : Calculation(wage>0) // 如果税前工资大于0
then
$cal.setWagemore($cal.getWage()-3500); // 应纳税所得额 = 税前工资 - 3500
update($cal); // 更新工作内存
end
//activation-group 最多有一个柜子能匹配成功----------------------------------
rule "个人所得税:设置税率-->>应纳税所得额<=1500"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore <= 1500)
then
$cal.setCess(0.03); // 设置税率
$cal.setPreminus(0); // 设置速算扣除数
update($cal); // 标记了no-loop下次匹配不会再被执行
end
rule "个人所得税:设置税率-->>应纳税所得额在1500至4500之间"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 1500 && wagemore <= 4500)
then
$cal.setCess(0.1);
$cal.setPreminus(105);
update($cal);
end
rule "个人所得税:设置税率-->>应纳税所得额在4500志9000之间"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 4500 && wagemore <= 9000)
then
$cal.setCess(0.2);
$cal.setPreminus(555);
update($cal);
end
rule "个人所得税:设置税率-->>应纳税所得额在9000志35000之间"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 9000 && wagemore <= 35000)
then
$cal.setCess(0.25);
$cal.setPreminus(1005);
update($cal);
end
rule "个人所得税:设置税率-->>应纳税所得额在35000至55000之间"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 35000 && wagemore <= 55000)
then
$cal.setCess(0.3);
$cal.setPreminus(2755);
update($cal);
end
rule "个人所得税:设置税率-->>应纳税所得额在55000至80000之间"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 55000 && wagemore <= 80000)
then
$cal.setCess(0.35);
$cal.setPreminus(5505);
update($cal);
end
rule "个人所得税:设置税率-->>应纳税所得额在80000以上"
salience 2
no-loop true
activation-group "SETCess_Group"
when
$cal : Calculation(wagemore > 80000)
then
$cal.setCess(0.45);
$cal.setPreminus(13505);
update($cal);
end
//----------------------------------------------------------------
rule "个人所得税:计算税后工资"
salience 1
when
$cal : Calculation(wage > 0 && wagemore > 0 && wagemore > 0 && cess > 0)
then
// 设置扣税额
$cal.setWageminus($cal.getWagemore()*$cal.getCess()-$cal.getPreminus());
// 设置税后工资
$cal.setActualwage($cal.getWage()-$cal.getWageminus());
System.out.println("-----税前工资:"+$cal.getWage());
System.out.println("-----应纳税所得额:"+$cal.getWagemore());
System.out.println("-----税率:" + $cal.getCess());
System.out.println("-----速算扣除数:" + $cal.getPreminus());
System.out.println("-----扣税额:" + $cal.getWageminus());
System.out.println("-----税后工资:" + $cal.getActualwage());
end
1315

被折叠的 条评论
为什么被折叠?



