内部单据预算操作

说明

可用于外部系统关联每刻内部单据,冻结、占用、释放每刻的层级预算。

注:

  1. 仅支持当前已生效的层级预算,单据类型支持申请、报销和合同。ps:后续支持平/层级
  2. 一次请求对应一张单据,freezeBudgets、occupyBudgets、unfreezeBudgets 必须恰好一个非空。
  3. 冻结先匹配预算;占用和释放按 uniqueCode 查找原冻结明细,不重新匹配。占用将冻结金额转为占用,释放仅支持释放冻结金额。
  4. 三种动作的 amount 均不得为负数。占用、释放金额换算后不能超过原明细的剩余冻结金额。
  5. 此接口为整批成功或整批失败,一条数据错误则整批失败。
  6. 同一单据的 uniqueCode 在有余额时不能重复新增冻结;全部释放后可以重新冻结。相同释放请求再次调用,会再次扣减冻结余额。
  7. 未指定预算组织、科目业务编码时,需按对应预算组织和科目配置的匹配条件传参。
  8. 冻结明细中任一 ignoreWeakControl 为 true,整批忽略弱控提示,强控仍然生效。
  9. 币种与预算方案币种不一致时,按 exchangeTime 对应汇率换算;未传时取当前时间。
  10. 单据节点的预算动作由外部系统调用本接口处理。

接口限制

该接口单批默认最多支持1000条明细。

接口地址

/api/openapi/budget/operation

请求类型

POST

请求参数

参数说明

参数名称 类型 是否必填 参数说明 默认值
formType String 是 单据类型:PRECONSUME(申请)、REIMBURSE(报销)、CONTRACT(合同)
formDataCode String 是 每刻单据内码
formCode String 否 单据号,传入时需与每刻单据一致
formSubTypeBizCode String 否 单据小类业务编码,传入时需与每刻单据一致
freezeBudgets List<Object> 三选一 冻结预算明细
occupyBudgets List<Object> 三选一 冻结转占用明细
unfreezeBudgets List<Object> 三选一 释放冻结预算明细

freezeBudgets 参数说明

参数名称 类型 是否必填 参数说明 默认值
uniqueCode String(50) 是 外部行数据唯一标识,同一批次不可重复,长度不超过50;同一单据下仍有余额时不能重复新增冻结
budgetPlanBizCode String 否 预算方案业务编码,指定时按该方案匹配预算
orgMatch Object 是 预算组织编码或组织匹配条件,见下表
subjectMatch Object 条件必填 预算科目编码或科目匹配条件;预算方案未配置科目匹配时可不传
budgetTime long 是 用于匹配预算期间的时间,精确到毫秒,例如:1648693651000
amount BigDecimal 是 本次冻结金额,不得为负数
currency String 是 币种,如人民币:CNY;与预算方案币种不一致时按汇率换算
desc String 否 事由、描述,长度小于200字符
ignoreWeakControl Boolean 否 弱控超标时是否忽略弱控提示强占预算;任一行为true时整批忽略弱控 false
exchangeTime long 否 用于获取汇率的时间,精确到毫秒;未传时取当前时间

orgMatch:

字段名称 类型 是否必填 字段说明 默认值
orgBizCode String 否 预算组织业务编码,有值时不再使用下面的字段匹配预算组织
departmentBizCode String 否 用于匹配预算组织的部门业务编码
employeesNo String 否 用于匹配预算组织的员工工号
legalEntityBizCode String 否 用于匹配预算组织的公司抬头业务编码
referenceDataDetailBizCodes List<String> 否 用于匹配预算组织的自定义档案选项业务编码

subjectMatch:

字段名称 类型 是否必填 字段说明 默认值
subjectBizCode String 否 预算科目业务编码,有值时不再使用下面的字段匹配预算科目
expenseTypeBizCode String 否 用于匹配预算科目的费用类型业务编码
referenceDataDetailBizCodes List<String> 否 用于匹配预算科目的自定义档案选项业务编码

occupyBudgets、unfreezeBudgets 参数说明

参数名称 类型 是否必填 参数说明 默认值
uniqueCode String(50) 是 当前单据下原冻结明细的唯一标识,同一批次不可重复
amount BigDecimal 是 本次转占用或释放金额,不得为负数;换算后不能超过剩余冻结金额
currency String 是 币种,如人民币:CNY;与预算方案币种不一致时按汇率换算
desc String 否 事由、描述,长度小于200字符
exchangeTime long 否 用于获取汇率的时间,精确到毫秒;未传时取当前时间

参数样例

冻结

{
  "formType": "PRECONSUME",
  "formDataCode": "FORM_DEMO_001",
  "freezeBudgets": [
    {
      "uniqueCode": "A",
      "budgetPlanBizCode": "PLAN_2026",
      "orgMatch": {
        "orgBizCode": "ORG_SALES"
      },
      "subjectMatch": {
        "subjectBizCode": "SUBJECT_TRAVEL"
      },
      "budgetTime": 1791849600000,
      "amount": "100.00",
      "currency": "CNY",
      "desc": "申请时冻结",
      "ignoreWeakControl": false,
      "exchangeTime": 1791849600000
    }
  ]
}

冻结转占用

{
  "formType": "PRECONSUME",
  "formDataCode": "FORM_DEMO_001",
  "occupyBudgets": [
    {
      "uniqueCode": "A",
      "amount": "80.00",
      "currency": "CNY",
      "desc": "审批完成转占用"
    }
  ]
}

释放剩余冻结金额

{
  "formType": "PRECONSUME",
  "formDataCode": "FORM_DEMO_001",
  "unfreezeBudgets": [
    {
      "uniqueCode": "A",
      "amount": "20.00",
      "currency": "CNY",
      "desc": "释放剩余冻结金额"
    }
  ]
}

响应参数

响应参数说明

参数名称 类型 是否必填 参数说明
code String 是 ACK:成功;NACK:失败
message String 是 返回消息,失败时为错误说明
data Object 否 本接口不返回明细结果,为null
errorCode String 否 错误码,无值时为null
success Boolean 是 是否成功

参数样例

正确示例返回

{
  "code": "ACK",
  "message": "成功",
  "data": null,
  "errorCode": null,
  "success": true
}

错误示例返回

{
  "code": "NACK",
  "message": "预算操作金额不能为负数",
  "data": null,
  "errorCode": "999997",
  "success": false
}

常见错误提示说明--message

错误提示 说明
freezeBudgets、occupyBudgets、unfreezeBudgets 必须恰好一个非空 一次请求只能执行一种预算动作
预算明细单批上限为 1000 明细数量超过单批上限
uniqueCode 必填且最长 50 字符 uniqueCode为空或长度超过50
同批 uniqueCode 不得重复 同一批次的明细标识重复
预算操作金额不能为负数 冻结、占用、释放均不允许负数金额
事由长度必须小于 200 个字符 desc长度达到或超过200
未找到可操作的冻结预算 原冻结明细不存在或已无冻结余额
业务行仍有未释放余额 同一单据下该uniqueCode不能重复新增冻结
操作金额超过剩余冻结金额 本次转占用或释放金额超过剩余冻结余额
超出预算强控金额 冻结金额触发预算强控
超出预算弱控金额 冻结金额触发弱控,且未忽略弱控
Copyright © 杭州每刻科技有限公司 www.maycur.com all right reserved,powered by Gitbook该文件修订时间: 2026-11-03 09:27:56

results matching ""

    No results matching ""

    results matching ""

      No results matching ""