You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 lines
14 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 考勤打卡
> 模块编码attendance
> 端侧Web + 小程序(双端)
> 关联文档01-模块划分 §3.5 / 02-功能清单-物业公司 §5 / 03-业务流转逻辑-物业公司 §5 / 05-接口规范 §9.2 / 06-项目技术要求 §4.4
## 功能概览
| 项目 | 说明 |
|------|------|
| 菜单名称 | 考勤打卡 |
| 子菜单 | 打卡点管理、打卡规则、考勤记录、异常审核、数据补录 |
| 功能编号 | PR-A-01 ~ PR-A-05 |
| 权限编码前缀 | attendance:point:* / attendance:rule:* / attendance:record:* / attendance:appeal:* / attendance:supplement:* |
---
## 页面1打卡点管理页
**页面编号**PR-A-01-P01
**端侧归属**Web专属
**页面路径**/attendance/points
### 界面布局
```
┌──────────────────────────────────────────────────────────────────┐
│ [面包屑] 考勤打卡 > 打卡点管理 │
├──────────────────────────────────────────────────────────────────┤
│ [查询条件区] │
│ 打卡点名称[____] 所属班组[▼] 状态[▼] [查询] [重置] │
├──────────────────────────────────────────────────────────────────┤
│ [操作栏] [新增打卡点] │
├──────────────────────────────────────────────────────────────────┤
│ [列表区] │
│ 序号| 打卡点名称 | 所属班组 | 蓝牙Beacon | Beacon状态 | 操作 │
│ 1 | 1号楼大厅 | 水电班 | B-001 | 在线 | 编辑 删除 │
│ 2 | 2号楼入口 | 巡检班 | B-002 | 离线 | 编辑 删除 │
├──────────────────────────────────────────────────────────────────┤
│ [分页] 共8条 │
└──────────────────────────────────────────────────────────────────┘
```
### 表单字段(新增/编辑弹窗)
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|--------|----------|------|--------|----------|----------|
| 打卡点名称 | 文本输入 | 是 | — | 自填 | 最大30字 |
| 所属班组 | 下拉单选 | 是 | — | 班组列表 | — |
| 位置描述 | 文本输入 | 是 | — | 自填 | 最大100字 |
| 蓝牙Beacon | 下拉单选 | 是 | — | 蓝牙设备管理 | — |
| 适用角色 | 下拉多选 | 是 | 全部 | 固定选项 | 全部/主管/员工 |
### 操作按钮
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|------|----------|------|----------|------|
| 新增打卡点 | attendance:point:create | 操作栏 | 始终 | — |
| 编辑 | attendance:point:update | 行操作 | 始终 | — |
| 删除 | attendance:point:delete | 行操作 | 无人员关联 | 二次确认 |
### API端点
| 页面操作 | API路径 | 方法 | 说明 |
|----------|---------|------|------|
| 列表查询 | /api/v1/attendance-points | GET | — |
| 新增 | /api/v1/attendance-points | POST | — |
| 编辑 | /api/v1/attendance-points/{id} | PUT | — |
---
## 页面2打卡规则页
**页面编号**PR-A-02-P01
**端侧归属**Web专属
**页面路径**/attendance/rules
### 界面布局
```
┌──────────────────────────────────────────────────────────────────┐
│ [面包屑] 考勤打卡 > 打卡规则 │
├──────────────────────────────────────────────────────────────────┤
│ [按班组显示规则卡片] │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 水电维修班 │ │
│ │ 上班时间08:00 上班打卡窗口07:30~08:30 │ │
│ │ 下班时间17:00 下班打卡窗口16:30~17:30 │ │
│ │ 迟到规则:>08:00 迟到 >08:30 严重迟到 │ │
│ │ 早退规则:<17:00 早退 <16:30 严重早退 │ │
│ │ [编辑] │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 巡检一班 │ │
│ │ ... [编辑] │ │
│ └──────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
```
### 表单字段(编辑弹窗)
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|--------|----------|------|--------|----------|----------|
| 上班时间 | 时间选择 | 是 | 08:00 | 自填 | — |
| 上班打卡窗口(起) | 时间选择 | 是 | 上班前30分 | 自填 | — |
| 上班打卡窗口(止) | 时间选择 | 是 | 上班后30分 | 自填 | — |
| 下班时间 | 时间选择 | 是 | 17:00 | 自填 | — |
| 下班打卡窗口(起) | 时间选择 | 是 | 下班前30分 | 自填 | — |
| 下班打卡窗口(止) | 时间选择 | 是 | 下班后30分 | 自填 | — |
| 迟到阈值(分钟) | 数字输入 | 是 | 0 | 自填 | ≥0 |
| 严重迟到阈值(分钟) | 数字输入 | 是 | 30 | 自填 | >迟到阈值 |
| 早退阈值(分钟) | 数字输入 | 是 | 0 | 自填 | ≥0 |
| 严重早退阈值(分钟) | 数字输入 | 是 | 30 | 自填 | >早退阈值 |
### 操作按钮
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|------|----------|------|----------|------|
| 编辑 | attendance:rule:update | 卡片操作 | 始终 | — |
### API端点
| 页面操作 | API路径 | 方法 | 说明 |
|----------|---------|------|------|
| 规则查询 | /api/v1/attendance-rules | GET | 按班组查询 |
| 保存 | /api/v1/attendance-rules | POST | — |
---
## 页面3考勤记录页
**页面编号**PR-A-03-P01
**端侧归属**Web专属
**页面路径**/attendance/records
### 查询条件
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 |
|--------|----------|------|--------|------|
| 日期 | 日期选择 | 否 | 今天 | — |
| 班组 | 下拉单选 | 否 | 全部 | — |
| 人员 | 文本输入 | 否 | — | 模糊匹配 |
| 打卡状态 | 下拉单选 | 否 | 全部 | 正常/迟到/早退/缺卡/补录 |
### 列表字段
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|------|--------|------|----------|------|
| 1 | 姓名 | 80px | 否 | — |
| 2 | 班组 | 100px | 否 | — |
| 3 | 上班打卡时间 | 120px | 是 | — |
| 4 | 上班打卡方式 | 90px | 否 | 蓝牙/手动/补录 |
| 5 | 上班状态 | 80px | 否 | 正常/迟到/严重迟到 |
| 6 | 下班打卡时间 | 120px | 是 | — |
| 7 | 下班打卡方式 | 90px | 否 | — |
| 8 | 下班状态 | 80px | 否 | 正常/早退/严重早退 |
| 9 | 补录标记 | 70px | 否 | 补录显示"补录"标签 |
| 10 | 操作 | 80px | — | 查看详情 |
### 操作按钮
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|------|----------|------|----------|------|
| 查看详情 | attendance:record:view | 行操作 | 始终 | — |
### API端点
| 页面操作 | API路径 | 方法 | 说明 |
|----------|---------|------|------|
| 记录查询 | /api/v1/attendance-records | GET | 分页查询 |
---
## 页面4异常审核页
**页面编号**PR-A-04-P01
**端侧归属**Web专属
**页面路径**/attendance/appeals
### 查询条件
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 |
|--------|----------|------|--------|------|
| 审核状态 | 下拉单选 | 否 | 全部 | 待审核/已通过/已驳回 |
| 申诉人 | 文本输入 | 否 | — | 模糊匹配 |
| 日期范围 | 日期范围 | 否 | — | — |
### 列表字段
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|------|--------|------|----------|------|
| 1 | 申诉人 | 80px | 否 | — |
| 2 | 班组 | 100px | 否 | — |
| 3 | 申诉日期 | 100px | 是 | — |
| 4 | 异常类型 | 100px | 否 | 蓝牙故障/手机异常/系统异常/忘记打卡/其他 |
| 5 | 申诉说明 | 200px | 否 | — |
| 6 | 审核状态 | 90px | 是 | 待审核(黄)/已通过(绿)/已驳回(红) |
| 7 | 操作 | 100px | — | 审核/查看 |
### 操作按钮
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|------|----------|------|----------|------|
| 审核 | attendance:appeal:approve | 行操作 | 审核状态=待审核 | 通过/驳回弹窗 |
### 通知触发
| 触发操作 | 通知对象 | 通知方式 | 消息模板 | 文档来源 |
|----------|----------|----------|----------|----------|
| 审核通过 | 申诉人 | 小程序推送 | 申诉通过,系统自动补录打卡 | 03-物业公司 §5 / 03-小程序端 §5.1 |
| 审核驳回 | 申诉人 | 小程序推送 | 申诉未通过 | 03-物业公司 §5 |
### 蓝牙双模式差异
| 元素 | 策略=REQUIRED | 策略=OPTIONAL |
|------|---------------|---------------|
| 打卡方式 | 仅蓝牙打卡 | 蓝牙/手动双按钮 |
| 蓝牙失败 | 提交异常申诉 | 可直接手动打卡(check_method=MANUAL) |
| 异常申诉 | 必须审核 | 无需申诉(手动打卡) |
| 打卡记录标记 | check_method=BLUETOOTH | check_method=MANUAL |
### API端点
| 页面操作 | API路径 | 方法 | 说明 |
|----------|---------|------|------|
| 申诉列表 | /api/v1/attendance-appeals | GET | — |
| 审核 | /api/v1/attendance-appeals/{id}/approve | POST | 通过后自动补录打卡 |
---
## 页面5数据补录页
**页面编号**PR-A-05-P01
**端侧归属**Web专属
**页面路径**/attendance/supplement
### 补录数据标记规范
| 标记项 | 说明 |
|--------|------|
| is_supplement | true |
| supplement_reason | 蓝牙故障/系统异常/其他 |
| supplement_audit_status | 待审核/通过/驳回 |
| 自动补录 | 异常申诉审核通过后系统自动补录打卡记录 |
### 操作按钮
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|------|----------|------|----------|------|
| 审核 | attendance:supplement:approve | 行操作 | 审核状态=待审核 | — |
### API端点
| 页面操作 | API路径 | 方法 | 说明 |
|----------|---------|------|------|
| 补录列表 | /api/v1/attendance-records/supplements | GET | — |
| 审核 | /api/v1/attendance-records/supplements/{id}/approve | POST | — |
---
## 需求追溯
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|------------|----------|----------|----------|----------|
| PR-A-01 | 打卡点管理 | 02-物业公司 §5 / 03-物业公司 §5 | 打卡点→蓝牙绑定→小程序打卡 | 组织架构(打卡点分配) / 系统配置(蓝牙设备) |
| PR-A-02 | 打卡规则 | 02-物业公司 §5 / 03-物业公司 §5 | 规则→迟到早退判定 | — |
| PR-A-03 | 考勤记录 | 02-物业公司 §5 | — | 统计报表→考勤统计 |
| PR-A-04 | 异常审核 | 02-物业公司 §5 / 03-物业公司 §5 | 审核→自动补录打卡 | 小程序端异常申诉(MP-AT-04) |
| PR-A-05 | 数据补录 | 02-物业公司 §5 | 补录→审核 | 操作日志→补录日志 |
## 业务规则
1. **蓝牙强制打卡**:策略=REQUIRED时必须在指定打卡点连接蓝牙后才可打卡来源01 §9 / 06 §4.4
2. **蓝牙双模式**:策略=OPTIONAL时允许手动打卡(check_method=MANUAL)来源06 §4.4
3. **异常申诉流程**蓝牙失败→提交异常申诉→主管审核→通过后系统自动补录打卡记录来源03-物业公司 §5 / 03-小程序端 §5.1
4. **打卡窗口**:上班/下班各设打卡时间窗口窗口外打卡标记异常来源02-物业公司 PR-A-02
5. **迟到/早退规则**可自定义迟到、严重迟到、早退、严重早退的分钟阈值来源02-物业公司 PR-A-02
6. **数据权限**主管仅看本班组数据员工仅看本人数据来源01 §1.3
7. **打卡判定**不判断距离只要成功连接蓝牙设备即可打卡来源06 §5.4