人事管理 的大部分功能都需要依赖于 清晰完整的打卡逻辑与明确的考勤状态

所以需要先完成 考勤打卡功能

所以需要先弄懂后台的考勤组班次

考勤状态分析

考勤状态分类

两大类打卡

签到(需要4值与4时,形成4时间段)
	正常
	迟到
	严重迟到
	缺卡/旷工
签退(需要2值与2时,形成4时间段)
	正常
	早退
	缺卡

全组合有12种,但旷工特殊,算了旷工通常不管签退了
故有10种情况

正常到   正常退
正常到   早退
正常到   缺退卡
迟到     正常退
迟到     早退
迟到     缺退卡
严重迟到 正常退
严重迟到 早退
严重迟到 缺退卡
旷工

再分 位置 正常/异常,就有
9 * 2 + 1 = 19种状态

状态与时间区间

当前思路

后台原型图上的控件是有误导性的,意思是表示时间值的,而非时间段了,
由下面同样使用时间段但明显意思是时间值的可以判断出来


打卡(请假的不参与,单独统计)

****************************************
状态
正常、异常[迟到、(严重迟到、旷工、)早退、缺卡]


时间点:
上班时间、下班时间、当日与次日的打卡记录时间界点
	分别简称:上点、下点、界点


时间长度:
严重迟到判断时间、旷工判断时间
	分别简称:严迟时、旷时
****************************************


########################################
不验证 严重迟到,不验证 旷工
只有四种基础状态:正常、迟到、早退、缺卡

是否少一个基础的迟到早退时间长度?类比 严迟时 与 旷时

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,下点)打卡
早退:(上点,下点)打卡
	早退与迟到范围一样,区别是迟到是第一次打卡,早退前有一次打卡才能区分是签到卡签退卡
缺卡:~~(界点,界点)无打卡~~
	(界点,下点)无打卡
	一次打卡都没
	假如在[下点,界点)第一次打卡,构不成签到打卡,无签到打卡就构不成签退打卡,
	故范围可以缩小到(界点,下点),
	不对不对,这应该是旷工的逻辑全日缺卡就应该是是(界点,界点)	
	
	等一下,应该分全日缺卡、签退缺卡
	全日缺卡:(界点,界点)无打卡
	
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
			不知道怎么界定范围,
			反正是不论是 正常到 还是 迟到 的打卡范围,都没有 签到卡,
			在 正常退 、 早退 打卡范围内 有 签退卡。
			但问题还是那个,迟到与早退的区间重叠,无法区分是签到卡还是签退卡
			
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
			也存在迟到与早退也是区间重叠问题

可能的实际状态:
	正常到   正常退
	正常到   早退
	正常到   缺退卡
	迟到     正常退
	迟到     早退
	迟到     缺退卡
	
	缺到卡   正常退
	缺到卡   早退(如下面的问题中,若无基础迟到时间,该情况无法区分是签到卡还是签退卡)
	缺到卡   缺退卡



########################################
验证 严重迟到,不验证 旷工
只有五种基础状态:正常、迟到、严重迟到、早退、缺卡

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 严迟时]打卡
严重迟到:(上点 + 严迟时,下点)打卡
早退:(上点,下点)打卡
	迟到/严重迟到 是第一次打卡,早退前必须有一次打卡,
	早退前有一次打卡才能区分是签到卡签退卡
缺卡:
	全日缺卡:(界点,界点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
		有问题如上
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
		有问题如上
可能的实际状态:
	正常到   正常退
	正常到   早退
	正常到   缺退卡
	迟到     正常退
	迟到     早退
	迟到     缺退卡
	严重迟到 正常退
	严重迟到 早退
	严重迟到 缺退卡
	
	缺到卡   正常退
	缺到卡   早退(类似的,无法区分签到签退卡)
	缺到卡   缺退卡




########################################
不验证 严重迟到,验证 旷工
只有五种基础状态:正常、迟到、早退、缺卡、旷工

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 旷时]打卡
旷工:(界点,上点 + 旷时]未打卡,也就是签到范围内未打卡
早退:(上点,下点)打卡
缺卡:
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
		有问题如上
旷工:
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
		有问题如上
	
	简单统计:(界点,上点 + 旷时]无打卡 就算旷工

可能的实际状态:
	正常到   正常退
	正常到   早退
	正常到   缺退卡
	迟到     正常退
	迟到     早退
	迟到     缺退卡
	旷工






########################################
验证 严重迟到,验证 旷工
只有六种基础状态:正常、迟到、严重迟到、早退、缺卡、旷工

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 严迟时]打卡
严重迟到:(上点 + 严迟时,上点 + 旷时)打卡
旷工:(界点,上点 + 旷时]未打卡,也就是签到范围内未打卡
早退:(上点,下点)打卡
缺卡:
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
		有问题如上
