报销单费用导入接口

说明

该接口用于进行费用导入,可以用于将其他来源的费用导入到每刻系统中.

注意事项

  1. 该接口为部分失败,在进行费用导入时,如果一次导入5条费用,其中一条失败,不会影响其他四条数据的正常导入。
  2. 每次导入最大值为10条费用,导入过多费用时,每刻会将多出的费用进行遗弃。
  3. 如需在费用上关联发票,可以在费用导入成功后,将返回的expenseCode添加到发票导入接口的入参内。
  4. 根据返回的integrity可以识别该费用是否必填项传入完整:
    • true:所有必填项均传入成功
    • false
      • 接口可导入的必填项未导入完整
      • 不支持接口导入,但表单设置必填(此情况需要设置单据导入为草稿或者去除费用上对应组件的必填设置)

接口地址

/api/openapi/receive/expense

请求类型

POST

请求参数

参数说明

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

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

expenseList费用列表

对公费用参数说明

字段名称 字段类型 是否必填 字段说明
consumeAmount AmountInput 付款金额 系统内对应:到票全部支付 '付款金额'
预付未到票 '付款金额'
到票核销 '付款金额'
到票部分支付或不支付 '付款金额'
支付前期已到的发票 '付款金额'
expenseTypeBizCode String 费用类型业务编码
corpExpense boolean 是否对公费用,需要填写true
corpType String 业务场景:
ALL_RECEIPTS(全部到票)
NO_RECEIPT(预付未到票)
RECEIPT_DEDUCTION(到票核销)
RECEIPT_PAY_SOME(到票部分支付或不支付)
PAY_BEFORE_RECEIPT(支付前期已到的发票)
corpExpenseResponsibleEmpIds List<String> 责任人/业务经办人(预付未到票/到票部分支付或不支付 两种场景必填)
nonReceiptAmount AmountInput 遵循表单配置 未到票金额(预付未到票场景必填)
receiptAmount AmountInput 本次到票金额(到票全部支付/到票部分支付或不支付/到票核销 三种场景必填)
forecastReceiptDate Long 遵循表单配置 预计到票时间(预付未到票场景必填)
consumeLocation CityInput 遵循表单配置 消费地点
receiptDate Long 遵循表单配置 到票时间(到票核销/到票部分支付或不支付 两种场景必填)
viceExpenseTypeBizCode String 遵循表单配置 辅助费用类型业务编码。仅在费用表单配置了辅助费用类型组件时生效;未传时按表单默认值配置处理
tradingPartnerBizCode String 遵循表单配置 往来单位业务编码
customObject CustomObject 遵循表单配置 自定义普通字段
allocationList List<ExpenseAllocation> 分摊列表(支付前期已到的发票 场景不支持分摊)
allocationRuleBizCode String 分摊规则业务编码,分摊列表不为空则必填;
amortizationList List<ExpenseAmortizationTemp> 摊销列表(摊销金额合计需等于费用金额)
deductionTempList List<ExpenseDeductionTemp> 到票核销预付的明细记录(到票核销费用必填)
payBeforeTempList List<ExpenseDeductionTemp> 支付前期已到的发票的明细记录(支付前期已到的发票费用必填)
noTaxSuiteTemp NoTaxInput 不含税组件(只有对公费用预付未到票场景支持)
receiptMedium String 收据介质。保证金/押金费用有效,可选值:PAPER(纸质)、ELECTRONIC(电子)
receiptAttachments List<Attachment> 收据附件。保证金/押金费用有效,单次最多 30 个,最终保存为费用附件并打 DEPOSIT_RECEIPT 标签
bizCode String 自定义费用编码(支持外部系统编码,系统内唯一,无法更新)
splitByAmount boolean 是否按费用金额拆分,传 true 触发拆分;缺省或 false 不拆分
subExpenseList List<对公费用参数> 子费用列表,结构等同上述对公费用参数说明;明细拆分不支持;子费用不允许嵌套

金额拆分:主费用金额作为拆分总金额,子费用金额从中扣减(由服务端按拆分处理);企业开启拆分金额合计校验开关(EXPENSE_SPLITTING_AMOUNT_LIMIT)时,校验子费用金额合计 ≤ 主费用金额,超限返回错误;对公费用同时校验到票金额(receiptAmount)与付款金额(consumeAmount)两个维度。对私费用拆分同此规则。 对公费用拆分仅支持以下业务场景:ALL_RECEIPTS(全部到票)、RECEIPT_DEDUCTION(到票核销)、RECEIPT_PAY_SOME(到票部分支付或不支付);其他对公业务场景(如 NO_RECEIPT 预付未到票、PAY_BEFORE_RECEIPT 支付前期已到的发票)不支持费用金额拆分。

