报销单费用更新接口

说明

该接口用于进行报销单费用更新,可以用于将已关联报销单的费用更新.

注意事项

  1. 该接口为部分失败,在进行费用更新时,如果一次更新5条费用,其中一条失败,不会影响其他四条数据的正常更新。
  2. 每次更新最大值为10条费用,导入过多费用时,每刻会提示费用超过支持最大值10条。
  3. 更新的费用需要满足:a.更新费用已关联报销单 b.费用关联的报销单属于草稿状态或驳回至可编辑状态.
  4. 费用更新传值,若不传则默认复用原费用对应值,传则按最新值进行更新。(expenseTypeBizCode费用类型改变时,则需要传全量值)
  5. 以下特殊费用字段全覆盖且以最新传值进行更新,不复用旧值: a.allocationRuleBizCode、allocationList(分摊信息) b.customObject(自定义字段信息) c.corpExpense(是否对公费用) 6.根据返回的integrity可以识别该费用是否必填项传入完整:
      - true:所有必填项均传入成功 
      - false:存在必填项未传入
    
    7.对公费用场景暂不支持:到票核销、支付前期已到的发票 8.该接口不支持费用金额拆分。即使传入 splitByAmount / subExpenseList 也不会被处理(不执行拆分),相关字段不生效。如需使用金额拆分导入能力,请使用创建接口 POST /api/openapi/receive/expense。

接口地址

/api/openapi/receive/expense/update

请求类型

POST

请求参数

参数说明

在各个表单中,分为系统字段、业务字段及普通字段,系统字段在表单配置界面中不会显示,如expenseTypeBizCode 字段。业务字段及普通字段,可以通过单据配置界面中的开发者模式来查看该字段导入时的的key值,其中普通字段的key值,也可以在界面中进行配置修改

字段名称 字段类型 是否必填 字段说明
employeeId String(25) 是 需要导入的对应员工的工号
expenseList List<expenseList> 是 费用列表,根据费用表单配置,分为对公费用参数和对私费用参数

expenseList费用列表

对公费用参数说明

字段名称 字段类型 是否必填 字段说明
bizCode String 是 费用编码(用于更新费用的主键)
consumeAmount AmountInput 否 付款金额 系统内对应:到票全部支付 '付款金额'
预付未到票 '付款金额'
到票核销 '付款金额'
到票部分支付或不支付 '付款金额'
支付前期已到的发票 '付款金额'
expenseTypeBizCode String 否 费用类型业务编码,该字段若修改则需要全字段更新
corpExpense boolean 是 是否对公费用,需要填写true
corpType String 否 业务场景:
ALL_RECEIPTS(全部到票)
NO_RECEIPT(预付未到票)
RECEIPT_PAY_SOME(到票部分支付或不支付)
corpExpenseResponsibleEmpIds List<String> 否 责任人/业务经办人(预付未到票/到票部分支付或不支付 两种场景必填)
nonReceiptAmount AmountInput 否 未到票金额(预付未到票场景)
receiptAmount AmountInput 否 本次到票金额(到票全部支付/到票部分支付或不支付/到票核销 三种场景)
forecastReceiptDate Long 否 预计到票时间(预付未到票场景)
consumeLocation CityInput 否 消费地点.不传则复用旧值,传空对象则清除.
receiptDate Long 否 到票时间(到票核销/到票部分支付或不支付 两种场景)
tradingPartnerBizCode String 否 往来单位业务编码
customObject CustomObject 否 自定义普通字段.不传则复用旧值,传值则全覆盖.
allocationList List<ExpenseAllocation> 否 分摊列表(支付前期已到的发票 场景不支持分摊).不传则复用旧值,传值则全覆盖
allocationRuleBizCode String 否 分摊规则业务编码,分摊列表不为空则必填;
noTaxSuiteTemp NoTaxInput 否 不含税组件(只有对公费用预付未到票场景支持). 不传则复用旧值,传空对象则清除.
receiptMedium String 否 收据介质。保证金/押金费用有效,可选值:PAPER(纸质)、ELECTRONIC(电子)。不传复用旧值,传空清空
receiptAttachments List<Attachment> 否 收据附件。保证金/押金费用有效,单次最多 30 个;每刻根据公网 URL 下载并转存附件,不传复用旧收据附件,传空数组清空收据附件

