weaver-work-cli 0.1.32 → 0.1.36
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/README.md +2 -2
- package/dist/chunks/{archive-UMGX72K6.js → archive-XBVH7JU7.js} +2 -2
- package/dist/chunks/{archive-oa-N2IYBLF3.js → archive-oa-MZM3EKFQ.js} +2 -2
- package/dist/chunks/{asset-GLEGKFG5.js → asset-4XO7UOUW.js} +2 -2
- package/dist/chunks/{attachment-content-AQNX5N3S.js → attachment-content-VXSWANAC.js} +3 -2
- package/dist/chunks/{blog-E44OTVDA.js → blog-PGZKOPSC.js} +2 -2
- package/dist/chunks/{caizhilian-DQUFZXZL.js → caizhilian-BH4ZVGUN.js} +2 -2
- package/dist/chunks/{calendar-JKPIRKFD.js → calendar-MXEMTIO4.js} +2 -2
- package/dist/chunks/{chunk-QWY6PGL6.js → chunk-2LV74IWP.js} +361 -56
- package/dist/chunks/chunk-3SO6QL6U.js +73 -0
- package/dist/chunks/chunk-5DQEEGCC.js +229 -0
- package/dist/chunks/{chunk-G3QJULO2.js → chunk-6LLJFKJE.js} +1 -1
- package/dist/chunks/{chunk-C6R3B2ML.js → chunk-BPE37FPB.js} +35 -7
- package/dist/chunks/chunk-BYATLLEF.js +68 -0
- package/dist/chunks/chunk-BYBSCN4X.js +932 -0
- package/dist/chunks/{chunk-CVZ2JOSW.js → chunk-F746NKNF.js} +1 -1
- package/dist/chunks/{chunk-GCG2NMWR.js → chunk-HXJQI5NM.js} +4 -2
- package/dist/chunks/{chunk-YRVDW4WN.js → chunk-I6QGIBDM.js} +2 -2
- package/dist/chunks/{chunk-H7J4DC5R.js → chunk-JCSN3JGM.js} +2 -2
- package/dist/chunks/{chunk-2GA5ZIQL.js → chunk-JNG42JKG.js} +30 -1
- package/dist/chunks/{chunk-DW6AUUKS.js → chunk-JUXVYKII.js} +9 -4
- package/dist/chunks/{chunk-6RKD4DRZ.js → chunk-JYKABYCV.js} +2 -2
- package/dist/chunks/{chunk-6EFWDL7Y.js → chunk-NCOVUAZK.js} +2 -2
- package/dist/chunks/{chunk-E4Z23GHM.js → chunk-QHFANTX7.js} +1114 -904
- package/dist/chunks/{ebuilder-form-V5FG2EHC.js → chunk-QYGO5EE2.js} +22 -1148
- package/dist/chunks/{chunk-IURUFGZK.js → chunk-T72N74ZT.js} +50 -33
- package/dist/chunks/{chunk-H6XSTSLM.js → chunk-TC6MZAO3.js} +137 -204
- package/dist/chunks/{chunk-WKI2FBIQ.js → chunk-VPUTVEMC.js} +737 -341
- package/dist/chunks/{chunk-WSKBSQ2U.js → chunk-VPXOPQJI.js} +2 -2
- package/dist/chunks/chunk-WXFPWCXG.js +774 -0
- package/dist/chunks/{chunk-4YC43QQ4.js → chunk-XMGSYD6S.js} +4 -4
- package/dist/chunks/conflict-JAB2LJEZ.js +21 -0
- package/dist/chunks/continuation-RN6PZN2M.js +11 -0
- package/dist/chunks/contract-XI2EEIZU.js +9110 -0
- package/dist/chunks/cowork-SCPGLBA4.js +2527 -0
- package/dist/chunks/ebuilder-form-EYLHNOTA.js +121 -0
- package/dist/chunks/{ehr-HMFY6VIL.js → ehr-EAP77IMT.js} +1344 -27
- package/dist/chunks/{esb-ZYSVB7SG.js → esb-2TGGXEE7.js} +4 -4
- package/dist/chunks/{fna-B7RKPAZD.js → fna-2X7ZE7BU.js} +13 -8
- package/dist/chunks/{host-OCH2BCCV.js → host-C6EL2RKL.js} +3 -3
- package/dist/chunks/{host-45WED2KK.js → host-I4NRK4MX.js} +3 -3
- package/dist/chunks/{host-I4Z6BFYX.js → host-Q4LZGCRU.js} +3 -3
- package/dist/chunks/host-UEI5FGDM.js +23 -0
- package/dist/chunks/{host-KNZ52LJZ.js → host-XCLDDXKQ.js} +3 -3
- package/dist/chunks/{hrm-2KAZGUHI.js → hrm-YXERJM76.js} +3 -3
- package/dist/chunks/{im-ACJJWH4U.js → im-A4VZN2TQ.js} +88 -12
- package/dist/chunks/{invoice-ZK3WCX2U.js → invoice-2Z6YPMIS.js} +3 -3
- package/dist/chunks/{jiuchuanhui-5PQD3IL2.js → jiuchuanhui-AR5GMKZB.js} +2 -2
- package/dist/chunks/{lazy-dispatch-JQXBW3GM.js → lazy-dispatch-QXW7P4X3.js} +4 -4
- package/dist/chunks/{mail-S2HDDXO2.js → mail-7GZ6CPBJ.js} +45 -24
- package/dist/chunks/{meeting-QVN3I37L.js → meeting-3NMGA3MB.js} +278 -43
- package/dist/chunks/{okr-QNG4VC2Q.js → okr-BZ6XUOAG.js} +2 -2
- package/dist/chunks/operations-5QL3AECO.js +11 -0
- package/dist/chunks/{plan-A25EMW6U.js → plan-DR5CMUYP.js} +2 -2
- package/dist/chunks/{project-G6XV66DZ.js → project-6J63MK33.js} +2 -2
- package/dist/chunks/{registry-DC6KR3NH.js → registry-KDD7DHNK.js} +4 -4
- package/dist/chunks/{registry-2VLUAESA.js → registry-OZSMDVPP.js} +2 -2
- package/dist/chunks/{registry-7C5UMIPL.js → registry-TKX2E7C7.js} +2 -2
- package/dist/chunks/{registry-TI3CIUXF.js → registry-VRTNC6UR.js} +8 -6
- package/dist/chunks/{room-recommend-WRTHO6Y2.js → room-recommend-XCWRMB5P.js} +4 -3
- package/dist/chunks/{schedule-KFIITGSK.js → schedule-IVBICP32.js} +4 -3
- package/dist/chunks/{workflow-DJ7SYWAF.js → workflow-D74NFK3C.js} +179 -6
- package/dist/index.js +35 -25
- package/dist/internal/e10/auth-recovery.js +14 -4
- package/dist/internal/e10/fetch-timing.js +31 -0
- package/dist/internal/e10/request-runtime.js +5 -0
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/cowork/continuation.js +70 -0
- package/dist/shortcuts/cowork/errors.js +59 -0
- package/dist/shortcuts/cowork/host.js +180 -0
- package/dist/shortcuts/cowork/index.js +166 -0
- package/dist/shortcuts/cowork/manifest.js +65 -0
- package/dist/shortcuts/cowork/operations/discuss-write.js +277 -0
- package/dist/shortcuts/cowork/operations/item-write.js +380 -0
- package/dist/shortcuts/cowork/operations/member-write.js +283 -0
- package/dist/shortcuts/cowork/operations/permission-write.js +286 -0
- package/dist/shortcuts/cowork/operations/read.js +423 -0
- package/dist/shortcuts/cowork/operations/registry.js +39 -0
- package/dist/shortcuts/cowork/operations/review-write.js +157 -0
- package/dist/shortcuts/cowork/operations/shared.js +215 -0
- package/dist/shortcuts/cowork/operations/types.js +39 -0
- package/dist/shortcuts/cowork/operations.js +19 -0
- package/dist/shortcuts/ehr/host.js +4 -1
- package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +757 -0
- package/dist/shortcuts/ehr/operations/recruit-position.js +367 -0
- package/dist/shortcuts/ehr/operations/recruit-stats.js +133 -0
- package/dist/shortcuts/ehr/operations/recruit-write.js +43 -16
- package/dist/shortcuts/ehr/operations/recruit.js +182 -10
- package/dist/shortcuts/ehr/operations/registry.js +6 -0
- package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
- package/dist/shortcuts/im/diagnostics.js +97 -0
- package/dist/shortcuts/im/host.js +58 -31
- package/dist/shortcuts/im/index.js +7 -2
- package/dist/shortcuts/im/operations/at-mention.js +127 -0
- package/dist/shortcuts/im/operations/file-user.js +10 -2
- package/dist/shortcuts/im/operations/group-read.js +26 -5
- package/dist/shortcuts/im/operations/group-write.js +35 -28
- package/dist/shortcuts/im/operations/msg-sync.js +7 -2
- package/dist/shortcuts/im/operations/msg-write.js +76 -10
- package/dist/shortcuts/im/operations/quote-mention.js +119 -0
- package/dist/shortcuts/im/operations/session.js +1 -1
- package/dist/shortcuts/im/operations/shared.js +10 -0
- package/dist/shortcuts/im/operations/types.js +13 -0
- package/dist/shortcuts/index.js +10 -0
- package/dist/shortcuts/mail/host.js +12 -1
- package/dist/shortcuts/mail/operations/types.js +17 -2
- package/dist/shortcuts/meeting/host.js +27 -34
- package/dist/shortcuts/meeting/index.js +79 -1
- package/dist/shortcuts/meeting/manifest.js +10 -0
- package/dist/shortcuts/meeting/operations/create.js +4 -1
- package/dist/shortcuts/meeting/operations/eb/catalog.js +10 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +84 -8
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +1195 -140
- package/dist/shortcuts/meeting/operations/eb/factory.js +170 -8
- package/dist/shortcuts/meeting/operations/eb/index.js +16 -3
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +50 -5
- package/dist/shortcuts/meeting/operations/eb-fallback.js +163 -0
- package/dist/shortcuts/meeting/operations/env.js +99 -46
- package/dist/shortcuts/meeting/operations/form-fields.js +110 -0
- package/dist/shortcuts/meeting/operations/invitation.js +79 -20
- package/dist/shortcuts/meeting/operations/registry.js +2 -0
- package/dist/shortcuts/meeting/operations/standard-guard.js +71 -0
- package/dist/shortcuts/meeting/operations.js +16 -0
- package/dist/shortcuts/workflow/endpoints.js +8 -3
- package/dist/shortcuts/workflow/index.js +110 -1
- package/dist/shortcuts/workflow/operations/form.js +204 -36
- package/dist/shortcuts/workflow/operations/read.js +104 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupRules.js +448 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupStore.js +106 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/businessRules.js +47 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +30 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +2 -1
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +2 -4
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +138 -181
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +12 -7
- package/dist/shortcuts/workflow/operations.js +23 -1
- package/docs/e10-auth.md +1 -1
- package/docs/ehr.md +1 -1
- package/docs/fna.md +2 -1
- package/docs/im.md +8 -1
- package/docs/todo-smart-convert/README.md +1 -1
- package/docs/todo-smart-convert/data-contract.md +2 -2
- package/docs/todo-smart-convert/subgroup-rules.md +6 -0
- package/package.json +1 -1
- package/skill-template/business-info.json +18 -0
- package/skill-template/domains/cowork.md +14 -0
- package/skill-template/domains/yimiaoban.md +3 -3
- package/skill-template/skill-template.md +1 -1
- package/skills/weaver-e10-blog/SKILL.md +5 -5
- package/skills/weaver-e10-caizhilian/SKILL.md +5 -5
- package/skills/weaver-e10-calendar/SKILL.md +5 -5
- package/skills/weaver-e10-cowork/SKILL.md +101 -0
- package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
- package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
- package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
- package/skills/weaver-e10-esb/SKILL.md +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +5 -5
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -2
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -5
- package/skills/weaver-e10-jucailin/SKILL.md +38 -14
- package/skills/weaver-e10-jucailin/references/recruit-create.md +104 -0
- package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
- package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
- package/skills/weaver-e10-jucailin/references/salary.md +15 -11
- package/skills/weaver-e10-mail/SKILL.md +17 -14
- package/skills/weaver-e10-meeting/SKILL.md +442 -46
- package/skills/weaver-e10-meeting/references/meeting-eb.md +135 -3
- package/skills/weaver-e10-meeting/references/meeting-invitation.md +28 -2
- package/skills/weaver-e10-meeting/references/meeting-queries.md +9 -6
- package/skills/weaver-e10-meeting/references/meeting-verification.md +8 -6
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-okr/SKILL.md +5 -5
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-plan/SKILL.md +5 -5
- package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
- package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
- package/skills/weaver-e10-shared/SKILL.md +12 -12
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +4 -4
- package/skills/weaver-e10-wenshuding/SKILL.md +5 -5
- package/skills/weaver-e10-workflow/SKILL.md +29 -5
- package/skills/weaver-e10-workflow/aigroup/default.json +88 -0
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +66 -14
- package/skills/weaver-e10-workflow/references/workflow-agent-entry.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-query.md +12 -10
- package/skills/weaver-e10-workflow/references/workflow-view.md +2 -2
- package/skills/weaver-e10-workflow/tools/todo-serve.cjs +239 -0
- package/skills/weaver-e10-workflow/{scripts → tools}/todo-summary.cjs +218 -28
- package/skills/weaver-e10-yepiaotong/SKILL.md +10 -8
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +10 -10
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +40 -37
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +27 -38
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +37 -29
- package/skills/weaver-e10-yimiaoban/SKILL.md +156 -33
- package/skills/weaver-e10-yimiaoban/references/ding-write.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/error-codes.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-read.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-write.md +6 -4
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -0
- package/skills/weaver-e10-yimiaoban/references/msg-write.md +34 -2
- package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +5 -2
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +79 -58
- package/skills/weaver-e10-yimiaoban/references/user-remind.md +2 -2
- package/skills/weaver-e10-ziguanjia/SKILL.md +5 -5
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
| 报销候选发票分类(可报 / 已挂单 / 红冲) | `invoice.reim.candidates.list` | yepiaotong | read |
|
|
15
15
|
| 查询事前申请 | `invoice.reim.requests.list` | yepiaotong | read |
|
|
16
16
|
| 获取报销工作流 ID 与名称 | `invoice.reim.workflow.resolve` | yepiaotong | read |
|
|
17
|
-
|
|
|
17
|
+
| 获取发票明细行预填信息(报销建单不再调用) | `invoice.reim.row-info` / `invoice.reim.row-info-batch` | yepiaotong | read |
|
|
18
18
|
| 取发票字段对象 | `invoice.browse-field.data` | yepiaotong | read |
|
|
19
19
|
| 获取当前人员及上级(兜底) | `invoice.reim.employee-superiors` | yepiaotong | read |
|
|
20
20
|
| 相关客户 / 相关项目模糊搜索 | `invoice.reim.field.search` | yepiaotong | read |
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
|
|
27
27
|
## 处理链
|
|
28
28
|
|
|
29
|
-
1. 获取发票:已有 `fid` 时可用 `invoice.get`;已有 E10 `fileId` 时用 `invoice.reim.file-ocr.preview`;按日期批量报销用 `invoice.reim.candidates.list`(只取 `available`),按关键词/号码筛选用 `invoice.list`,默认未报销发票。日期筛选默认用消费日期 `consumption_tm_begin` / `consumption_tm_end
|
|
29
|
+
1. 获取发票:已有 `fid` 时可用 `invoice.get`;已有 E10 `fileId` 时用 `invoice.reim.file-ocr.preview`;按日期批量报销用 `invoice.reim.candidates.list`(只取 `available`),按关键词/号码筛选用 `invoice.list`,默认未报销发票。日期筛选默认用消费日期 `consumption_tm_begin` / `consumption_tm_end`。出差 / 去某城市的报销,出发城市没说时默认上海:除了目的城市的票,消费日期落在出差时间内的上海打车票(去车站 / 机场)也一起筛进来,见 [`reim-workflow.md`](reim-workflow.md)「出差 / 城市意图查票」。
|
|
30
30
|
2. 展示发票汇总,让用户确认哪些发票进入报销。
|
|
31
31
|
3. 用 `invoice.reim.requests.list` 获取事前申请,再只按开票日期和事前申请发起日期关联。一张发票时间上只落在一条里就直接绑定;落在多条里,或没有开票日期,先让用户选。原始 ID、日期、金额必须逐字符保留。用户没有指定结束日期时不要传 `cusCreateDateEnd`,CLI 按东八区当天 + 1 天填入。传入的结束日 CLI 也会再 + 1 天后发给接口。
|
|
32
32
|
4. 用 `invoice.reim.workflow.resolve` 得到报销工作流,必要时按工作流分组。
|
|
33
|
-
5. 对每组并行调用 `workflow.createForm`(`workflow` 传 `{workFlowName}({workFlowId})`)、`invoice.
|
|
34
|
-
6. 按 [`reim-form-fill-rules.md`](reim-form-fill-rules.md) 组装 `createRequest` 的 `data`。差旅 / 外出报销时,每一行明细「相关流程」必须是 `{requestname}({requestid})`,没有事前申请就先让用户选,禁止空着建单。**相关客户和相关项目同一次让用户一起输入**(项目可「不填」),不要先建空草稿,也不要拆成两轮,不要询问合同号。用户给出名称时,先 `invoice.reim.field.search`:一条直接填 `名称(ID)`,多条让用户选,零条请用户换名称。合同号按已确认的项目从 `historyRequestData` 最近一条带出,对不上则用 `20260999`(见 [`reim-workflow.md`](reim-workflow.md) Step 4.4、Step 4.5
|
|
33
|
+
5. 对每组并行调用 `workflow.createForm`(`workflow` 传 `{workFlowName}({workFlowId})`)、`invoice.browse-field.data`(只传发票的 `fid`,不传凭证)。建单不再调用 `invoice.reim.row-info-batch`。
|
|
34
|
+
6. 按 [`reim-form-fill-rules.md`](reim-form-fill-rules.md) 组装 `createRequest` 的 `data`。差旅 / 外出报销时,每一行明细「相关流程」必须是 `{requestname}({requestid})`,没有事前申请就先让用户选,禁止空着建单。**相关客户和相关项目同一次让用户一起输入**(项目可「不填」),不要先建空草稿,也不要拆成两轮,不要询问合同号。用户给出名称时,先 `invoice.reim.field.search`:一条直接填 `名称(ID)`,多条让用户选,零条请用户换名称。合同号按已确认的项目从 `historyRequestData` 最近一条带出,对不上则用 `20260999`(见 [`reim-workflow.md`](reim-workflow.md) Step 4.4、Step 4.5)。**明细每行只写「相关发票」**(有绑定的事前申请时再写「相关流程」),费用日期、金额、币种、科目、费用说明、费用明细、相关凭证等其余明细列一律不写,由「相关发票」联动自动填充。然后直接调用 `workflow.createRequest` 存草稿(`action` 固定 `"draft"`,不问用户「存草稿 / 提交审批」),结果原样粘贴 `finalMarkdown`。命中「话费补贴标准审批流程」或「话费报销」时,必须先读 [`reim-phone-subsidy-rules.md`](reim-phone-subsidy-rules.md),按月度标准核算实报金额,不能直接用发票金额填单。
|
|
35
35
|
7. 报销单创建成功后,先按 [reim-workflow.md](reim-workflow.md) Step 5.3 检查落库结果:客户 / 项目是否被联动冲空。已确认过的名称直接写回,不要再问。再用 `workflow.editLoad` → `workflow.editPrepare` → `workflow.editApply` 写回。不要重复创建同一组发票的报销单。用户主动改已有报销单时同样走这条修改链。
|
|
36
36
|
|
|
37
37
|
完整编排见 [`reim-workflow.md`](reim-workflow.md)。
|
|
@@ -78,7 +78,7 @@ Set-Content -Encoding utf8 -LiteralPath .\reim-create-request.json -Value @'
|
|
|
78
78
|
"action": "draft",
|
|
79
79
|
"data": {
|
|
80
80
|
"main": {"100003720000000088": "上海市内交通费(滴滴出行)"},
|
|
81
|
-
"details": {"100003690000000011": [{"
|
|
81
|
+
"details": {"100003690000000011": [{"100003720000077896": ["<browse-field.data 返回的发票对象>"]}]}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
'@
|
|
@@ -95,14 +95,14 @@ cat > ./reim-create-request.json <<'JSON'
|
|
|
95
95
|
"action": "draft",
|
|
96
96
|
"data": {
|
|
97
97
|
"main": {"100003720000000088": "上海市内交通费(滴滴出行)"},
|
|
98
|
-
"details": {"100003690000000011": [{"
|
|
98
|
+
"details": {"100003690000000011": [{"100003720000077896": ["<browse-field.data 返回的发票对象>"]}]}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
JSON
|
|
102
102
|
weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create-request.json
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
示例里的字段 id 来自「总部费用报销」,实际一律以本次 `createForm` 返回的 `fields`
|
|
105
|
+
示例里的字段 id 来自「总部费用报销」,实际一律以本次 `createForm` 返回的 `fields` 为准;明细行只放「相关发票」(`invoice.browse-field.data` 返回的发票对象数组),其余明细列不传,由发票联动带出。
|
|
106
106
|
|
|
107
107
|
## 输出处理
|
|
108
108
|
|
|
@@ -704,7 +704,7 @@ weaver-work-cli --json invoice run invoice.reim.employee-superiors --input-json
|
|
|
704
704
|
|
|
705
705
|
CLI operation:`invoice.reim.row-info`
|
|
706
706
|
|
|
707
|
-
根据发票 ID 获取该发票在明细行中应填写的费用日期、关联凭证、费用科目。`fysm` 只作返回字段,**不要写入明细「费用说明」**,该列由发票联动带出。关联凭证 `itinerary`
|
|
707
|
+
根据发票 ID 获取该发票在明细行中应填写的费用日期、关联凭证、费用科目。`fysm` 只作返回字段,**不要写入明细「费用说明」**,该列由发票联动带出。关联凭证 `itinerary` 也不写入「相关凭证」,`subjectId` / `subjectName` 也不写入「费用类型(科目)」,`date` 也不写入「费用日期」。**报销建单不再调用本 operation**:明细只写「相关发票」(及「相关流程」),其余列都由发票联动带出。
|
|
708
708
|
|
|
709
709
|
### 入参
|
|
710
710
|
|
|
@@ -735,12 +735,12 @@ weaver-work-cli --json invoice run invoice.reim.row-info --input-json '{"invoice
|
|
|
735
735
|
|
|
736
736
|
| 字段 | 说明 | 对应明细行字段 |
|
|
737
737
|
| ----------- | ---------------- | ---------------------------------------- |
|
|
738
|
-
| `date` | 费用日期 |
|
|
738
|
+
| `date` | 费用日期 | **建单不写入**,明细「费用日期」由发票联动带出 |
|
|
739
739
|
| `fysm` | 费用说明原文 | **不写入**明细「费用说明」。该列由发票联动带出 |
|
|
740
740
|
| `itinerary` | 关联凭证 ID(多个用逗号拼接) | **不写入**,明细「相关凭证」由发票联动带出 |
|
|
741
|
-
| `subjectId` | 费用科目 ID |
|
|
742
|
-
| `subjectName` | 费用科目名称 |
|
|
743
|
-
| `sqje` / `sbje` | 整张发票的申请金额 |
|
|
741
|
+
| `subjectId` | 费用科目 ID | **建单不写入**,明细「费用类型(科目)」由发票联动带出 |
|
|
742
|
+
| `subjectName` | 费用科目名称 | 同上;用户明确要求改科目时,与 `subjectId` 拼成 `名称(ID)` 走修改链 |
|
|
743
|
+
| `sqje` / `sbje` | 整张发票的申请金额 | 仅参考;明细金额不写,由发票联动带出 |
|
|
744
744
|
| `containsItinerary` | 是否关联了行程单 | — |
|
|
745
745
|
| `itineraryData` | **行程单逐段明细**数组,每段含 `date`、`sqje`(该段金额)、`fysm`、`subjectId` / `subjectName`、`itinerary`(凭证 ID)、`invoiceId` | **暂不拆行**,也不要用其中的 `fysm` 生成费用说明。见 [reim-form-fill-rules.md](reim-form-fill-rules.md#4-行程单多段行程暂不拆行) |
|
|
746
746
|
|
|
@@ -762,9 +762,9 @@ weaver-work-cli --json invoice run invoice.reim.row-info --input-json '{"invoice
|
|
|
762
762
|
|
|
763
763
|
### 使用场景与优先级
|
|
764
764
|
|
|
765
|
-
-
|
|
766
|
-
-
|
|
767
|
-
-
|
|
765
|
+
- **调用时机**:报销建单不调用;只在用户单独要查某张发票的预填信息时调用
|
|
766
|
+
- **报销建单不调用**:返回的 `date`、`fysm`、`subjectId`、`itinerary` 都不写入明细,对应列由发票联动带出
|
|
767
|
+
- 只在用户单独要查某张发票的预填信息时使用
|
|
768
768
|
- **itinerary 处理**:不用来写「相关凭证」,也不拿它去 `invoice.browse-field.data` 取凭证对象。明细「相关凭证」由发票联动带出(见 [reim-form-fill-rules.md](reim-form-fill-rules.md#3-相关凭证不赋值由联动带出))
|
|
769
769
|
- **itineraryData 处理**:暂不拆行,不管几段都是一张发票一行。不要拿第一段和最后一段去写费用说明
|
|
770
770
|
|
|
@@ -838,7 +838,7 @@ weaver-work-cli --json invoice run invoice.reim.row-info-batch --input-json '{"i
|
|
|
838
838
|
|
|
839
839
|
### 使用场景
|
|
840
840
|
|
|
841
|
-
-
|
|
841
|
+
- 报销建单不调用;需要一次查多张发票的预填信息时,用 `row-info-batch` 替代 N 次 `row-info` 调用
|
|
842
842
|
- 部分失败不影响其他发票,失败的回退到 AI 推断逻辑
|
|
843
843
|
---
|
|
844
844
|
|
|
@@ -1008,4 +1008,4 @@ weaver-work-cli --json invoice run invoice.reim.field.search --input-json '{"key
|
|
|
1008
1008
|
|
|
1009
1009
|
`workflow.createForm` 的 `historyRequestData` 已是本工作流近一年、非草稿、我发起的前 5 条。总部费用报销用它按已确认的相关项目带出合同号,**不要询问合同号**(见 [reim-workflow.md](reim-workflow.md) Step 4.4)。客户和项目同一次让用户一起输入。不要再调用 `workflow.search` 或 `workflow.detail`。
|
|
1010
1010
|
|
|
1011
|
-
相关客户、相关项目必须在调用 `workflow.createRequest` 前一次问齐(见 Step 4.5
|
|
1011
|
+
相关客户、相关项目必须在调用 `workflow.createRequest` 前一次问齐(见 Step 4.5),禁止先建空草稿再问,也不要询问合同号。明细每行只写「相关发票」(及「相关流程」),其余明细列(费用日期、金额、币种、科目、费用说明、费用明细、相关凭证等)禁止填值,由「相关发票」联动带出,落库后仍空也不要补写。草稿落库后再查客户 / 项目是否被联动冲空(见 Step 5.3)。已确认值被冲空则 `workflow.edit*` 写回。看不清时用 `workflow.editLoad` 读 `currentValues`。
|
|
@@ -278,9 +278,9 @@ weaver-work-cli --json invoice run invoice.reim.workflow.resolve --input-json '{
|
|
|
278
278
|
|
|
279
279
|
**决策:** 有事前申请 → 用 `总部费用报销(100003460000000060)` 载入表单。
|
|
280
280
|
|
|
281
|
-
### Step 3: 并行载入表单 +
|
|
281
|
+
### Step 3: 并行载入表单 + 发票对象
|
|
282
282
|
|
|
283
|
-
|
|
283
|
+
以下三条命令互相独立,**同时发起**。建单不调用 `invoice.reim.row-info-batch`。
|
|
284
284
|
|
|
285
285
|
**① 载入报销表单(`weaver-e10-workflow`):**
|
|
286
286
|
|
|
@@ -324,27 +324,11 @@ weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow
|
|
|
324
324
|
}
|
|
325
325
|
```
|
|
326
326
|
|
|
327
|
-
> 承担主体、申请人、报销人直接上级、合同号、报销方式都带 `initialValue` →
|
|
327
|
+
> 承担主体、申请人、报销人直接上级、合同号、报销方式都带 `initialValue` → **不传**。明细每行只写「相关发票」和(已绑定事前申请的)「相关流程」;申请金额、币种、费用类型(科目)、费用说明、费用日期、相关凭证都**不传**,由发票联动带出。实报金额、附件数、承担人所有上级等不在 `fields` 里 → **不传**。
|
|
328
328
|
|
|
329
|
-
**②
|
|
329
|
+
**② 交通类发票取行程(只用于流程标题的城市):** `invoice.get`(`{"fid":"1295366637717012482"}`)→ `from`=「仁济医院南院区门诊部(南门)南侧」、`to`=「浦江瑞和城柒街区30号」。
|
|
330
330
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
```powershell
|
|
334
|
-
weaver-work-cli --json invoice run invoice.reim.row-info-batch --input-json '{"invoiceIds":["1295366637717012482"],"requestid":"1298294241967177729"}'
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
macOS/Linux(bash/zsh):
|
|
338
|
-
|
|
339
|
-
```bash
|
|
340
|
-
weaver-work-cli --json invoice run invoice.reim.row-info-batch --input-json '{"invoiceIds":["1295366637717012482"],"requestid":"1298294241967177729"}'
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
返回 `results[0].data`:`{"date":"2026-07-30","fysm":"交通运输服务","itinerary":"1298798990831518001","subjectId":"100502270000000006","subjectName":"市内交通费"}`
|
|
344
|
-
|
|
345
|
-
**③ 交通类发票取行程:** `invoice.get`(`{"fid":"1295366637717012482"}`)→ `from`=「仁济医院南院区门诊部(南门)南侧」、`to`=「浦江瑞和城柒街区30号」。
|
|
346
|
-
|
|
347
|
-
**④ 取发票对象:** 只传发票。`itinerary` 返回的凭证 `1298798990831518001` 不传,明细「相关凭证」由发票联动带出。
|
|
331
|
+
**③ 取发票对象:** 只传发票,不传凭证。
|
|
348
332
|
|
|
349
333
|
Windows PowerShell:
|
|
350
334
|
|
|
@@ -369,10 +353,6 @@ weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid
|
|
|
369
353
|
"details": {
|
|
370
354
|
"100003690000000011": [
|
|
371
355
|
{
|
|
372
|
-
"100003720000000419": "2026-07-30",
|
|
373
|
-
"100003720000016373": "108.2",
|
|
374
|
-
"100003720000052200": "人民币(100001050000000001)",
|
|
375
|
-
"100003720000000360": "市内交通费(100502270000000006)",
|
|
376
356
|
"100003720000000684": "交通费报销-后端开发111-2026-07-25(1298294241967177729)",
|
|
377
357
|
"100003720000077896": [{"optionId": "1295366637717012482", "id": "1295366637717012482", "fid": "1295366637717012482", "content": "增值税电子普通发票-36901189", "...": "browse-field.data 返回的其余键原样保留"}]
|
|
378
358
|
}
|
|
@@ -437,8 +417,8 @@ weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create
|
|
|
437
417
|
},
|
|
438
418
|
"details": {
|
|
439
419
|
"<费用明细subFormId>": [
|
|
440
|
-
{"
|
|
441
|
-
{"
|
|
420
|
+
{"<相关流程id>": "北京出差申请-张三-2026-07-20(1299854672520364033)", "<相关发票id>": [{"fid": "INV001", "...": "..."}]},
|
|
421
|
+
{"<相关流程id>": "北京出差申请-张三-2026-07-20(1299854672520364033)", "<相关发票id>": [{"fid": "INV002", "...": "..."}]}
|
|
442
422
|
]
|
|
443
423
|
}
|
|
444
424
|
}
|
|
@@ -618,7 +598,7 @@ AI 操作:
|
|
|
618
598
|
|
|
619
599
|
用户说:"帮我报销一下去重庆的发票,承担主体:边宝,合同编号:20250104933"
|
|
620
600
|
|
|
621
|
-
- 流程标题:`"龚为明8
|
|
601
|
+
- 流程标题:`"龚为明8月上海去重庆交通费报销"`(「去重庆」取用户原话,没说从哪出发就默认上海;月份取发票开票日期 2026-08-19)
|
|
622
602
|
- 合同号传 `"20250104933"`;**承担主体不传**(「边宝」也不传,等合同联动)
|
|
623
603
|
- **相关客户、相关项目还没确认 → 一次请用户一起填写,禁止直接存草稿,也不要再问合同号。** 这是出差,「去重庆」必须给具体客户;项目可以说「不填」。用户给出名称后先 `invoice.reim.field.search` 消歧,写入 `data` 再 `createRequest`。明细「费用说明」不传,由发票联动带出
|
|
624
604
|
- 若用户已确认客户 / 项目,创建后 `linkageResult` 返回(2026-10-21 真机,合同本身带出客户项目时):`字段联动带出:…实报金额=50.07、承担主体=朱洪磊、相关客户=中国航空集团有限公司、合同号=20250104933、相关项目=中航集团办公平台改造及升级项目。`
|
|
@@ -629,7 +609,7 @@ AI 操作:
|
|
|
629
609
|
|
|
630
610
|
## 示例13:行程单有多段行程(不拆行)
|
|
631
611
|
|
|
632
|
-
还是示例12那张滴滴发票(¥50.07,发票 ID `1328381858116714513`,行程单 `1328381883894906889
|
|
612
|
+
还是示例12那张滴滴发票(¥50.07,发票 ID `1328381858116714513`,行程单 `1328381883894906889`)。建单不调 `row-info-batch`,下面是它的返回(2026-10-21 真机),只用来说明行程单有多段:
|
|
633
613
|
|
|
634
614
|
```json
|
|
635
615
|
{
|
|
@@ -643,15 +623,15 @@ AI 操作:
|
|
|
643
623
|
}
|
|
644
624
|
```
|
|
645
625
|
|
|
646
|
-
`itineraryData` 有 3 段,**仍然只填 1
|
|
626
|
+
`itineraryData` 有 3 段,**仍然只填 1 行**,这一行只写「相关发票」(出差时再加「相关流程」)。费用日期、金额、币种、科目、费用说明、相关凭证都不传,由发票联动带出;不要把 `fysm` 或 `invoice.get` 的起止点写进去。
|
|
647
627
|
|
|
648
628
|
```json
|
|
649
629
|
"100003690000000011": [
|
|
650
|
-
{"
|
|
630
|
+
{"100003720000077896": [<发票对象>]}
|
|
651
631
|
]
|
|
652
632
|
```
|
|
653
633
|
|
|
654
|
-
- 流程标题:`龚为明8
|
|
634
|
+
- 流程标题:`龚为明8月上海去重庆交通费报销`
|
|
655
635
|
|
|
656
636
|
---
|
|
657
637
|
|
|
@@ -666,6 +646,29 @@ AI 操作:
|
|
|
666
646
|
> 你的票夹里没找到上周去北京的发票,所以没有往下建报销单。我按开票日期 2026-10-12 到今天查的,只有 1 张火车票(10-19,¥166),但它是杭州东 → 全椒,跟北京无关。可能是北京的发票还没导进票夹,或者日期不在上周。
|
|
667
647
|
|
|
668
648
|
- 不要因为这期间有票就拿来报;也不要自己把时间放宽到几个月前
|
|
649
|
+
- 这期间就算有上海的打车票,也不单独拿来报:没有一张北京的票,就不算出差
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## 示例14.1:出差带上出发地(上海)的打车票(「报销上周去北京的费用」)
|
|
654
|
+
|
|
655
|
+
今天 2026-10-21,用户说"帮我报销上周去北京的费用",没说从哪出发 → 出发城市默认**上海**。
|
|
656
|
+
|
|
657
|
+
1. 出差时间 = 上周 2026-10-12 ~ 10-18 → 消费日期查 **2026-10-11 ~ 今天**
|
|
658
|
+
2. 目的城市的票:火车票 上海虹桥 → 北京南(乘车 10-13)、火车票 北京南 → 上海虹桥(乘车 10-16)、北京的酒店(入住 10-13)
|
|
659
|
+
3. 出发城市的打车票(消费日期 `info.modify_info.cstm` 落在 10-11 ~ 10-19 内):
|
|
660
|
+
- 滴滴 10-13,行程单 家 → 虹桥火车站 ✅
|
|
661
|
+
- 上海强生出租 10-16,虹桥火车站 → 家 ✅
|
|
662
|
+
- 滴滴 10-20,上海市内 ❌(回来以后打的车,不在出差时间内)
|
|
663
|
+
- 上海的餐饮发票 10-13 ❌(不是打车票)
|
|
664
|
+
4. Step 1C 列 5 张票,表格前说明:
|
|
665
|
+
|
|
666
|
+
> 按上海出发去北京、出差时间 2026-10-12 ~ 10-18 查的(没说出发地,默认按上海)。第 4、5 张是出差期间在上海去 / 回火车站的打车票。
|
|
667
|
+
|
|
668
|
+
表格下一句:「同期还有 2 张其他发票,需要一起报请告诉我。」
|
|
669
|
+
|
|
670
|
+
- 流程标题:`{申请人}10月上海去北京费用报销`;报销事由:`上海去北京出差交通费、住宿费`
|
|
671
|
+
- 用户说了「从杭州去北京」→ 出发城市是杭州,只找杭州的打车票,上海的打车票不算进来
|
|
669
672
|
|
|
670
673
|
---
|
|
671
674
|
|
|
@@ -703,24 +706,24 @@ AI 操作:
|
|
|
703
706
|
|
|
704
707
|
1. [ ] `context` 是本组 `workflow.createForm` 返回的 `continuation`,没有复用别的报销单的句柄
|
|
705
708
|
2. [ ] `workflow.createForm` 传的是 Step 2.5 得到的 `{workFlowName}({workFlowId})`,**没有传 `userQuestion`**,也没用 `workflow.createRequestDirect`
|
|
706
|
-
3. [ ] `requestName` 是 `{申请人}{月份}{行程}{费用类型}报销`(如 `严玥宸10
|
|
709
|
+
3. [ ] `requestName` 是 `{申请人}{月份}{行程}{费用类型}报销`(如 `严玥宸10月上海去北京费用报销`):月份取发票开票日期 `invoiceDate`(不是今天),出发城市取用户原话或第一程火车票 / 机票,都没有就是 `上海`,没有「(共N笔)」、金额、具体日期,不超过30字
|
|
707
710
|
4. [ ] `data` 的键全部来自本次 `createForm` 的 `fields[].id`,没有 `fields` 之外的字段(实报金额、附件数、承担人所有上级等不传)
|
|
708
|
-
5. [ ] 带 `initialValue`
|
|
711
|
+
5. [ ] 带 `initialValue` 且不需改写的字段没有重复传;**明细每行只有「相关发票」和(可选的)「相关流程」两个键**,币种、金额、日期等都没有传
|
|
709
712
|
6. [ ] 浏览按钮写 `名称(ID)`,没有裸 ID;Select 写选项名,不是 optionValue
|
|
710
713
|
7. [ ] 每行「相关发票」是 `invoice.browse-field.data` 返回的 1 个发票对象;`browse-field.data` 只传了发票,没有传凭证
|
|
711
714
|
8. [ ] 明细「费用说明」「费用明细」「相关凭证」都没有写入 `data`,留给「相关发票」联动带出
|
|
712
715
|
9. [ ] 相关凭证(17/18/57/58)没有单独成行;行程单有多段行程也是一张发票一行。没有用 `fysm`、起止点或账单说明生成费用说明
|
|
713
|
-
10. [ ]
|
|
716
|
+
10. [ ] 明细「费用类型(科目)」没有写入 `data`,留给「相关发票」联动带出;没有用 `row-info` 的 `subjectId` 或兜底科目自己填
|
|
714
717
|
11. [ ] 文本字段没有 `*` 号
|
|
715
718
|
12. [ ] **相关客户、相关项目已在同一次提问里确认**(客户有消歧后的 `名称(ID)` 或非出差默认「泛微上海」;项目有名称或用户已说「不填」)。没确认不允许调用 `workflow.createRequest`。没有向用户要合同号
|
|
716
719
|
13. [ ] 合同号按已确认项目从历史带出;对不上或项目「不填」用 `20260999`。不是 `20260999` 时承担主体不传,客户 / 项目仍写入 `data`
|
|
717
720
|
14. [ ] 总部费用报销没有把合同号列进提问。用户自己说了合同号才用用户的
|
|
718
|
-
15. [ ]
|
|
721
|
+
15. [ ] 话费报销:明细没有写金额;主表金额(可写时)是核算后的实报金额合计;建单后已对比联动金额与实报金额并告诉用户
|
|
719
722
|
16. [ ] `action` 是 `"draft"`,没有问用户「存草稿 / 提交审批」,也没有传 `"submit"`
|
|
720
723
|
|
|
721
724
|
草稿落库后确认:
|
|
722
725
|
|
|
723
|
-
17. [ ]
|
|
726
|
+
17. [ ] 明细「费用类型(科目)」「费用说明」「费用明细」「相关凭证」仍空时已告诉用户是发票联动没带出,没有补写,也没有向用户要行程单,也没有向用户要起点和终点。客户 / 项目被冲空则写回。没有另建报销单,也没有补问合同号
|
|
724
727
|
|
|
725
728
|
修改报销单前确认:
|
|
726
729
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# 费用科目匹配规则
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> **⚠️ 创建报销单时不使用本文件。** 明细「费用类型(科目)」不允许 AI 填值,建单时不传、保留空值,由「相关发票」联动带出(见 [reim-form-fill-rules.md - 费用明细字段规则](reim-form-fill-rules.md#费用明细字段规则))。落库后仍空,只告诉用户「发票联动没有带出费用科目」,不要补写。
|
|
4
|
+
>
|
|
5
|
+
> 只有**用户明确要求改某一行的科目**时,才按下面的规则帮用户选科目,经 `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply` 修改。兜底科目 `"其他-管理费用(100502270000000104)"` 也只在这种场景下使用。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -105,7 +105,7 @@ invoice.reim.row-info 返回 subjectId?
|
|
|
105
105
|
|
|
106
106
|
## 赋值方式
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
用户明确要求改某行科目时,费用科目字段(明细「费用类型(科目)」,`componentKey="RelateBrowser"`)在 `workflow.editPrepare` 的 `data.details` 里写成 `"{科目名称}({科目ID})"`,不能只写裸 ID。`workflow.createRequest` 不写这一列:
|
|
109
109
|
|
|
110
110
|
```json
|
|
111
111
|
{"<费用类型(科目)字段id>": "市内交通费(100502270000000006)"}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
- **键只能取 `workflow.createForm` 返回的 `fields[].id`**:按 `fields[].name` 定位业务字段,取它的 `id`;明细字段的 `subFormId` 就是 `details` 的键。
|
|
27
27
|
- **`fields` 里没有的字段一律不传**:`fields` 只下发可写字段。实报金额、人民币金额、附件数、报销人上级、承担人直接上级、承担人所有上级、人员ID、提单人员、报销总金额等由表单自身计算或联动带出,不在可写清单里,传了整单会被拒(`notEditable`)。
|
|
28
|
-
- **带 `initialValue` 的字段默认不传**:CLI
|
|
28
|
+
- **带 `initialValue` 的字段默认不传**:CLI 会自动并入表单默认值;只有本文档规则要求的值与默认值不同,或用户本次明确改写时才传。明细只写「相关发票」「相关流程」(见「费用明细字段规则」)。
|
|
29
29
|
- `details` 每个数组元素是一行明细,**顺序 = 明细行顺序**,一张发票一行(行程单有多段行程也不拆,见「4. 行程单多段行程:暂不拆行」)。
|
|
30
30
|
- **流程标题必传**:用 `createRequest` 的 `requestName` 参数传(见下方「流程标题」),按公式生成,**禁止留用表单默认标题**——不传会静默使用默认标题且无任何提示。
|
|
31
31
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
| 场景 | 示例 |
|
|
55
55
|
|------|------|
|
|
56
56
|
| 出差,多类费用(交通 + 住宿等) | `"严玥宸10月上海去北京费用报销"` |
|
|
57
|
-
|
|
|
57
|
+
| 出差,没说出发地(默认上海) | `"龚为明8月上海去重庆交通费报销"` |
|
|
58
58
|
| 跨月 | `"张三7-8月北京去广州费用报销"` |
|
|
59
59
|
| 市内交通(不出城) | `"张三7月上海交通费报销"` |
|
|
60
60
|
| 话费 | `"张三8月话费报销"`(月份写账单月份) |
|
|
@@ -62,17 +62,17 @@
|
|
|
62
62
|
| 组成 | 取值 |
|
|
63
63
|
| --- | --- |
|
|
64
64
|
| 申请人 | `createForm` 返回的「申请人」默认值(即当前用户) |
|
|
65
|
-
| 月份 |
|
|
66
|
-
| 行程 | **出差 / 外地**:`{出发城市}去{目的城市}
|
|
67
|
-
| 费用类型 |
|
|
65
|
+
| 月份 | 取发票开票日期 `invoiceDate`(明细费用日期不由 AI 填),**不是创建当天**。同一个月 → `10月`;跨月同年 → `7-8月`;跨年或不是今年 → 带年份:`2025年12月`、`2025年12月-2026年4月` |
|
|
66
|
+
| 行程 | **出差 / 外地**:`{出发城市}去{目的城市}`,出发城市取不到时默认 `上海`。**市内**(所有票都在同一城市、没有出发 / 到达)→ `{城市}`。目的城市取不到就省略行程 |
|
|
67
|
+
| 费用类型 | 按发票 `expenseType` / 消费内容归类(明细科目不由 AI 填,不用它归类):1 类 → `{类}费`(`交通费`、`住宿费`、`餐饮费`、`话费`);2 类及以上 → `费用` |
|
|
68
68
|
|
|
69
69
|
**城市从哪来(按优先级):**
|
|
70
70
|
|
|
71
|
-
1.
|
|
71
|
+
1. 用户原话:「从杭州去北京」→ 杭州去北京;「去重庆的发票」→ 上海去重庆(没说出发地,默认上海)
|
|
72
72
|
2. 火车票 / 机票:第一程的出发城市 → 最远一程的到达城市(站名、机场名换成城市:「上海虹桥」→ 上海)
|
|
73
73
|
3. 事前申请(出差类)标题里的出差地点 → 目的城市
|
|
74
|
-
4. 酒店所在城市 → 目的城市;打车发票销方名称里的城市(「重庆滴滴出行科技有限公司」→ 重庆)→
|
|
75
|
-
5. **出发城市只取 1、2
|
|
74
|
+
4. 酒店所在城市 → 目的城市;打车发票销方名称里的城市(「重庆滴滴出行科技有限公司」→ 重庆)→ 有出差迹象时当目的城市,否则当市内城市。出差期间在出发城市的打车票(去车站 / 机场)不改变行程,仍按出发城市 → 目的城市写
|
|
75
|
+
5. **出发城市只取 1、2 两个来源,都没有就默认 `上海`**;不按别的线索去猜
|
|
76
76
|
|
|
77
77
|
**约束:**
|
|
78
78
|
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
|
|
86
86
|
## 报销事由
|
|
87
87
|
|
|
88
|
-
**格式:`{行程}{场景}{费用内容}`**,说清"去哪、干什么、花了什么"。行程取值与流程标题相同(`上海去北京` /
|
|
88
|
+
**格式:`{行程}{场景}{费用内容}`**,说清"去哪、干什么、花了什么"。行程取值与流程标题相同(`上海去北京` / 没说出发地默认 `上海去重庆` / 市内写 `上海`)。
|
|
89
89
|
|
|
90
90
|
| 组成 | 取值 |
|
|
91
91
|
| --- | --- |
|
|
@@ -96,8 +96,8 @@
|
|
|
96
96
|
| 场景 | 示例 |
|
|
97
97
|
| --- | --- |
|
|
98
98
|
| 出差,多类费用 | `上海去北京出差交通费、住宿费` |
|
|
99
|
-
|
|
|
100
|
-
| 用户说了目的 |
|
|
99
|
+
| 出差,没说出发地(默认上海),单一平台 | `上海去重庆出差交通费(滴滴出行)` |
|
|
100
|
+
| 用户说了目的 | `上海去北京拜访华为交通费、住宿费` |
|
|
101
101
|
| 市内交通 | `上海市内交通费(滴滴出行)` |
|
|
102
102
|
| 话费 | `8月话费` |
|
|
103
103
|
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
|
|
137
137
|
### 4. 行程单多段行程:暂不拆行
|
|
138
138
|
|
|
139
|
-
`row-info` 返回的 `itineraryData
|
|
139
|
+
`row-info` 返回的 `itineraryData`(行程单逐段明细)**目前不用来拆行**:不管行程单有几段,仍然**一张发票一行**,该行只写「相关发票」(及「相关流程」),日期、金额、科目都不传,由发票联动带出。`fysm` 和 `itineraryData` 都不要写进「费用说明」。
|
|
140
140
|
|
|
141
141
|
### 4. 取发票对象
|
|
142
142
|
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
| 附件 / 抄送人 | 用户本次给了才填(附件按 `workflow-create.md` 的上传口径),否则不传 |
|
|
172
172
|
| 申请金额 / 人民币金额(主表,可写时) | 默认所有**发票**(不含凭证)价税合计之和;话费报销为各行实报金额之和 |
|
|
173
173
|
|
|
174
|
-
>
|
|
174
|
+
> **以下字段在报销单里绝不能是空值**:承担主体、报销人上级/承担人直接上级/承担人所有上级、合同号、**相关客户**、**报销事由**。**差旅 / 外出报销时,每一行明细「相关流程」也绝不能空。** 它们要么由表单默认值带出,要么按上表显式传。**相关客户、相关项目必须在调用 `createRequest` 之前问清**(项目可「不填」),禁止先建空草稿再补。**相关客户不允许以「不填」结束。** **流程标题(`requestName`)同样必须显式传入**——不传会静默留用表单默认标题。若 `createRequest` 仍在 `missingFields` 里列出它们,按上表来源补上后用同一 `context` 重发;已建成的草稿走 `workflow.edit*`。明细「费用类型(科目)」由发票联动带出,不在 AI 补值范围内。**不要问用户要 ID**。
|
|
175
175
|
|
|
176
176
|
### 用户给了合同号:以合同联动为准
|
|
177
177
|
|
|
@@ -256,26 +256,13 @@ weaver-work-cli --json invoice run invoice.reim.field.search --input-json '{"key
|
|
|
256
256
|
## 费用明细字段规则
|
|
257
257
|
|
|
258
258
|
> **定位明细表**:用 `fields` 里带「相关发票」(`EinvoiceComponent`)字段的那个 `subFormId`,只填这一张明细表;其他明细表(外包订单等)不填。
|
|
259
|
-
>
|
|
260
|
-
> **明细列「费用明细」禁止填值。** `fields[].name` 是「费用明细」的那一列不要传,同样由发票联动带出。表单没有这一列就跳过,不要把它当成整张明细表。
|
|
261
|
-
> 标注「`row-info` 优先」的字段:先取 `invoice.reim.row-info`(多张用 `invoice.reim.row-info-batch`)的返回值,为空/null 时才回退。
|
|
259
|
+
> **⚠️ 明细每行只写「相关发票」**(有绑定的事前申请时再写「相关流程」)。**其他明细列一律不传**,由「相关发票」联动带出:费用日期、金额(申请金额 / 实报金额等)、币种、费用类型(科目)、费用说明、费用明细、相关凭证、明细的相关客户 / 项目、附件数。表单默认值、`row-info` 返回值、用户口述都不写进这些列。落库后仍空只告知「发票联动没有带出」,不要补写。
|
|
262
260
|
|
|
263
261
|
| fieldName 关键词 | 怎么填 |
|
|
264
262
|
|------------------|--------|
|
|
265
|
-
|
|
|
266
|
-
| 费用日期 / 发生日期 | **`row-info` 优先**:`date`;回退发票 `invoiceDate` |
|
|
267
|
-
| **申请金额 / 实报金额 / 报销金额 / 人民币金额 / 含税金额**(凡可写的金额字段) | 该行发票**价税合计**(`amount` = `price.total`,不是不含税的 `price.amount`);**话费报销**改填 [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md) 算出的实报金额 |
|
|
268
|
-
| **费用说明 / 摘要** | **不传。** 由「相关发票」联动带出。不要用 `row-info.fysm`、`itineraryData`、`consumeContent` 或 `invoice.get` 的起止点自己生成,话费报销也不要写成账单说明。建单后仍空只告知,不要补写 |
|
|
269
|
-
| **费用类型(科目)** | **`row-info` 优先**:`{subjectName}({subjectId})`;`subjectId` 为空时按 [reim-expense-subject-rules.md](reim-expense-subject-rules.md) 匹配;全部未命中填兜底 `"其他-管理费用(100502270000000104)"`。**必须有值** |
|
|
263
|
+
| **相关发票** | `[该行发票对象]`(**必填**,`invoice.browse-field.data` 返回的 1 个发票对象) |
|
|
270
264
|
| 相关流程(明细) | 该行发票绑定的事前申请 `{requestname}({requestid})`。**差旅 / 外出报销每一行都必须有值**,见「差旅 / 外出明细相关流程」;其他报销未绑定则不传 |
|
|
271
|
-
|
|
|
272
|
-
| 相关项目(明细,若可写) | 与主表一致 |
|
|
273
|
-
| **币种** | **每行都显式传 `"人民币(100001050000000001)"`,即使表单已默认带出**。不传时 CLI 会把无行号的明细默认值塞进联动请求,服务端联动报错并静默返回空结果,「申请金额」联动带不出实报金额 / 人民币金额 / 报销总金额 |
|
|
274
|
-
| 附件数(若可写) | `"1"` |
|
|
275
|
-
| **相关发票** | `[该行发票对象]`(**必填**) |
|
|
276
|
-
| **相关凭证** | **不传。** 由「相关发票」联动带出。建单后仍空只告知,不要补写 |
|
|
277
|
-
|
|
278
|
-
> **⚠️ 明细金额字段**:遍历该行可写字段时,`componentKey` 为 `Money` / `NumberComponent` 且名称含"金额"的,**默认全部统一填该行发票的价税合计**,不要因为字段名不是"实报金额"就跳过,也不要拿 `invoice.get` 返回的 `amount`(不含税)顶替。例外只有话费报销。
|
|
265
|
+
| 其他所有明细列 | **不传**,由「相关发票」联动带出 |
|
|
279
266
|
|
|
280
267
|
---
|
|
281
268
|
|
|
@@ -328,7 +315,7 @@ weaver-work-cli --json invoice run invoice.reim.field.search --input-json '{"key
|
|
|
328
315
|
|
|
329
316
|
## 话费补贴 / 话费报销(硬拦截)
|
|
330
317
|
|
|
331
|
-
> **命中「话费补贴标准审批流程」或「话费报销」时,必须按 [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md)
|
|
318
|
+
> **命中「话费补贴标准审批流程」或「话费报销」时,必须按 [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md) 计算实报金额。明细金额不传(由发票联动带出),主表金额字段可写时填实报金额合计,禁止按发票原价填。**
|
|
332
319
|
|
|
333
320
|
**如何判断(满足任一即可):** `workFlowName` 含「话费补贴标准审批流程」或「话费报销」;事前申请名称含「话费补贴」或「话费报销」;用户明确说话费报销 / 话费补贴。
|
|
334
321
|
|
|
@@ -336,7 +323,7 @@ weaver-work-cli --json invoice run invoice.reim.field.search --input-json '{"key
|
|
|
336
323
|
|
|
337
324
|
**实报金额:** 先从账单构成中剔除「手机设备赠送套餐」「家庭宽带套餐」,再按 `min(可报销账单金额, 岗位月度上限)` 支付。
|
|
338
325
|
|
|
339
|
-
|
|
326
|
+
**金额怎么落:** 明细金额列不传(明细只写相关发票),由发票联动带出。主表金额字段可写时填各行实报金额之和。建单后在回复里列出每行实报金额与联动带出的金额;不一致时请用户在 E10 里改,或由用户明确要求后走 `workflow.edit*` 修改。发票原始金额只用于核对,不得改写发票数据。
|
|
340
327
|
|
|
341
328
|
---
|
|
342
329
|
|
|
@@ -352,29 +339,31 @@ weaver-work-cli --json invoice run invoice.reim.field.search --input-json '{"key
|
|
|
352
339
|
4.1. **差旅 / 外出相关流程**:按「差旅 / 外出明细相关流程」给每一行赋值。任一行没有事前申请 → **停止,禁止 `createRequest`**
|
|
353
340
|
5. **话费拦截**:按 [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md) 核对材料并算实报金额,否则停止
|
|
354
341
|
6. **主表**:按「主表字段规则」逐个落值;带默认值且无需改写的字段不传
|
|
355
|
-
7.
|
|
356
|
-
8.
|
|
342
|
+
7. **明细**:每张发票一行,**只写「相关发票」**;有绑定的事前申请时再写「相关流程」(差旅 / 外出每行必须有)。其余明细列都不传,交给发票联动
|
|
343
|
+
8. **最终检查**:明细每行的键只有「相关发票」和(可选的)「相关流程」;差旅 / 外出每一行「相关流程」都是 `{requestname}({requestid})`;`data.main` 里没有「事前申请流程」;相关客户已有确认值;相关项目已在同一次提问里问过;没有向用户要合同号
|
|
357
344
|
9. 交给 [reim-workflow.md](reim-workflow.md) Step 5 直接调用 `workflow.createRequest` 存草稿
|
|
358
|
-
10. **落库后再查**:客户 /
|
|
345
|
+
10. **落库后再查**:客户 / 项目是否被联动冲空。明细其余列(日期、金额、币种、科目、费用说明、费用明细、相关凭证等)仍空只告知联动没带出,不要补写。不能只贴草稿链接就结束
|
|
359
346
|
|
|
360
347
|
---
|
|
361
348
|
|
|
362
349
|
## 填写结果检查
|
|
363
350
|
|
|
364
351
|
> 发生在 `workflow.createRequest` 已经建成草稿之后。编排见 [reim-workflow.md](reim-workflow.md) Step 5.3。
|
|
365
|
-
> **相关客户、相关项目本应在建单前问清。** 这里只处理联动把已确认的客户 /
|
|
352
|
+
> **相关客户、相关项目本应在建单前问清。** 这里只处理联动把已确认的客户 / 项目冲空。明细除「相关发票」「相关流程」外的列仍空时只告诉用户「发票联动没有带出」,禁止补写。
|
|
366
353
|
|
|
367
354
|
草稿落库后按下表检查。先看本次返回的 `previewDetails`、`fields`、`linkageResult`、`missingFields`;看不出时用 `requestId` 调一次 `workflow.editLoad` 的 `currentValues`。不要另建报销单,不要 `workflow.detail`。
|
|
368
355
|
|
|
369
356
|
| 检查项 | 没填上 | 告诉用户的原因 | 请用户给什么 |
|
|
370
357
|
| --- | --- | --- | --- |
|
|
371
|
-
| **相关客户** |
|
|
372
|
-
| 相关项目 |
|
|
358
|
+
| **相关客户** | **任何报销单**:主表「相关客户」为空(明细的相关客户不检查、不写)。非出差且已是「泛微上海」不算 | 合同联动把建单前已确认的客户冲空了 | 本轮已经消歧过的 `名称(ID)` **直接写回,不要再问**。只有建单前漏问了才问客户名称(不接受「不填」) |
|
|
359
|
+
| 相关项目 | 主表「相关项目」为空,且用户没有说过「不填」(明细的相关项目不检查、不写) | 合同联动把建单前已确认的项目冲空了 | 已确认的项目名称直接写回。只有建单前漏问了才问「相关项目填什么」,可以说「不填」 |
|
|
373
360
|
| 明细「费用说明」 | 表单有这一列,落库后仍空 | 发票联动没有带出 | **不请用户填,也不补写,不要自己生成** |
|
|
374
361
|
| 明细「费用明细」 | 表单有这一列,落库后仍空 | 发票联动没有带出 | **不请用户填,也不补写** |
|
|
375
362
|
| 明细「相关凭证」 | 表单有这一列,落库后仍空 | 发票联动没有带出 | **不请用户挂,也不补写**;不要为了它向用户要行程单或起点终点 |
|
|
363
|
+
| 明细「费用类型(科目)」 | 落库后仍空 | 发票联动没有带出 | **不请用户选,也不补写**;不要按科目规则或兜底科目自己填 |
|
|
364
|
+
| 明细其他列(费用日期、金额、币种等) | 落库后仍空 | 发票联动没有带出 | **不请用户填,也不补写** |
|
|
376
365
|
|
|
377
|
-
非出差且相关客户已是「泛微上海」不报客户缺失。表里都合格则不额外说明。缺项在 `finalMarkdown` 后一次列完,**不能只贴草稿就结束**。已确认的客户 / 项目走 `workflow.editPrepare` → `workflow.editApply`,不再二次确认保存。相关项目用户说不填 → 保持现状,不再追问。**相关客户说「不填」无效。**
|
|
366
|
+
非出差且相关客户已是「泛微上海」不报客户缺失。表里都合格则不额外说明。缺项在 `finalMarkdown` 后一次列完,**不能只贴草稿就结束**。已确认的客户 / 项目走 `workflow.editPrepare` → `workflow.editApply`,不再二次确认保存。相关项目用户说不填 → 保持现状,不再追问。**相关客户说「不填」无效。** 明细除「相关发票」「相关流程」外的列,建单时即使用户给了内容也不写入。`editPrepare` / `editApply` 失败时如实转述错误,相关客户仍算没填上,不能把失败当成检查完成。
|
|
378
367
|
|
|
379
368
|
---
|
|
380
369
|
|
|
@@ -83,12 +83,12 @@
|
|
|
83
83
|
|
|
84
84
|
| 字段 | 怎么填 |
|
|
85
85
|
|------|--------|
|
|
86
|
-
|
|
|
86
|
+
| 明细金额字段(申请金额等) | **不传。** 明细只写「相关发票」(及「相关流程」),金额由发票联动带出。建单后在回复里列出每行**实报金额**与联动带出的金额,不一致时请用户在 E10 里改,或由用户明确要求后走 `workflow.edit*` 修改 |
|
|
87
87
|
| 主表金额字段(仅当出现在 `createForm` 的 `fields` 里时才传) | 各行实报金额之和 |
|
|
88
|
-
| 费用类型(科目) |
|
|
88
|
+
| 费用类型(科目) | **不传。** 由「相关发票」联动带出,不要自己写通讯科目。建单后仍空只告知,不要补写 |
|
|
89
89
|
| 费用说明 | **不传。** 由「相关发票」联动带出,不要写成月份、账单或实报金额说明 |
|
|
90
90
|
|
|
91
|
-
>
|
|
91
|
+
> 主表金额按实报金额合计,是「主表金额填发票价税合计」的**唯一覆盖规则**,只适用于本规范命中的话费报销。发票原始 `amount` 仍须原样保留在上下文中,不得改写发票数据本身。
|
|
92
92
|
|
|
93
93
|
向用户确认报销内容时,必须同时列出:
|
|
94
94
|
|
|
@@ -145,5 +145,5 @@ cusCreateDateEnd = 最晚发票 invoiceDate(CLI 会再 + 1 天后发给接
|
|
|
145
145
|
4. 按账单构成剔除赠送套餐、家庭宽带,算出可报销账单金额
|
|
146
146
|
5. 按 `min(可报销账单金额, 上限)` 得到实报金额,展示给用户确认
|
|
147
147
|
6. 查询事前申请时使用 **3 年回溯**(`cusCreateDateStart` 往前推 1095 天),用 `requestname="话费"` 缩小范围
|
|
148
|
-
7. 匹配到事前申请后,用户确认,才允许进入 [reim-workflow.md](reim-workflow.md) Step 5(`workflow.createRequest`
|
|
148
|
+
7. 匹配到事前申请后,用户确认,才允许进入 [reim-workflow.md](reim-workflow.md) Step 5(`workflow.createRequest` 存草稿)。建单后对比每行实报金额与联动带出的金额,告诉用户
|
|
149
149
|
8. 材料不齐、岗位未确认、账单构成无法拆分、或用户拒绝 → **结束流程,禁止创建**
|