# 发起借阅（生成流程创建页 URL）

界面的「确认发起」本质是打开一个前端流程页，地址规则（源码依据：借阅车「确认发起」按钮脚本）：

```text
/sp/workflow/flowpage/fullCreate/100003460000002090?fb=<fb>&data=<JSON>
```

- `fb`：取所选借阅车记录的 `fb` 字段（`0` = 泛微、`1` = 契约锁），即界面「分部」列。
- `data`：`JSON.stringify([{hth, htmc, yfhd, fph}, ...])`；`hth` 合同号、`htmc` 签约客户、`yfhd` 银行回单、`fph` 发票号，取不到时为空串。
- 该地址**只是前端页面 URL**：不写数据、不触发流程、不需要任何后台应用凭据。

## 用 operation 生成 URL

macOS/Linux：

```bash
weaver-work-cli --json archive-oa borrow start-url --contract-nos "20260116087,20260116055,20260116002"
```

Windows PowerShell：

```powershell
weaver-work-cli --json archive-oa borrow start-url --contract-nos "20260116087,20260116055,20260116002"
```

等价的 operation 写法（macOS/Linux）：

```bash
weaver-work-cli --json archive-oa run archive-oa.borrow.start.url --input-json '{"contractNos":["20260116087"]}'
```

返回 `url` / `flowId` / `fb` / `items` / `borrowCarCount`。

- 传 `contractNos`：只取这些合同号对应的借阅车记录（≤6 条）；不在借阅车里的合同号直接报 `contract_not_in_borrow_car`，不要伪造。
- 不传 `contractNos`：使用整页借阅车记录（≤6 条），与界面「不勾选直接确认发起」一致。

## 打开方式

1. **优先用系统默认浏览器直接打开**返回的 `url`：macOS `open "<url>"`、Windows `start "" "<url>"`、Linux `xdg-open "<url>"`。
2. 若终端无图形环境、命令被拒绝或打开失败：**原样输出完整 URL**，让用户手动复制到浏览器打开。不要截断、不要改写、不要省略参数。
3. 只读跳转无需征求许可；但**不得**替用户填写或提交流程表单。

## 边界

- **禁止向用户索要任何后台应用凭据**（`appKey` / `corpid` / `appSecret` 等），交互中不暴露这类概念。
- **不要调用**已下线的 `archive-oa.borrow.start.prepare` / `.apply`（含 `qys` 变体）。
- 不要声称「已发起借阅」「借阅已提交」：URL 打开后流程表单由用户在浏览器确认并提交。
- 不代登录、不代点界面、不代提交。
- 一次最多 6 条；超出时让用户缩小范围，不要自动拆批。
- 两套链路各自有独立的 operation：泛微 `archive-oa.borrow.start.url`、契约锁 `archive-oa.qys.borrow.start.url`（CLI：`borrow start-url --source qys`）。两者共用同一流程 ID，`fb` 取借阅车记录自身的值（泛微通常 `0`、契约锁通常 `1`），**禁止手工指定 `fb`**。
- 契约锁借阅车记录的客户名称字段是 `qymc`（泛微是 `htmc`），生成时已做兼容；契约锁借阅车为空时直接报 `borrow_car_empty`，提示先加入借阅车。
- 契约锁流程页对 `data` 结构的接受度尚未逐一实测；若页面打开后未带出数据，如实告知用户，不要伪造成功。
