# 加班申请单

## 1. 设计目标

本设计采用“申请主表 + 员工明细从表”的方式，使一张加班申请单可以同时包含多名员工。

- 主表 `OA_OVERTIME`：保存单据编号、申请人、公共申请内容、审核状态。
- 从表 `OA_OVERTIME_DETAIL`：每行对应一名员工的一次加班申请明细。
- 加班时长统一按小时存储，同时按0.5、1.5、2、2.5...半小时模式向上取整。

## 2. 加班申请单主表

表名：`OA_OVERTIME`

### 2.1 主表字段说明

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | :---: | --- |
| `JB_NO` | `NVARCHAR(20)` | ✅ | 加班申请单号，**主键**，格式 JBYYYYMMDDXXX（单据唯一识别码：JB） |
| `JB_DD` | `DATETIME` | ✅ | 申请日期 |
| `SAL_NO` | `NVARCHAR(12)` | ✅ | 申请人 |
| `DEP` | `NVARCHAR(12)` |  | 所属部门 |
| `REASON` | `NVARCHAR(1000)` |  | 加班原因 |
| `REM` | `NVARCHAR(MAX)` |  | 备注 |
| `USR` | `NVARCHAR(8)` | | 录入人 |
| `RECORD_DD` | `DATETIME` | | 录入日期 |
| `CHK_MAN` | `NVARCHAR(8)` | | 审核人 |
| `CLS_DATE` | `DATETIME` | | 终审日期 |

## 3. 员工加班申请明细从表

表名：`OA_OVERTIME_DETAIL`

### 3.1 从表字段说明

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | :---: | --- |
| `JB_NO` | `NVARCHAR(20)` | ✅ | 加班申请单号，**主键** |
| `ITM` | `INT` | ✅ | 项次，**主键** |
| `SAL_NO` | `NVARCHAR(20)` | ✅ | 员工代号，关联SALM表 |
| `DEP` | `NVARCHAR(12)` |  | 员工所属部门 |
| `JB_TYPE` | `NVARCHAR(30)` | ✅ | 加班类型：WORKING_DAY（工作日）、REST_DAY（周末）、PUBLIC_HOLIDAY（法定节假日）、SPECIAL_HOLIDAY（特殊假期）、OTHER（其他） |
| `JB_DATE` | `DATETIME` | ✅ | 申请日期：（yyyy-MM-dd） |
| `START_TIME` | `DATETIME` | ✅ | 加班开始时间：（yyyy-MM-dd HH:mm:ss）,如果申请日期、开始时间、结束时间都在同一天，则只需要显示 HH:mm:ss |
| `END_TIME` | `DATETIME` | ✅ | 加班结束时间：（yyyy-MM-dd HH:mm:ss）,如果申请日期、开始时间、结束时间都在同一天，则只需要显示 HH:mm:ss |
| `JB_HOURS` | `NUMRIC(28,8)` |  | 加班时长（小时）：默认按照加班结束时间与加班开始时间的小时差自动计算，按0.5、1.5、2、2.5...半小时模式向上取整，可手工修改 |
| `JB_DAYS` | `NUMRIC(28,8)` |  | 加班天数：默认按照加班结束时间与加班开始时间的日期天数差自动计算，按0.5、1.5、2、2.5...半天模式向上取整，可手工修改 |
| `ATT_PERIOD` | `NVARCHAR(10)` |  | 归属考勤周期：格式yyyy-MM，默认按照加班开始时间抓取所在的年月，如 2026-07，可手工修改|
| `REASON` | `NVARCHAR(1000)` |  | 加班事由 |
| `COMPENSATION_TYPE` | `NVARCHAR(30)` |  | 加班补偿类型：OVERTIME_PAY（加班费）、COMPENSATORY_LEAVE（调休）、NO_COMPENSATION（无补偿）、OTHER（其他） |
| `COMPENSATION_COUNT` | `NUMRIC(28,8)` |  | 折算补偿次数：当加班补偿类型为“无补偿”则显示空，否则默认取JB_DAYS |
| `ADR` | `NVARCHAR(200)` |  | 加班地点 |
| `REM` | `NVARCHAR(1000)` |  | 备注 |

### 3.2 从表临时栏位说明
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `DAY_OF_WEEK` | `NVARCHAR(6)` | 星期： 按照加班开始时间自动显示所在的 星期一、星期二、星期三、星期四、星期五、星期六、星期日，放在END_TIME后面|
