根据考勤和绩效信息计算应发工资
某企业财务需要为员工计算员工工资并将数据导出给银行,工资的计算首先需要参考员工的缺勤率和工作绩效,具体规则为:
基本工资*(1-缺勤率+绩效)
而后再缴纳个人所得税,个税的计算方法为,以所得工资减去 2000 元的免税部分,剩余的部分以超额累计的方法计算,即分段计税,每段的税率如下表:
Levels |
Containing tax grade difference |
Tax rate(%) |
Tax reduction factor |
1 |
≤500 |
5 |
0 |
2 |
500-2000 |
10 |
25 |
3 |
2000-5000 |
15 |
125 |
4 |
5000-20000 |
20 |
375 |
5 |
20000-40000 |
25 |
1375 |
6 |
>40000 |
30 |
3375 |
如员工收入 6000 元,减去 2000 元,剩余的 4000 元为应缴税部分,按分段计税的方法,应缴税额为:
500*5%+1500*10%+2000*15%=475 元
也可以使用速算扣除数计算:
4000*15%-125=475 元
下表是企业的员工信息表Employees.txt:
下表是员工本月的缺勤率表Absenteeism.txt,如果员工没有缺勤,则表中不会有该员工的记录:
下表是员工本月的绩效表Performance.txt,同样也不是所有员工都有绩效的:
请计算出每位员工应发的工资数额,并将结果用字符串输出,格式需为:
公司名称
TOAM=工资总额
COUT=员工人数
---------------------------------------
银行账户 | 应发金额 | 姓名
银行账户 | 应发金额 | 姓名
……
基于雇员表创建新的序表,保留雇员姓名、基本工资、银行账户字段,增加缺勤率、绩效、应发工资字段,其中缺勤率字段的值为从缺勤率表中获得,绩效则来源于绩效表。应发工资字段按公式计算,对于没有缺勤或绩效记录的员工,缺勤或绩效字段会为空,计算时会自动按 0 处理,正好符合我们的要求。
将税率表抄进代码,每级记录下限收入额,并转换成序表,以便计算。
为每位员工计算个税,先扣除免税额后,找出他所在的收入段,而后直接使用速算扣除数算出税额,并从工资中扣除。
然后就可以开始拼接结果了,创建一个序列,依次写入公司名、应发工资的总额、需要转账的人数和分隔线。最后循环前面的表,将记录按格式逐条添加到序列中。
A |
B |
C |
|
1 |
=T("Employees.txt").keys(ID) |
=T("Absenteeism.txt").keys(Employee) |
=T("Performance.txt").keys(Employee) |
2 |
Salary |
TaxRate |
TRF |
3 |
0 |
5 |
0 |
4 |
500 |
10 |
25 |
5 |
2000 |
15 |
125 |
6 |
5000 |
20 |
375 |
7 |
20000 |
25 |
1375 |
8 |
40000 |
30 |
3375 |
9 |
=create(Salary,TaxRate,TRF).record([A3:C8],0) |
||
10 |
=A1.new(Name,B1.find(ID).Absenteeism:Absenteeism,C1.find(ID).Performance:Performance,BasePay,AccountNo,BasePay*(1-Absenteeism+Performance):SalaryPayable ) |
||
11 |
>A10.run(ts=SalaryPayable-2000, tr=A9.segp@r(Salary,ts), SalaryPayable= round(SalaryPayable -(ts*tr.TaxRate/100-tr.TRF),2)) |
||
12 |
=a=["RAQSOFT INCORPORATION"] |
||
13 |
>a|=("TOAM="/round(A10.sum(SalaryPayable),2)) |
||
14 |
>a|=("COUT="/A10.count()) |
||
15 |
>a|="---------------------------------------" |
||
16 |
>A10.run(a|=(AccountNo/"|"/SalaryPayable/"|"/Name)) |
||
17 |
=a |
https://try.esproc.com/splx?4fe
A1读出员工表,B1读出缺勤率表,C1读出绩效表。
2~8行抄入出税率表,A9用其生成序表如下:
A10基于雇员表新建新字段结构的序表,同时选出相应的缺勤率和考勤数据,并计算出每位员工的税前工资:
A10循环工资表,先计算出每位员工的应税工资ts,再找到对应的税率等级tr,再计算每人的税额后扣减,结果保留2位小数,执行后工资表如下:
A12起按需要将结果输出到序列a中,最终结果如下:
Employees.txt
Absenteeism.txt
Performance.txt
英文版