预付款类型说明

当费用为 corpExpense=true 且 corpType=NO_RECEIPT,并且费用表单配置了“预付款类型”组件时,预付款类型通过 customObject 传入。更新接口中 customObject 为全覆盖字段:传入时会按最新值覆盖原费用自定义字段,不传则复用原值。

字段 key 以费用表单中“预付款类型”组件的业务编码为准;以下示例使用 noReceiptSubType。更新接口推荐在对象中传入预付款类型选项业务编码。

示例:

{
  "customObject": {
    "noReceiptSubType": {
      "bizCode": "RDD25120412SSM5C0"
    }
  }
}

Attachment

字段名称 字段类型 是否必填 字段说明
url String 是 附件下载地址
fileName String 否 文件名
fileType String 是 文件后缀,如 pdf、jpg、png
{
  "bizCode": "EXPCODE001",
  "receiptMedium": "ELECTRONIC",
  "receiptAttachments": [
    {
      "url": "https://example.com/deposit-receipt.pdf",
      "fileName": "保证金收据.pdf",
      "fileType": "pdf"
    }
  ]
}

调用方只需提供可公网访问的附件 URL,每刻负责下载并生成内部 resourceKey。单个文件最大 10 MB;不接受调用方自行构造 resourceKey。

到票核销记录参数说明 ExpenseDeductionTemp

字段名称 字段类型 是否必填 字段说明
recordExpenseCode String 是 被核销费用的唯一编码(费用导入接口返回的expenseCode 或 报销单详情返回的被核销费用的code)
deductionAmount AmountInput 是 核销金额

支付前期已到票记录参数说明 ExpenseDeductionTemp

字段名称 字段类型 是否必填 字段说明
recordExpenseCode String 是 被核销费用的唯一编码(费用导入接口返回的expenseCode 或 报销单详情返回的被核销费用的code)
deductionAmount AmountInput 是 支付金额

对私费用参数说明

字段名称 字段类型 是否必填 字段说明
bizCode String 是 费用编码(用于更新费用的主键)
consumeAmount AmountInput 否 费用金额
expenseTypeBizCode String 否 费用类型业务编码
corpExpense String 否 是否对公费用,需要填写false
consumeTime DateInput 否 消费时间
consumeLocation CityInput 否 消费地点.不传则复用旧值,传空对象则清除.
customObject CustomObject 否 自定义普通字段.不传则复用旧值,传值则全覆盖.
trainSeatStr String 否 火车席位:
BUSINESS-商务座
SPECIAL-特等座
FIRST-一等座
SECOND-二等座
SOFT_SLEEPER-软卧
ADVANCED_SOFT_SLEEPER-高级软卧
HARD_SLEEPER-硬卧
SOFT-软座
HARD-硬座
STANDING-无座
不传则复用旧值,传空串则清除.
airClassStr String 否 飞机舱位: FIRST-头等舱
BUSINESS-商务舱
ECONOMY-经济舱
不传则复用旧值,传空串则清除.
shipClassStr String 否 轮船舱位: VIP-贵宾舱
SPECIAL-特等舱
FIRST-一等舱
SECOND_A-二等A
SECOND_B-二等B
THIRD_A-三等A
THIRD_B-三等B
ECONOMY-经济舱
不传则复用旧值,传空串则清除.
allocationList List<ExpenseAllocation> 否 分摊列表.不传则复用旧值,传值则全覆盖
allocationRuleBizCode String 否 分摊规则业务编码,分摊列表不为空则必填;
labourTax object 否 劳务费个税.不传则复用旧值,传空对象则清除.

分摊参数说明 ExpenseAllocation

字段名称 字段类型 是否必填 字段说明
allocatedAmount number 是 分摊金额
legalEntityBizCode String 是 公司抬头业务编码
coverUserNo String 是 承担人工号
coverDepartmentBizCode String 是 承担部门编码
customObject CustomObject 遵循表单配置 自定义普通字段

