# 接口设计文档

## 1. 接口说明

- 接口风格：REST 风格
- 数据格式：JSON
- 公共前缀：`/api`

统一返回结构：

```json
{
  "code": 200,
  "message": "success",
  "data": {}
}
```

## 2. 数据概览接口

### 2.1 获取基础统计

- URL：`/api/overview/stats`
- 方法：`GET`
- 说明：返回缺勤事件总量、员工覆盖数、平均缺勤时长等指标

返回字段示例：

- `total_records`
- `total_employees`
- `avg_absent_hours`
- `max_absent_hours`
- `min_absent_hours`
- `high_risk_ratio`
- `industries_covered`

### 2.2 获取月度趋势

- URL：`/api/overview/trend`
- 方法：`GET`
- 说明：返回月度总缺勤时长、平均时长和记录数

### 2.3 获取星期分布

- URL：`/api/overview/weekday`
- 方法：`GET`
- 说明：返回星期维度分布统计

### 2.4 获取原因分布

- URL：`/api/overview/reasons`
- 方法：`GET`
- 说明：返回请假原因大类分布

### 2.5 获取季节分布

- URL：`/api/overview/seasons`
- 方法：`GET`
- 说明：返回季节维度缺勤统计

## 3. 影响因素分析接口

### 3.1 获取特征重要性

- URL：`/api/analysis/importance`
- 方法：`GET`
- 参数：`model`，可选，默认 `random_forest`
- 说明：返回模型特征重要性排序

### 3.2 获取相关性矩阵

- URL：`/api/analysis/correlation`
- 方法：`GET`
- 说明：返回关键变量相关性矩阵

### 3.3 获取群体对比

- URL：`/api/analysis/compare`
- 方法：`GET`
- 参数：`dimension`
- 说明：返回指定维度下的群体平均缺勤时长对比

支持维度：

- `industry`
- `shift_type`
- `job_family`
- `marital_status`
- `chronic_disease`

## 4. `JD-R` 理论分析接口

### 4.1 获取三维度分布

- URL：`/api/jdr/dimensions`
- 方法：`GET`
- 说明：返回工作要求、工作资源、个人资源与 `JD-R` 平衡度统计结果

### 4.2 获取倦怠与投入分析

- URL：`/api/jdr/burnout-engagement`
- 方法：`GET`
- 说明：返回工作倦怠、工作投入分布及其与缺勤时长的关联指标

### 4.3 获取双路径分析

- URL：`/api/jdr/path-analysis`
- 方法：`GET`
- 说明：返回健康损伤路径与激励路径的相关分析结果

### 4.4 获取分组画像

- URL：`/api/jdr/profile`
- 方法：`GET`
- 参数：`dimension`，可选，默认 `所属行业`
- 说明：返回按指定维度分组后的 `JD-R` 画像

### 4.5 获取风险分布

- URL：`/api/jdr/risk-distribution`
- 方法：`GET`
- 说明：返回低、中、高风险事件分布

## 5. 缺勤预测接口

### 5.1 单次预测

- URL：`/api/predict/single`
- 方法：`POST`
- 说明：输入核心字段，返回预测缺勤时长与风险等级

请求体示例：

```json
{
  "leave_type": "病假",
  "leave_reason_category": "身体不适",
  "absence_month": 5,
  "weekday": 2,
  "near_holiday_flag": 0,
  "medical_certificate_flag": 1,
  "shift_type": "标准白班",
  "is_night_shift": 0,
  "monthly_overtime_hours": 26,
  "commute_minutes": 42,
  "chronic_disease_flag": 0,
  "children_count": 1,
  "industry": "制造业",
  "marital_status": "已婚",
  "work_autonomy": 3.2,
  "supervisor_support": 3.5,
  "self_efficacy": 3.4
}
```

返回字段：

- `predicted_hours`
- `risk_level`
- `risk_label`
- `risk_probability`
- `confidence`
- `model_used`
- `model_name_cn`

### 5.2 模型对比

- URL：`/api/predict/compare`
- 方法：`POST`
- 说明：返回多个模型在同一输入下的预测对比结果

### 5.3 获取模型列表

- URL：`/api/predict/models`
- 方法：`GET`
- 说明：返回当前可用模型及其性能指标。当前模型接口名包括 `random_forest`、`gradient_boosting`、`extra_trees`、`xgboost` 与 `lstm_mlp`

### 5.4 获取模型信息

- URL：`/api/predict/model-info`
- 方法：`GET`
- 说明：返回训练样本量、特征数量、训练日期和深度学习窗口信息

返回字段示例：

- `train_samples`
- `test_samples`
- `feature_count`
- `training_date`
- `sequence_window_size`
- `deep_learning_available`

### 5.5 风险分类

- URL：`/api/predict/risk-classify`
- 方法：`POST`
- 说明：使用分类器直接返回风险等级与概率分布

## 6. `SHAP` 可解释分析接口

### 6.1 获取全局解释

- URL：`/api/shap/global`
- 方法：`GET`
- 参数：`model`，可选，默认 `random_forest`
- 说明：返回全局特征重要性及其在 `JD-R` 维度上的聚合结果

### 6.2 获取局部解释

- URL：`/api/shap/local`
- 方法：`POST`
- 说明：返回单次预测样本的局部特征贡献及维度贡献

### 6.3 获取交互强度

- URL：`/api/shap/interaction`
- 方法：`GET`
- 参数：
  - `model`
  - `top_n`
- 说明：返回近似特征交互强度前 `N` 项

### 6.4 获取依赖关系

- URL：`/api/shap/dependence`
- 方法：`GET`
- 参数：
  - `feature`
  - `model`
- 说明：返回指定特征的取值与 `SHAP` 值关系

## 7. 员工画像接口

### 7.1 获取聚类结果

- URL：`/api/cluster/result`
- 方法：`GET`
- 参数：`n_clusters`
- 说明：返回聚类后的群体列表

### 7.2 获取聚类画像

- URL：`/api/cluster/profile`
- 方法：`GET`
- 参数：`n_clusters`
- 说明：返回雷达图所需的群体画像数据

### 7.3 获取散点数据

- URL：`/api/cluster/scatter`
- 方法：`GET`
- 参数：
  - `n_clusters`
  - `x_axis`
  - `y_axis`

## 8. 错误处理

- `400`：请求参数错误
- `404`：资源或分类模型不可用
- `500`：服务器内部错误

常见错误场景：

- 请求体为空
- 维度参数非法
- 模型文件缺失或加载失败
- `SHAP` 依赖未安装
- 后端依赖未正确安装
