OA办公系统同个人所得税有什么关联呢?当然是有的,OA办公系统是进行管理的重要工具,员工是OA办公系统的直接使用者,人事财务要为员计算发放工资,工资是缴纳个人所得税的,法律法规规定由公司代扣代缴,因此在OA系统中人力资源模块中实现个人所得税的计算很有必要。
一、需求及相关定义
1.什么是个人所得税
个人所得税是调整征税机关与自然人(居民、非居民人)之间在个人所得税的征纳与管理过程中所发生的社会关系的法律规范的总称。
个人所得税的纳税义务人,既包括居民纳税义务人,也包括非居民纳税义务人。居民纳税义务人负有完全纳税的义务,必须就其来源于中国境内、境外的全部所得缴纳个人所得税;而非居民纳税义务人仅就其来源于中国境内的所得,缴纳个人所得税。
2.个人所得税类别
工资薪酬,年终奖,劳务报酬,稿酬所得,居民住房租赁所得,除居民租房租赁外的财产租赁所得、利息、股息、红利、偶然所得。
3.税率表(月度综合所得)
月度综合所得(如地区差异或新规需及时变更)
a、工资范围在1-5000元之间的,包括5000元,适用个人所得税税率为0%;
b、工资范围在5000-8000元之间的,包括8000元,适用个人所得税税率为3%;
c、工资范围在8000-17000元之间的,包括17000元,适用个人所得税税率为10%;
d、工资范围在17000-30000元之间的,包括30000元,适用个人所得税税率为20%;
e、工资范围在30000-40000元之间的,包括40000元,适用个人所得税税率为25%;
f、工资范围在40000-60000元之间的,包括60000元,适用个人所得税税率为30%;
g、工资范围在60000-85000元之间的,包括85000元,适用个人所得税税率为35%;
h、工资范围在85000元以上的,适用个人所得税税率为45%。
二、个人所得税的计算公式
* 工资个税的计算公式为:
* 应纳税额=(工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数
* 起征点(5000元)
* 全月应纳税所得额 税率 速算扣除数(元)
* 全月应纳税额不超过3000元 3% 0
* 全月应纳税额超过12000元至25000元 10% 210
* 全月应纳税额超过25000元至35000元 20% 1410
* 全月应纳税额超过9000元至35000元 25% 2660
* 全月应纳税额超过35000元至55000元 30% 4410
* 全月应纳税额超过55000元至80000元 35% 7160
* 全月应纳税额超过80000元 45% 15160
速算扣除数是指为解决超额累进税率分级计算税额的复杂技术问题,而预先计算出的一个数据。超额累计税率的计税特点,是把全部应税金额分成若干等级部分,每个等级部分分别按相应的税率计征,税额计算比较复杂。简便的计算方法是先将全部应税金额按其适用的最高税率计税,然后再减去速算扣除数,其余额就为按超额累进税率计算的税额。速算扣除数是按全额累进税率计算的税额和按超额累进税率计算的税额相减后的一个差数。
三、个人所得税的计算的简单实现
/*
*为了快速实现个人所得税的计算法练手SimpleTaxCalculator.java
*/
import java.util.Scanner;
public class SimpleTaxCalculator {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("*****工资个税计算器*****");
while (true) {
System.out.println("请输入月薪:");
double salaryAmount = s.nextDouble();//月薪
double taxableAmount= salaryAmount-5000;//应纳税所得额 (各项社保=0)
double taxAmount=0;//应纳税额
if (taxableAmount<=0){
System.out.println("不需要交税");
} else if (taxableAmount<=3000) {
taxAmount=taxableAmount*0.03;
}else if (taxableAmount<=12000){
taxAmount=taxableAmount*0.1-210;
}else if (taxableAmount<=25000){
taxAmount=taxableAmount*0.2-1410;
}else if (taxableAmount<=35000){
taxAmount=taxableAmount*0.25-2660;
}else if (taxableAmount<=55000){
taxAmount=taxableAmount*0.3-4410;
}else if (taxableAmount<=80000){
taxAmount=taxableAmount*0.35-7160;
}else {
taxAmount=taxableAmount*0.45-15160;
}
System.out.println("个税="+taxAmount);
double income=salaryAmount-taxAmount;
System.out.println("薪资="+income);
System.out.println("输入exit,退出程序!输入go继续!");
String command= s.next();
if (command.equals("exit")){
System.out.println("程序结束!");
break;
}else if (command.equals("go")){
System.out.println("计算下一个!");
continue;
}
}
}
}
/*
*end
*/
本示例的优点是代量较小,为了OA系统开发节省了时间。缺点是数据全写在程序了,if else 有点多。
四、个人所得税的计算的实现改进
//个人所得税计算器
/*TaxCalculator.java
3000*(0.10-0.03)=210
本级速算扣除额=上一级最高应纳税所得额×(本级税率-上一级税率)+上一级速算扣除数
月度应纳税
*/
import java.math.BigDecimal;
import java.util.List;
import java.util.ArrayList;
public class TaxCalculator
{
public static void main(String args[])
{
String sAmount=args[0];
System.out.println("扣除后的工资:"+sAmount);
try
{
BigDecimal taxableAmount=new BigDecimal(sAmount);
ArrayList tList=new ArrayList();
tList.add(new TaxRate(new BigDecimal(0.0),new BigDecimal(5000.0),new BigDecimal(0.0),new BigDecimal(0)));
tList.add(new TaxRate(new BigDecimal(5000.0),new BigDecimal(8000.0),new BigDecimal(0.03),new BigDecimal(0)));
tList.add(new TaxRate(new BigDecimal(8000.0),new BigDecimal(17000.0),new BigDecimal(0.1),new BigDecimal(210)));
tList.add(new TaxRate(new BigDecimal(17000.0),new BigDecimal(30000.0),new BigDecimal(0.2),new BigDecimal(1410)));
tList.add(new TaxRate(new BigDecimal(30000.0),new BigDecimal(40000.0),new BigDecimal(0.25),new BigDecimal(2660)));
tList.add(new TaxRate(new BigDecimal(40000.0),new BigDecimal(60000.0),new BigDecimal(0.3),new BigDecimal(4410)));
tList.add(new TaxRate(new BigDecimal(60000.0),new BigDecimal(85000.0),new BigDecimal(0.35),new BigDecimal(7160)));
tList.add(new TaxRate(new BigDecimal(85000.0),new BigDecimal(1000000000.0),new BigDecimal(0.45),new BigDecimal(15160)));
TaxCalculator tax=new TaxCalculator();
BigDecimal taxAmount=tax.taxCalc(taxableAmount,tList);
System.out.println("个人所得税为:"+taxAmount);
}
catch (Exception e)
{
System.out.println("税率表出错或数据不正确");
e.printStackTrace();
}
}
public BigDecimal taxCalc(BigDecimal taxableAmount,ArrayList tList)
{
BigDecimal taxAmount=new BigDecimal(0.0);
boolean isMatch=false;
for (int i=0;i {
TaxRate taxRate=tList.get(i);
if (taxableAmount.compareTo(taxRate.getMinAmount())>0 && taxableAmount.compareTo(taxRate.getMaxAmount())<=0)
{
taxableAmount=taxableAmount.subtract(tList.get(0).getMaxAmount());//扣除免征点
taxAmount=taxAmount.add(taxableAmount.multiply(taxRate.getTaxRate().setScale(2, BigDecimal.ROUND_HALF_UP)));
taxAmount=taxAmount.subtract(taxRate.getDeduction());
isMatch=true;
break;
}
}
if (!isMatch)
{
System.out.println("税率表出错或数据不正确");
}
return taxAmount;
}
class TaxRate
{
//应税金额下限
private BigDecimal minAmount;
//应税金额上限
private BigDecimal maxAmount;
//应税税率真
private BigDecimal taxRate;
//速算扣除数
private BigDecimal deduction;
//无参数构造器
public TaxRate()
{
}
//初始化全部属性的构造器
public TaxRate(BigDecimal minAmount, BigDecimal maxAmount
, BigDecimal taxRate
, BigDecimal deduction)
{
this.minAmount = minAmount;
this.maxAmount = maxAmount;
this.taxRate = taxRate;
this.deduction = deduction;
}
//minAmount属性的setter和getter方法
public void setMinAmount(BigDecimal minAmount)
{
this.minAmount = minAmount;
}
public BigDecimal getMinAmount()
{
return minAmount;
}
//maxAmount属性的setter和getter方法
public void setMaxAmount(BigDecimal maxAmount)
{
this.maxAmount = maxAmount;
}
public BigDecimal getMaxAmount()
{
return maxAmount;
}
//taxRate属性的setter和getter方法
public void setTaxRate(BigDecimal taxRate)
{
this.taxRate = taxRate;
}
public BigDecimal getTaxRate()
{
return taxRate;
}
//deduction属性的setter和getter方法
public void setDeduction(BigDecimal deduction)
{
this.deduction = deduction;
}
public BigDecimal getDeduction()
{
return deduction;
}
}
}
/*
*end
*/
本示例的优点是核心算法代码量较小,优优雅的取代了if else,程序通用性大大增强,为了OA系统开发测试节省了时间,起到很的示范作用。当然也存不足。
五、个人所得税还有按年度汇总清缴规则
级数
|
全年应纳税所得额
|
税率(%)
|
速算扣除数
|
1
|
不超过36000元的
|
3
|
0
|
2
|
超过36000元至144000元的部分
|
10
|
2520
|
3
|
超过144000元至300000元的部分
|
20
|
16920
|
4
|
超过300000元至420000元的部分
|
25
|
31920
|
5
|
超过420000元至660000元的部分
|
30
|
52920
|
6
|
超过660000元至960000元的部分
|
35
|
85920
|
7
|
超过960000元的部分
|
45
|
181920
|
真正OA系统中实现的是这个年度汇总清缴算法,通过上面示例只需稍做修改就能实现了,在此省略。
欢迎探讨与指正。