# ADP PTO 同步模块

## 模块定位

每天从 ADP 同步员工 PTO（Paid Time Off）时段到本地，会议签到模块据此自动标记考勤状态为 PTO。

**不是**：员工身份/组织架构同步（已由 Entra 完成）；不重复造轮子。

## 文档清单

| 文档 | 何时读取 |
|---|---|
| `01-prd.md` | 产品需求与约束 |
| `06-data-model.md` | schema 设计 + 字段语义 |
| `07-api.md` | API 契约（手动触发 + admin 列表） |
| `08-error-codes.md` | 错误码 |
| `reference-adp-to-ad-legacy.md` | 旧 C# 项目（仅参考字段映射，未实现 PTO） |
| `reference-adp-to-ad-directory-analysis.md` | 旧项目目录分析 |

完整任务清单与上线分阶段见**项目根目录** `TASK.md`。

## 快速链接

- ADP 凭证位置：`certs/ADPKeys/Buffer/`（pfx + key）；运行时用 `/tmp/adp_cert.pem`（pfx 转出来的）
- 同步中心模板：`backend/src/modules/organization/dingtalk/dingtalk-scheduler.service.ts`（多任务 scheduler）
- 隐私合规决策：项目 memory `design-decisions.md`（CPRA：不存请假类型/原因）
- 强制规则：`docs/standards/02-backend-architecture.md` "外部数据同步" 一节

## 关键技术事实

```
ADP API:
  GET /time/v3/workers/{aoid}/time-off-requests   ← v3, 不是 v2
  $filter 必填三件套: datePeriod/startDate + datePeriod/endDate + requestStatusCode/codeValue
  查询窗口最长 6 周

  GET /hr/v2/workers                              ← 不支持 $filter, 客户端过滤

认证: OAuth2 Client Credentials + mTLS
  pfx 格式需用 openssl pkcs12 -legacy 转 PEM
```
