weaver-work-cli 0.1.29 → 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/manifest.js +34 -11
- 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/operations/form.js +17 -5
- package/docs/contract.md +39 -4
- package/docs/invoice.md +5 -5
- package/package.json +3 -2
- package/scripts/bundle.mjs +63 -0
- package/skill-template/business-info.json +25 -4
- package/skill-template/domains/jinchengda.md +16 -3
- package/skill-template/domains/yepiaotong.md +1 -1
- 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-yepiaotong/SKILL.md +9 -5
- package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +1 -1
- 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 +6 -0
- package/templates/meeting/invitation.docx +0 -0
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
# 今承达合同管理 CLI 入口
|
|
2
2
|
|
|
3
|
-
## 请求头 / 认证
|
|
4
|
-
|
|
5
|
-
所有 `weaver-work-cli contract run <operation>` 发起的 API 请求均自动携带以下凭证头,值来自 CLI 按入口 `SKILL.md` 的宿主分流建立的 E10 登录会话,禁止业务输入携带:
|
|
6
|
-
|
|
7
|
-
| 头 | 值来源 | 说明 |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| `Cookie` | E10 登录返回的完整原始 Cookie 串 | CLI 从会话注入,禁止裁剪/去重/改写 |
|
|
10
|
-
| `eteamsid` | E10 登录返回的 ETEAMSID | CLI 从会话注入 |
|
|
11
|
-
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` | CLI 自动拼接,`agentType` 来自登录时的 `--agent_type` 参数 |
|
|
12
|
-
|
|
13
|
-
业务输入(`--input-json` / `--input`)**不得包含** `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段,用户 ID 由 CLI 从会话注入。
|
|
14
|
-
|
|
15
3
|
## operation 合约第一信息源
|
|
16
4
|
|
|
17
5
|
`weaver-work-cli contract schema` 输出 operation 名称、`risk`、`fixed`(固定的方法与路径)、`inputSchema` 和 `withheldOperations`。调用前先读它,不要凭记忆拼 operation 名和字段名。
|
|
@@ -58,6 +46,13 @@ weaver-work-cli --json contract run contract.request.status --input-json '{"requ
|
|
|
58
46
|
- `contract subject app|form|fields|options|query|create-prepare|create-apply`
|
|
59
47
|
- `contract workflow query|list|form-info|field-options`
|
|
60
48
|
- `contract request create-prepare|create-apply|save-prepare|save-apply|submit-prepare|submit-apply|supervise-prepare|supervise-apply|status|log`
|
|
49
|
+
- `contract review upload|export`
|
|
50
|
+
- `contract flow page|launch`
|
|
51
|
+
- `contract recommend doc`
|
|
52
|
+
- `contract compare upload|search|versions|page|diff`
|
|
53
|
+
- `contract credit page`
|
|
54
|
+
|
|
55
|
+
`paths`、`names` 这类**数组输入**只能走 `--input-json` / `--input`,子命令没有对应选项。
|
|
61
56
|
|
|
62
57
|
Agent 侧优先用 `run <operation>`,保证输入与 manifest 完全一致。
|
|
63
58
|
|
|
@@ -77,6 +72,5 @@ Agent 侧优先用 `run <operation>`,保证输入与 manifest 完全一致。
|
|
|
77
72
|
|
|
78
73
|
## 注意
|
|
79
74
|
|
|
80
|
-
- 业务输入不得包含 `userid`、`userId`、`token`、`cookie`、`eteamsid` 等字段;用户 ID 由 CLI 从会话注入。
|
|
81
75
|
- 环境相关 ID(`appId`、`objId`、`formId`、`workflowId`、`nodeId`)只能运行时解析,禁止使用文档示例值或标准环境 ID 兜底。
|
|
82
76
|
- 涉及合同正文或附件的操作,文件内容可能进入大模型上下文,执行前必须获得用户明确确认。
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# 合同智能助手(AI Assistant)
|
|
2
|
+
|
|
3
|
+
> 16 个智能体、助手配置、提示语、内控规则、要素抽取、关联流程的完整 CLI 用法。
|
|
4
|
+
> 所有命令形如 `weaver-work-cli --json contract run <operation> --input-json '<json>'`。
|
|
5
|
+
> 成功判据:`code=200 且 status=true`(CLI 已按路径判定,HTTP 200 不代表业务成功)。
|
|
6
|
+
|
|
7
|
+
## 1. ID 串联链路(先读这一节)
|
|
8
|
+
|
|
9
|
+
几乎所有操作依赖三个 id,按顺序解析:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
contract.assistant.init → 初始化状态(importStatus=already 即可用)
|
|
13
|
+
contract.assistant.meta → ebFormId / viewId / fieldsMap
|
|
14
|
+
contract.assistant.list → 助手列表 → ai_id(助手数据 id)
|
|
15
|
+
contract.assistant.config.query → 16 智能体
|
|
16
|
+
├─ ai_mark=Control 的 id → rule_config_id(内控规则组 / 关联流程用)
|
|
17
|
+
└─ ai_mark=Extract 的 id → config_id(要素抽取用)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **助手列表只有一个时**:未指定 `ai_id` 可默认使用它;多个必须让用户选。
|
|
21
|
+
- **configType 陷阱**:助手列表固定 `ai_background_config`。`ai_component_config` 是组件配置,也能查出数据但答非所问;`ai_compenent_config` 是错拼,不存在。CLI 已把 type 固定,无需担心。
|
|
22
|
+
- **列表 `total` 恒为 0**(服务端行为),以返回行数为准。
|
|
23
|
+
|
|
24
|
+
## 2. 查询类 operation
|
|
25
|
+
|
|
26
|
+
| operation | 输入 | 说明 |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `contract.assistant.init` | 无 | 初始化状态;未完成时自动轮询 `getInitStatus` 最多 6 次(每次 1.5s),仍未完成返回 `warning` 与 `traceId` |
|
|
29
|
+
| `contract.assistant.meta` | 无 | 列表字段映射,查询条件 key 格式 `field_<字段id>` |
|
|
30
|
+
| `contract.assistant.list` | `name?` | 助手列表,返回 `id / ai_name / ai_desc / type_name / stand_name` |
|
|
31
|
+
| `contract.assistant.doc.query` | `ai_id` | 存储目录(无 `base_type`)与执行方式(`base_type=1`,`execute_type=2` 手动) |
|
|
32
|
+
| `contract.assistant.config.query` | `ai_id`, `aiMark?` | 16 智能体 + 自动挑出 `controlAgentId` / `extractAgentId` |
|
|
33
|
+
| `contract.assistant.tips.query` | `ai_id` | 提示语(`aizjid` 序号 / `tsynr` 内容 / `id`) |
|
|
34
|
+
| `contract.assistant.doc.folder.search` | `name?` | 文档目录检索(取 `doc_id` / `doc_name`) |
|
|
35
|
+
| `contract.assistant.keygroup.search` | `name?` | 关键词组检索(传 `{}` 查全量) |
|
|
36
|
+
| `contract.assistant.rule.classification.list` | 无 | 内控分类树(无模糊检索,全量后自行过滤) |
|
|
37
|
+
| `contract.assistant.rule.list` | `flid?`, `pageNo?`, `pageSize?` | 内控规则列表 |
|
|
38
|
+
| `contract.assistant.rule.group.query` | `config_id` | 规则组列表(Control 智能体维度) |
|
|
39
|
+
| `contract.assistant.element.query` | `config_id` | 要素集合列表(Extract 智能体维度) |
|
|
40
|
+
| `contract.assistant.flow.list` | `ai_id`, `rule_config_id` | 关联流程绑定列表;**绑定新流程前必须先在此排查占用** |
|
|
41
|
+
|
|
42
|
+
## 3. 写操作(全部 prepare → 用户确认 → apply,apply 强制回读复核)
|
|
43
|
+
|
|
44
|
+
### 3.1 助手新建 / 删除
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
# prepare
|
|
48
|
+
weaver-work-cli --json contract run contract.assistant.create.prepare --input-json '{"ai_name":"采购助手","contract_stand":"0","stand_name":"甲方"}'
|
|
49
|
+
# apply(continuation 来自 prepare)
|
|
50
|
+
weaver-work-cli --json contract run contract.assistant.create.apply --input-json '{"ai_name":"采购助手","contract_stand":"0","stand_name":"甲方","continuation":"...","confirm":true}'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- `type` 与 `type_name` 必须成对;`contract_stand`(0 甲方 / 1 乙方)与 `stand_name` 成对。
|
|
54
|
+
- **助手基本信息(名称/说明/类型/立场)平台不支持修改**——需要调整时删除后重建。
|
|
55
|
+
- 删除:`{"ids":"id1,id2"}`(数组或逗号串均可)。删除接口**假成功**(不存在的 id 也返回 success),apply 用列表接口复核。
|
|
56
|
+
|
|
57
|
+
### 3.2 存储目录 / 执行方式(saveAiDoc)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
# 存储目录(新增时不传 id;覆盖时传记录 id)
|
|
61
|
+
contract run contract.assistant.doc.save.prepare --input-json '{"kind":"storage","ai_id":"...","doc_id":"...","doc_name":"..."}'
|
|
62
|
+
# 执行方式:execute_type 1=自动 / 2=手动
|
|
63
|
+
contract run contract.assistant.doc.save.prepare --input-json '{"kind":"execute","ai_id":"...","execute_type":"2"}'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- **同表按 id 覆盖**:传 `id` 前 CLI 先经 `queryAiDoc` 校验记录类型,类型不匹配返回 `policy/record_type_mismatch`——把执行方式记录改写成存储目录(或反向)会污染数据且无法回退。
|
|
67
|
+
|
|
68
|
+
### 3.3 智能体配置(updateAiConfig)
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
contract run contract.assistant.agent.update.prepare --input-json '{"id":"<智能体id>","ai_id":"<助手id>","ai_mark":"RiskReview","status_info":"1","pzxx":{"formData":{"review_role":"partyB"}}}'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- **启用/停用只改 `status_info`**(1 开 / 0 关);**输入含 `display` 直接被 CLI 拒绝**(`policy/display_forbidden`)——`display` 是前端卡片展示的平台保留字段,静默落库会让卡片消失。
|
|
75
|
+
- 一次只改一个智能体;`ruleData` 附加字段会被 CLI 剔除(服务端报"系统错误")。
|
|
76
|
+
- `pzxx` 传对象或数组即可,CLI 自动转 JSON 字符串;字符串入参必须可解析。
|
|
77
|
+
- 通用字段:`ai_name / status_info / headline / prompt / ai_desc / iorder`。
|
|
78
|
+
- `pzxx` 场景:风险审查 RiskReview(`formData.review_role/review_type/reivew_method/is_auto_run/layout/rule_content_display` + `rule` 规则 id 逗号串)、磋商 consultComponent(四类人员列表 + `automaticNodeName` 等)、关键词 keywordComponent(`[{"id":"...","name":"..."}]`)。
|
|
79
|
+
|
|
80
|
+
### 3.4 提示语(tips)
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
contract run contract.assistant.tips.create.prepare --input-json '{"tsynr":"生成摘要","ai_id":"..."}'
|
|
84
|
+
contract run contract.assistant.tips.delete.prepare --input-json '{"ids":["..."],"ai_id":"..."}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- 服务端**不补 `aizjid` 序号**,不传显示"序号undefined";CLI 自动按当前最大序号 + 1 计算,apply 阶段重算一次。
|
|
88
|
+
- 提示语**无编辑接口**,改动先删后增;新建助手自带 4 条默认提示语。
|
|
89
|
+
|
|
90
|
+
### 3.5 内控规则台账(三步缺一不可)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
① 建分类 contract.assistant.rule.classification.create → flid
|
|
94
|
+
② 建规则 contract.assistant.rule.create(gzmc / rule_content / flid 必填)→ 规则 id
|
|
95
|
+
③ 建规则组并关联 Control contract.assistant.rule.group.create(contract_rule_source + config_id)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- **只做②页面看不到规则**;规则组关联 Control 后才出现在「内控规则」页。
|
|
99
|
+
- 分类下仍有规则时删除被 CLI 拦截(`policy/rules_remaining`),先批量删规则再删分类。
|
|
100
|
+
- `contract_rule_source` 服务端要求 JSON 字符串,传数组即可由 CLI 转换:`[{"id":"<规则id>","name":"NK-001"}]`。
|
|
101
|
+
- **`default_type` 服务端互斥**:一个助手只能有一个默认组,后写覆盖先写(前面的自动回落 0,不是假成功)。要当默认的放最后建,或建完后单独 update。
|
|
102
|
+
- 删除:规则 `{"ids":"id1,id2"}`(逗号串)、规则组 `{"ids":[...]}`(数组)。
|
|
103
|
+
|
|
104
|
+
### 3.6 要素抽取(Extract 智能体)
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
contract run contract.assistant.element.create.prepare --input-json '{
|
|
108
|
+
"element_name":"销售合同要素抽取集",
|
|
109
|
+
"element_mxb":[{"name":"合同名称","fieldName":"合同名称","dbField":"hetongmc"}],
|
|
110
|
+
"config_id":"<Extract智能体id>"
|
|
111
|
+
}'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- `element_mxb` 必须是非空数组(空数组服务端报"系统错误"),每项三键 `{name, fieldName, dbField}`。
|
|
115
|
+
- `element_content`(换行分隔纯文本)与 `element_mxb`(结构化明细)**两份重复数据必须都传**;缺省 `element_content` 时 CLI 按 mxb 的 name 自动生成。
|
|
116
|
+
- **无更新接口**,改动先删后增。
|
|
117
|
+
|
|
118
|
+
### 3.7 助手关联流程
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
contract run contract.assistant.flow.save.prepare --input-json '{
|
|
122
|
+
"ai_id":"...","flowId":"...","rule_config_id":"<Control智能体id>",
|
|
123
|
+
"showPosition":"2","openMode":1,
|
|
124
|
+
"config":[{"id":"c1","nodeId":"...","nodeName":"经办人发起","comps":"Chat,Summary"}]
|
|
125
|
+
}'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- `toolId=803297036482249914` 固定,CLI 已内置。`showPosition`:1 更多菜单 / 2 右上角 / 3 字段上。
|
|
129
|
+
- **一个流程全局只能绑定一次(跨助手唯一)**,绑定前先 `contract.assistant.flow.list` 排查。
|
|
130
|
+
- NEED-CONFIRM 三场景由 CLI 强制校验:`showPosition=3` 缺 `fieldId` → `validation/field_id_required`;`term_config` 缺 `contractTypeField` → `validation/contract_type_field_required`;`key_config` 为空 → `validation/key_config_required`。
|
|
131
|
+
- `customRules.type=0`(自定义内控规则)不被支持,CLI 直接拦截(`policy/custom_rules_type_unsupported`),改用 `type=1`(指定规则)或 `type=2`(按合同类型过滤)。
|
|
132
|
+
- 修改走 `contract.assistant.flow.update`(路径自动拼 `modify/<记录id>`)。
|
|
133
|
+
- 删除:CLI 强制携带 `type=contract_ai_workflow_data`(缺失会返回 success 但实际不删除),并回读复核。
|
|
134
|
+
|
|
135
|
+
## 4. 写操作完成后的页面
|
|
136
|
+
|
|
137
|
+
所有写操作 apply 成功后,`readback` 内含 `url`(`{baseUrl}/sp/contract/business/ai-setting`,`width: 1000`,不做整体编码)——输出给用户打开功能页确认。
|
|
138
|
+
|
|
139
|
+
## 5. 错误语义速查
|
|
140
|
+
|
|
141
|
+
| 现象 | 处理 |
|
|
142
|
+
|---|---|
|
|
143
|
+
| `policy/clause_no_permission` | 条款库未放行,立即中止(本表为助手接口,不涉及) |
|
|
144
|
+
| `policy/display_forbidden` | 输入含 `display`,删除该字段后仅用 `status_info` 重试 |
|
|
145
|
+
| `policy/record_type_mismatch` | saveAiDoc 记录类型不符,换正确记录 id 或不传 id 新增 |
|
|
146
|
+
| `policy/rules_remaining` | 分类下仍有规则,先删规则再删分类 |
|
|
147
|
+
| `policy/custom_rules_type_unsupported` | customRules type=0 不支持,改 type=1/2 |
|
|
148
|
+
| `policy/assistant_not_found` | 待删助手 id 均不存在,未发起删除 |
|
|
149
|
+
| `validation/field_id_required` 等 NEED-CONFIRM | 先向用户确认缺失参数,不要自行猜测 |
|
|
150
|
+
| 回读报 `partial/write_uncertain` | 写入已到达但复核失败,先查对应 query 接口确认,不盲目重放 |
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# 合同智能审查(上传 → 审查页 → 导出审查记录)
|
|
2
|
+
|
|
3
|
+
## operation 与接口
|
|
4
|
+
|
|
5
|
+
| operation | 方法 | 路径 | 关键输入 | 风险 |
|
|
6
|
+
|---|---|---|---|---|
|
|
7
|
+
| `contract.review.upload` | POST ×2 | `/api/file/preUploadCheck` → `/api/file/module/upload` | `paths[]`(1~10 个本地 `.doc`/`.docx`) | read-with-upload |
|
|
8
|
+
| `contract.review.export` | POST | `/api/ebd/contract/ai/getAiReviewRecord` | `fileId`、`sclx`(默认 `1,2,3`) | read |
|
|
9
|
+
|
|
10
|
+
固定业务常量(**不是占位符,禁止替换**):
|
|
11
|
+
|
|
12
|
+
| 常量 | 值 | 用途 |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| 上传 `module` | `ebContract` | 审查场景专用,不能与 `workflow` / `docCompared` 混用 |
|
|
15
|
+
| 上传 `createDoc` | `true` | 审查需要先生成文档记录 |
|
|
16
|
+
| `ai_id` | `1326842382967570463` | 只用于导出审查记录接口,**不要**拼进审查页地址 |
|
|
17
|
+
|
|
18
|
+
## 处理链
|
|
19
|
+
|
|
20
|
+
1. `contract.review.upload`:逐个文件走两段式上传,返回 `files[]`(含 `fileId`、`docId`、`name`)与 `url`。
|
|
21
|
+
2. 把 `url` 原样交给 `browsertool` 的 `arguments.url`,并带 `"width": 1000`。
|
|
22
|
+
3. 用户说"导出审查报告 / 出一份报告"时调 `contract.review.export`。
|
|
23
|
+
4. `status` 为 `EMPTY` 表示该文件**还没审查过**——明确告知用户先打开审查页完成审查,**禁止用空内容拼报告充数**。
|
|
24
|
+
|
|
25
|
+
## URL 规则(硬约束)
|
|
26
|
+
|
|
27
|
+
审查页地址形如:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
{baseUrl}/sp/contract/business/ai-contract?spfiles[0][fileid]={fileId}&spfiles[0][name]={name}&spfiles[0][docId]={docId}&spfiles[1][fileid]=...
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- **不做整体编码**:`:`、`/`、`?`、`&`、`=`、`[`、`]` 与中文文件名一律保持原样。
|
|
34
|
+
- `spfiles[N]` 索引从 **0** 开始,每个文件三个参数(`fileid` / `name` / `docId`)缺一不可。
|
|
35
|
+
- 不要再套 `redirectUrl` 或任何中转跳转服务。
|
|
36
|
+
|
|
37
|
+
## 上传判据
|
|
38
|
+
|
|
39
|
+
- 预检命中秒传:`data.fileid`(或 `data.fileId` / `data.uploadModuleDto.fileid`)非空 → **直接用,跳过第二段**。
|
|
40
|
+
- 需实传:拿 `data.preUploadId` + `data.uploadType`,再调 `module/upload` 带文件本体。
|
|
41
|
+
- 成功判据是**拿到非空 `fileId`**,HTTP 200 不算成功。
|
|
42
|
+
- 服务端返回 `uploadType=chunk` 时 CLI 以 `upload_chunk_unsupported` 停止——分片链路尚未实现,换小文件或等后续版本,不要盲目重试。
|
|
43
|
+
- 单文件上限 200MB;只接受 `.doc` / `.docx`(`.pdf` 返回 `file_type_unsupported`)。
|
|
44
|
+
|
|
45
|
+
## 导出参数
|
|
46
|
+
|
|
47
|
+
| 字段 | 值 | 说明 |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `sclx` | `"1,2,3"` | `1`=内控(风险审查)、`2`=法审、`3`=纠错;逗号组合,只取一类就传单值 |
|
|
50
|
+
| `fileId` | 上传返回的 `fileId` | 要导哪份就传哪份 |
|
|
51
|
+
| `ai_id` | 固定 `1326842382967570463` | 由 CLI 注入,业务输入不传 |
|
|
52
|
+
|
|
53
|
+
## 调用示例
|
|
54
|
+
|
|
55
|
+
Windows PowerShell:
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
weaver-work-cli --json contract run contract.review.upload --input-json '{"paths":["D:/contracts/合同A.docx","D:/contracts/合同B.docx"]}'
|
|
59
|
+
weaver-work-cli --json contract run contract.review.export --input-json '{"fileId":"1323889154661941278","sclx":"1,2,3"}'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
macOS/Linux(bash/zsh):
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
weaver-work-cli --json contract run contract.review.upload --input-json '{"paths":["/data/contracts/合同A.docx"]}'
|
|
66
|
+
weaver-work-cli --json contract run contract.review.export --input-json '{"fileId":"1323889154661941278","sclx":"1,2,3"}'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 生成报告文件
|
|
70
|
+
|
|
71
|
+
CLI 只负责拉取记录(`data.records` + `data.raw`),报告文件由 Agent 在工作区生成:
|
|
72
|
+
|
|
73
|
+
- 文件名:`合同审查报告_{原文件名}_{YYYYMMDD}.md`,已存在则加序号,不覆盖。
|
|
74
|
+
- 章节按 `sclx` 分:一、内控(风险审查);二、法审;三、纠错;四、小结。缺哪类省略该章。
|
|
75
|
+
- 每条写清:问题 + 位置/条款 + 风险说明 + 建议。
|
|
76
|
+
- 生成后用 `present_files` 展示。
|
|
77
|
+
|
|
78
|
+
## 错误处理
|
|
79
|
+
|
|
80
|
+
| 现象 | 处理 |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `file_not_found` / `file_empty` | 核对路径与文件本体,不要重试 |
|
|
83
|
+
| `file_type_unsupported` | 转成 `.docx` 后重试 |
|
|
84
|
+
| `upload_precheck_failed` | 检查登录态与 `module`,不要换接口猜 |
|
|
85
|
+
| `upload_no_fileid` | 上传未完成,报"上传失败",不要当成成功 |
|
|
86
|
+
| `sclx_invalid` | 只能是 `1`/`2`/`3` 的逗号组合 |
|
|
87
|
+
| `session_expired` | 停止,按共享规则重新登录 |
|
|
@@ -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` | 停止并按共享规则重新登录 |
|