劳务费个税参数说明 labourTax

参数说明

不传 labourTax 时复用原劳务税和费用金额;显式传入时,系统根据本次请求的字段组合重新计算并同步费用金额。

表单能力 本次计算起点 必填字段 更新行为
未开启减除税额能力 费用金额或税后应付金额 amountType、amount pre 为费用金额,after 为税后应付金额;未启用时减除税额按 0
已开启减除税额能力 费用金额 amountType=pre、amount 保持费用金额,先减除 taxDeduction 得到税前金额,再正算预扣个税和税后金额
已开启减除税额能力 税后应付金额 amountType=after、amount 表示修改了税后应付金额,按最新减除税额重新生成税后金额、税前金额、预扣个税和费用金额
已开启减除税额能力 费用金额(历史兼容模式) amountIncludeTaxDeduction 兼容字段存在时优先;行为与 amountType=pre 相同

taxDeduction 为空按 0。同时传历史兼容费用金额和 amountType/amount 时,amountIncludeTaxDeduction 优先。只修改减除税额时沿用当前主金额类型:费用金额口径使用 pre,税后应付金额口径使用 after,并按最新减除税额重新计算完整结果。

字段名称 字段类型 是否必填 字段说明
amountType String 条件必填 pre(费用金额)或 after(税后应付金额)
amount AmountInput 条件必填 pre 模式下为费用金额;after 模式下为税后应付金额
amountIncludeTaxDeduction AmountInput 条件必填 费用金额模式的主金额;存在时优先
taxDeduction AmountInput 否 减除税额;为空或金额为空时按 0 处理

修改税后应付金额

{
  "employeeId": "USER001",
  "expenseList": [
    {
      "bizCode": "EXPCODE003",
      "labourTax": {
        "amountType": "after",
        "amount": {
          "amount": 980,
          "currency": "CNY"
        },
        "taxDeduction": {
          "amount": 100,
          "currency": "CNY"
        }
      }
    }
  ]
}

该请求把税后应付金额修改为 980。系统先得到税后金额 880,再反算得到税前金额 900、预扣个税 20。保存结果保持 amountType=after、amount=980、afterTaxPayableAmount=980,费用金额更新为 1000。

仅修改减除税额

例如税后应付金额保持 8480,只把减除税额从 500 改为 800 时,继续使用 after:

{
  "employeeId": "USER001",
  "expenseList": [
    {
      "bizCode": "EXPCODE003",
      "labourTax": {
        "amountType": "after",
        "amount": {
          "amount": 8480,
          "currency": "CNY"
        },
        "taxDeduction": {
          "amount": 800,
          "currency": "CNY"
        }
      }
    }
  ]
}

税后应付金额保持 8480,系统按最新减除税额重新计算:税后金额为 7680,税前金额为 9142.86,预扣个税为 1462.86,费用金额为 9142.86 + 800 = 9942.86。保存结果保持 amountType=after、amount=8480。历史费用仅查询时不会自动重算,只有显式提交 labourTax 更新才应用新规则。

参数样例

