如何设计一套OA系统中的薪资核算系统
本文深入探讨了如何设计一套高效、准确的薪资计算系统,涵盖从基本工资的设定到复杂的税务处理等各个方面。通过详尽的分析与实用的建议,帮助读者理解薪资计算的复杂性及其背后的逻辑,旨在为HR专业人士和软件开发者提供有价值的参考。
作为一名打工人,每月工资到账就最开心的时候。那么我们每月的工资是怎么算出来的,税前、税后工资是什么意思,社保公积金、个税这些要扣多少?要设计一套计算工资的系统,又需要做哪些功能?
本文描述一下搭建OA系统中的薪资计算模块,需要做哪些事情,以及关于薪资计算的一些关键问题。
薪资计算是OA系统的核心功能,也基本上是最复杂的一块功能,虽然今天市面上到处都是OA系统,但要实现一套完整的薪资计算,依旧不是一件容易的事情。
一、薪资是怎么算出来的
首先从HR视角,来看每个人的薪资是怎么算出来的。
1. 工资包含哪几项
比如有个打工人叫小帅,每个月工资两万块钱,他的工资的具体构成,会有这么几项:
- 基本工资,通常是合同上写的薪资,“每个月两万块钱”指的就是基本工资;
- 出勤工资,结合实际出勤天数、请假天数、迟到早退,算出来的出勤工资。比如小帅这个月请事假一天,基本工资两万块钱,出勤工资可能就是一万九;
- 补贴扣款,即我们常见的餐补、出差补贴等;
- 社保和公积金,即我们常说的五险一金,需要扣在工资里的部分;
- 税前工资,以上该加的相加,该扣的扣除,就是税前工资;
- 个人所得税,工资中应缴的税;
- 税后工资,交税后,实际我们银行卡入账的钱。
2. 工资值如何计算
以上每个项目的值需要如何计算:
1)基本工资
通常基本工资就是合同上写的工资。有些公司会设置一个绩效工资,绩效拿满了才把这部分工资发给员工,也属于基本工资这一类。还有的公司有个岗位补贴,可能也会写到合同中。
我们得出第一个公式:
基本工资合计=基本工资+绩效工资+岗位补贴
2)出勤工资
出勤工资会按照员工当月实际计薪天数进行计算。
一般有两种规则:一种是以当月应出勤天数作为分母;另一种是将固定值21.75作为分母,21.75代表一年中平均每月的应出勤天数。具体用哪种就看公司制度了,本文我们按第一种为案例。
应出勤天数,为当月工作日的天数加法定节假日的天数。我国的法定节假日分为属于节假日的天数、和周末调休的天数,比如国庆7天,是3天的法定节假日和4天的周末,这3天的法定节假日是带薪的,需要加到出勤天数中,而4天的周末是不带薪的。
由此我们得出第二个公式:
出勤工资=基本工资×(实际计薪天数/本月应出勤天数)
应出勤天数=工作日天数+法定节假日带薪天数
3)各项假勤的扣款
请假考勤相关的扣款,类型会相对多一些:
实际计薪天数:按照打卡天数,加上带薪假的天数。如有当月入离职,只统计实际在职的天数即可。
考勤扣款:通常公司会有迟到、早退、缺勤的扣款规则,比如迟到一小时扣50块钱,计入考勤扣款中,或者算作缺勤,扣到计薪天数中;
当月试用期转正:试用期有试用期的基本工资,如果当月刚好转正,需要将出勤天数拆开来,分为试用期和转正后的天数,然后分别计算试用期和转正后的出勤工资,再相加。
这一块深入下去,计算规则比较复杂,几个关键问题见第三节;
由此我们得出第三个公式:
实际计薪天数=打卡天数+带薪假天数+法定节假日天数-迟到早退计缺勤的天数
并且完善第二个公式:
出勤工资=试用期基本工资×(试用期实际出勤天数/本月应出勤天数)+转正后基本工资×(转正后实际出勤天数/本月应出勤天数)-考勤扣款
4)社保公积金
社保分为公司缴纳部分和员工缴纳部分,公司缴纳部分不会包含在薪资里,公司直接缴纳;员工缴纳部分,会直接在员工的薪资中扣除。社保会在前一个月月底缴纳,第二个月算前一个月薪资时扣除。
我们所说的五险,包括医保、养老、失业、工伤和生育这5项,前三项是公司和个人都需要缴的,后两项是只需要公司缴的。另外其他险种,比如大病。具体规则各个地方可能会有所不同。
公积金和社保一样,分为公司部分和个人部分,个人部分在员工的薪资中扣除。
社保公积金要缴纳的金额,标准的方案是以每个员工过去12个月平均收入作为基数,乘公司比例和个人比例。而有些公司会统一按一个特定的基数缴纳,比如最低工资作为基数。这一块具体规则本文就不展开了。
由此我们可以得出税前工资的公式:
税前工资=出勤工资-社保个人部分-公积金个人部分;
社保个人部分=医保个人部分+养老个人部分+失业个人部分
5)补贴扣款/个税
所有补贴和扣款项,要按两个维度进行分类:
一是是否计税。比如我们常见的餐补、出差补贴、加班补贴,都是要计税的;有些是不用计税的,比如小帅想让公司给他多交一些公积金,钱从自己的工资里扣,这笔钱可以通过扣款的形式来计,这就属于不用计税的;
二是是否已经发放。比如出差补贴,有些公司不一定在薪资里发放,可能月中就已经发放了,但这笔钱需要放到薪资里计税。这里要引申出一个报税工资的概念,就是要用来算税的钱是多少,他和税前工资的差别就在这一项。
以上要算税的项目统计出来,并算完个税,就完成了算薪的最后一步。
个税的值,一般是上税务局网站算出结果后再导下来。因为个税计算规则较复杂,且数据源多,会有专项附加扣除等数据,因此不一定要在OA系统中计算。
最后我们得出三个公式:
税前工资=出勤工资-社保个人部分-公积金个人部分+未发放要计税的补贴-未发放要计税的扣款
报税工资=税前工资+已发放要计税的补贴
税后工资=税前工资-个人所得税+不计税的补贴-不计税的扣款
下图提供了一个具体案例,来说明整个工资计算的规则:
3. 算工资的业务流程
hr每个月计算工资的工作流程,一般是这么几步:确定要算薪人员,包括在职和本月入离职→统计出勤天数、考勤扣款、各项补贴等数据→计算税前工资、报税工资→员工确认工资条→找财务获取个税,计算税后工资→发薪审批流程→发工资
二、如何设计一个薪资系统
明确业务规则后,我们就可以开始着手设置一套薪资计算系统了。
1. 产品方向
薪资系统属于OA系统中的一个模块,目标为准确计算员工薪资。为了满足各公司不同的业务规则,这套系统需要支持用户自主可配置。
2. 产品架构
如图
通俗的解释,可以分为这5块:有哪些钱-薪资项目,谁、什么时候、需要发哪些钱-薪资方案,每人每月这些钱是多少-薪资档案、社保公积金、补贴扣款,计算每人每月的薪资-薪资核算,发工资条-工资条。
3. 薪资项目
薪资项目模块定义公司有哪些钱。所有前面提到的项目,比如基本工资、公积金这些基础项目,以及税前工资、税后工资这些结果项目,都要作为薪资项目。
对薪资项目的管理,需要让用户自定义这些项目的计算规则、数据来源、保留小数位数规则、是否可修改删除等。几个比较重要的设置:
1)是否可删除:
薪资项目可以让用户自主定义,但有些薪资项目会被其他系统使用到,如果删除其他系统就没数据了。比如实发薪资项目,会给到财务系统作为实际发工资的钱,这个删了工资没的发了。这类薪资项目可以设置为不可删除。
通常在系统开发时,我们会预置一些常用的薪资项目和对应的计算规则,一来减少用户的操作成本,提升使用效率,二来可以定义被其他系统引用的、不可删除的项目。
2)数据来源:
有三种方式:直接取值,如基本工资;手动录入或导入,如各类补贴;以及通过公式得出。
3)公式:
薪资项目里最复杂的就是公式配置。
公式由参数和运算符号组成。参数的作用是传递各项值,具体分为几类:考勤数据,比如月应出勤几天、实际计薪天数几天、迟到几天、早退几天、请假几天等;薪资档案数据,即基本工资、绩效工资;社保公积金数据,即各个险种的个人部分金额;还有各类已创建的薪资项目,也需要作为参数。
参数加上简单的加减乘除运算符号,即可实现公式的配置,比如前面提到的各个公式。
如果进一步扩展,还可以做一类条件公式,由多个条件+公式组成,根据结果在哪个条件来判断取哪个值。
举个例子,假如小帅所在公司,一个月迟到一天扣50元,迟到两天以上每天扣一百元,这个时候就可以使用条件公式了,设置两个条件+公式来实现。
条件公式的规则比基本公式更复杂。条件公式的运算符号,需要加上大于、小于、等于、不等于这些;条件本身,需要多个if和else;条件的验证,需要验证条件格式是否正确、各个条件之间是否有冲突的范围等。
考虑到公式复杂,一般会设置公式校验功能,在提交时也需要进行公示校验,检验公式是否出现了语法错误、无关字符等。
4)保留小数位数:
可以选择保留几位小数,或者不保留。这里的区别是,计算过程中是否先要对这个薪资项目先进行四舍五入,再拿四舍五入后的结果去算最终结果,还是直接算到最后结果才四舍五入。
4. 薪资方案
薪资方案模块定义发钱的规则,通俗解释就是哪些人、什么时候、要发哪些钱。
首先选择计薪时间、发薪日等规则;
然后是选人员范围,可以按部门选人。一般情况下,普通员工是统一的一套薪资方案,一些特殊人群比如市场人员,有提成,单独配一套薪资方案;
最后选择薪资项目,已创建的项目哪些需要给这些人来发。
5. 薪资档案
薪资档案模块为各类薪资基础数据的取值来源,分为三个部分:
一是基本薪资,人+基本工资/绩效工资,区分试用期和转正后,和劳动合同的薪资保持一致。薪资档案需要支持发起调薪;
二是社保公积金,人+社保各险种/公积金的个人部分的值,按照社保配置规则来计算。社保配置规则又是另外一个模块了,本文暂不提;
三是补贴扣款,人+月+每一项补贴和扣款,需要按月添加或者导入每个人的数据。
6. 薪资核算
薪资核算模块就是给员工算钱。每个月要给员工核算薪资的时候,创建一个薪资核算表,选择薪资方案和算薪月份,即可开始算薪。
按照算钱的业务流程,薪资核算分为4个步骤:确认人员范围、薪资核算、工资条确认、薪资发放审批。
1)确认人员范围:按照创建时选择的薪资方案来确定有哪些人,按照月份来确定在这个月内在职、和有月中入离职的人。另外要支持人员的添加和移除;
2)薪资核算:按照所选薪资方案中包含的薪资项目,根据公式进行薪资计算。核算的结果可以进行导出、或者重新核算;
如果人比较多,薪资计算会比较慢,可以使用异步的方式进行。
3)工资条确认:核算完成后,给员工发送工资条,进行工资确认。如果员工的工资有误,可以修改薪资档案或考勤数据后,重新核算,并再次发送工资条。
工资条确认非强制,没确认工资条的人,公司也得给他发工资不是。可以设置超过几天后,自动为确认状态的规则。
4)薪资发放审批:确认每个人的薪资都正确之后,发起薪资发放审批流程,给到相应的财务人员进行审批。审批期间不能做其他操作,如果审批不通过,可以再进行重新核算。
审批完成之后,薪资核算流程结束,将薪资数据同步至财务系统的应付账单,进行薪资发放。
7. 工资条
员工的工资条,展示该员工该月的各项工资值和确认操作。
工资条模块除了员工端的展示,也需要有后台管理。一是工资条展示字段的设置,除了各薪资项目之外,工资条上还需要展示本月的出勤天数、备注等,让员工自己能算出来实发工资。二是工资条发送和确认的人员数量统计。
8. 薪资账单
属于BI模块,根据核算结果,统计每个月的发薪人数、实发薪资金额、个税金额等。
三、薪资核算系统的一些常见问题的处理方式
1. “计薪天数” 的定义和计算规则
人事业务上,“计薪天数”和“出勤天数”并不完全相等。“出勤天数”就是正常打卡+外出出差+补卡的天数,不包含任何请假,而“计薪天数”则是出勤天数+带薪假+法定节假日的带薪日。在系统设计中,这两个数据需要分开计;
影响计薪天数的条件,包括是否打卡、补卡、外出出差、请假-带薪假、请假-不带薪假、迟到早退、后台设置为正常等,每一类情况都需要确定计薪天数的规则,另外各类情况之间需要设置优先级,用来解决同时发生的情况下是否需要计薪。比如,当天迟到,然后请了事假,最后又后台设置为考勤正常,这种的结果究竟是什么。通常来说,优先级规则为后台设置>请假>外出出差>补卡>迟到早退;
其中是否打卡,比如上班打卡、下班没打卡,通常有两种规则,计为半天缺勤、或者计为全天缺勤。具体的考勤规则设置,本文暂不展开。
2. 请假对薪资的影响
请假的计薪规则一般有3种:不带薪比如事假、带薪比如年假、只发一部分薪资比如病假产假等。规则需要在请假规则中配置。带薪假,需要加到计薪天数中计算。只发基础薪资的假期,需要另外计算这部分假期薪资,在税前薪资中加上去。
请假可以按照小时、半天、上午/下午、全天来请假,对应体现在计薪天数上。要注意的是半天和上午/下午是两种不同的概念,半天=0.5天,而上午/下午不一定是0.5天,要看公司上午下午的上班时长。
3. 按天数计的迟到早退扣款规则设置
很多公司会有一种阶梯式扣款的迟到早退扣款规则,比如,迟到一个小时以内,每天扣50块钱;迟到1-4个小时,算缺勤半天;迟到4小时以上算缺勤一天。这种规则需要按照每天的迟到时长采用不同的规则,而且有两类扣款规则,按固定金额计,和按出勤天数计。
系统设计的难点在于,薪资项目公式的迟到天数参数,只能一个月传整体的一个值,即一个月迟到了几天,无法传一个月里每天的值,即每天迟到的时长。所以无法通过公式配置。
为了让迟到时长和扣款规则都可配置,这项规则需要放在考勤规则中配置,迟到时长+对应的扣款金额OR出勤天数。每月薪资核算时,直接算出每个人的结果,体现在“考勤扣款”和“计薪天数”这两个薪资项目的计算结果中。
4. 试用期转正、调薪前后的薪资核算方式
试用期转正和调薪,在转正/调薪生效日期前后,基本工资不一样。如果这一天发生在一个月的月中,就需要将计薪天数拆分。和上一条一样,薪资项目公式的基本薪资参数,只能一个月传整体的一个值,无法传一个月里每天的值。
试用期转正,我们的处理方式是将“月计薪天数”拆分为“试用期计薪天数”和“转正后计薪天数”这两个参数,公式参照第一节的1-3。
调薪,我们只允许调薪生效日期在每月1日,从规则上规避这个问题。如果一定要在月中调薪,只能手动计算当月调薪前后的差值,在税前薪资中另外增加或者扣减。
专栏作家
潘帕斯雄鹰,人人都是产品经理专栏作家,进击、踩坑中的产品狗一枚,关注互联网,写过小说,看过哲学。简书:潘帕斯雄鹰。
本文原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自 Unsplash ,基于 CC0 协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
mark
没想到薪资里面有这么多门道和学问,知识还挺多挺复杂的,这篇文章讲的很清楚明了,点赞收藏点赞收藏!