到票核销记录参数说明 ExpenseDeductionTemp

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

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

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

对私费用参数说明

字段名称 字段类型 是否必填 字段说明
consumeAmount AmountInput 条件必填 费用金额。使用劳务费个税的费用金额模式或税后应付金额模式时可省略,由系统按劳务税结果生成
expenseTypeBizCode String 费用类型业务编码
corpExpense String 是否对公费用,需要填写false
consumeTime DateInput 消费时间
consumeLocation CityInput 遵循表单配置 消费地点
viceExpenseTypeBizCode String 遵循表单配置 辅助费用类型业务编码。仅在费用表单配置了辅助费用类型组件时生效;未传时按表单默认值配置处理
customObject CustomObject 遵循表单配置 自定义普通字段
trainSeat String 遵循表单配置 火车席位:
BUSINESS-商务座
SPECIAL-特等座
FIRST-一等座
SECOND-二等座
SOFT_SLEEPER-软卧
ADVANCED_SOFT_SLEEPER-高级软卧
HARD_SLEEPER-硬卧
SOFT-软座
HARD-硬座
STANDING-无座
airClass String 飞机舱位: FIRST-头等舱
BUSINESS-商务舱
ECONOMY-经济舱
shipClass String 轮船舱位: VIP-贵宾舱
SPECIAL-特等舱
FIRST-一等舱
SECOND_A-二等A
SECOND_B-二等B
THIRD_A-三等A
THIRD_B-三等B
ECONOMY-经济舱
allocationList List<ExpenseAllocation> 分摊列表
allocationRuleBizCode String 分摊规则业务编码,分摊列表不为空则必填;
amortizationList List<ExpenseAmortizationTemp> 摊销列表(摊销金额合计需等于费用金额)
labourTax object 劳务费个税
splitByAmount boolean 是否按费用金额拆分,传 true 触发拆分;缺省或 false 不拆分
subExpenseList List<对私费用参数> 子费用列表,结构等同上述对私费用参数说明;明细拆分不支持;子费用不允许嵌套

摊销参数说明 ExpenseAmortizationTemp

字段名称 字段类型 是否必填 字段说明
amount number 摊销金额
amortizedDateStr String 摊销日期,格式:yyyy-MM

分摊参数说明 ExpenseAllocation

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

劳务费个税参数说明 labourTax

参数说明

OpenAPI 导入的劳务费默认计算预扣个税。合法入参组合如下:

表单能力 计算起点 必填字段 计算规则
未开启“按照费用金额扣除减除税额后的金额计算个税” 费用金额或税后应付金额 amountTypeamount pre 表示费用金额,after 表示税后应付金额;未启用时减除税额按 0
已开启上述能力 费用金额 amountType=preamount 保持费用金额,税前金额 = 费用金额 - 减除税额,再正算预扣个税和税后金额
已开启上述能力 税后应付金额 amountType=afteramount 税后金额 = 税后应付金额 - 减除税额,再反算税前金额和预扣个税,费用金额按税前金额加减除税额生成
已开启上述能力 费用金额(历史兼容模式) amountIncludeTaxDeduction 兼容字段存在时优先;计算结果与 amountType=pre 相同

同时传 amountIncludeTaxDeductionamountType/amount 时,为兼容旧调用方,系统优先采用历史费用金额模式。afterTaxPayableAmount 不等于费用金额;费用金额读取费用对象的 consumeAmount

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

税后应付金额反算示例

以下费用表单已开启减除税额能力。税后应付金额为 980 CNY,减除税额为 100 CNY

{
  "employeeId": "USER001",
  "expenseList": [
    {
      "corpExpense": false,
      "expenseTypeBizCode": "LABOUR001",
      "consumeTime": 1784736000000,
      "labourTax": {
        "amountType": "after",
        "amount": {
          "amount": 980,
          "currency": "CNY"
        },
        "taxDeduction": {
          "amount": 100,
          "currency": "CNY"
        }
      }
    }
  ]
}

系统先得到税后金额 980 - 100 = 880,再反算出税前金额 900、预扣个税 20。导入结果保留 amountType=afteramount=980,并返回 afterTaxPayableAmount=980;费用金额 consumeAmountpreTaxAmount + taxDeduction 生成,为 1000

本节“导入”仅指 OpenAPI 费用导入接口,不包含 Excel 导入、初始数据导入或 batch-import-service。既有合法入参继续兼容,本次变更不是 Breaking Change。

参数样例

consumeTime 可传单日期 currentTime 或日期区间 timeRange;实际请求按费用表单组件类型选择其一。日期区间中的 startDateendDate 分别表示开始时间和结束时间。

