更合理方便的分类

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

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

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

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

缩写说明:

时间点:
上班时间、下班时间、最晚打卡时间
	分别简称:上点、下点、界点

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

允许弹性晚到晚退时间T1
允许弹性第一天晚退第二天晚到时间T2

总结疑问点


允许弹性晚到晚退(先欠后补)
与
允许弹性第一天晚退第二天晚到(先补后用)


1. 确认打卡状态(上面的打卡分类)

2. 是否要互斥

3. 若不互斥,早上晚到的时间是否可以叠加
	- 若能叠加,理论最晚正常上班打卡时间 = 上点 + T1 + T2
	- 若不能叠加,理论最晚正常上班打卡时间 = 上点 + max(T1, T2)
					还是 = 上点 + min(T1, T2)

4. 弹性班次的 早退逻辑是否变为
	   理论最早正常打卡下班时间为 = 下点
    - 若叠加,理论最晚正常打卡下班时间为 = 下点 + T1 +T2
    - 若不叠加,理论最晚正常打卡下班时间为 = 下点 + max(T1, T2)
                                    还是 = 下点 + min(T1, T2)

打卡疑惑详情

当前思路,求验证的

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


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

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


时间点:
上班时间、下班时间、最晚打卡时间
	分别简称:上点、下点、界点


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


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

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

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,下点)打卡
早退:(上点,下点)打卡
	早退与迟到范围一样,区别是迟到是第一次打卡,早退前必须有一次打卡
缺卡:~~(界点,界点)无打卡~~
	(界点,下点)无打卡
	一次打卡都没
	假如在[下点,界点)第一次打卡,构不成签到打卡,无签到打卡就构不成签退打卡,
	故范围可以缩小到(界点,下点)
	
	等一下,应该分全日缺卡、签退缺卡
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡

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




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

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 严迟时]打卡
严重迟到:(上点 + 严迟时,下点)打卡
早退:(上点,下点)打卡
	迟到/严重迟到 是第一次打卡,早退前必须有一次打卡
缺卡:
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡

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




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

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 旷时]打卡
旷工:(界点,上点 + 旷时]未打卡,也就是签到范围内未打卡
早退:(上点,下点)打卡
	早退与迟到范围一样,区别是迟到是第一次打卡,早退前必须有一次打卡
缺卡:
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
旷工:
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
	简单统计:(界点,上点 + 旷时]无打卡 就行?

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





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

正常
	签到:(界点,上点]打卡
	签退:[下点,界点)打卡
迟到:(上点,上点 + 严迟时]打卡
严重迟到:(上点 + 严迟时,上点 + 旷时)打卡
旷工:(界点,上点 + 旷时]未打卡,也就是签到范围内未打卡
早退:(上点,下点)打卡
	早退与迟到范围一样,区别是迟到是第一次打卡,早退前必须有一次打卡
缺卡:
	签退缺卡:(界点,下点)有一打卡,[下点,界点)无打卡
旷工:
	全日缺卡:(界点,下点)无打卡
	签到缺卡:(界点,下点)无打卡,[下点,界点)有打卡
	简单统计:(界点,上点 + 旷时]无打卡 就行?

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


弹性打卡疑惑详情

弹性时间在没有统计两个时间实际 签到与签退 时,无法计算是否正常,有无时间偏移

好像还有冲突重复计算的可能

flexible_early
flexible_late
flexible_late_tomorrow

允许弹性晚到晚退 与 允许弹性第一天晚退第二天晚到

flexible_late = 1 && flexible_late_tomorrow = 1

因为晚到,所以导致的要晚退
可能成了 第一天晚退第二天晚到 的因,可以区分开,但复杂度会上升
两种思路,
- 不允许同时选【互斥】
- 看有无时间拆分累计的可能
  
假设晚到5min
晚退了10min
第二天能晚到5min,实际晚到了7min
那么晚上应该补2min,超过2min的部分才能作为下一天可以晚到不需要补的时间

也就是
flexible_late = 1 && flexible_late_tomorrow = 1时
晚到时间 = 前一天应得无惩罚的 + 不小心晚到的
晚走时间 = 弥补晚到的 + 想留给明天的无惩罚的

晚到时间 = [自愿晚走所得] + 不小心晚到的
晚走时间 = 弥补晚到的 + [自愿]





再考虑个时间限制

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

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

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


弥补晚到的(不小心晚到的) <= 允许弹性晚到晚退时间



是否能叠加

允许弹性晚到晚退T1
先欠后补

允许弹性第一天晚退第二天晚到T2
先补后用


【若允许叠加】
理论最晚正常上班打卡时间 = 上点 + T1 + T2
理论下班时间 = 下点 + T1 + T2

例如昨天没有欠时间,但是补了时间(先补t21)
今天可以晚到的时间 理论上 是昨天补的时间(后用t22) + 可以晚到的时间(先欠t11)
						= 实际晚到时间 t33
只要今天签退的时候晚走对应时间就行了?(后补t12)


【若不允许叠加】
理论最晚正常上班打卡时间 = 上点 + max(T1, T2)
理论下班时间 = 下点 + max(T1, T2)

也就是
t12 >= t11 >= T1
后补 >= 先欠 >= 晚到晚退时间

t21 >= t22 >= T2
先补 >= 后用 >= 第一天晚退第二天晚到


t33 <= max(T1,T2)?
t33 <= min(T1,T2)?

t33 先消耗 t21 ?
t12 = max(t33 - t21,0)?


【若互斥】
允许弹性晚到晚退T1(先欠后补)
与
允许弹性第一天晚退第二天晚到T2(先补后用)

只能二选一互斥
或者都不选