关联申请单预提费用导入接口
说明
在目标预提申请单已经通过申请单导入接口关联来源普通申请单后,按来源费用编码逐条生成目标预提费用。建议先调用可预提费用明细查询接口取得来源编码及参考金额。
首次导入目标单并准备随后导入费用时,应在申请单导入请求中设置 stagingFlag=true,使目标单处于草稿状态。目标单必须配置“关联申请单预提”组件。
接口限制与处理规则
- 一次最多导入 10 条预提费用。每行单独保存;某行失败不会回滚同批其他已成功行。
- 本次预提金额必须 大于 0,但允许超过查询接口返回的
availableAmount。
currency 必须与来源费用的消费币种一致;费用编码必须属于对应的来源普通申请单,且该来源单已经关联目标预提单。
- 接口只生成目标费用的最小字段并记录来源费用编码,不复制发票、参与人或分摊行。
integrity=false 表示目标费用表单仍有必填项待补齐。
customCode 仅用于请求与结果行对应,不作为生成费用的编码保存。重试前请先核对成功行返回的目标费用编码。
接口地址
/api/openapi/receive/application/expense/accrual/import
请求类型
POST
请求参数
| 字段名称 |
字段类型 |
是否必填 |
字段说明 |
| accrualFormCode |
String |
是 |
目标预提申请单号,非内码;目标须有效、启用、处于草稿/驳回/退回状态,并配置“关联申请单预提”组件 |
| employeeId |
String |
是 |
有效的员工工号,用于确定费用保存人 |
| sourceFormCodes |
List<String> |
是 |
本批次来源普通申请单号列表;非空、元素非空 |
| expenses |
List<Expense> |
是 |
待导入费用明细,非空且最多 10 条 |
Expense 明细参数
| 字段名称 |
字段类型 |
是否必填 |
字段说明 |
| customCode |
String |
否 |
调用方自定义行标识,仅在结果中回传 |
| sourceFormCode |
String |
是 |
来源普通申请单号,须包含在 sourceFormCodes 中且已关联目标单 |
| sourceApplicationExpenseCode |
String |
是 |
来源申请费用编码,须属于 sourceFormCode 指定申请单 |
| currentAccrualAmount |
Number |
是 |
本次预提金额,须大于 0;不受可预提金额上限限制 |
| currency |
String |
是 |
来源费用的消费币种,如 CNY |
请求样例
{
"accrualFormCode": "MK26020001",
"employeeId": "200070",
"sourceFormCodes": ["MK26010001"],
"expenses": [
{
"customCode": "LINE001",
"sourceFormCode": "MK26010001",
"sourceApplicationExpenseCode": "AE26010001",
"currentAccrualAmount": 120,
"currency": "CNY"
}
]
}
响应参数
| 字段名称 |
字段类型 |
字段说明 |
| code |
String |
全部成功为 ACK;任一明细失败为 NACK,但成功明细不回滚 |
| message |
String |
本地化提示信息;部分失败时为“操作失败” |
| data.expenses |
List<ExpenseResult> |
与请求 expenses 逐条对应的处理结果 |
| success |
boolean |
顶层是否全部成功;逐条结果以 data.expenses[].success 为准 |
ExpenseResult 明细结果
| 字段名称 |
字段类型 |
字段说明 |
| customCode |
String |
回传请求行标识 |
| sourceFormCode |
String |
来源申请单号 |
| sourceApplicationExpenseCode |
String |
来源费用编码 |
| accrualApplicationExpenseCode |
String |
成功生成的目标预提费用编码;失败行无此值 |
| integrity |
boolean |
目标费用表单必填项是否完整 |
| consumeAmount |
Number |
目标费用消费金额;失败行回传请求金额 |
| currency |
String |
消费币种 |
| success |
boolean |
该行是否成功 |
| errorMessage |
String |
该行失败原因;成功行通常为空 |
响应样例:部分失败
{
"code": "NACK",
"message": "操作失败",
"data": {
"expenses": [
{
"customCode": "LINE001",
"sourceFormCode": "MK26010001",
"sourceApplicationExpenseCode": "AE26010001",
"accrualApplicationExpenseCode": "AE26020001",
"integrity": false,
"consumeAmount": 120,
"currency": "CNY",
"success": true
},
{
"customCode": "LINE002",
"sourceFormCode": "MK26010001",
"sourceApplicationExpenseCode": "WRONG_EXPENSE",
"consumeAmount": 50,
"currency": "CNY",
"success": false,
"errorMessage": "费用明细与来源申请单不匹配,请核对费用明细编码和来源申请单号"
}
]
},
"success": false
}
异常场景
| 场景 |
处理方式 |
| 批次参数缺失、员工工号无效、目标单不存在或不可编辑 |
整批拒绝;不进入逐行保存 |
| 一次超过 10 条 |
整批拒绝,提示“每次最多导入10条预提申请明细” |
| 单行金额不大于 0、来源未关联、费用归属或币种不符、费用类型未配置预提表单 |
在该行 errorMessage 中返回原因;其他行继续处理 |
修改记录
2026-10-25 DB-61831 新增关联申请单预提费用导入接口文档