{
  "employeeId": "USER001",
  "expenseList": [
    {
      "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"
      ]
    },
    {
      "consumeAmount": {
        "amount": 150,
        "currency": "CNY"
      },
      "corpExpense": true,
      "expenseTypeBizCode": "LPP12123",
      "corpType": "ALL_RECEIPTS",
      "receiptDate": 1603310000000,
      "tradingPartnerBizCode": "015208mk2020-08-28",
      "customObject": {},
      "corpExpenseResponsibleEmpIds": [
        "no001",
        "no002"
      ]
    },
    {
      "consumeAmount": {
        "amount": 100,
        "currency": "CNY"
      },
      "consumeTime": {
        "currentTime": 1594197456845
      },
      "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"
                }
              ]
            }
          }
        }
      ],
      "amortizationList": [
        {
          "amount": 30,
          "amortizedDateStr": "2021-01"
        },
        {
          "amount": 30,
          "amortizedDateStr": "2021-02"
        },
        {
          "amount": 40,
          "amortizedDateStr": "2021-03"
        }
      ]
    },
    {
      "consumeAmount": {
        "amount": 1000,
        "currency": "CNY"
      },
      "corpExpense": true,
      "expenseTypeBizCode": "EXTYPE002",
      "corpType": "ALL_RECEIPTS",
      "receiptAmount": {
        "amount": 1000,
        "currency": "CNY"
      },
      "splitByAmount": true,
      "subExpenseList": [
        {
          "consumeAmount": {
            "amount": 600,
            "currency": "CNY"
          },
          "corpExpense": true,
          "expenseTypeBizCode": "EXTYPE002",
          "corpType": "ALL_RECEIPTS",
          "receiptAmount": {
            "amount": 600,
            "currency": "CNY"
          }
        },
        {
          "consumeAmount": {
            "amount": 400,
            "currency": "CNY"
          },
          "corpExpense": true,
          "expenseTypeBizCode": "EXTYPE002",
          "corpType": "ALL_RECEIPTS",
          "receiptAmount": {
            "amount": 400,
            "currency": "CNY"
          }
        }
      ]
    },
    {
      "consumeAmount": {
        "amount": 500,
        "currency": "CNY"
      },
      "corpExpense": false,
      "expenseTypeBizCode": "X002",
      "consumeTime": {
        "currentTime": 1594197456845
      },
      "splitByAmount": true,
      "subExpenseList": [
        {
          "consumeAmount": {
            "amount": 300,
            "currency": "CNY"
          },
          "corpExpense": false,
          "expenseTypeBizCode": "X002",
          "consumeTime": {
            "currentTime": 1594197456845
          }
        },
        {
          "consumeAmount": {
            "amount": 200,
            "currency": "CNY"
          },
          "corpExpense": false,
          "expenseTypeBizCode": "X002",
          "consumeTime": {
            "currentTime": 1594197456845
          }
        }
      ]
    }
  ]
}

响应参数说明

全部成功时响应参数示例

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

存在失败时响应参数示例

费用行异常信息返回在 data.errorData.errorMessageidx 对应请求参数 expenseList 中从 0 开始的下标。

{
  "code": "ACK",
  "message": "操作成功",
  "data": {
    "errorData": [  
      {
        "idx": 0,
        "key": null,
        "errorCode": "10000",
        "errorMessage": "费用类型不存在"
      }
    ],
    "successData": [
      {
        "idx": 1,
        "expenseCode": "EXPCODE001"
      }
    ]
  },
  "success": false
}

employeeId 工号错误时,异常信息返回在顶层 message

{
  "code": "NACK",
  "message": "员工编号错误",
  "data": null,
  "requestId": "085d530d3a2949b4",
  "errorCode": null,
  "success": false
}

金额拆分校验失败响应示例

  "code": "ACK",
  "message": "操作成功",
  "data": {
    "errorData": [
      {
        "idx": 3,
        "key": "message.expense.split.amount.total.exceed",
        "errorCode": "10000",
        "errorMessage": "拆分金额合计不得超过拆分总金额"
      }
    ],
    "successData": [
      {
        "idx": 0,
        "expenseCode": "EXPCODE001",
        "integrity": true
      }
    ]
  },
  "success": false
}

修改记录

2023-05-23  新增费用导入接口
2023-07-10  新增费用导入不含税金额接口
2025-05-31  新增摊销列表字段(amortizationList)
2026-06-29  新增辅助费用类型业务编码viceExpenseTypeBizCode
2026-07-06  新增费用金额拆分功能(splitByAmount/subExpenseList)
Copyright © 杭州每刻科技有限公司 www.maycur.com all right reserved,powered by Gitbook该文件修订时间: 2026-08-14 09:56:43

results matching ""

    No results matching ""

    results matching ""

      No results matching ""