# 待办与审批

## 待办

| 场景 | 命令 |
| --- | --- |
| 查我的待办 | `todo +get-my-tasks` |
| 查与我相关的全部待办 | `todo +get-related-tasks` |
| 查我创建的待办 | `todo +created-todos` |
| 创建待办 | `todo +create`（建完回读验证） |
| 指派给某人 | `todo +assign`（按姓名自动解析 userId） |
| 一次指派给多人 | `todo +assign-multi` |
| 标记完成 | `todo +complete`（回读验证） |
| 加评论 | `todo +comment` |
| 附件 | `todo +list-attachment` |

### 「我的」和「与我相关的」不是一回事

这是最容易漏数据的地方：

- `+get-my-tasks` —— 当前组织下**分配给我执行**的待办
- `+get-related-tasks` —— 我作为**创建人 / 执行人 / 参与人**三种角色的**并集**，已按 taskId 去重
- `+created-todos` —— 只有我**创建**的（我是 creator，不一定是执行人）

问「我有哪些待办」用第一个；问「跟我相关的都列出来」用第二个。实测用例 c2 走的是第二个。

### 创建与指派

```
帮我建个待办：明天下午三点前检查部署，指派给某某
```

助手会**先把要建什么、指派给谁、截止时间完整列出来等你确认**，确认后才创建，然后回读验证。

姓名有多个候选时**必须问**，不会默认取第一个——指派错人的代价很高。

批量指派一次不超过 30 条。

## OA 审批

| 场景 | 命令 |
| --- | --- |
| 待我处理 | `oa +list-pending --start <epoch毫秒> --end <epoch毫秒>` |
| 我已处理 | `oa +list-executed` |
| 我发起的 | `oa +my-initiated` / `+list-submitted` |
| 抄送我的 | `oa +list-cc` |
| 可见的审批表单 | `oa +list-forms` |

⚠️ **`oa` 的时间参数是 epoch 毫秒**，而 `report`（日志）用的是 **ISO-8601**。两者不通用，助手会按各自产品的要求转换。

### 一个重要的结果解读

实测 `oa +list-pending` 可能返回：

```json
{ "error": { "subtype": "missing_collection",
  "message": "成功响应缺少 result.values 数组；不能把未知响应结构当作空结果" } }
```

**这不是「没有待审批」，也不是报错。** 是 dws 在执行「缺少集合不能当空结果」的纪律——响应结构未知时它拒绝伪装成空列表。

助手遇到这种情况会说**「无法确认」**而不是「你没有待审批」，并用 `oa +list-forms` 之类的入口交叉确认该组织是否启用了 OA 审批。这一条直接关系到你会不会漏掉审批。

### 高频入口只在 schema 里可见

`oa +pending`、`oa +done-approvals`、`oa +approve-by` 这三个**不在 `dws oa --help` 里**，只能通过 `dws schema` 发现。助手的能力发现走 schema 而不是只看 `--help`，所以不会以为这些能力不存在。

## 考勤类审批走别处

补卡、请假、加班、外出、出差**不走 `oa`**，走 `attendance` 的审批模板（`+get-approve-template`）。助手会按这个判据分流。
