考勤排班规则(转)
班次在考勤,班次定义,就是员工上下班的标准,就是考勤的标准,其重要性不言而喻。企业中存在着各色各样的班次,而且不同的企业对班次的定义及习惯说法也不一样,理清班次的定义及其相关联的术语含义就非常有意义。下面分几个方面来描述班次及其在企业中的常见表现。 一、基本班次的组成: 由上面4个基本元素组合而成的班次,称为基本班次,其中休息时段或用餐时段是从属于某个班段的,这样组成的班次,能够适应大部分的情况。班次除了规定上下 班时间规则外,还要定义该班次中,怎样才算迟到早退,怎样才算缺席旷工,还有其它什么异常等等,如含用餐时段的班次,就有用餐超时的异常。(每个班次都定义迟到早退缺席旷工等设定,会比较啰嗦,可做个全局默认值,如果班次中没有设定就使用默认值)
2、自由上下班:例:规定员工当天 7:00-19:00可自由上下班(多个班段),只要保障上足8小时即可,或者上了多少小时班算多少。周六周日自由加班就是属于这种情况。 3、互斥班组:将多个互斥的基本班次组合在一起,构成一个互斥班组。所谓互斥的,是指各个班次其上下班时间相互不交叉。计算考勤时由系统自动识别匹配是哪个基本班次。这对于两班倒或三班倒的情况下可以有效地减少排班的工作量。不建议使用互斥班组来进行排班,因为在员工多打卡或少打卡的情况下,同时加班,请假会让班次是的刷卡点改变,这都使得智能匹配过程容易产生错误。明确排班则没有这类错误。考勤应是非常严肃的,哪怕是0.0001%的错误,都会给你的考勤软件蒙上污点。 三、“工作天”在班次中的重要性
四、用面向对象的类来因应企业班次的发展 以上所说的班次,能对应企业中的普遍情况,但就能适应企业中的全部情况了吗?那肯定是不行的,随着企业的发展与需求的变化,班次也将随着变化,但无论如何变化,总要规定员工是如何上下班的,如何打卡的,怎样才算是异常等等信息,对于考勤计算来说,这个班次又是如何匹配刷卡的,如何匹配工作天的,等等信息总要在班次中定义,排班也一样,无论采用何种排班方法,总得给出当天排的是什么班次。用写SQL过程来计算考勤过程的方法,因为其对模块化及面向对象均不支持,在需求发生变更时,改动代码或看别人的代码都将变得无比艰难。用面向对象的软件方法可以在企业有新的班次类型出现时,轻松面对,而无须对软件大动干戈。用面向对象的方法则需要建立一个正确的考勤模型体系,只要考勤模型不变,变化就尽在掌握中。 四 公休作息日 作息是每个人所必需的, 五 调休
考勤排班
班次及排班对于考勤有着重要的意义,是计算考勤的基准。考勤软件是否好用,排班是否好用就占了很大的比重。 1、群组排班与个人排班的关系。不同的软件其排班实现不大一样,一般分为群组排班及个人排班,排班逻辑是个人排班优先于群组排班。对于群组的概念, 有些软件直接用部门替代有些则有专门的考勤班组概念,无论如何做,都是一个员工集合也就是Group这个概念,个人排班作为特殊情况对待。其当天排班过程 则是这样:如果当天有做个人排班,则以个人排班为准,否则以群组排班作为当天班次,如果群组排班也没排,那么就依全局设定来处理这个异常,没排班的可以设 定一个默认班次,或者设一个部门默认班次或者直接发出异常,总之在考勤计算前要确认当天所上班次,我是反对智能匹配班次这个概念的,因为考勤是个很严肃的 话题,就算你做到了99.99%成功匹配,但就是出现一个错误,就需要人工来做全部检查。 2、异动与历史记录对排班的影响。一个例子就是:员工2007-3-15从排班组A 调入排班组B,那么其班次也会跟着改变,计算时得考虑这些因素。类似这样的例子有:员工部门调动对于统计部门每天人数的影响,薪资异动对于每月薪资计算的影响。 3、数据的来拢去脉能够展示出来给用户看,回答为什么员工当天上的是这个班次,打了这些卡后,为什么得到如此计算结果。 4、个人月排班查询:数据来源是群组排班与、个人排班、加班、请假及异动记录,依据预定的规则计算出员工当天排班然后展示出来给用户看,"加"表示当天有安排加班,"假"表示当天有请假,"离"表示当天已离职,"未"表示当天尚未入职,并提供快捷的方式查找到相应的记录,以做到有理可依有据可查。个人排班与群组排班具有类似的界面及批量排班功能,目的是减少排班工作量,让软件更人性化一些。 5、 个人考勤明细:考勤计算结果与相关考勤数据展示出来,让用户明白刷了什么卡,得到什么样的结果,力求做到数据透明化。解决几个问题: 排班系统与考勤计算的关系 排班系统与考勤计算其实关系不大,也就是考勤计算只需要排班系统告诉员工当天排的是哪个班次就行了,具体如何排班,如何倒班则与考勤计算无关。理解这一点就可以将排班系统与考勤计算独立开来。排班系统的目标是更好地真实地反映企业中排班的实际情况,企业中排班的主要对象是:1、人。2、班次。3、倒班规则。下面分开来说: 1、人,要解决多人同时排班的问题。最简单方法是手工进行每人每天的排班,加一个批量处理功能来解决多人同时排班的问题。这里说另一种方法:将人归入群组,然后对群组进行每天排班,特殊的人员进行个人每天排班。也就有群组排班与个人排班同时存在,匹配逻辑是个人排班优先于群组排班。同时群组排班及个人排班都应该有批量处理功能。 对人分群组进行群组排班的方法比较贴近千人以上的企业的实际情况,能清楚地反映当前群组的班次。其带来的问题是员工归属群组的历史记录问题,这个问题要处理。 2、班次,班次的种类及具体班次的定义请看另一个文章,这里只是提出排班时,要对所排班次的合理性做出检测并警告,主要是相邻天的上下班时间交叉问题,特别是1号上夜班,2号上白班这种情况。当班次很多时,一般会对班次进行分类,常有以下分类:1、按部门分。2、按使用性质分:常用班次,临时班次, 一次性班次等。分类后能很容易就能找到相应的班次,不用记住班次的名称或编号。 3、倒班规则,如果做好了群组排班与个人排班,就算没做倒班规则,对千人左右的厂也够用了。但要应付更多的员工时,倒班规则可以帮助HR人员很快地生成当月排班表。常见的倒班规则有:两班倒,三班倒,倒班时间则有:按月倒及按周倒,或者自定义倒班日期。倒班规则挂在员工考勤群组中,不同的考勤群组指定不同的倒班规则,这样就可以快速生成群组排班表。 快速生成一个群组排班表,再由HR人员手工做少少修改或不用修改就可以完成排班,这可以减轻排班难度。 4、员工排班表的生成。排班表决定员工最终排定班次,注意:该表不一定存在于数据库中,至少在我的设计里,该表没有存在于数据库表中。它是排班系统 动态依据“群组排班表”“个人排班表”“个人历史记录”计算而得出的。目前我 设计中“倒班规则”则是用来快速生成群组排班表,减轻排班工作量的,与排班表生成逻辑无关。如果要做得更复杂一些,也可以在将“倒班规则”考虑到排班表的生成中去,那样的排班表生成逻辑就复杂很多了。我认为:将“倒班规则”只用作快速生成群组排班表,不计入排班表生成逻辑中是一个足够好用的方案,系统不需要再复杂化。 5、关于自动侦测员工当天班次。自动侦测员工当天班次,作为一个功能存在,做成“侦测可能的排班错误”,并提供对应的可能班次。用以方便检测排班错误。还是不赞成用自动检测到的班次来替代排班的方案。因为那不能回答:当天员工是否应该出勤?(不用出勤也就没有旷工缺席了。) 关于考勤有很多很多的话题与规则,因为其复杂与易变,考勤软件走的是螺旋上升的发展道路,程序员的每一次努力都让软件更强壮易用,所以最好用面向对象的方法来开发考勤软件。至于数据库表设计及具体程序对象接口代码,我没准备这方面的内容,至于用户操作界面如何才易用,那又是另一个话题了。思想与解决方案说出,代码就是次要的了。 |
posted on 2011-12-26 11:19 lcmxiaoya 阅读(4778) 评论(0) 编辑 收藏 举报