如何設(shè)計(jì)一套OA假勤管理系統(tǒng)
今天市面上到處都是OA系統(tǒng),假勤模塊如何實(shí)現(xiàn)已經(jīng)有很多案例了,但要完整摸清楚里面的計(jì)算規(guī)則,依舊不是一件容易的事情。本文描述一下搭建OA系統(tǒng)中的假勤模塊,需要做哪些事情,以及關(guān)于假勤規(guī)則計(jì)算的一些關(guān)鍵問題。
作為一名打工人,每天上班的打卡是最煩的時候,又是早起當(dāng)牛馬的一天,還不能遲到。那么我們的考勤一般會有哪些規(guī)則,怎么算我這個月是不是全勤、要扣多少錢?
一、假勤業(yè)務(wù)規(guī)則
我們先從視角,來看各項(xiàng)假勤的業(yè)務(wù)規(guī)則。
1. 有哪幾類考勤業(yè)務(wù)
-考勤打卡:每個工作日需要員工上下班打卡,看牛馬們有沒有來上班,有沒有遲到早退曠工。
如果遲到早退就要罰款。比如遲到1分鐘,扣100塊錢。曠工會加倍罰款。
考勤的各項(xiàng)規(guī)則比較多,比如有些公司不要求員工上下班打卡;再比如有些公司彈性打卡,前一天下班晚第二天可以晚點(diǎn)上班,等等。
-補(bǔ)卡:如果遲到或者忘記打卡了,可以用補(bǔ)卡來抵,一個月有使用次數(shù)限制。
-請假:請假有年假、事假、病假、調(diào)休假等不同類型的假。不同的假主要影響是否帶薪。事假不帶薪;年假帶薪,一年5天或者10天,根據(jù)員工工齡來定;病假、產(chǎn)假這些會發(fā)個基本工資。
請假的時間,按半天或者小時來請。
-外出和出差:員工外出出差,一般需要提個外出或出差申請,上下班進(jìn)行外勤打卡或者不用打卡。
-加班:有些心地善良的資本家,會制定加班折算調(diào)休的規(guī)則,比如加幾個小時的班可以調(diào)休半天。
2. 計(jì)算每月的出勤結(jié)果
需要結(jié)合員工的打卡、請假、外出出差、遲到早退等各種情況,計(jì)算員工每個月的出勤天數(shù),來計(jì)算薪資。
二、產(chǎn)品功能設(shè)計(jì)
明確業(yè)務(wù)規(guī)則之后,我們就可以開始著手設(shè)計(jì)一套假勤管理系統(tǒng)了。
1. 產(chǎn)品方向
假勤管理屬于OA系統(tǒng)中的一個模塊,目標(biāo)為準(zhǔn)確統(tǒng)計(jì)員工的出勤。為了滿足各公司不同的業(yè)務(wù)規(guī)則,這套系統(tǒng)需要支持用戶自主可配置。
2. 產(chǎn)品架構(gòu)
整體架構(gòu)如圖所示
首先是規(guī)則配置,段需要配置考勤規(guī)則,和假期規(guī)則;
然后是考勤日常使用,員工端的考勤打卡,以及請假、補(bǔ)卡、外出、出差、加班的申請和審批;
最后是統(tǒng)計(jì),月度出勤統(tǒng)計(jì)和每日出勤明細(xì),端和員工端都能看到。
3、考勤規(guī)則設(shè)置
通過考勤組管理,把一群人圈在這個組里,并設(shè)定這群人的考勤規(guī)則。考勤規(guī)則還是比較復(fù)雜的,具體需要設(shè)置內(nèi)容有:
1)人員,即哪些人要被圈在這個考勤組里。可以選單個人或者按部門選;
2)考勤班次:
考勤班次用于定義上下班的時間,比如9點(diǎn)上班、下午5點(diǎn)下班,就用考勤班次定義;
考勤班次可以制定多個,主要針對早晚班、三班倒這類情況;
一個班次里,通常需要設(shè)置這幾個時間,上班時間、下班時間、午休開始/結(jié)束時間、下班卡結(jié)束/上班卡開始時間。有些公司只需要上下班各打一次卡,而有些公司會要求中午午休前后也要打卡。下班卡結(jié)束/上班卡開始時間主要用于考勤打卡區(qū)分第一天下班和第二天上班。
考勤班次會用在很多地方,我們需要用這幾個時間點(diǎn)來計(jì)算一天的應(yīng)出勤時長、上下班打卡時間等。
3)考勤日期,即哪幾天要上班,哪幾天不用上班。這里需要支持幾種形式:
- 按照國家法定節(jié)假日上班;
- 固定每周哪幾天上班。針對一些不管法定節(jié)假日、都是固定每周的周幾上班的職位,比如醫(yī)生這種;
- 大小周、單休、不用調(diào)休之類的特殊情況。需要在前兩種的基礎(chǔ)上,再支持手動設(shè)置哪幾天需要上班,或者哪幾天不需要上班的功能;
- 輪班制、三班倒這類。多人輪流上班和休息的職位,常見于一些線下服務(wù)業(yè)、客服等等,每周的上班和休息日不一樣,比如這周一三五上班,下周二四六上班,或者這周早班,下周晚班。這種情況需要排班功能,人+班次+日期,由人工維護(hù);
設(shè)置考勤日期后,就可以算出每個員工每月的應(yīng)出勤天數(shù),有哪幾天需要打卡;
4)是否需要打卡。如果設(shè)置為不需要打卡,則默認(rèn)每天都正常上下班,不過依舊會有上下班時間;
5)打卡方式。手機(jī)定位打卡,或者是對接第三方系統(tǒng)進(jìn)行指紋、人臉打卡;
6)打卡地點(diǎn)。如果是手機(jī)定位打卡,選擇具體定位,周邊多少米范圍,作為打卡位置;
7)彈性打卡,是否需要開啟,如果開啟,允許遲到幾分鐘;
8)外勤打卡,是否需要開啟,如果開啟,允許在非打卡地點(diǎn)進(jìn)行外勤打卡;
9)補(bǔ)卡,是否需要開啟,如果開啟,設(shè)置每個月的補(bǔ)卡次數(shù)和最晚日期
10)遲到早退的扣款規(guī)則:通常有兩種邏輯,一種是直接扣錢,比如遲到一小時以內(nèi)扣50塊錢;另一種是算到缺勤天數(shù)中,比如遲到一小時以上計(jì)為缺勤半天。可以按照遲到時間區(qū)間,配置多個規(guī)則。
11)加班規(guī)則,加班是否折算調(diào)休,如果要,需要設(shè)置加班折算調(diào)休的比例。
4. 考勤打卡
即上下班打卡,支持員工根據(jù)考勤組中配置的打卡地點(diǎn)、時間,進(jìn)行打卡即可。
如果不在公司位置,可以定位當(dāng)前地址進(jìn)行外勤打卡。
考勤打卡雖然看起來很簡單,但這是員工最出岔子的地方,一些小問題都得想好怎么處理,不然容易被罵。
比如,9點(diǎn)上班,打卡時間是截止到9點(diǎn)00分00秒,還是到9點(diǎn)00分59秒;再比如,用戶開著打卡頁面從打卡地點(diǎn)范圍外到范圍內(nèi),如果頁面刷新太慢了,可能人已經(jīng)到打卡區(qū)域內(nèi)了,頁面還是顯示不在打卡區(qū)域內(nèi),萬一這幾秒剛好過了遲到時間,用戶就要罵娘了。
考勤打卡的難點(diǎn)是需要區(qū)分上班打卡和下班打卡。比如早上忘打卡,下班的時候再進(jìn)入頁面,這個時候是上班卡還是下班卡?通常有兩種處理方式:
第一,根據(jù)考勤組-考勤班次中設(shè)置的午休開始/結(jié)束時間,劃分上午下午,沒打卡算對應(yīng)的半天缺卡,午休結(jié)束后頁面上就算下午打卡。下班卡切換上班卡,根據(jù)下班卡結(jié)束/上班卡開始時間,通常設(shè)置再凌晨,主要應(yīng)對凌晨加班的情況。
第二,下班卡,根據(jù)上面這種方式;上班卡,如果當(dāng)天沒打過,進(jìn)入頁面顯示的就是上班卡。
這兩種的區(qū)別,在于忘打上班卡、不考慮補(bǔ)卡的情況下,前者可以默認(rèn)算用戶上班了半天,后者不算。
5. 假期規(guī)則設(shè)置
通過假期規(guī)則管理功能,設(shè)置有哪幾種假期類型,并且設(shè)置每種假期的規(guī)則。具體需要設(shè)置的內(nèi)容有:
1)是否帶薪
可以選擇全薪、不帶薪、和帶部分薪資。
帶部分薪資比如病假,需要填寫系數(shù);
2)請假時長
可以選擇按小時、按半天、按天
- 按小時,需要按照考勤班次的應(yīng)出勤時長來換算到天;
- 按半天,有兩種計(jì)算規(guī)則,一種是0.5天,一種是選擇上午/下午,并根據(jù)考勤班次確定上午和下午分別是多久,兩者是不一樣的;
- 按小時,需要定義最小顆粒度,時分秒、5分鐘、還是半小時;
3)是否有假期余額
帶薪假都需要用到余額,一般有幾種情況:
- 固定一年幾天或一共幾天,比如小公司的年假、婚假喪假
- 按照工齡或者司齡,階梯設(shè)置假期余額,比如年假
- 同步加班時長作為假期余額,比如調(diào)休假
4)假期余額所屬周期、有效期
我們常說的年假屬于2024年還是2025年,就是余額所屬周期的意思。
余額所屬周期實(shí)際影響的是這個假期余額的使用時間,比如2024年的年假,在2024年用。
余額所屬周期可以選擇按年、按月。年假的余額周期就是按年;有些公司的調(diào)休假可能這個月有效、下個月失效,余額周期就是按月,當(dāng)然這種場景比較少。
5)假期余額的有效期
余額有效期,可以選擇是否延期,延期的時長或者日期。比如年假的周期一年,12月31日到期,很多公司會延期到第二年3月31日,可以通過設(shè)置余額有效期延長3個月來實(shí)現(xiàn)。
6. 假期余額管理
有假期余額的假期,需要專門有個頁面管理假期余額。假期余額涉及到幾個規(guī)則:
1)假期余額的發(fā)放
發(fā)放假期余額有幾種情況:
- 定時自動發(fā)放,比如年假,通常在每年的1月1日、或者提前一兩個月發(fā)放;調(diào)休假,通常加班審批通過后發(fā)放;
- 新員工入職后,完成入職或者轉(zhuǎn)正審批通過后發(fā)放。通常用于入職當(dāng)年的年假,發(fā)放的余額數(shù)量,需要根據(jù)員工入職時間的比例進(jìn)行折算;
- 手動修改和導(dǎo)入操作。修改假期余額的邏輯是新增或扣減,而不是直接改數(shù)值
假期余額的發(fā)放和開始使用時間不是同一個概念,發(fā)放后只是用戶可以看得到,實(shí)際使用需要看余額所屬周期和有效期。
2)假期余額的消耗
余額的消耗,包括正常使用和扣減這兩種情況;
正常使用需要考慮使用哪個批次,比如有去年年假和今年年假,先用哪個;
扣減包含過期自動扣減、離職自動扣減、手動扣減這幾種情況??蹨p需要考慮是否給員工折算薪資。
3)假期余額的查看
假期余額看起來是數(shù)字,背后是每個批次的進(jìn)出,跟庫存余額的邏輯類似。比如年初某一天有年假8天,可能是去年的3天+今年的5天。
因此假期余額查看,也需要看到當(dāng)前余額對應(yīng)了哪幾個批次,每個批次的所屬周期、到期時間分別是多少。
7. 各類申請
最后是各類人事申請和審批,包括:請假、外出、出差、補(bǔ)卡、加班、銷假這幾塊。
8. 考勤報(bào)表
考勤模塊可以做兩個維度的報(bào)表,面向員工和:
1)考勤每日明細(xì),包括每天上班、下班的考勤狀態(tài)、打卡時間、是否遲到、是否請假外出等。員工自己可以通過這個功能查看自己每天有沒有正常打卡,要不要補(bǔ)卡;
2)考勤月度統(tǒng)計(jì),包括每個月的實(shí)際出勤天數(shù)、請假天數(shù)、外出出差天數(shù)、遲到早退天數(shù)等。員工自己可以通過這個統(tǒng)計(jì)查看自己這個月是否全勤,大概會被扣多少錢,領(lǐng)導(dǎo)和可以看有多少人請假了幾天等。
三、考勤時長和狀態(tài)的計(jì)算規(guī)則
考勤模塊最復(fù)雜的部分,是結(jié)合多種情況的考勤狀態(tài)設(shè)置和出勤結(jié)果統(tǒng)計(jì)。一個員工每天可能會有多種情況,正常打卡、遲到、請假、出差等,需要結(jié)合這么多的情況,來計(jì)算出用戶實(shí)際的出勤結(jié)果,最終用于計(jì)算出勤工資。單靠看釘釘飛書這些系統(tǒng),很難把他們底層的規(guī)則看出來。
要把考勤數(shù)據(jù)計(jì)算準(zhǔn)確,需要幾個環(huán)節(jié):
1. 數(shù)據(jù)項(xiàng)和影響因素的定義
首先,定義本質(zhì)邏輯:可以理解為將一天的時間作為時間軸,把各類情況根據(jù)發(fā)生的時間段放到時間軸上。通過時間軸就能得出各項(xiàng)出勤時長,并且不相互矛盾。
需要計(jì)算、并在報(bào)表中呈現(xiàn)的數(shù)據(jù)和狀態(tài)有幾下幾項(xiàng):
- 出勤狀態(tài):根據(jù)各類因素匯總一個最終結(jié)果,正常OR異常。一天的時間軸通過打卡、請假、外出出差滿了就是正常,如果缺勤、遲到早退就是異常;
- 上班和下班的打卡狀態(tài):取上班和下班點(diǎn)發(fā)生的事情,正常打卡,或遲到早退,或請假外出等;
- 出勤時長:當(dāng)天正常打卡加上外出出差的時長,即扣減請假和缺勤的時長。一般不包含遲到早退,遲到早退會另外算;
- 請假時長:可以細(xì)分為帶薪假時長和無薪假時長;
- 遲到早退時長
一天考勤影響的因素,按照優(yōu)先級,有以下幾項(xiàng):
- 請假
- 外出和出差
- 補(bǔ)卡和后臺置為正常。補(bǔ)卡可以將缺勤、遲到早退修正為正常打卡,后臺置為正常是管理員的操作,效果和補(bǔ)卡一樣;
- 正常打卡。是否遲到早退,根據(jù)正常打卡的時間來計(jì)算;
- 缺勤。沒打卡補(bǔ)卡、請假、外出出差的任何記錄,就記為缺勤
需要按照以上的優(yōu)先級,比如一天即外出,又請假,還正常打卡了,按照優(yōu)先級就是,先算請假的時間段,再算外出的時間段,剩余部分算正常打卡的時間段。
2. 幾個規(guī)則的處理和約定
以上確定了底層邏輯和要計(jì)算的數(shù)據(jù),接下來我們還要處理幾個規(guī)則:
1)上班下班一個打卡另一個未打卡,算缺勤半天還是缺勤一天?
按時間軸的底層邏輯,需要上班卡和下班卡都打卡,才算是一天正常出勤,只有一個打卡當(dāng)天時間軸無效。有些公司的人事制度會把這種算缺勤半天,我們的處理方式為0.5天的那個時間點(diǎn),給一個類似于系統(tǒng)打卡的記錄,把這一天的上下班都打上。功能上可以提供配置,根據(jù)用戶選擇這種算缺勤一天還是半天,來判斷要不要設(shè)置這個系統(tǒng)打卡記錄
2)覆蓋上班或下班點(diǎn)的請假外出,要不要在請假外出前后打上下班卡?
比如早上請假2小時,2小時后是否還需要上班打卡?底層邏輯和上一條一樣,比如請假9-11點(diǎn),如果11點(diǎn)不需要打上班卡,系統(tǒng)自動給一個11點(diǎn)的打卡記錄,也是通過配置實(shí)現(xiàn)。
3)遲到早退的扣款如何處理?
很多公司有專門的遲到早退扣款規(guī)則,比如遲到1小時內(nèi)扣100塊錢,遲到1小時以上算缺勤半天等,這個規(guī)則計(jì)算的結(jié)果和直接拿打卡時間計(jì)算的出勤時長并不一樣。所以遲到早退的處理方式,遲到早退扣款規(guī)則配置需要另外做,在出勤時長的計(jì)算中不考慮遲到早退,比如遲到了5分鐘,時間軸依舊算正常出勤,另外扣這5分鐘的錢。
3. 每天考勤時長和狀態(tài)的計(jì)算規(guī)則
以上確定后,就可以計(jì)算考勤時長和狀態(tài)了。
按照9點(diǎn)下班、5點(diǎn)下班、一天8小時。針對各種場景舉個例子:
4. 每月出勤工資的計(jì)算規(guī)則
將日匯總到月后,就可以計(jì)算每月的出勤工資了。
最終計(jì)算過程如下:
幾個數(shù)據(jù)的說明:
1)前面計(jì)算的每天出勤時長,包含了正常打卡、外出、出差,不包含帶薪假,因此計(jì)薪的時候,實(shí)際出勤天數(shù)需要加上帶薪假;
2)實(shí)際出勤天數(shù)不等于計(jì)薪天數(shù),分母和分子都還需要加上法定節(jié)假日中計(jì)薪日的天數(shù)。比如國慶7天假,計(jì)薪日是3天,另外4天屬于周末不算計(jì)薪日;
3)遲到早退的扣錢規(guī)則,比如遲到1小時扣100元,這個扣款需要單獨(dú)計(jì)算,最后在公式中扣減。
專欄作家
潘帕斯雄鷹,人人都是產(chǎn)品經(jīng)理專欄作家,進(jìn)擊、踩坑中的產(chǎn)品狗一枚,關(guān)注互聯(lián)網(wǎng),寫過小說,看過哲學(xué)。簡書:潘帕斯雄鷹。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash ,基于 CC0 協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
- 目前還沒評論,等你發(fā)揮!