旷工:
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
		有问题如上
	简单统计:(界点,上点 + 旷时]无打卡 就行?

可能的实际状态:
	正常到   正常退
	正常到   早退
	正常到   缺退卡
	迟到     正常退
	迟到     早退
	迟到     缺退卡
	严重迟到 正常退
	严重迟到 早退
	严重迟到 缺退卡
	旷工


❓可能的问题

  • 是否缺少基础的签到时间区间(界点到上点都可作为 正常签到打卡时间 是否不合理,后续正常班次前的临时紧急加班(还没提交加班申请)的签到怎么与正常班次的签到区分)
  • 是否缺少基础的迟到时间区间(在不启用验证严重迟到与旷工时,整个工作时间都可作为 签到打卡时间 是否不合理),
    基础迟到时间应该不小于严重迟到时间(与旷工时间的大小关系呢?),
    或者换一种说法是 签到与签退的时间界限,
    不然迟到与早退区间重叠,若当天只有此区间有一个打卡时,无法区分是 (迟到 缺退卡) 还是 (缺到卡 早退)

弹性时间分析

上面考勤状态 后面需要 添加考虑此弹性时间
也就是将上点与下点改为实际的上点与下点

flexible_early
允许弹性早到早退:0否1是

flexible_late
允许弹性晚到晚退: 0否1是

flexible_late_tomorrow
允许弹性第一天晚退第二天晚到: 0否1是



flexible_early_time
允许弹性早到早退时间(分钟)

flexible_late_time
允许弹性晚到晚退时间(分钟)

flexible_late_today_time
允许弹性第一天晚退时间(分钟)

flexible_late_tomorrow_time
允许弹性第二天晚到时间(分钟)

这里分别简称为

弹早

弹晚

弹跨


弹早时

弹晚时

弹跨补时

弹跨用时
弹晚
本质是 先欠后补

弹早、弹跨
本质都是 先补后用

互斥关系

弹晚 与 弹跨 互斥,不能同时启用
其他不互斥

加班问题

加班分类

根据申请表提交顺序

有2种情况

  1. 申请加班表通过,按时来加班
  2. 未提交申请表,临时紧急加班,之后补交申请表
根据加班在班次前后关系

组合有10种

加班 组合情况

首先分
班次前加班,
	班次前加班不相连
			相连
班次后加班
	班次后加班不相连
			相连


正常班次
班次前的相连加班
班次前的不相连加班
班次后的相连加班
班次后的不相连加班
整日加班


简称:

班
前加连
前加不连
连后加
不连后加
整日加班




下面是考虑的加班组合(10种):
班
班 连后加
班 不连后加
前加连 班
前加连 班 连后加
前加连 班 不连后加
前加不连 班
前加不连 班 连后加
前加不连 班 不连后加
整日加班


举例说明
例如班次[9:00, 18:00),周一到周五

[09:00, 18:00)
[09:00, 18:00) + [18:00, 20:00)
[09:00, 18:00) + [19:00, 20:00)
[07:00, 09:00) + [09:00, 18:00)
[07:00, 09:00) + [09:00, 18:00) + [18:00, 20:00)
[07:00, 09:00) + [09:00, 18:00) + [19:00, 20:00)
[02:00, 04:00) + [09:00, 18:00)
[02:00, 04:00) + [09:00, 18:00) + [18:00, 20:00)
[02:00, 04:00) + [09:00, 18:00) + [19:00, 20:00)
非班次日的[09:00, 18:00),或者更长、或者更短的时间段



加班与打卡

  1. 如何区分 正常班次前加班 的 签到卡 与 正常班次 签到卡(之前上面的问题:是否缺少基础的签到时间区间)
  2. 各种缺卡问题,怎么匹配签到卡与签退卡
  3. 正常班次相连的加班 与 正常班次 打2次卡还是1次卡,还是能自动记录打卡(可能工作中会遗忘,或者在异常打卡区间打卡了)
  4. attendance_record_daily表是什么时机填充信息?定时任务?
    是否全量?不然当天没有打卡的没有统计信息,如果后续统计只依赖于此表,会造成混乱,在有考勤组、班次变更的时候无法确定是当日休息还是全日缺卡
    更新时机?有用户补卡或管理员补卡?
    那看板的信息是实时计算的?
  5. 员工岗位变更、考勤组变更、班次变更,带来的考勤统计问题,应到天数、实到、缺勤等天数的变化。
    是根据考勤组历史?班次历史?但好像没历史记录功能,我新加了两个字段
ALTER TABLE attendance_record
    ADD COLUMN group_id bigint DEFAULT NULL COMMENT '打卡时所属考勤组ID',
    ADD COLUMN shift_id bigint DEFAULT NULL COMMENT '打卡时班次ID';
  1. attendance_group_actual_member考勤组实际成员表 无软删除与增改日期记录,