{
   "employeeId": "USER001",
   "expenseList": [
      {
         "bizCode": "EXPCODE001",
         "consumeAmount": {
            "amount": 100,
            "currency": "CNY"
         },
         "corpExpense": true,
         "expenseTypeBizCode": "EXTYPE001",
         "corpType": "NO_RECEIPT",
         "nonReceiptAmount": {
            "amount": 100,
            "currency": "CNY"
         },
         "forecastReceiptDate": 1593310000000,
         "tradingPartnerBizCode": "BIZ001",
         "customObject": {
            "CF1393": "我是单行文本",
            "remarkText": "我是单行文本",
            "detail": [
               {
                  "CF1400": "我是单行文本",
                  "remarkText": "我是单行文本"
               }
            ]
         },
         "corpExpenseResponsibleEmpIds": [
            "no001",
            "no002"
         ]
      },
      {
         "bizCode": "EXPCODE002",
         "consumeAmount": {
            "amount": 150,
            "currency": "CNY"
         },
         "corpExpense": true,
         "expenseTypeBizCode": "LPP12123",
         "corpType": "ALL_RECEIPTS",
         "receiptDate": 1603310000000,
         "tradingPartnerBizCode": "015208mk2020-08-28",
         "customObject": {

         },
         "corpExpenseResponsibleEmpIds": [
            "no001",
            "no002"
         ]
      },
      {
         "bizCode": "EXPCODE003",
         "consumeAmount": {
            "amount": 100,
            "currency": "CNY"
         },
         "consumeTime": {
            "timeRange": {
               "startDate": 1566305347895,
               "endDate": 1566305356934
            }
         },
         "consumeLocation": {
            "cityPair": {
               "departure": "110001",
               "destination": "310100"
            },
            "location": null
         },
         "corpExpense": false,
         "expenseTypeBizCode": "X001",
         "trainSeat": "SECOND",
         "airClass": "FIRST",
         "shipClass": "FIRST",
         "allocationRuleBizCode": "A222",
         "noTaxSuiteTemp": {
            "taxRate": "1",
            "taxAmount": "10",
            "nonTaxAmount": "90"
         },
         "deductionTempList": [
            {
               "recordExpenseCode": "FD230202VWW9HEL",
               "deductionAmount": {
                  "amount": 100,
                  "currency": "CNY"
               }
            },
            {
               "recordExpenseCode": "FD2302131O6J7NYE",
               "deductionAmount": {
                  "amount": 50,
                  "currency": "CNY"
               }
            }
         ],
         "payBeforeTempList": [
            {
               "recordExpenseCode": "FD230202VWW9HEL",
               "deductionAmount": {
                  "amount": 100,
                  "currency": "CNY"
               }
            }
         ],
         "receiptAmount": {
            "amount": 100,
            "currency": "CNY"
         },
         "allocationList": [
            {
               "allocatedAmount": "100",
               "legalEntityBizCode": "E11",
               "coverUserNo": "E11",
               "coverDepartmentBizCode": "E11",
               "customObject": {
                  "CF73": "1",
                  "CF54": {
                     "name": "每刻科技",
                     "bizCode": "CODE00124342",
                     "principalCodes": "MK001",
                     "value": [
                        {
                           "name": "每刻科技",
                           "bizCode": "CODE00124342",
                           "principalCodes": "MK001"
                        }
                     ],
                     "definedList": [
                        {
                           "type": "SingleTextInput",
                           "label": "业务编码",
                           "display": false,
                           "primary": false,
                           "businessCode": "bizCode"
                        },
                        {
                           "type": "SingleTextInput",
                           "label": "供应商名称",
                           "display": true,
                           "primary": true,
                           "businessCode": "name"
                        },
                        {
                           "type": "SingleTextInput",
                           "label": "负责人",
                           "display": true,
                           "primary": false,
                           "businessCode": "principalCodes"
                        }
                     ]
                  }
               }
            }
         ]
      }
   ]
}

响应参数说明

全部成功时响应参数示例

{
    "code": "ACK",
    "message": "操作成功",
    "data": {
        "successData": [{
            "expenseCode": "EXPCODE001" ,
            "bizCode": "EXPCODE001",
            "integrity":true 
      }]
  }, 
    "success": true
}

存在失败时响应参数示例

{
    "code": "ACK",
    "message": "操作成功",
    "data": {
            "errorData": [{ 
             "key":"EXPCODE001",
            "errorCode": "10000",
            "errorMessage": "参数错误" 
      }],
        "successData": [{
            "expenseCode": "EXPCODE002",
            "bizCode": "EXPCODE002",
            "integrity":true
        }]
  }, 
    "success": false
}

修改记录

2025-12-30  新增费用更新接口
2026-05-29  新增保证金/押金预付款类型、收据介质、收据附件说明
2026-06-30  调整保证金/押金预付款类型传参说明:更新推荐传选项业务编码对象
2026-09-07  明确保证金/押金收据附件使用公网 URL,由每刻下载并转存
Copyright © 杭州每刻科技有限公司 www.maycur.com all right reserved,powered by Gitbook该文件修订时间: 2026-09-23 10:19:53

results matching ""

    No results matching ""

    results matching ""

      No results matching ""