weaver-work-cli 0.1.28 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/archive-U766FTFH.js +2537 -0
- package/dist/chunks/archive-oa-DMWEKX3L.js +1317 -0
- package/dist/chunks/asset-TCR7VDEV.js +2109 -0
- package/dist/chunks/attachment-content-AQNX5N3S.js +23 -0
- package/dist/chunks/blog-EVZWGDVM.js +2157 -0
- package/dist/chunks/caizhilian-JOWS6SL5.js +10087 -0
- package/dist/chunks/calendar-5WNCV66Q.js +1195 -0
- package/dist/chunks/chunk-2DUV44UX.js +15606 -0
- package/dist/chunks/chunk-324YPTC2.js +1607 -0
- package/dist/chunks/chunk-65QMVWHS.js +231 -0
- package/dist/chunks/chunk-6V7ZLF34.js +387 -0
- package/dist/chunks/chunk-AC7KJWC5.js +358 -0
- package/dist/chunks/chunk-AJ62BGAW.js +29 -0
- package/dist/chunks/chunk-BUSC6UAE.js +43 -0
- package/dist/chunks/chunk-CVZ2JOSW.js +62 -0
- package/dist/chunks/chunk-D4LTJSJD.js +477 -0
- package/dist/chunks/chunk-EG6ZU444.js +654 -0
- package/dist/chunks/chunk-EZALDOQH.js +383 -0
- package/dist/chunks/chunk-FMPJJYYI.js +106 -0
- package/dist/chunks/chunk-G2JSIUWF.js +769 -0
- package/dist/chunks/chunk-GCG2NMWR.js +703 -0
- package/dist/chunks/chunk-GPMFD4RD.js +75 -0
- package/dist/chunks/chunk-H3WDBYJW.js +508 -0
- package/dist/chunks/chunk-H6XSTSLM.js +2357 -0
- package/dist/chunks/chunk-J7RJTZSV.js +5556 -0
- package/dist/chunks/chunk-LUSPKZKY.js +53 -0
- package/dist/chunks/chunk-NIAJ5ZCG.js +73 -0
- package/dist/chunks/chunk-NOODWMCL.js +584 -0
- package/dist/chunks/chunk-OOUTBLZ4.js +51 -0
- package/dist/chunks/chunk-P26ZWSKU.js +73 -0
- package/dist/chunks/chunk-QWY6PGL6.js +3472 -0
- package/dist/chunks/chunk-R2IJAK7T.js +464 -0
- package/dist/chunks/chunk-R7O5PUWO.js +205 -0
- package/dist/chunks/chunk-RCGYCOMG.js +6962 -0
- package/dist/chunks/chunk-VZTXRG6X.js +403 -0
- package/dist/chunks/chunk-WHD4XMRP.js +161 -0
- package/dist/chunks/chunk-YLCYX7LE.js +371 -0
- package/dist/chunks/chunk-ZEDWSH32.js +68 -0
- package/dist/chunks/continuation-2CKSBLA6.js +11 -0
- package/dist/chunks/continuation-HZIZRZBX.js +13 -0
- package/dist/chunks/continuation-NLECEJPX.js +11 -0
- package/dist/chunks/ebuilder-form-NJ4YK6CC.js +2276 -0
- package/dist/chunks/ehr-MMYN36VA.js +5241 -0
- package/dist/chunks/employee-SAK2QYXX.js +11 -0
- package/dist/chunks/esb-HIWHOU7Q.js +141 -0
- package/dist/chunks/fna-KBACQTA5.js +1444 -0
- package/dist/chunks/host-3OHS5QUX.js +21 -0
- package/dist/chunks/host-IG6KEH5Q.js +19 -0
- package/dist/chunks/host-KQL5N4HO.js +23 -0
- package/dist/chunks/host-LLSZQCWR.js +17 -0
- package/dist/chunks/hrm-LYEC67ZQ.js +244 -0
- package/dist/chunks/im-RN2UKAEU.js +252 -0
- package/dist/chunks/invoice-EEPHLAF6.js +5179 -0
- package/dist/chunks/jiuchuanhui-WVVZYSJE.js +1940 -0
- package/dist/chunks/lazy-dispatch-MDOFFL2S.js +28 -0
- package/dist/chunks/mail-LNQLTF6L.js +2695 -0
- package/dist/chunks/meeting-XSD3BDVQ.js +504 -0
- package/dist/chunks/msg-parse-4GSQ2WTO.js +41 -0
- package/dist/chunks/okr-TMWTIU2K.js +2482 -0
- package/dist/chunks/plan-A2FSFA7T.js +2025 -0
- package/dist/chunks/project-T26QLBQF.js +1361 -0
- package/dist/chunks/registry-2VLUAESA.js +14 -0
- package/dist/chunks/registry-JCFEYXOE.js +18 -0
- package/dist/chunks/registry-NYPYMZXG.js +16 -0
- package/dist/chunks/registry-Q7OQJ3SU.js +19 -0
- package/dist/chunks/registry-ZJMJVWFA.js +19 -0
- package/dist/chunks/room-recommend-UR4ZDZS6.js +20 -0
- package/dist/chunks/schedule-5L2PM4M6.js +24 -0
- package/dist/chunks/state-Y2XBP6YE.js +15 -0
- package/dist/chunks/workflow-TR6PG2SL.js +245 -0
- package/dist/cmd/argv.js +45 -0
- package/dist/cmd/docs/index.js +3 -3
- package/dist/cmd/lazy-dispatch.js +20 -0
- package/dist/cmd/root.js +2 -4
- package/dist/cmd/setup/index.js +2 -2
- package/dist/cmd/skills/index.js +2 -2
- package/dist/core/package-paths.js +47 -0
- package/dist/index.js +163 -7
- package/dist/internal/e10/auth/xiaoe.js +3 -3
- package/dist/internal/e10/request-runtime.js +18 -62
- package/dist/internal/skills/detector.js +2 -2
- package/dist/shortcuts/contract/data/performance-catalog.js +1306 -0
- package/dist/shortcuts/contract/host.js +91 -35
- package/dist/shortcuts/contract/index.js +213 -0
- package/dist/shortcuts/contract/manifest.js +928 -0
- package/dist/shortcuts/contract/ooxml/docx.js +295 -0
- package/dist/shortcuts/contract/ooxml/xlsx.js +221 -0
- package/dist/shortcuts/contract/ooxml/zip.js +158 -0
- package/dist/shortcuts/contract/operations/assistant.js +1156 -0
- package/dist/shortcuts/contract/operations/clause-library.js +522 -0
- package/dist/shortcuts/contract/operations/compare.js +193 -0
- package/dist/shortcuts/contract/operations/credit-page.js +34 -0
- package/dist/shortcuts/contract/operations/flow.js +98 -0
- package/dist/shortcuts/contract/operations/page.js +66 -0
- package/dist/shortcuts/contract/operations/performance.js +733 -0
- package/dist/shortcuts/contract/operations/quote.js +557 -0
- package/dist/shortcuts/contract/operations/recommend.js +78 -0
- package/dist/shortcuts/contract/operations/registry.js +18 -0
- package/dist/shortcuts/contract/operations/review.js +83 -0
- package/dist/shortcuts/contract/operations/shared.js +37 -0
- package/dist/shortcuts/contract/operations/upload.js +108 -0
- package/dist/shortcuts/contract/operations/write.js +3 -2
- package/dist/shortcuts/index.js +140 -40
- package/dist/shortcuts/invoice/host.js +2 -1
- package/dist/shortcuts/invoice/manifest.js +36 -12
- package/dist/shortcuts/invoice/operations/issuing-qys.js +132 -36
- package/dist/shortcuts/invoice/operations/reim-auto.js +9 -0
- package/dist/shortcuts/invoice/operations/reim.js +81 -5
- package/dist/shortcuts/invoice/operations/shared.js +12 -5
- package/dist/shortcuts/meeting/host.js +45 -3
- package/dist/shortcuts/meeting/invitation/docx.js +442 -0
- package/dist/shortcuts/meeting/operations/attachment-content.js +418 -0
- package/dist/shortcuts/meeting/operations/attachment.js +442 -0
- package/dist/shortcuts/meeting/operations/eb/cache.js +57 -0
- package/dist/shortcuts/meeting/operations/eb/catalog.js +343 -28
- package/dist/shortcuts/meeting/operations/eb/conflict.js +372 -11
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +710 -0
- package/dist/shortcuts/meeting/operations/eb/decision.js +47 -1
- package/dist/shortcuts/meeting/operations/eb/factory.js +129 -11
- package/dist/shortcuts/meeting/operations/eb/index.js +122 -2
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +378 -0
- package/dist/shortcuts/meeting/operations/eb/room-summary.js +84 -0
- package/dist/shortcuts/meeting/operations/eb/schedule.js +450 -0
- package/dist/shortcuts/meeting/operations/from-group-chat.js +576 -0
- package/dist/shortcuts/meeting/operations/invitation.js +458 -0
- package/dist/shortcuts/meeting/operations/minute-content.js +266 -0
- package/dist/shortcuts/meeting/operations/pipeline.js +489 -0
- package/dist/shortcuts/meeting/operations/qrcode.js +131 -0
- package/dist/shortcuts/meeting/operations/receipts.js +1 -1
- package/dist/shortcuts/meeting/operations/registry.js +18 -0
- package/dist/shortcuts/meeting/operations/summary.js +276 -0
- package/dist/shortcuts/meeting/operations/task-notify.js +325 -0
- package/dist/shortcuts/meeting/operations.js +42 -1
- package/dist/shortcuts/meeting/qr/encoder.js +427 -0
- package/dist/shortcuts/meeting/qr/render.js +103 -0
- package/dist/shortcuts/workflow/index.js +3 -0
- package/dist/shortcuts/workflow/operations/form.js +17 -5
- package/dist/shortcuts/workflow/operations/read.js +13 -6
- package/dist/shortcuts/workflow/operations/registry.js +2 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/businessRules.js +331 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/detailFieldRules.js +133 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/summaryCache.js +326 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailCache.js +113 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailFetcher.js +259 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoListRows.js +64 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoOutputPlanner.js +28 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.aggregate.js +70 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +267 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +392 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.detail.js +165 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +448 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +348 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +222 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.pipeline.js +66 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +502 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +540 -0
- package/docs/_catalog.md +1 -0
- package/docs/contract.md +39 -4
- package/docs/invoice.md +7 -7
- package/docs/todo-smart-convert/README.md +171 -0
- package/docs/todo-smart-convert/data-contract.md +236 -0
- package/docs/todo-smart-convert/mock/ai-todo-query-target.json +209 -0
- package/docs/todo-smart-convert/subgroup-rules.md +245 -0
- package/package.json +3 -2
- package/scripts/bundle.mjs +63 -0
- package/scripts/package-skill.mjs +1 -1
- package/skill-template/business-info.json +25 -4
- package/skill-template/domains/jinchengda.md +16 -3
- package/skill-template/domains/yepiaotong.md +3 -3
- package/skills/weaver-e10-jinchengda/SKILL.md +111 -31
- package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +7 -13
- package/skills/weaver-e10-jinchengda/references/contract-ai-assistant.md +150 -0
- package/skills/weaver-e10-jinchengda/references/contract-ai-review.md +87 -0
- package/skills/weaver-e10-jinchengda/references/contract-clause-library-crud.md +111 -0
- package/skills/weaver-e10-jinchengda/references/contract-clause-recommender.md +0 -15
- package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +0 -13
- package/skills/weaver-e10-jinchengda/references/contract-credit-page.md +50 -0
- package/skills/weaver-e10-jinchengda/references/contract-disabled-capabilities.md +4 -2
- package/skills/weaver-e10-jinchengda/references/contract-doc-compare.md +74 -0
- package/skills/weaver-e10-jinchengda/references/contract-flow-launch.md +84 -0
- package/skills/weaver-e10-jinchengda/references/contract-performance-query.md +29 -0
- package/skills/weaver-e10-jinchengda/references/contract-quote-to-contract.md +28 -0
- package/skills/weaver-e10-jinchengda/references/contract-request-status.md +2 -21
- package/skills/weaver-e10-jinchengda/references/contract-request-write.md +0 -24
- package/skills/weaver-e10-jinchengda/references/contract-signing-subjects.md +0 -15
- package/skills/weaver-e10-jinchengda/references/contract-subject-create.md +0 -17
- package/skills/weaver-e10-jinchengda/references/contract-template-recommend.md +70 -0
- package/skills/weaver-e10-jinchengda/references/contract-template-selector.md +0 -15
- package/skills/weaver-e10-jinchengda/references/contract-workflow-discovery.md +0 -15
- package/skills/weaver-e10-jinchengda/references/source-manifest.json +1168 -152
- package/skills/weaver-e10-meeting/SKILL.md +493 -17
- package/skills/weaver-e10-meeting/references/meeting-change.md +4 -4
- package/skills/weaver-e10-meeting/references/meeting-create.md +6 -6
- package/skills/weaver-e10-meeting/references/meeting-eb.md +503 -27
- package/skills/weaver-e10-meeting/references/meeting-invitation.md +113 -0
- package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +6 -6
- package/skills/weaver-e10-meeting/references/meeting-minute-file.md +425 -0
- package/skills/weaver-e10-meeting/references/meeting-queries.md +4 -4
- package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +15 -15
- package/skills/weaver-e10-meeting/references/meeting-verification.md +19 -11
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-workflow/SKILL.md +23 -1
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +282 -0
- package/skills/weaver-e10-workflow/scripts/todo-summary.cjs +695 -0
- package/skills/weaver-e10-yepiaotong/SKILL.md +15 -11
- package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +1 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +10 -7
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +41 -14
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +54 -26
- package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +6 -5
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +14 -11
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +97 -56
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +84 -60
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +142 -105
- package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +53 -194
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +164 -72
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +8 -2
- package/templates/meeting/invitation.docx +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 条款库 CRUD(分类 / 条款 / 条款组)
|
|
2
|
+
|
|
3
|
+
## 强制鉴权门(不可跳过)
|
|
4
|
+
|
|
5
|
+
`GET /api/ebd/contract/component/checkPermissionV2?moduleFlag=termComponent`
|
|
6
|
+
|
|
7
|
+
- 放行依据**只有** `data.checkPermission === true`。
|
|
8
|
+
- `hasLicense` / `privateDeploy` / `isRelease` 是环境信息,不作为放行依据。
|
|
9
|
+
- 未放行时 CLI 返回 `policy/clause_no_permission`(退出码 6),并**在发起任何条款库接口之前**中止。
|
|
10
|
+
- 本模块所有条款库 operation(含查询类)都会先过这道门,每个 CLI 进程各查一次。
|
|
11
|
+
|
|
12
|
+
## operation 一览
|
|
13
|
+
|
|
14
|
+
| operation | 方法 | 路径 | 说明 |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `contract.clause.permission` | GET | `/component/checkPermissionV2` | 显式鉴权并返回能力信息 |
|
|
17
|
+
| `contract.clause.types` | GET | `/tree/queryAllCluseType` | 分类类型(`clauseType` 取值) |
|
|
18
|
+
| `contract.clause.check` | GET | `/clauseinfo/checkData` | 判重,**只传 `clauseName` + `belongId`** |
|
|
19
|
+
| `contract.clause.browser` | POST | `/clauseinfo/common/browser/data/clauseInfoBrowser` | 按名称检索条款拿 id(条款组要用) |
|
|
20
|
+
| `contract.clause.subcompany` | POST→GET | `/api/hrm/common/browser/data/subcompany` → `/api/hrm/common/getOrgTree` | 检索分部(500 自动降级) |
|
|
21
|
+
| `contract.clause.category.create/update/delete.prepare/apply` | POST | `/tree/save`、`/tree/update`、`/tree/deletebyid` | 分类写操作 |
|
|
22
|
+
| `contract.clause.create/update/delete.prepare/apply` | POST | `/clauseinfo/save`、`/update`、`/deletebyid` | 条款写操作 |
|
|
23
|
+
| `contract.clause.group.create/update/delete.prepare/apply` | POST | `/clausegroup/save`、`/update`、`/deletebyid` | 条款组写操作 |
|
|
24
|
+
|
|
25
|
+
所有写操作都是 `prepare → apply`:`prepare` 返回脱敏 `preview` 与 `continuation`(10 分钟有效),`apply` 必须带 `continuation` 与 `confirm: true`。
|
|
26
|
+
|
|
27
|
+
## 必填字段与已知陷阱
|
|
28
|
+
|
|
29
|
+
### 分类(tree)
|
|
30
|
+
|
|
31
|
+
- **不要传 `clauseType`**(文档有误,传了会 500)。
|
|
32
|
+
- `levelNum` 从 0 起:顶层 `parentId=0` 时固定 `levelNum="0"`;子分类必须显式传 `levelNum`(父级 +1)。
|
|
33
|
+
- **删除会级联**:即使分类下仍有条款也会直接删掉并级联删除条款。`prepare` 会先查该分类下条款数量并在 `precheck.warning` 中提示。
|
|
34
|
+
|
|
35
|
+
### 条款(clauseinfo)
|
|
36
|
+
|
|
37
|
+
- `clauseNum` **必传**:漏传服务端不报错、直接存空编号(静默失败)。CLI 在前置校验拦截,回读时再校验一次编号是否真的落库。
|
|
38
|
+
- `clauseVersion`(如 `V1.0`)与 `clauseGroup`(无所属组传 `"-1"`)**必传**,缺失服务端 500。
|
|
39
|
+
- `contractType` 与 `contractTypeName` **必须成对**:只传 id 会让页面合同类型名缺失。
|
|
40
|
+
- 判重依据是**名称 `clauseName`**,不是编号或内容;`checkData` 缺 `belongId` 会静默返回「不存在」,CLI 已强制两个参数。
|
|
41
|
+
- 部分环境 `getListPage` 只接受 GET;CLI 回读统一用 GET。
|
|
42
|
+
|
|
43
|
+
### 条款组(clausegroup)
|
|
44
|
+
|
|
45
|
+
- `clauseContent` **必传**:逗号分隔的条款 id(先用 `contract.clause.browser` 取 id)。
|
|
46
|
+
- `belongSub` **必传字符串**:未指定分部时传空字符串 `""`,缺失服务端 500。
|
|
47
|
+
- `contractType` / `contractTypeName` 同样成对。
|
|
48
|
+
- `checkData` 结果不可信(存在的组名也返回「不存在」),CLI 只用 `getListPage` 比对,不调用该判重接口。
|
|
49
|
+
- `save` 报 500 **不等于未写入**:CLI 会把 500 当作失败,但请在排查后隔一段时间用 list 复核。
|
|
50
|
+
|
|
51
|
+
## 处理链
|
|
52
|
+
|
|
53
|
+
新增条款:
|
|
54
|
+
|
|
55
|
+
1. `contract.clause.tree` 取分类 `belongId`;`contract.clause.types` 取 `clauseType` 候选(仅展示,不提交)。
|
|
56
|
+
2. `contract.clause.check`(`clauseName` + `belongId`)确认不重名。
|
|
57
|
+
3. 需要合同类型时先 `contract.type.tree` 取 id 与名称。
|
|
58
|
+
4. `contract.clause.create.prepare` -> 向用户展示 `preview` -> `contract.clause.create.apply`。
|
|
59
|
+
5. 读 `readback` 的 `clauseNum` 确认编号已落库。
|
|
60
|
+
|
|
61
|
+
新增条款组:
|
|
62
|
+
|
|
63
|
+
1. `contract.clause.browser` 按名称检索条款,命中多条必须让用户选。
|
|
64
|
+
2. 需要分部时 `contract.clause.subcompany`;不需要则 `belongSub: ""`。
|
|
65
|
+
3. `contract.clause.group.create.prepare` -> `apply` -> 回读 `getListPage`。
|
|
66
|
+
|
|
67
|
+
## 调用示例
|
|
68
|
+
|
|
69
|
+
Windows PowerShell:
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
weaver-work-cli --json contract run contract.clause.permission
|
|
73
|
+
weaver-work-cli --json contract run contract.clause.check --input-json '{"clauseName":"验收条款","belongId":"1312751458535100769"}'
|
|
74
|
+
weaver-work-cli --json contract run contract.clause.create.prepare --input-json '{"clauseName":"验收条款","clauseNum":"TK002","clauseContent":"乙方应于交付后5个工作日内完成验收。","belongId":"1312751458535100769","clauseVersion":"V1.0","clauseGroup":"-1"}'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
macOS/Linux(bash/zsh):
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
weaver-work-cli --json contract run contract.clause.permission
|
|
81
|
+
weaver-work-cli --json contract run contract.clause.check --input-json '{"clauseName":"验收条款","belongId":"1312751458535100769"}'
|
|
82
|
+
weaver-work-cli --json contract run contract.clause.create.prepare --input-json '{"clauseName":"验收条款","clauseNum":"TK002","clauseContent":"乙方应于交付后5个工作日内完成验收。","belongId":"1312751458535100769","clauseVersion":"V1.0","clauseGroup":"-1"}'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 成功判据与复核
|
|
86
|
+
|
|
87
|
+
- 业务成功:`code = 200`(或 `0`)且 `status !== false`、`fail !== true`。
|
|
88
|
+
- **假成功普遍存在**:删除对不存在的 id 也会返回成功。CLI 在 `apply` 后强制回读:
|
|
89
|
+
- 条款按 `clauseName` + `belongId` 查 `getListPage`
|
|
90
|
+
- 条款组按 `clauseName` 查 `getListPage`
|
|
91
|
+
- 分类查 `tree/queryList`
|
|
92
|
+
- 回读不通过一律返回 `partial/write_uncertain`(退出码 11),禁止自动重试。
|
|
93
|
+
|
|
94
|
+
## 页面
|
|
95
|
+
|
|
96
|
+
每次条款库操作后打开 `{baseUrl}/sp/contract/terms-library?tab=1` 供用户确认(查询类也要打开)。
|
|
97
|
+
|
|
98
|
+
## 错误处理
|
|
99
|
+
|
|
100
|
+
| 现象 | 处理 |
|
|
101
|
+
|---|---|
|
|
102
|
+
| `clause_no_permission` | 立即中止,告知「暂无权限访问条款库」,不重试、不换接口 |
|
|
103
|
+
| `input_invalid`(clauseNum) | 补齐条款编号,不要依赖服务端默认 |
|
|
104
|
+
| `clause_group_required` | 补 `clauseGroup`,无组传 `"-1"` |
|
|
105
|
+
| `contract_type_pair_required` | 同时补 `contractType` 与 `contractTypeName` |
|
|
106
|
+
| `belong_sub_required` | 补 `belongSub`,不分部传 `""` |
|
|
107
|
+
| `clause_already_exists` | 同名条款已存在,提示用户改名或改为修改已有条款 |
|
|
108
|
+
| `category_not_found` | 分类已不存在,重新拉树确认 |
|
|
109
|
+
| 500(save/update) | 核对必填字段;带齐仍 500 可能是系统侧故障,隔一段时间 list 复核 |
|
|
110
|
+
| `partial/write_uncertain` | 停止,用 list 复核,不自动重放写请求 |
|
|
111
|
+
| `session_expired` | 停止并按共享规则重新登录 |
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
# 条款查询与推荐
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
用途:按标签、分类或关键词查找合同条款,供用户挑选。五个 operation 全部为 `read`。
|
|
17
|
-
|
|
18
3
|
## operation 与接口
|
|
19
4
|
|
|
20
5
|
| operation | 方法 | 路径 | 关键输入 |
|
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
# 条款引用:查询与写入(本模块唯一条款写操作)
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
3
|
## 查询:`contract.clause.reference.get`
|
|
17
4
|
|
|
18
5
|
- 方法/路径:`POST /api/ebd/contract/clauseReference/selectData`
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# 企业资信查询(仅打开资信页)
|
|
2
|
+
|
|
3
|
+
## operation
|
|
4
|
+
|
|
5
|
+
| operation | 方法 | 关键输入 | 风险 |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| `contract.credit.page` | 无请求 | `names[]`(1~20 个企业全称) | read |
|
|
8
|
+
|
|
9
|
+
## 主体名称规则
|
|
10
|
+
|
|
11
|
+
- 必须使用**营业执照全称**;简称查不到。
|
|
12
|
+
- 用户直接给出时,先判断是否像全称(含"有限公司/股份有限公司/集团"等);不像就先问。
|
|
13
|
+
- 从合同文件中抽取的主体,**必须先让用户确认全称**再查。
|
|
14
|
+
- CLI 对少于 4 个字符的名称直接拒绝(`name_not_full`)。
|
|
15
|
+
|
|
16
|
+
## URL 规则(硬约束)
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
{baseUrl}/sp/contract/business/credit?name[0]={encodeURIComponent(名称1)}&name[1]={encodeURIComponent(名称2)}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `name[N]` 索引从 **0** 开始。
|
|
23
|
+
- **只对参数值做一次 `encodeURIComponent`**;`name[0]` 的方括号、`?`、`&`、`=` 保持字面。
|
|
24
|
+
- 不要把整个 URL 再编码一次。
|
|
25
|
+
|
|
26
|
+
## 处理链
|
|
27
|
+
|
|
28
|
+
1. 确认主体全称。
|
|
29
|
+
2. `contract.credit.page` 返回 `url` 与 `page`(`title: 资信查询`、`activate: true`、`width: 1000`)。
|
|
30
|
+
3. 原样交给 `browsertool`。
|
|
31
|
+
|
|
32
|
+
## 调用示例
|
|
33
|
+
|
|
34
|
+
Windows PowerShell:
|
|
35
|
+
|
|
36
|
+
```powershell
|
|
37
|
+
weaver-work-cli --json contract run contract.credit.page --input-json '{"names":["测试科技有限公司"]}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
macOS/Linux(bash/zsh):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
weaver-work-cli --json contract run contract.credit.page --input-json '{"names":["测试科技有限公司"]}'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 边界
|
|
47
|
+
|
|
48
|
+
- 不返回工商数据本身,也不做企业变更、企业监控。
|
|
49
|
+
- 用户问"这家公司有没有诉讼/被执行/股权结构"时,说明当前只有资信页面入口,数据需在页面内查看。
|
|
50
|
+
- `contract.credit.query` / `contract.credit.change` / `contract.credit.monitor` 在 `withheldOperations` 中,源资料缺少接口契约,**不要尝试用其它接口替代**。
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| 能力 | 源资料状态 | 处理方式 |
|
|
6
6
|
|---|---|---|
|
|
7
|
-
| `contract.credit.query
|
|
7
|
+
| `contract.credit.query`(相对方工商资信**数据**查询) | 源资料 `references/enterprise-credit.md` 只描述「确认主体全称 → 拼资信页地址 → 打开页面」,没有任何工商数据接口的路径、方法、参数与响应结构 | 已提供页面入口 `contract.credit.page`;用户要数据明细时,说明需在打开的资信页内查看,或请用户补齐接口文档 |
|
|
8
8
|
| `contract.credit.change`(企业变更查询) | 同上,接口文档缺失 | 同上 |
|
|
9
9
|
| `contract.credit.monitor`(企业监控开启/修改) | 同上;且属于写操作,缺少确认与回查契约 | 同上;不得在未拿到契约前实现写操作 |
|
|
10
10
|
| `contract.workflow.withdraw`(撤回/退回流程) | 源资料只提到"除非调用撤回/退回接口",未给出路径、方法和参数 | 告知用户当前不可用;如需撤回请到 E10 前台操作 |
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
## 其它边界
|
|
19
19
|
|
|
20
20
|
- 12 类合同审批流程(销售、采购、协议、变更、解除、关闭、开票、收款、付款、履约计划、进度提报、供应商准入)共用同一组接口;流程差异体现在运行时解析出的 `workflowId` 与表单字段,而不是不同的接口路径。
|
|
21
|
-
- 企业资信与合同审批是两条互不相干的链:不要把"查一下某公司资信"路由到 `contract.request
|
|
21
|
+
- 企业资信与合同审批是两条互不相干的链:不要把"查一下某公司资信"路由到 `contract.request.*`;资信能力目前只有页面入口 `contract.credit.page`。
|
|
22
|
+
- 合同审查、文档比对、模板推荐同样是**独立链**:它们不上流程,不要串到 `contract.request.*`。
|
|
23
|
+
- 合同审查报告 / 比对报告的文件生成(Markdown/HTML/Office)不在 CLI 范围,由 Agent 基于 `contract.review.export` / `contract.compare.diff` 的结构化结果在工作区生成。
|
|
22
24
|
- 提交审批后流程不可撤回(撤回接口未实现),执行前必须让用户清楚这一点。
|
|
23
25
|
|
|
24
26
|
## 注意
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# 合同文档比对
|
|
2
|
+
|
|
3
|
+
## operation 与接口
|
|
4
|
+
|
|
5
|
+
| operation | 方法 | 路径 | 关键输入 | 风险 |
|
|
6
|
+
|---|---|---|---|---|
|
|
7
|
+
| `contract.compare.upload` | POST ×2 | `/api/file/preUploadCheck` → `/api/file/module/upload` | `paths[]`(1~2 个,基准在前) | read-with-upload |
|
|
8
|
+
| `contract.compare.search` | POST | `/api/doc/documents/list` | `keyword`、`pageNo`、`pageSize` | read |
|
|
9
|
+
| `contract.compare.versions` | POST | `/api/file/base/upload/findVersionList` | `fileId`、`docId?`、`pageNo` | read |
|
|
10
|
+
| `contract.compare.page` | — | 无请求,直接拼页面地址 | `baseFileId`/`baseFileName`/`compareFileId`/`compareFileName` | read |
|
|
11
|
+
| `contract.compare.diff` | POST | `/api/ebd/contract/ai/getCompareRes` | `baseFileId`、`compareFileId` | read |
|
|
12
|
+
|
|
13
|
+
上传 `module` 固定 `docCompared`(**不能**用 `ebContract` 或 `workflow`)。
|
|
14
|
+
|
|
15
|
+
## 获取文件的三条途径
|
|
16
|
+
|
|
17
|
+
- **A 上传本地文件**:`contract.compare.upload` 一次传 1~2 个文件,返回 `files[]` 的 `fileId` + `name`。
|
|
18
|
+
- **B 检索系统内文件**:`contract.compare.search` 按名称检索。返回的 `documents[].id` 是**文档 ID,不是 fileId**,不能直接填进比对页;需再取文件信息或让用户确认。
|
|
19
|
+
- **C 历史版本**:`contract.compare.versions` 取某文件的版本列表(`pageSize` 固定 100),选一个版本作为另一方。
|
|
20
|
+
|
|
21
|
+
## 处理链
|
|
22
|
+
|
|
23
|
+
1. 先确定 baseFile,再提示用户给 compareFile,两个都齐了才打开页面。
|
|
24
|
+
2. `contract.compare.page` 返回 `url`,原样交给 `browsertool`,带 `"width": 1000`。
|
|
25
|
+
3. 用户明确说"导出/生成比对报告/把差异结果给我"时,才调 `contract.compare.diff`。
|
|
26
|
+
|
|
27
|
+
## URL 规则(硬约束)
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
{baseUrl}/sp/contract/business/doc-compare?baseFileId=...&baseFileName=...&compareFileId=...&compareFileName=...&options[ignoreImages]=0&options[ignoreSpace]=1&options[ignorePageHeader]=0&options[ignorePunctuation]=1&options[conversionAngle]=0&options[conversionStyle]=0&options[conversionSpecialSymbols]=0&options[ignoreMark]=1&options[ignoreWatermark]=1&options[ignoreSeal]=1
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`options` 固定默认值(用户未特别说明不要改):忽略图片 0、忽略空格 1、忽略页眉页脚 0、忽略标点 1、全半角 0、繁简 0、特殊符号 0、忽略批注 1、忽略水印 1、忽略印章 1。
|
|
34
|
+
|
|
35
|
+
- 不做整体编码,中文文件名与 `[]` 保持原样。
|
|
36
|
+
|
|
37
|
+
## 差异结果
|
|
38
|
+
|
|
39
|
+
`contract.compare.diff` 请求体两个字段都是**数组**,即使只有一个文件也不能传字符串:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{ "baseFileIds": ["9000"], "compareFileIds": ["9001"] }
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
返回 `data.result`(`getCompareRes` 原始响应)。CLI 只返回结构化数据;需要 HTML 比对报告时由 Agent 基于结果生成,不要伪造差异。
|
|
46
|
+
|
|
47
|
+
## 调用示例
|
|
48
|
+
|
|
49
|
+
Windows PowerShell:
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
weaver-work-cli --json contract run contract.compare.upload --input-json '{"paths":["D:/contracts/原版.docx","D:/contracts/修订版.docx"]}'
|
|
53
|
+
weaver-work-cli --json contract run contract.compare.search --input-json '{"keyword":"销售合同","pageNo":1,"pageSize":20}'
|
|
54
|
+
weaver-work-cli --json contract run contract.compare.versions --input-json '{"fileId":"9001"}'
|
|
55
|
+
weaver-work-cli --json contract run contract.compare.page --input-json '{"baseFileId":"9000","baseFileName":"原版.docx","compareFileId":"9001","compareFileName":"修订版.docx"}'
|
|
56
|
+
weaver-work-cli --json contract run contract.compare.diff --input-json '{"baseFileId":"9000","compareFileId":"9001"}'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
macOS/Linux(bash/zsh):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
weaver-work-cli --json contract run contract.compare.upload --input-json '{"paths":["/data/contracts/原版.docx","/data/contracts/修订版.docx"]}'
|
|
63
|
+
weaver-work-cli --json contract run contract.compare.page --input-json '{"baseFileId":"9000","baseFileName":"原版.docx","compareFileId":"9001","compareFileName":"修订版.docx"}'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 错误处理
|
|
67
|
+
|
|
68
|
+
| 现象 | 处理 |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `paths_too_many` | 一次最多 2 个文件 |
|
|
71
|
+
| `upload_no_fileid` | 上传未完成,不要打开比对页 |
|
|
72
|
+
| 检索命中多条 | **必须**展示候选(名称 + 目录 + 更新时间)请用户选,禁止自动取第一条 |
|
|
73
|
+
| 把文档 ID 当 fileId | 比对页会打不开;回到途径 B 重新确认 `fileId` |
|
|
74
|
+
| `session_expired` | 停止并按共享规则重新登录 |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 发起合同流程(打开流程页 / 带文件自动回填)
|
|
2
|
+
|
|
3
|
+
## 四个流程(必须由用户指定)
|
|
4
|
+
|
|
5
|
+
| `flow` | 流程名 | workflowId | 上传 fieldId |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| `契约锁` | 契约锁合同审批流程 | `100003460000002066` | `100003720000025579` |
|
|
8
|
+
| `新客户` | 新客户购买合同审批流程 | `1269716062340284522` | `1269716066559755048` |
|
|
9
|
+
| `老客户增值` | 老客户增值合同审批流程 | `1283761429944369334` | `100003720000039590` |
|
|
10
|
+
| `常规二次销售` | 常规二次销售合同审批流程 | `1283761687634100307` | `100003720000029309` |
|
|
11
|
+
|
|
12
|
+
这些是**业务常量**(不是环境占位符)。用户未指定时必须先问,**不能替用户选择**;只有唯一模糊命中(如"常规二次")才自动收敛。
|
|
13
|
+
|
|
14
|
+
## operation 与接口
|
|
15
|
+
|
|
16
|
+
| operation | 方法 | 路径 | 关键输入 | 风险 |
|
|
17
|
+
|---|---|---|---|---|
|
|
18
|
+
| `contract.flow.page` | — | 无请求,直接拼页面地址 | `flow` | read |
|
|
19
|
+
| `contract.flow.launch` | POST ×3 | `/api/workflow/core/flowPage/loadBaseParam` → `/api/file/preUploadCheck` → `/api/file/module/upload` | `flow`、`path` | read-with-upload |
|
|
20
|
+
|
|
21
|
+
## 处理链
|
|
22
|
+
|
|
23
|
+
场景 A:用户只要打开流程页
|
|
24
|
+
|
|
25
|
+
1. `contract.flow.page` 拿 `url`。
|
|
26
|
+
2. 原样交给 `browsertool`,带 `"width": 1000`。
|
|
27
|
+
|
|
28
|
+
场景 B:用户给了合同文件(**已提供文件不得二次询问**)
|
|
29
|
+
|
|
30
|
+
1. `contract.flow.launch` 先调 `loadBaseParam`(`isCreate:1`,body 含 `workflowId`、`isMobile:0`)。
|
|
31
|
+
2. 从 `requestInfo.requestId` 取 `requestId`;取不到就**在提交上传前**停止(`request_id_missing`),避免文件挂到错误流程。
|
|
32
|
+
3. 上传 `module=workflow`,附加固定字段:
|
|
33
|
+
|
|
34
|
+
| 字段 | 值 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `authModule` | `workflow` |
|
|
37
|
+
| `source` | `form` |
|
|
38
|
+
| `fieldId` | 该流程的 fieldId |
|
|
39
|
+
| `sourceRefId` / `refId` | 同一个 `requestId` |
|
|
40
|
+
| `folderId` | `300` |
|
|
41
|
+
|
|
42
|
+
4. 返回带 `fileId` + `automaticFormFilling=true` 的流程页地址。
|
|
43
|
+
|
|
44
|
+
## URL 规则
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
{baseUrl}/sp/workflow/flowpage/create/{workflowId}?workflowId={workflowId}&isCreate=1
|
|
48
|
+
{baseUrl}/sp/workflow/flowpage/create/{workflowId}?workflowId={workflowId}&isCreate=1&fileId={fileId}&automaticFormFilling=true
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- 不做整体编码,中文与 `[]` 保持原样。
|
|
52
|
+
- 不带 `fileId` 时**不要**加 `automaticFormFilling`。
|
|
53
|
+
|
|
54
|
+
## 调用示例
|
|
55
|
+
|
|
56
|
+
Windows PowerShell:
|
|
57
|
+
|
|
58
|
+
```powershell
|
|
59
|
+
weaver-work-cli --json contract run contract.flow.page --input-json '{"flow":"新客户"}'
|
|
60
|
+
weaver-work-cli --json contract run contract.flow.launch --input-json '{"flow":"契约锁","path":"D:/contracts/合同.docx"}'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
macOS/Linux(bash/zsh):
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
weaver-work-cli --json contract run contract.flow.page --input-json '{"flow":"新客户"}'
|
|
67
|
+
weaver-work-cli --json contract run contract.flow.launch --input-json '{"flow":"契约锁","path":"/data/contracts/合同.docx"}'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 与 `contract.request.*` 的分工
|
|
71
|
+
|
|
72
|
+
- 本文件的 `contract.flow.*` 是**打开页面 / 带文件预填**,不创建流程实例、不保存表单、不提交审批。
|
|
73
|
+
- 需要走完整审批链(创建 → 保存 → 提交 → 催办)时,按 [`contract-request-write.md`](contract-request-write.md) 使用 `contract.request.*` 的 `prepare → apply`。
|
|
74
|
+
- 不要把"打开了流程页"报告成"流程已发起"。
|
|
75
|
+
|
|
76
|
+
## 错误处理
|
|
77
|
+
|
|
78
|
+
| 现象 | 处理 |
|
|
79
|
+
|---|---|
|
|
80
|
+
| `flow_unknown` | 列出四个 `flow` 取值请用户选择,不要猜 |
|
|
81
|
+
| `request_id_missing` | 停止,检查流程是否启用、登录态是否有效 |
|
|
82
|
+
| `file_type_unsupported` | 只接受 `.doc` / `.docx` |
|
|
83
|
+
| `upload_no_fileid` | 上传未完成,不要拼 URL 打开页面 |
|
|
84
|
+
| `session_expired` | 停止并按共享规则重新登录 |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 业绩核算:六菜单链接 + 来源台账只读查询
|
|
2
|
+
|
|
3
|
+
对应 operation:`contract.performance.*`(8 个)。
|
|
4
|
+
|
|
5
|
+
## 两条链路
|
|
6
|
+
|
|
7
|
+
1. **过滤链接(不发起网络请求)**:`performance.link` / `performance.fields` / `performance.source.entry` 只做本地构造,六菜单(直销合同、直销业绩、合同收款、项目验收、渠道订单、渠道订单-商务)由内置 catalog 驱动。
|
|
8
|
+
2. **实际数据(HTTP)**:`performance.menu.search` -> `performance.list.init`(校验 objId)-> `performance.list.filters` -> `performance.list.query`(getListDatas + getListDataCount 全页)。
|
|
9
|
+
|
|
10
|
+
## 硬规则(与源资料对齐,违反即错)
|
|
11
|
+
|
|
12
|
+
- `origin` 必须是完整 http/https 域名(与合同办公同一 baseUrl),不含 `{baseUrl}` 占位符。
|
|
13
|
+
- **人员 / 枚举 / 数值条件一律进 `needs_ui`**:由用户在页面检索、选择、填写后搜索,AI 不代操作,也不控制浏览器。
|
|
14
|
+
- **组合页(合同收款)不透传筛选 query**:`link` 只出入口地址,全部条件进 `needs_ui`;实际收款查询走 `performance.receipt.query`(底层 List,精确 eq)。
|
|
15
|
+
- URL 参数名和值分别编码一次;`urlPageTitle` 的 `+` 必须是 `%2B`;ID 全程字符串。
|
|
16
|
+
- `searchPermittedEbMenus` 请求体是**关键词字符串数组**,不是对象。
|
|
17
|
+
- `listId` 每次查询前用 `list.init` 解析真实运行上下文并校验 `objId`;总数取 `getListDataCount` 的 `data.total`,不能用 getListDatas 里的 total。
|
|
18
|
+
- 达到 `maxPages` 仍有剩余时结果带 `truncated: true` 与警告:缩小范围重查,不把部分结果当全量。
|
|
19
|
+
- 前轮合同年份不自动变为收款年份;收款附加条件必须来自用户本轮明确要求。
|
|
20
|
+
- 401/登录失效:停止并重新登录;403 是权限边界,如实说明并停止,不得靠重新登录绕过。
|
|
21
|
+
|
|
22
|
+
## 返回结构
|
|
23
|
+
|
|
24
|
+
`performance.link` 返回 `url` + `browsertool.arguments`(`width: 1000`)+ `filters` + `needs_ui` + `warnings` + `execution`(filtered-link / manual-page-filter)。`needs_ui` 是交给用户的待补填清单,逐项列出字段、比较符和值。
|
|
25
|
+
|
|
26
|
+
## 边界
|
|
27
|
+
|
|
28
|
+
- VIEWPORT/NList 分支未实现(customConfig 需平台 LZW 编码);`pageType=VIEWPORT` 时说明缺口,不猜测组件。
|
|
29
|
+
- 台账查询是只读的;不调用 /api/bs/、不做表单级全量查询、不新增接口。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 报价单转合同(本地 xlsx/docx,零依赖)
|
|
2
|
+
|
|
3
|
+
对应 operation:`contract.quote.*`(4 个)。xlsx/docx 均为本 CLI 内置 OOXML 读写,无需外部依赖。
|
|
4
|
+
|
|
5
|
+
## 流程(顺序不可乱)
|
|
6
|
+
|
|
7
|
+
1. `contract.quote.sheets`:列出 sheet 名,**由用户选择**,禁止自动选(第一个除外)。
|
|
8
|
+
2. `contract.quote.parse`:输出 `meta`(客户/日期/经理/电话)、`totals`(标准价/最终优惠报价+大写)、`sections`(分节明细)、`checks`、`warnings`。
|
|
9
|
+
3. 把 warnings/checks 给用户核对:明细求和≠表内合计、明细总计≠标准价、存在折扣(以最终优惠报价为准)、缺客户名称。
|
|
10
|
+
4. **硬门禁:必须先拿到真实 .docx 合同模板**。取不到模板就停止并请用户提供;禁止把报价单内容直接渲染成一份合同。
|
|
11
|
+
5. 用户确认数据后 `contract.quote.fill`:数据 JSON(可含 `__sections` 追加明细表)+ 模板 -> 输出 docx + filled/unfilled 映射日志(`mapOut`)。
|
|
12
|
+
6. `unfilled` 非空时逐项给用户确认补值后重填;禁止编造任何未提供的值。
|
|
13
|
+
|
|
14
|
+
## 字段识别(分层打分)
|
|
15
|
+
|
|
16
|
+
100 别名精确 > 98 去括号精确 > 70~95 别名是标签子串 > 60 标签是别名子串 > 40 字符重合;`大写/小写` 硬约束(含"大写"只归 amount_upper)。表格空值格只认 **≥95** 的精确命中——签名栏(如"甲方(盖章)"85 分)不会自动填,留给用户手填。
|
|
17
|
+
|
|
18
|
+
## 数值语义(防重复计价)
|
|
19
|
+
|
|
20
|
+
- 纵向合并:文本列(名称/描述)每行都可继承;**数值列(单价/数量/金额)只归首行**——防止 20 万被重复计成 200 万。
|
|
21
|
+
- 金额缺失时按 单价×数量(数量缺失视为 1)补算;数量 0 或金额 0 的未选购项默认不入合同(`includeZero` 可保留)。
|
|
22
|
+
- 数值 key(amount 等)输出自动千分位;`contract.quote.rmb` 输出人民币大写(支持负数、零头、整)。
|
|
23
|
+
|
|
24
|
+
## 模板填充行为
|
|
25
|
+
|
|
26
|
+
- 具名占位符 `{{key}}` / `\${key}` / 【标签】 + 匿名空白(____ / 【】),填值以标签为准。
|
|
27
|
+
- 改写策略:首个 w:t 写入新文本、其余清空;明细追加表自带边框,不依赖模板样式。
|
|
28
|
+
- `detail=none` 跳过明细表追加。
|
|
@@ -1,25 +1,5 @@
|
|
|
1
1
|
# 审批状态与签字意见
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
用途:查审批进度、查审批意见,以及写操作后的持久化回读。两个 operation 均为 `read`。
|
|
17
|
-
|
|
18
|
-
| operation | 方法 | 路径 | 输入 |
|
|
19
|
-
|---|---|---|---|
|
|
20
|
-
| `contract.request.status` | GET | `/api/workflow/core/paService/v1/getRequestStatus` | `requestId`(必填)、`userid` 由 CLI 注入 query |
|
|
21
|
-
| `contract.request.log` | GET | `/api/workflow/core/paService/v1/getRequestLog` | `requestId`(必填)、`otherParams`(分页 JSON 串,如 `{"pageSize":10,"pageNumber":1}`) |
|
|
22
|
-
|
|
23
3
|
## `flowStatus.code` 枚举(源资料原文)
|
|
24
4
|
|
|
25
5
|
| code | 含义 |
|
|
@@ -40,7 +20,8 @@ Windows PowerShell(复杂入参写 UTF-8 文件后传 `--input`,不要在单
|
|
|
40
20
|
|
|
41
21
|
```powershell
|
|
42
22
|
weaver-work-cli --json contract run contract.request.status --input-json '{"requestId":"67890"}'
|
|
43
|
-
|
|
23
|
+
# otherParams 是嵌套 JSON 串,PowerShell 单引号内不能写反斜杠转义,改用 UTF-8 文件
|
|
24
|
+
weaver-work-cli --json contract run contract.request.log --input request-log.json
|
|
44
25
|
```
|
|
45
26
|
|
|
46
27
|
macOS/Linux(bash/zsh):
|
|
@@ -1,29 +1,5 @@
|
|
|
1
1
|
# 合同审批流程:创建、保存、提交、催办(写操作)
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
四个写操作全部是 `prepare -> apply` 两段,且必须分别报告每一步结果。
|
|
17
|
-
|
|
18
|
-
| 动作 | prepare | apply | 路径 | 风险 |
|
|
19
|
-
|---|---|---|---|---|
|
|
20
|
-
| 创建流程实例 | `contract.request.create.prepare` | `contract.request.create.apply` | `POST /api/workflow/core/paService/v2/doCreateRequest` | write |
|
|
21
|
-
| 保存表单 | `contract.request.save.prepare` | `contract.request.save.apply` | `POST /api/workflow/core/paService/v1/saveFormData` | write |
|
|
22
|
-
| 提交审批 | `contract.request.submit.prepare` | `contract.request.submit.apply` | `POST /api/workflow/core/paService/v1/submitRequest` | high-impact |
|
|
23
|
-
| 催办 | `contract.request.supervise.prepare` | `contract.request.supervise.apply` | `POST /api/workflow/core/paService/v1/requestSupervise` | high-impact |
|
|
24
|
-
|
|
25
|
-
用户 ID 由 CLI 从会话注入:前三个接口注入 `userid`,催办接口注入 `userId`(源资料原文如此)。
|
|
26
|
-
|
|
27
3
|
## 创建流程实例
|
|
28
4
|
|
|
29
5
|
- 输入:`workflowId`(必填)、`requestname`、`remark`、`isnextflow`(默认 0)、`isVerifyFormRequired`(默认 false)、`requestLevel`(默认 0)、`formData`、`isNewFormData`、`seniorFormParam`
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
# 签约主体:定位与查询
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
用途:查询我方、客户方或供应商签约主体。全部为 `read`。
|
|
17
|
-
|
|
18
3
|
## 调用链(每步只能用上一步运行时返回的 ID)
|
|
19
4
|
|
|
20
5
|
```
|
|
@@ -1,22 +1,5 @@
|
|
|
1
1
|
# 新建签约主体(写操作)
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- operation:`contract.subject.create.prepare` -> `contract.subject.create.apply`
|
|
17
|
-
- 方法/路径:`POST /api/ebuilder/form/dataset/v2/saveFormData`
|
|
18
|
-
- 风险:`read-before-write` / `high-risk-write`
|
|
19
|
-
|
|
20
3
|
## 输入
|
|
21
4
|
|
|
22
5
|
| 字段 | 必填 | 说明 |
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 合同模板 / 范文智能推荐
|
|
2
|
+
|
|
3
|
+
## 触发场景
|
|
4
|
+
|
|
5
|
+
- "我要卖一套 e-cology 给某公司,有推荐模板吗"
|
|
6
|
+
- "签一份软件开发合同,100 万,有没有合适范文"
|
|
7
|
+
- "信息化平台建设的采购合同模板推荐"
|
|
8
|
+
|
|
9
|
+
判定:用户在**找模板/范文**,不是审查具体合同、也不是发起流程。
|
|
10
|
+
|
|
11
|
+
## operation 与接口
|
|
12
|
+
|
|
13
|
+
| operation | 方法 | 路径 | 关键输入 | 风险 |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `contract.recommend.doc` | POST | `/api/ebd/contract/file/recommendContractDoc` | `content`(自然语言需求,≤4000 字) | read |
|
|
16
|
+
|
|
17
|
+
固定业务常量(**禁止替换**):
|
|
18
|
+
|
|
19
|
+
| 常量 | 值 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `textObjId` | `1290191829260230657`(「合同范文管理」对象 ID) |
|
|
22
|
+
|
|
23
|
+
## 请求与响应
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "content": "销售一套 e-cology 协同办公系统,含实施服务,金额 80 万", "textObjId": "1290191829260230657" }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
成功判据:`code = 200`、`status = true`、`fail = false`(CLI 已按此判定)。关键取值:
|
|
30
|
+
|
|
31
|
+
| 字段 | 用途 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `data.cacheKey` | 打开推荐结果页必带(形如 `contract_doc_recommend:xxx`) |
|
|
34
|
+
| `data.recommendList[]` | 推荐列表,按 `rank` 排序 |
|
|
35
|
+
|
|
36
|
+
`recommendList` 单项:`rank`、`file_name`、`match_score`、`match_reason`、`matched_fields`、`template_id`、`doc_id`、`file_id`、`classification_id`、`creator`/`updater`、`create_time`/`update_time`,以及 AI 提取标签 `extract_labels`(title / summary / contract_type / risk_level / amount_range / industry / scene / role / payment_terms / key_clauses / jurisdiction / tags)。
|
|
37
|
+
|
|
38
|
+
CLI 已把上述字段映射成 `recommendations[]`(`fileName`、`matchScore`、`matchReason`、`matchedFields`、`labels.*`)。
|
|
39
|
+
|
|
40
|
+
## 处理链
|
|
41
|
+
|
|
42
|
+
1. `contract.recommend.doc` 传整理后的需求描述。
|
|
43
|
+
2. **先用表格向用户展示**:排名 / 文件名 / 匹配分 / 合同类型 / 风险等级 / 匹配理由。
|
|
44
|
+
3. 再打开结果页:`data.url` = `{baseUrl}/sp/contract/business/template-list?recommendKey={cacheKey}`,带 `"width": 1000`。
|
|
45
|
+
4. `status = EMPTY` 表示没有匹配到范文,如实说明,不要编造模板名。
|
|
46
|
+
|
|
47
|
+
耗时提示:服务端 AI 语义匹配本身需要 **30~40 秒**,CLI 超时设为 180 秒。**慢不是失败,不要重试、不要换接口**。
|
|
48
|
+
|
|
49
|
+
## 调用示例
|
|
50
|
+
|
|
51
|
+
Windows PowerShell:
|
|
52
|
+
|
|
53
|
+
```powershell
|
|
54
|
+
weaver-work-cli --json contract run contract.recommend.doc --input-json '{"content":"销售一套协同办公系统,含实施服务,金额80万"}'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
macOS/Linux(bash/zsh):
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
weaver-work-cli --json contract run contract.recommend.doc --input-json '{"content":"销售一套协同办公系统,含实施服务,金额80万"}'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 错误处理
|
|
64
|
+
|
|
65
|
+
| 现象 | 处理 |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `recommend_cache_key_missing` | 接口没给 `cacheKey`,无法打开结果页;如实报失败,不要自行拼接 |
|
|
68
|
+
| 超时(`network/timeout`) | 说明服务端匹配慢,询问用户是否再等一轮;不要连续重试 |
|
|
69
|
+
| `code` 非 0/200 或 `status=false` | 按业务错误处理,不重试 |
|
|
70
|
+
| `session_expired` | 停止并按共享规则重新登录 |
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
# 合同类型与模板查询
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
本文件描述的 API 请求通过 `weaver-work-cli` 执行,CLI 从 E10 登录会话自动注入以下凭证头(禁止业务输入携带):
|
|
6
|
-
|
|
7
|
-
| 请求头 | 值 |
|
|
8
|
-
|--------|-----|
|
|
9
|
-
| `Cookie` | `<e10-login 返回的完整原始 Cookie 串>`(禁止裁剪/去重/改写) |
|
|
10
|
-
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
用途:按合同类型定位可选模板,或对指定模板查看详情。四个 operation 全部为 `read`。
|
|
17
|
-
|
|
18
3
|
## operation 与接口
|
|
19
4
|
|
|
20
5
|
| operation | 方法 | 路径 | 关键输入 |
|