✨ 客商档案同步金蝶完善:伙伴类型按客商性质字典解析、推送银行/联系人分录、BFI配置抽取BfiProperties
This commit is contained in:
@@ -70,7 +70,7 @@ public class CustomFeignLogger extends Logger {
|
||||
bodyStr = new String(body, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
log.info("===> [{}] {} {} | Headers: {} | Body: {}", configKey, method, url, headers, bodyStr);
|
||||
log.info("===> [{}] {} {} | Headers: {} | Body: {}", configKey, method, url, headers, flattenBody(bodyStr));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -94,11 +94,21 @@ public class CustomFeignLogger extends Logger {
|
||||
bodyStr = new String(bodyData, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
log.info("<==== [{}] {} | Status: {} | Duration: {}ms | Body: {}", configKey, url, status, millis, bodyStr);
|
||||
log.info("<==== [{}] {} | Status: {} | Duration: {}ms | Body: {}", configKey, url, status, millis, flattenBody(bodyStr));
|
||||
|
||||
return response.toBuilder().body(bodyData).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将报文内容压缩为单行显示(换行、回车、制表符等空白序列替换为单个空格)
|
||||
*/
|
||||
private String flattenBody(String bodyStr) {
|
||||
if (bodyStr == null) {
|
||||
return null;
|
||||
}
|
||||
return bodyStr.replaceAll("\\s+", " ").trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Content-Type
|
||||
*/
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* BladeX Commercial License Agreement
|
||||
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
|
||||
* <p>
|
||||
* Use of this software is governed by the Commercial License Agreement
|
||||
* obtained after purchasing a license from BladeX.
|
||||
* <p>
|
||||
* 1. This software is for development use only under a valid license
|
||||
* from BladeX.
|
||||
* <p>
|
||||
* 2. Redistribution of this software's source code to any third party
|
||||
* without a commercial license is strictly prohibited.
|
||||
* <p>
|
||||
* 3. Licensees may copyright their own code but cannot use segments
|
||||
* from this software for such purposes. Copyright of this software
|
||||
* remains with BladeX.
|
||||
* <p>
|
||||
* Using this software signifies agreement to this License, and the software
|
||||
* must not be used for illegal purposes.
|
||||
* <p>
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
|
||||
* not liable for any claims arising from secondary or illegal development.
|
||||
* <p>
|
||||
* Author: Chill Zhuang (bladejava@qq.com)
|
||||
*/
|
||||
package org.springblade.transport.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springblade.thirdparty.bfi.constant.BfiConstant;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 业财融合(BFI)推送金蝶配置属性,统一收口 Nacos 配置 thirdParty.bfi.*:
|
||||
* <p>
|
||||
* srcSys 为客商、付款申请等各业务推送金蝶的公共参数(外部系统编号);
|
||||
* customer、payApply 为各业务专属参数;未配置时使用字段默认值。
|
||||
* <p>
|
||||
* prefix 须为全小写(thirdparty.bfi),Spring 宽松绑定可匹配 Nacos 中的 camelCase 键(thirdParty.payApply.srcSys 等)。
|
||||
*
|
||||
* @author Chill
|
||||
*/
|
||||
@Data
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "thirdparty.bfi")
|
||||
public class BfiProperties {
|
||||
|
||||
/**
|
||||
* 数据来源系统编码(公共):客商、付款申请等推送金蝶时统一使用,默认 WLTMS(运输TMS)
|
||||
*/
|
||||
private String srcSys = BfiConstant.DATA_SOURCE_WLTMS;
|
||||
|
||||
/**
|
||||
* 付款申请推送配置(A103-3 付款申请保存)
|
||||
*/
|
||||
private PayApply payApply = new PayApply();
|
||||
|
||||
/**
|
||||
* 付款申请推送配置项
|
||||
*/
|
||||
@Data
|
||||
public static class PayApply {
|
||||
|
||||
/**
|
||||
* 单据类型编码:ap_payapply_BT_S 付款申请单、ap_payapply_oth_BT_S 其他付款单,默认其他付款单
|
||||
*/
|
||||
private String billtype = "ap_payapply_oth_BT_S";
|
||||
|
||||
/**
|
||||
* 汇率表编码,默认 01
|
||||
*/
|
||||
private String exratetable = "01";
|
||||
|
||||
/**
|
||||
* 外部单据类型,默认 0KzXs
|
||||
*/
|
||||
private String srcType = "0KzXs";
|
||||
}
|
||||
|
||||
}
|
||||
+12
-18
@@ -25,8 +25,6 @@
|
||||
*/
|
||||
package org.springblade.transport.constant;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 客商档案金蝶(星瀚)协同常量
|
||||
*
|
||||
@@ -40,29 +38,25 @@ public class CustomerBfiConstants {
|
||||
public static final String BIZ_FUNCTION_ALL = "1,2,3,4";
|
||||
|
||||
/**
|
||||
* 推送金蝶固定值:伙伴类型兜底编码(民营企业),客商性质未命中映射时使用
|
||||
* 客商类型:内部组织(customer_kind 字段值)
|
||||
*/
|
||||
public static final String DEFAULT_PARTNER_TYPE = "6";
|
||||
public static final String CUSTOMER_KIND_INTERNAL = "internal";
|
||||
|
||||
/**
|
||||
* 客商类型:外部客商(customer_kind 字段值)
|
||||
*/
|
||||
public static final String CUSTOMER_KIND_EXTERNAL = "external";
|
||||
|
||||
/**
|
||||
* 金蝶伙伴类型编码有效范围上界(BfiCustomerSaveDTO.type 全集 1~17)
|
||||
*/
|
||||
public static final int PARTNER_TYPE_MAX = 17;
|
||||
|
||||
/**
|
||||
* 营业期限类型:长期(TMS 表单文本)
|
||||
*/
|
||||
public static final String BUSINESS_TERM_LONG = "长期";
|
||||
|
||||
/**
|
||||
* 客商性质(nature_of_client 字典 dictKey)→ 金蝶伙伴类型编码
|
||||
* 键名以数据库字典 nature_of_client 实际 dictKey 为准核对;未命中走 DEFAULT_PARTNER_TYPE
|
||||
*/
|
||||
public static final Map<String, String> NATURE_TYPE_MAPPING = Map.of(
|
||||
"企业法人", "1",
|
||||
"个人", "4",
|
||||
"个体工商户", "5",
|
||||
"民营企业", "6",
|
||||
"国有企业", "8",
|
||||
"政府事业单位", "9",
|
||||
"其他", "12"
|
||||
);
|
||||
|
||||
private CustomerBfiConstants() {
|
||||
}
|
||||
|
||||
|
||||
+10
@@ -193,6 +193,16 @@ public class CustomerArchiveController extends BladeController {
|
||||
return R.data(customerArchiveService.syncKingdee(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 金蝶客商数据定时同步测试入口:手动触发 syncKingdeeCustomerData 定时任务逻辑,便于联调验证
|
||||
*/
|
||||
@PostMapping("/sync-kingdee-data-test")
|
||||
@ApiOperationSupport(order = 13)
|
||||
@Operation(summary = "金蝶客商数据同步测试", description = "手动触发定时任务逻辑:自动推送待推送客商(approved 且 none/failed),并联动已同步客商的金蝶使用状态")
|
||||
public R<String> syncKingdeeCustomerDataTest() {
|
||||
return R.data(customerArchiveService.syncKingdeeCustomerData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 评分明细模板
|
||||
*/
|
||||
|
||||
+51
@@ -116,18 +116,69 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveMapper, CustomerArchive> implements ICustomerArchiveService {
|
||||
|
||||
/**
|
||||
* 状态:启用
|
||||
*/
|
||||
private static final int STATUS_ENABLED = 1;
|
||||
|
||||
/**
|
||||
* 状态:停用
|
||||
*/
|
||||
private static final int STATUS_DISABLED = 2;
|
||||
|
||||
/**
|
||||
* 准入类型:临时
|
||||
*/
|
||||
private static final String ACCESS_TEMPORARY = "temporary";
|
||||
|
||||
/**
|
||||
* 准入类型:正式
|
||||
*/
|
||||
private static final String ACCESS_FORMAL = "formal";
|
||||
|
||||
/**
|
||||
* 审批状态:草稿
|
||||
*/
|
||||
private static final String APPROVAL_DRAFT = "draft";
|
||||
|
||||
/**
|
||||
* 审批状态:审核中
|
||||
*/
|
||||
private static final String APPROVAL_REVIEWING = "reviewing";
|
||||
|
||||
/**
|
||||
* 审批状态:审批通过
|
||||
*/
|
||||
private static final String APPROVAL_APPROVED = "approved";
|
||||
|
||||
/**
|
||||
* 审批状态:审批驳回
|
||||
*/
|
||||
private static final String APPROVAL_REJECTED = "rejected";
|
||||
|
||||
/**
|
||||
* 金蝶协同状态:未推送(新增客商默认值,审批通过后参与推送)
|
||||
*/
|
||||
private static final String KINGDEE_STATUS_NONE = "none";
|
||||
|
||||
/**
|
||||
* 金蝶协同状态:金蝶已有档案(A902-1 查到已审核,审批通过后跳过推送,终态)
|
||||
*/
|
||||
private static final String KINGDEE_STATUS_EXIST = "exist";
|
||||
|
||||
/**
|
||||
* 金蝶协同状态:已推送成功(终态,重推时幂等跳过)
|
||||
*/
|
||||
private static final String KINGDEE_STATUS_SYNCED = "synced";
|
||||
|
||||
/**
|
||||
* 金蝶协同状态:推送失败 / 金蝶审核中(可列表「同步金蝶」人工重推)
|
||||
*/
|
||||
private static final String KINGDEE_STATUS_FAILED = "failed";
|
||||
|
||||
/**
|
||||
* 客商编号前缀
|
||||
*/
|
||||
private static final String CUSTOMER_CODE_PREFIX = "KS";
|
||||
/**
|
||||
* A902-1 批量查询分批大小
|
||||
|
||||
+137
-28
@@ -26,16 +26,18 @@
|
||||
package org.springblade.transport.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springblade.core.log.exception.ServiceException;
|
||||
import org.springblade.core.tool.utils.Func;
|
||||
import org.springblade.core.tool.utils.StringUtil;
|
||||
import org.springblade.system.cache.DictBizCache;
|
||||
import org.springblade.system.pojo.entity.DictBiz;
|
||||
import org.springblade.thirdparty.bfi.constant.BfiConstant;
|
||||
import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerBankEntryDTO;
|
||||
import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerGroupEntryDTO;
|
||||
import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerLinkmanEntryDTO;
|
||||
import org.springblade.thirdparty.bfi.pojo.dto.BfiCustomerSaveDTO;
|
||||
import org.springblade.transport.config.BfiProperties;
|
||||
import org.springblade.transport.constant.CustomerBfiConstants;
|
||||
import org.springblade.transport.pojo.vo.CustomerArchiveVO;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDate;
|
||||
@@ -52,17 +54,7 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class CustomerBfiConverter {
|
||||
|
||||
/**
|
||||
* 数据来源系统编码,默认 WLTMS(运输TMS)
|
||||
*/
|
||||
@Value("${thirdParty.bfi.customer.srcSys:WLTMS}")
|
||||
private String srcSys;
|
||||
|
||||
/**
|
||||
* 创建组织.编码,默认 WLTMS,需与财务确认
|
||||
*/
|
||||
@Value("${thirdParty.bfi.customer.createOrg:WLTMS}")
|
||||
private String createOrg;
|
||||
private final BfiProperties bfiProperties;
|
||||
|
||||
/**
|
||||
* 组装 A902-2 客户保存参数
|
||||
@@ -72,44 +64,161 @@ public class CustomerBfiConverter {
|
||||
*/
|
||||
public BfiCustomerSaveDTO buildSaveDTO(CustomerArchiveVO customer) {
|
||||
BfiCustomerSaveDTO param = new BfiCustomerSaveDTO();
|
||||
// 金蝶客户编码与 TMS 客商编号保持一致
|
||||
// 编码:不传由星瀚生成;金蝶客户编码与 TMS 客商编号保持一致
|
||||
param.setNumber(customer.getCustomerCode());
|
||||
param.setStatus(BfiConstant.BILL_STATUS_SUBMITTED);
|
||||
// 数据状态:固定传 B 已提交,金蝶校验工商信息通过后由机器人自动审核
|
||||
// param.setStatus(BfiConstant.BILL_STATUS_SUBMITTED);
|
||||
// 【必填】名称:客商名称
|
||||
param.setName(customer.getFullName());
|
||||
// 【必填】统一社会信用代码(候选键):个人为身份证号或手机号
|
||||
param.setSocietycreditcode(customer.getUnifiedCreditCode());
|
||||
// 纳税人识别号:与统一社会信用代码一致时推送
|
||||
param.setTxRegisterNo(customer.getUnifiedCreditCode());
|
||||
// 法人代表:企业法人
|
||||
param.setArtificialperson(customer.getLegalPerson());
|
||||
param.setType(resolvePartnerType(customer.getCustomerNature()));
|
||||
// 【必填】伙伴类型:客商性质字典 dictKey 即伙伴类型编码,直接推送,无效编码抛异常
|
||||
param.setType(this.resolvePartnerType(customer.getCustomerNature()));
|
||||
// 详细地址:注册地址(省市区 + 详细地址拼接文本)
|
||||
param.setBizpartnerAddress(customer.getRegisteredAddress());
|
||||
param.setBusinessscope(buildBusinessScopeText(customer.getBusinessScope()));
|
||||
param.setBusinessterm(buildBusinessTerm(customer.getBusinessTermType(), customer.getBusinessEndDate()));
|
||||
// 经营范围:多选编码 → 字典文本「、」拼接
|
||||
param.setBusinessscope(this.buildBusinessScopeText(customer.getBusinessScope()));
|
||||
// 营业期限:长期传「长期」,固定期限传「至 yyyy-MM-dd」(TMS 未采集起始日)
|
||||
param.setBusinessterm(this.buildBusinessTerm(customer.getBusinessTermType(), customer.getBusinessEndDate()));
|
||||
// 联系电话:客商联系电话
|
||||
param.setBizpartnerPhone(customer.getContactPhone());
|
||||
// 备注:客商备注,空时不传
|
||||
param.setFcusbeizhu(customer.getRemark());
|
||||
// 业务职能:固定全选(1销售,2结算,3付款,4收货)
|
||||
param.setBizfunction(CustomerBfiConstants.BIZ_FUNCTION_ALL);
|
||||
param.setAwrpDatasourcesys(srcSys);
|
||||
// 数据来源系统:thirdParty.bfi.srcSys(公共参数),默认 WLTMS(运输TMS)
|
||||
param.setAwrpDatasourcesys(bfiProperties.getSrcSys());
|
||||
// 【必填】是否为贸易客商:固定传 A 是
|
||||
param.setAwrpCusfortrade(BfiConstant.CUS_FOR_TRADE_YES);
|
||||
param.setCreateorgNumber(createOrg);
|
||||
// 【必填】分类标准分录:外部客商 1102、内部组织 1101
|
||||
BfiCustomerGroupEntryDTO groupEntry = new BfiCustomerGroupEntryDTO();
|
||||
groupEntry.setStandardidNumber(BfiConstant.GROUP_STANDARD_BASIC);
|
||||
groupEntry.setGroupidNumber(BfiConstant.CUSTOMER_GROUP_EXTERNAL);
|
||||
groupEntry.setGroupidNumber(this.resolveGroupId(customer.getCustomerKind()));
|
||||
param.setEntryGroupstandard(List.of(groupEntry));
|
||||
// 银行信息分录:收款账户明细(账户名称传开户行,币种默认 RMB)
|
||||
param.setEntryBank(this.buildBankEntries(customer));
|
||||
// 联系人信息分录:页面填写的客商负责人与联系电话
|
||||
param.setEntryLinkman(this.buildLinkmanEntries(customer));
|
||||
return param;
|
||||
}
|
||||
|
||||
/**
|
||||
* 客商性质(字典 dictKey)→ 金蝶伙伴类型编码,未命中走兜底值
|
||||
* 解析分类标准分录客户分组编码:内部组织 1101,其余(外部客商)1102
|
||||
*
|
||||
* @param customerNature 客商性质字典值
|
||||
* @param customerKind 客商类型(internal 内部组织 / external 外部客商)
|
||||
* @return 客户分组编码
|
||||
*/
|
||||
private String resolveGroupId(String customerKind) {
|
||||
if (CustomerBfiConstants.CUSTOMER_KIND_INTERNAL.equals(customerKind)) {
|
||||
return BfiConstant.CUSTOMER_GROUP_INTERNAL;
|
||||
}
|
||||
return BfiConstant.CUSTOMER_GROUP_EXTERNAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装 A902-2 银行信息分录:每条收款账户一行分录,账户名称传开户行、币种默认 RMB,收款账户未填写时返回空分录
|
||||
*
|
||||
* @param customer 客商档案
|
||||
* @return 银行信息分录
|
||||
*/
|
||||
private List<BfiCustomerBankEntryDTO> buildBankEntries(CustomerArchiveVO customer) {
|
||||
if (Func.isEmpty(customer.getReceiptAccounts())) {
|
||||
return List.of();
|
||||
}
|
||||
return customer.getReceiptAccounts().stream()
|
||||
.filter(account -> Func.isNotBlank(account.getBankAccount()) || Func.isNotBlank(account.getBankName()))
|
||||
.map(account -> {
|
||||
BfiCustomerBankEntryDTO entry = new BfiCustomerBankEntryDTO();
|
||||
// 银行账号
|
||||
entry.setBankaccount(account.getBankAccount());
|
||||
// 账户名称:传开户行
|
||||
entry.setAccountname(account.getBankName());
|
||||
// 开户银行.编码(行号) todo
|
||||
entry.setBankNumber("001110012009");
|
||||
// 币种:人民币(CNY)
|
||||
entry.setCurrencyNumber(BfiConstant.CURRENCY_CNY);
|
||||
// 是否默认银行
|
||||
entry.setIsdefaultBank(true);
|
||||
return entry;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装 A902-2 联系人信息分录:页面填写的客商负责人与联系电话,未填负责人时返回空分录
|
||||
*
|
||||
* @param customer 客商档案
|
||||
* @return 联系人信息分录
|
||||
*/
|
||||
private List<BfiCustomerLinkmanEntryDTO> buildLinkmanEntries(CustomerArchiveVO customer) {
|
||||
if (Func.isBlank(customer.getPrincipal())) {
|
||||
return List.of();
|
||||
}
|
||||
BfiCustomerLinkmanEntryDTO entry = new BfiCustomerLinkmanEntryDTO();
|
||||
// 联系人:客商负责人
|
||||
entry.setContactperson(customer.getPrincipal());
|
||||
// 电话:联系电话
|
||||
entry.setPhone(customer.getContactPhone());
|
||||
// 默认联系人
|
||||
entry.setIsdefaultLinkman(Boolean.TRUE);
|
||||
return List.of(entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* 金蝶伙伴类型编码:客商性质(nature_of_client 字典)——
|
||||
* 值为 dictKey(即伙伴类型编码,1~17)时直接使用;
|
||||
* 值为 dictValue 文本(前端字典下拉存文本,含存量数据,如「我区国企/国企控股」)时按字典反查对应 dictKey;
|
||||
* 均无法解析时抛出异常,阻断推送
|
||||
*
|
||||
* @param customerNature 客商性质(dictKey 编码或 dictValue 文本)
|
||||
* @return 金蝶伙伴类型编码
|
||||
*/
|
||||
public String resolvePartnerType(String customerNature) {
|
||||
if (Func.isNotEmpty(customerNature)) {
|
||||
String partnerType = CustomerBfiConstants.NATURE_TYPE_MAPPING.get(customerNature.trim());
|
||||
if (StringUtil.isNotBlank(partnerType)) {
|
||||
return partnerType;
|
||||
String nature = Func.isEmpty(customerNature) ? "" : customerNature.trim();
|
||||
if (nature.matches("\\d{1,2}")) {
|
||||
int partnerType = Integer.parseInt(nature);
|
||||
if (partnerType >= 1 && partnerType <= CustomerBfiConstants.PARTNER_TYPE_MAX) {
|
||||
return nature;
|
||||
}
|
||||
}
|
||||
return CustomerBfiConstants.DEFAULT_PARTNER_TYPE;
|
||||
String partnerType = this.resolvePartnerTypeFromDictValue(nature);
|
||||
if (Func.isBlank(partnerType)) {
|
||||
throw new ServiceException("客商性质未配置有效的金蝶伙伴类型编码(nature_of_client 字典 dictKey):" + customerNature);
|
||||
}
|
||||
return partnerType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按客商性质文本(dictValue)反查 nature_of_client 字典,返回对应 dictKey(即伙伴类型编码)
|
||||
*
|
||||
* @param natureValue 客商性质文本
|
||||
* @return 金蝶伙伴类型编码,未命中返回 null
|
||||
*/
|
||||
private String resolvePartnerTypeFromDictValue(String natureValue) {
|
||||
if (Func.isEmpty(natureValue)) {
|
||||
return null;
|
||||
}
|
||||
List<DictBiz> dictList = DictBizCache.getList("nature_of_client");
|
||||
if (dictList == null) {
|
||||
return null;
|
||||
}
|
||||
return dictList.stream()
|
||||
.filter(dict -> natureValue.equals(dict.getDictValue()))
|
||||
.map(DictBiz::getDictKey)
|
||||
.map(key -> Func.isEmpty(key) ? "" : key.trim())
|
||||
.filter(key -> {
|
||||
if (!key.matches("\\d{1,2}")) {
|
||||
return false;
|
||||
}
|
||||
int partnerType = Integer.parseInt(key);
|
||||
return partnerType >= 1 && partnerType <= CustomerBfiConstants.PARTNER_TYPE_MAX;
|
||||
})
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+10
-17
@@ -82,6 +82,7 @@ import org.springblade.transport.pojo.entity.PaymentApplicationRecord;
|
||||
import org.springblade.transport.pojo.entity.PaymentApplicationSettlement;
|
||||
import org.springblade.transport.pojo.entity.PreSettlement;
|
||||
import org.springblade.transport.pojo.entity.PreSettlementAdvance;
|
||||
import org.springblade.transport.config.BfiProperties;
|
||||
import org.springblade.transport.pojo.entity.ProjectApply;
|
||||
import org.springblade.transport.pojo.entity.TemporaryCreditLimit;
|
||||
import org.springblade.transport.pojo.vo.PaymentApplicationReferenceAmountVO;
|
||||
@@ -91,7 +92,6 @@ import org.springblade.transport.service.IPaymentApplicationService;
|
||||
import org.springblade.transport.service.KingdeeSyncContext;
|
||||
import org.springblade.transport.support.KingdeeApBillSyncSupport;
|
||||
import org.springblade.transport.wrapper.PaymentApplicationWrapper;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -144,14 +144,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
private final IFormalSettlementService formalSettlementService;
|
||||
private final IBfiService bfiService;
|
||||
private final KingdeeApBillSyncSupport kingdeeApBillSyncSupport;
|
||||
@Value("${thirdParty.bfi.payApply.srcSys:WLTMS}")
|
||||
private String bfiPayApplySrcSys;
|
||||
@Value("${thirdParty.bfi.payApply.billtype:ap_payapply_oth_BT_S}")
|
||||
private String bfiPayApplyBilltype;
|
||||
@Value("${thirdParty.bfi.payApply.exratetable:01}")
|
||||
private String bfiPayApplyExratetable;
|
||||
@Value("${thirdParty.bfi.payApply.srcType:0KzXs}")
|
||||
private String bfiPayApplySrcType;
|
||||
private final BfiProperties bfiProperties;
|
||||
|
||||
@Override
|
||||
public IPage<PaymentApplicationVO> selectPage(IPage<PaymentApplication> page, PaymentApplicationVO query) {
|
||||
@@ -678,7 +671,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
private List<BfiPayApplyVO> queryPayApplyPages(List<String> awrpSrcCodes) {
|
||||
BfiPayApplyQueryDTO param = new BfiPayApplyQueryDTO();
|
||||
param.setAwrpSrcCode(awrpSrcCodes);
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
return BfiUtil.queryAllPages(pageNo -> {
|
||||
param.setPageNo(pageNo);
|
||||
param.setPageSize(PAY_RESULT_PAGE_SIZE);
|
||||
@@ -849,9 +842,9 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
BigDecimal applyAmount = money(entity.getAppliedAmount()).setScale(2, RoundingMode.HALF_UP);
|
||||
BfiPayApplySaveDTO param = new BfiPayApplySaveDTO();
|
||||
param.setAwrpSrcCode(entity.getPaymentNo());
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
param.setSettleorgNumber(orgNumber);
|
||||
param.setBilltypeNumber(bfiPayApplyBilltype);
|
||||
param.setBilltypeNumber(bfiProperties.getPayApply().getBilltype());
|
||||
param.setApplydate(applyDateText);
|
||||
param.setApplyorgNumber(orgNumber);
|
||||
param.setPayorgNumber(orgNumber);
|
||||
@@ -859,8 +852,8 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
param.setApplycause(bfiApplyCause(entity.getPaymentType()));
|
||||
param.setPaycurrencyNumber(currency);
|
||||
param.setSettlecurrencyNumber(currency);
|
||||
param.setAwrpSrcType(bfiPayApplySrcType);
|
||||
param.setExratetableNumber(bfiPayApplyExratetable);
|
||||
param.setAwrpSrcType(bfiProperties.getPayApply().getSrcType());
|
||||
param.setExratetableNumber(bfiProperties.getPayApply().getExratetable());
|
||||
param.setExratedate(applyDateText);
|
||||
param.setAwrpTextfield1(bfiPaymentMethodLabel(entity.getPaymentMethod()));
|
||||
|
||||
@@ -930,7 +923,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
// 【必填】外部系统来源单据号(候选键):付款申请号
|
||||
param.setAwrpSrcCode(entity.getPaymentNo());
|
||||
// 【必填】外部系统编号
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
// 【必填】申请日期:yyyy-MM-dd HH:mm:ss(各接口统一格式)
|
||||
param.setApplydate(applyDateText);
|
||||
// 付款组织.编码(非必传,不传时根据应付单自动带出)
|
||||
@@ -940,7 +933,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
// 请款事由(非必传)
|
||||
// param.setApplycause(bfiApplyCause(entity.getPaymentType()));
|
||||
// 汇率表.编码(非必传,不传时根据应付单自动带出)
|
||||
// param.setExratetableNumber(bfiPayApplyExratetable);
|
||||
// param.setExratetableNumber(bfiProperties.getPayApply().getExratetable());
|
||||
// 汇率日期(非必传,不传时根据应付单自动带出)
|
||||
// param.setExratedate(applyDateText);
|
||||
// 付款渠道(非必传)
|
||||
@@ -975,7 +968,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
// 备注(非必传)
|
||||
// entry.setERemark(entity.getRemark());
|
||||
// 【必填】外部单据类型 todo
|
||||
entry.setAwrpSrcType(bfiPayApplySrcType);
|
||||
entry.setAwrpSrcType(bfiProperties.getPayApply().getSrcType());
|
||||
entries.add(entry);
|
||||
}
|
||||
param.setEntry(entries);
|
||||
|
||||
+6
-7
@@ -53,12 +53,12 @@ import org.springblade.transport.mapper.ReceivablePayableCargoFeeMapper;
|
||||
import org.springblade.transport.pojo.entity.ContractManage;
|
||||
import org.springblade.transport.pojo.entity.CustomerArchive;
|
||||
import org.springblade.transport.pojo.entity.FormalSettlement;
|
||||
import org.springblade.transport.config.BfiProperties;
|
||||
import org.springblade.transport.pojo.entity.FormalSettlementDetail;
|
||||
import org.springblade.transport.pojo.entity.FormalSettlementDetailFee;
|
||||
import org.springblade.transport.pojo.entity.PreSettlementDetailFee;
|
||||
import org.springblade.transport.pojo.entity.ReceivablePayableCargoFee;
|
||||
import org.springblade.transport.service.KingdeeSyncContext;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -101,8 +101,7 @@ public class KingdeeApBillSyncSupport {
|
||||
private final PreSettlementDetailFeeMapper preSettlementDetailFeeMapper;
|
||||
private final ReceivablePayableCargoFeeMapper receivablePayableCargoFeeMapper;
|
||||
private final ISysClient sysClient;
|
||||
@Value("${thirdParty.bfi.payApply.srcSys:WLTMS}")
|
||||
private String bfiPayApplySrcSys;
|
||||
private final BfiProperties bfiProperties;
|
||||
|
||||
// ==================== 财务应付单防重键(awrp_src_code) ====================
|
||||
|
||||
@@ -149,7 +148,7 @@ public class KingdeeApBillSyncSupport {
|
||||
batchForeach(awrpSrcCodes, PAY_RESULT_QUERY_BATCH, batch -> {
|
||||
BfiApBillQueryDTO param = new BfiApBillQueryDTO();
|
||||
param.setAwrpSrcCode(batch);
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
for (BfiApBillVO apBill : BfiUtil.queryAllPages(pageNo -> {
|
||||
param.setPageNo(pageNo);
|
||||
param.setPageSize(PAY_RESULT_PAGE_SIZE);
|
||||
@@ -178,7 +177,7 @@ public class KingdeeApBillSyncSupport {
|
||||
return context.apBillPlanCodeCache().computeIfAbsent(apBillSrcCode, code -> {
|
||||
BfiApBillQueryDTO param = new BfiApBillQueryDTO();
|
||||
param.setAwrpSrcCode(List.of(code));
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
List<BfiApBillVO> bills = BfiUtil.queryAllPages(pageNo -> {
|
||||
param.setPageNo(pageNo);
|
||||
param.setPageSize(PAY_RESULT_PAGE_SIZE);
|
||||
@@ -262,7 +261,7 @@ public class KingdeeApBillSyncSupport {
|
||||
param.setIspricetotal(true);
|
||||
param.setIsintax(false);
|
||||
// 汇率表.编码(非必传)
|
||||
// param.setExratetableNumber(bfiPayApplyExratetable);
|
||||
// param.setExratetableNumber(bfiProperties.getPayApply().getExratetable());
|
||||
// 汇率日期(非必传)
|
||||
// param.setExratedate(billDateText);
|
||||
// 往来单位名称(非必传)
|
||||
@@ -270,7 +269,7 @@ public class KingdeeApBillSyncSupport {
|
||||
// 备注(非必传)
|
||||
// param.setRemark(subject);
|
||||
// 【必填】外部系统编号(候选键)
|
||||
param.setAwrpSrcSys(bfiPayApplySrcSys);
|
||||
param.setAwrpSrcSys(bfiProperties.getSrcSys());
|
||||
// 【必填】外部系统来源单据号(候选键):正式结算单号_结算明细单据号1_单据号2...(复用预检已组装的防重键)
|
||||
param.setAwrpSrcCode(apBillSrcCode);
|
||||
// 来源单据(非必传,有上游合同时传 awrp_contract_info)
|
||||
|
||||
+5
@@ -285,6 +285,11 @@ public class BfiConstant {
|
||||
*/
|
||||
public static final String CUSTOMER_GROUP_EXTERNAL = "1102";
|
||||
|
||||
/**
|
||||
* 客户分类:内部组织
|
||||
*/
|
||||
public static final String CUSTOMER_GROUP_INTERNAL = "1101";
|
||||
|
||||
/**
|
||||
* 币种:人民币
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,817 @@
|
||||
# TMS 业财融合 —— 集成流程图文字版与业务流程梳理
|
||||
|
||||
> **文档来源**:对 `项目/文档` 目录下 6 张集成流程图(jpg/png)逐图 OCR 提取 + 人工校对后整理。
|
||||
> **交叉核对资料**:`合同业财接口排期.xlsx`(场景及流程图说明、接口导航)、`合同业财接口清单.xlsx`、`桂物合同集成相关接口说明-v4.docx`、`TMS业财融合-业务流程与接口梳理.md`。
|
||||
> **整理日期**:2026-09-14
|
||||
|
||||
---
|
||||
|
||||
## 0. 文档说明
|
||||
|
||||
### 0.1 覆盖的图片
|
||||
|
||||
| 序号 | 图片文件 | 图题/流程块 | 对应集成场景 |
|
||||
|---|---|---|---|
|
||||
| 01 | `01_客户新增与查询.jpg` | 模式一:有业务系统,ERP+合同合规系统+金蝶星瀚集成;块:客商新建 / 客商更新 | SC-01 客商主数据协同(含供应商查询) |
|
||||
| 02 | `02_合同新增及同步.jpeg` | 合同新建/变更 | SC-03 合同主数据协同(含 SC-02 项目) |
|
||||
| 03 | `03_财务应付及付款.jpg` | 付款单新增 / 反审核及删除 | SC-04 对公付款(应付+付款) |
|
||||
| 04 | `04_财务应收及开票.png` | 开票申请 | SC-08 销项开票(应收+开票) |
|
||||
| 05 | `05_付款-收票查询及认领.png` | 收票单新增/变更 | SC-05 进项收票 |
|
||||
| 06 | `收款查询及认领.jpg` | 收款认领 | SC-07 回款认领 |
|
||||
|
||||
### 0.2 四栏(泳道)定义
|
||||
|
||||
6 张图统一为同一张表格结构,表头固定为:
|
||||
|
||||
| 栏位 | 含义 | 职责 |
|
||||
|---|---|---|
|
||||
| 备注 | 集成说明(集成方阅读用) | 描述该流程的目的、规则、限制 |
|
||||
| ERP | 业务系统(TMS/ERP) | 业务发起方,所有业务单据的产生与推送 |
|
||||
| 合同合规系统 | 集团合同合规系统 | 客商风险、合同、履约、付款合规校验与拦截 |
|
||||
| 司库/星瀚(经 IPASS 中转) | 金蝶云星瀚财务系统 | 应收应付、发票、资金收付、财务核算 |
|
||||
|
||||
> 图示中 ERP 与金蝶之间标注 **"经 IPASS 中转"**,即 A 类接口调用统一走 iPaaS 网关(`/gwzh/BFI`),不直连。
|
||||
|
||||
### 0.3 OCR 校对说明
|
||||
|
||||
图片中流程图节点字号较小,OCR 存在个别错字。下表为已确认的识别误差与校正值,正文已统一采用校正后的写法:
|
||||
|
||||
| 识别结果 | 校正为 | | 识别结果 | 校正为 |
|
||||
|---|---|---|---|---|
|
||||
| 金媒/金煤/金淋/金洪/金卦 | 金蝶 | | 足瀚/星洽/星溶/星避/早溶 | 星瀚 |
|
||||
| 客者/善商/容商/咨商 | 客商 | | 史新/更新客商微据 | 更新客商数据 |
|
||||
| 报据/来据 | 根据 | | 哈寻/音询 | 查询 |
|
||||
| 创理 | 创建 | | 业务单据锁定 | 业务单据锁定 |
|
||||
| 信B变更 | 信息变更 | | 新姓完成 | 新建完成 |
|
||||
| 只能审核 | 智能审核 | | 团增量客商数据 | 增量客商数据 |
|
||||
| 准送付款相关材料 | 推送付款相关材料 | | 豆是否通过 | 审查是否通过 |
|
||||
| 付款申请羊查询 | 付款申请单查询 | | 一失败 | 失败(连线标注) |
|
||||
|
||||
> 泳道划分按文本框横向中心聚类得到,**靠近栏位边界的说明性标注(如接口编号气泡)可能与相邻栏位归属互换**,不影响流程时序的理解。
|
||||
|
||||
---
|
||||
|
||||
## 1. 集成全景
|
||||
|
||||
```
|
||||
业务发起(ERP/TMS) 合规管控(合同合规系统) 财务核算(金蝶星瀚)
|
||||
客商 → 项目 → 合同 → 履约计划 ──► 风险等级校验 / 黑名单校验 ──► 客户/供应商、合同档案、
|
||||
应付单、应收单、发票、收付款
|
||||
应付结算 ─► 付款申请 ──► 额度校验 + 风险校验(不通过走特批) ─► 付款申请单 → 财务共享审批 → 付款
|
||||
应收结算 ─► 开票申请 ──► 开票单 + 履约监控 ──► 开票申请单 → 发票云开票
|
||||
进项收票 ─► 收票认领 ──► 收票记录 + 履约监控 ──► 收票单 → 指定应付单
|
||||
银行回款 ─► 回款二次认领 ──► 履约收款数据更新 ──► 收款单(金蝶先一次认领到客户)
|
||||
```
|
||||
|
||||
贯穿全流程的三条硬约束:**无合规不结算、无合同不入账、无履约不付款**;高风险客商不特批不得签约、不得付款。
|
||||
|
||||
---
|
||||
|
||||
## 2. 图 01:客户新增与查询(客商主数据协同)
|
||||
|
||||
- **图片文件**:`01_客户新增与查询.jpg`(3228×5791)
|
||||
- **图题**:模式一:有业务系统,ERP+合同合规系统+金蝶星瀚集成
|
||||
- **图内流程块**:客商新建(含客商数据定时同步子流程)、客商更新(含客商数据定时同步子流程)
|
||||
- **对应场景**:客商主数据协同;同批还包含"供应商查询(客户自行下推供应商)"
|
||||
|
||||
**图 1 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph ERP["ERP / TMS(业务系统)"]
|
||||
e0(["开始"]) --> e1["录入统一社会信用代码"]
|
||||
e1 --> d1{"金蝶是否已有该客商"}
|
||||
d1 -->|"已审核:金蝶已创建该客户"| e2["获取金蝶工商信息"]
|
||||
d1 -->|"暂存 / 已提交"| e3["提示:金蝶审核中,请稍后重新添加"]
|
||||
e2 --> e4["填写客商业务信息"]
|
||||
e4 --> e5["提交客商,走内部审批"]
|
||||
e5 -->|"审批退回"| e4
|
||||
e5 -->|"审批通过"| e6["推送客商工商信息"]
|
||||
e6 --> d2{"客商合规性审核是否通过"}
|
||||
d2 -->|"不通过"| e3
|
||||
d2 -->|"通过"| e7(["新建完成:业务系统可使用该客商"])
|
||||
e8["客商更新"] --> e9["工商 / 个人信息变更"]
|
||||
e8 -->|"业务信息由 ERP 自行维护"| e11(["结束"])
|
||||
e9 -->|"非接口,人工修改"| e10["人工审批通过后更新客商信息"]
|
||||
e10 --> e11
|
||||
e12["定时任务:获取全集 / 增量客商数据"] --> e13["更新客商数据与使用状态"]
|
||||
e13 --> e14(["结束"])
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["客商合规性审核<br/>客商工商信息同步为相对方"]
|
||||
end
|
||||
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j1["按统一社会信用代码查询是否已有该客商"]
|
||||
j2["校验工商信息并创建客商<br/>当前为机器人审核"]
|
||||
j3["客户新增后自动下推供应商"]
|
||||
end
|
||||
|
||||
e1 -->|"A902-1 客户查询"| j1
|
||||
j1 --> d1
|
||||
e6 -->|"A902-2 客商保存"| j2
|
||||
j2 --> j3
|
||||
d2 -.->|"合规性审核、企查查状态"| h1
|
||||
e12 -->|"A902-1 客户查询 / A901-1 供应商查询"| j1
|
||||
```
|
||||
|
||||
### 2.1 备注栏原文
|
||||
|
||||
> **客商创建集成说明**
|
||||
>
|
||||
> 1、ERP 创建客户时查询金蝶是否已有该客商,如果已有,获取客商的工商信息(工商信息不允许业务系统变更,只在金蝶系统进行维护),补充客户业务信息。
|
||||
>
|
||||
> 2、如果 ERP 查询到金蝶尚无该客商,在业务系统新建客商,审核通过后同步客商工商信息到金蝶,金蝶校验工商信息通过后完成客商创建,业务系统可使用该客商。
|
||||
>
|
||||
> 3、业务系统创建成功客商后,同步客商工商信息到合同合规系统的相对方。
|
||||
|
||||
### 2.2 泳道节点文字版
|
||||
|
||||
**ERP 栏(客商新建)**
|
||||
|
||||
开始 → 日常使用 → 录入统一社会信用代码 → 日常使用 → 提示"金蝶已创建该客户,将获取金蝶的工商信息" / 提示"金蝶审核中,请稍后重新添加" → 填写客商业务信息 → 获取金蝶的工商信息 → 审批通过,流程挂起 / 流程返回发起人修改 → 客商合规性审核 → 更新客商审核状态 → 审查是否通过 →(是)审批流程结束 → 新建完成 → 结束
|
||||
|
||||
**ERP 栏(客商更新)**
|
||||
|
||||
开始 → 业务信息变更(ERP 自行维护) / 工商/个人信息变更 → 人工审批通过 → 更新客商信息 → 结束
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
星瀚接口:A902-1 客户查询接口;状态==已审核;状态==暂存;状态已提交;星瀚接口:A902-2 客商保存接口;星瀚接口:A902-1 客户查询接口 + A901-1_供应商查询
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
根据"统一社会信用代码"查询是否已有该客商 → 客商新建(客商状态:已提交) → 客商合规性审核 → 更新客商审核状态 → 金蝶客商工商信息及使用状态 → 更新工商/个人信息
|
||||
|
||||
**客商数据定时同步子流程**(图中出现两次,挂在新建与更新之后)
|
||||
|
||||
开始 → 定时获取全集/增量客商数据 → 调用星瀚接口 A902-1 客户查询接口、A901-1_供应商查询 → 获取金蝶客商工商信息及使用状态 → 更新客商数据 → 结束
|
||||
|
||||
### 2.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ERP | 录入客商统一社会信用代码,发起客商新增 | A902-1 客户查询 | — |
|
||||
| 2 | 金蝶星瀚 | 按统一社会信用代码查询客商是否已存在 | A902-1 | — |
|
||||
| 3 | 金蝶星瀚 | 返回客商状态 | A902-1 | **已审核**:金蝶已有该客商 → 步 4;**暂存/已提交**:金蝶审核中,提示"请稍后重新添加",流程终止 |
|
||||
| 4 | ERP | 提示"金蝶已创建该客户",获取金蝶工商信息,补充填写客商业务信息 | A902-1(取工商信息) | 工商信息不可改,仅金蝶可维护 |
|
||||
| 5 | ERP | 提交客商,走内部审批 | A902-2 客商保存 | 审批通过 → 步 6;退回 → 返回发起人修改 |
|
||||
| 6 | ERP→金蝶 | 推送客商工商信息至金蝶,金蝶校验工商信息并完成客商创建 | A902-2 客商保存 | 客商状态:已提交 |
|
||||
| 7 | 合同合规系统 | 客商合规性审核,更新客商审核状态、企查查状态 | — | 审查通过 → 审批流程结束;不通过 → 阻塞使用 |
|
||||
| 8 | ERP | 客商新建完成,业务系统可使用该客商;同步工商信息至合同合规系统相对方 | — | 客户新增成功后金蝶自动下推供应商 |
|
||||
| 9 | ERP(定时) | 定时获取全集/增量客商数据,更新客商数据与使用状态 | A902-1 客户查询、A901-1 供应商查询 | 供应商仅支持查询 |
|
||||
| 10 | ERP | 客商更新:业务信息由 ERP 自行维护;工商/个人信息变更走人工流程(非接口,金蝶客商关联员通知 ERP 审批人员,人工审批通过后人工修改) | 无接口,人工修改 | 工商信息变更后,金蝶需同时维护客户与供应商 |
|
||||
|
||||
### 2.4 关键规则摘录
|
||||
|
||||
- 客商信息分**工商信息**与**业务信息**:工商信息全集团统一、只在金蝶维护,TMS 不允许变更;业务信息由 TMS 自行维护,不上传金蝶。
|
||||
- 新增金蝶不存在的客商,**须金蝶审核通过后 TMS 才能使用**;新增加工由机器人自动审核。
|
||||
- 金蝶客户自动下推供应商;**客户与供应商编码不一致**,除新增外信息不同步;客户工商信息变更后需分别维护客户与供应商。
|
||||
- 客商风险等级由合同合规系统提供(C101-1),**风险等级当天有效**;国资委黑名单通过金蝶黑名单查询接口(A801-5)拦截。
|
||||
|
||||
---
|
||||
|
||||
## 3. 图 02:合同新增及同步(合同主数据协同)
|
||||
|
||||
- **图片文件**:`02_合同新增及同步.jpeg`(4857×4833)
|
||||
- **图内流程块**:合同新建/变更
|
||||
- **对应场景**:合同主数据协同(同批含项目立项同步)
|
||||
|
||||
**图 2 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph ERP["ERP / TMS"]
|
||||
e0(["开始"]) --> e1["创建 / 变更合同"]
|
||||
e1 --> e2["合同审核通过"]
|
||||
e2 -->|"C101-1 客商风险等级查询(签约前必调)"| d1{"相对方风险等级"}
|
||||
d1 -->|"非高风险"| e3["合规校验通过,推送合同数据"]
|
||||
d1 -->|"高风险客商"| e4["特批申请(内部审批)"]
|
||||
e3 --> e5["完成签订"]
|
||||
e4 -->|"C103-8 合同发起特批"| e6["流程挂起"]
|
||||
e6 -->|"集团审批通过(流程结束)"| e7["接收特批结果"]
|
||||
e7 --> e5
|
||||
e5 --> d2{"合同是否涉及收付款"}
|
||||
d2 -->|"涉及收付款"| e8["创建 / 变更履约计划"]
|
||||
d2 -->|"不涉及"| e9(["仅在合同系统存档,结束"])
|
||||
e8 --> e10["推送合同至金蝶"]
|
||||
e10 --> e11["合同系统同步成功标识<br/>失败则异常处理 → 重新推送"]
|
||||
e11 --> e12(["结束"])
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["可提供能力(按需集成):<br/>电子签署(集成 E 签宝,图中标注待定)<br/>资信报告查询下载、合同文件智能审核"]
|
||||
h2["合同模板 / 分类前置:C103-6 合同模板列表获取<br/>C103-7 合同分类列表查询"]
|
||||
h3["C103-1 合同同步、C103-2 合同附件上传<br/>新建 / 变更合同台账"]
|
||||
h4["C103-9 履约计划保存、C103-10 履约计划更新<br/>创建 / 变更履约计划"]
|
||||
h5["C103-3 合同列表查询、C103-4 合同详情查询"]
|
||||
h6["B103 特批结果回传"]
|
||||
end
|
||||
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j1["A101-1 合同信息表保存<br/>创建 / 变更金蝶合同档案"]
|
||||
j2["A101-2 合同信息表查询<br/>A902 附件上传到指定单据"]
|
||||
end
|
||||
|
||||
h1 -.->|"非必须,ERP 按业务实际情况集成"| e1
|
||||
e2 --> h2
|
||||
e3 -->|"C103-1 / C103-2"| h3
|
||||
e4 --> h6
|
||||
e6 -.->|"B103 特批结果回传"| e7
|
||||
e8 -->|"C103-9 / C103-10"| h4
|
||||
e5 -->|"C103-1(完成签订)"| h3
|
||||
e11 -->|"C103-3 / C103-4"| h5
|
||||
e10 -->|"收付款相关的合同推送金蝶:A101-1<br/>实时推送 + 支持按钮手动同步"| j1
|
||||
j1 --> j2
|
||||
```
|
||||
|
||||
### 3.1 备注栏原文
|
||||
|
||||
> **合同集成说明**
|
||||
>
|
||||
> 1、所有合同都要同步到合同系统。涉及收付款的合同,还必须创建履约计划,经合同合规校验通过才能发起收付款。
|
||||
>
|
||||
> 2、合同签订过程在业务系统处理,推送审核后合同及附件到合同合规系统即可。合同系统核验相对方是否可用,相对方是高风险的,不能签订合同。
|
||||
>
|
||||
> 3、合同系统可提供相对方风险等级查询接口,ERP 发起合同时调用,避免 ERP 审核通过后合同校验不通过,合同系统无法完成合同创建。
|
||||
>
|
||||
> 4、合同系统可提供电子签署能力(集成 E 签宝)、资信报告、智能审核,ERP 可根据业务实际情况集成使用。
|
||||
|
||||
### 3.2 泳道节点文字版
|
||||
|
||||
**ERP 栏**
|
||||
|
||||
开始 → 创建/变更合同(调用合同系统能力) → 合同审核通过 → 合规校验通过 → 推送合同数据 → 合同新建/变更 → 高风险客商(如有)→ 特批申请(内部审批) → 完成签订 → 合同系统同步成功标识 → 异常处理 / 重新推送 → 金蝶同步成功标识 → 结束
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
电子签署(待定)、根据证件号码查询/下载相对方资信报告、合同文件智能审核(图中标注 **--非必须---**,属可选集成能力)
|
||||
必须:C101-1_客商风险等级查询
|
||||
调用合同系统能力:C101-1_客商风险等级查询
|
||||
推送合同数据:C103-1_合同同步;C103-2_合同附件上传
|
||||
高风险客商分支:C103-8_合同发起特批、C103-6_合同模板列表获取、C103-7_合同分类列表查询 → 流程挂起 → 集团审批通过(流程结束)
|
||||
B103_特批结果回传
|
||||
成功 → 新增/变更合同 → 创建/变更履约计划(如有)(完成签订)
|
||||
C103-3_合同列表查询、C103-4_合同详情查询
|
||||
异常处理 / 重新推送 / 失败 → 成功 → 金蝶同步成功标识
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
根据证件号码查询相对方风险等级(调用 C101-1)
|
||||
收付款相关的合同推送金蝶(**·实时推送 ·支持按钮手动同步**)
|
||||
A101-1 合同信息表保存、A101-2 合同信息表查询、A902 附件上传到指定单据
|
||||
创建/变更合同 → 成功 / 失败
|
||||
|
||||
### 3.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ERP | 发起合同创建/变更,合同审核通过 | — | — |
|
||||
| 2 | ERP→合同合规 | 按证件号码查询相对方风险等级(签约前必调) | **C101-1 客商风险等级查询** | 图中标注"必须";配套能力:资信报告下载、合同文件智能审核、电子签署(集成 E 签宝)均为非必须 |
|
||||
| 3 | ERP | 合规校验通过后推送合同数据(合同+附件)至合同系统 | C103-1 合同同步、C103-2 合同附件上传 | 合同系统核验相对方可用性 |
|
||||
| 4 | 合同合规 | 合同新建/变更登记完成(完成签订) | C103-1 / C103-11 合同信息更新 | 模板与分类前置:C103-6 合同模板列表获取、C103-7 合同分类列表查询 |
|
||||
| 5 | 合同合规 | **高风险客商**:不允许直接签约 → 发起合同特批 | C103-8 合同发起特批 | 流程挂起;流程在合同系统配置 |
|
||||
| 6 | 合同合规→ERP | 集团审批通过 → 流程结束;特批结果回传 ERP | **B103 特批结果回传** | 回传失败则 ERP 保持阻断状态 |
|
||||
| 7 | ERP | 完成签订;合同系统同步成功标识回写 | C103-3 合同列表查询、C103-4 合同详情查询 | 异常处理:失败 → 重新推送 |
|
||||
| 8 | ERP→合同合规 | 涉及收付款的合同创建/变更履约计划(履约类型、款项性质、收票规则、收票周期等) | C103-9 履约计划保存、C103-10 履约计划更新 | 履约计划是收付款前置条件 |
|
||||
| 9 | ERP→金蝶 | 收付款相关的合同推送金蝶,创建/变更金蝶合同档案并上传附件 | **A101-1 合同信息表保存**(二开接口)、A902 附件上传到指定单据、A101-2 合同信息表查询 | 实时推送 + 支持按钮手动同步;成功 → 金蝶同步成功标识;失败 → 异常处理重新推送 |
|
||||
| 10 | — | 不涉及收付款的合同仅在合同系统存档,不推送金蝶 | — | — |
|
||||
|
||||
### 3.4 关键规则摘录
|
||||
|
||||
- **所有合同都必须同步到合同系统**;涉及收付款的合同才推送金蝶,且必须创建履约计划。
|
||||
- 合同签订全过程在业务系统完成,合同系统只做接收、核验与风控拦截。
|
||||
- 相对方为**高风险**不能签合同,只能走合同特批;特批流程需在合同系统预先配置。
|
||||
- 合同系统可提供的能力:电子签署(集成 E 签宝,图中标注"待定")、资信报告查询下载、合同文件智能审核。
|
||||
|
||||
---
|
||||
|
||||
## 4. 图 03:财务应付及付款(对公付款)
|
||||
|
||||
- **图片文件**:`03_财务应付及付款.jpg`(3228×5150)
|
||||
- **图内流程块**:付款单新增、反审核及删除(异常回收)
|
||||
- **对应场景**:对公付款(财务应付单 → 付款申请 → 财务共享审批 → 付款)
|
||||
|
||||
**图 3 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph ERP["ERP / TMS"]
|
||||
e0(["开始"]) --> e1["发起付款申请<br/>正式结算付款 / 预付款"]
|
||||
e1 --> e2["付款审核通过"]
|
||||
e2 --> e3["推送金蝶(合规性校验通过)"]
|
||||
e3 --> e4["业务单据锁定(锁单)"]
|
||||
e4 --> e5["定时查询付款结果<br/>更新付款信息与履约付款数据"]
|
||||
e5 --> e6["推送付款相关材料<br/>关键附件文件 + 详细材料下载地址"]
|
||||
e6 --> e7(["结束"])
|
||||
e8(["开始(异常回收)"]) --> e9["金蝶反审核及删除(如有)→ 解锁单据<br/>→ 反审核及删除 → 更新付款结果"]
|
||||
e9 --> e10(["结束"])
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["C106-1 项目 / 合同额度校验<br/>ERP 无额度校验则需调用"]
|
||||
h2["C101-1 客商风险等级查询(按证件号码)"]
|
||||
h3["C106-3 付款特批流程发起<br/>C106-4 付款特批流程更新"]
|
||||
h4["C106-2 付款附件推送<br/>同 C103-2 上传接口,每日定时推送"]
|
||||
h5["B901 锁单 / 解锁"]
|
||||
end
|
||||
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j1["A103-1 付款申请保存(应付下推)<br/>A103-3 付款申请保存(预付款)<br/>A902 附件上传到指定单据"]
|
||||
j2["创建应付单 / 付款申请单(预付)<br/>财务共享审批(当前机器人处理)"]
|
||||
j3["付款处理 → 付款完成"]
|
||||
j4["A103-2 付款申请单查询<br/>A103-4 付款处理查询"]
|
||||
j5["A102-4 财务应付单查询"]
|
||||
end
|
||||
|
||||
e1 --> h1
|
||||
h1 --> h2
|
||||
h2 --> d1{"是否高风险客商(如有)"}
|
||||
d1 -->|"否"| e2
|
||||
d1 -->|"是:拦截付款"| h3
|
||||
h3 -->|"流程挂起 → 集团审批通过(流程结束)"| e2
|
||||
h3 -.->|"B103 特批结果回传:通知允许本次付款"| e2
|
||||
e2 -->|"合规性校验通过"| e3
|
||||
e3 -->|"A103-1 / A103-3 / A902"| j1
|
||||
j1 --> j2
|
||||
j2 -->|"通过"| j3
|
||||
j2 -->|"不通过:异常处理 → 重新推送"| e8
|
||||
j3 --> j4
|
||||
j4 --> e5
|
||||
e3 -.->|"核对应付金额与已付款"| j5
|
||||
e5 -->|"A103-2 / A103-4 定时查询"| j4
|
||||
e4 -->|"B901 锁单 / 解锁"| h5
|
||||
e6 -->|"C106-2 每日定时推送"| h4
|
||||
e9 -.->|"B901 解锁"| h5
|
||||
```
|
||||
|
||||
### 4.1 备注栏原文
|
||||
|
||||
> **付款单集成说明**
|
||||
>
|
||||
> 场景:业务发起合同付款,满足付款合规性的,允许发起付款,并将付款结果同步至合同系统,以完成履约付款情况监控,不满足付款合规性的,中止业务系统发起的付款。如有付款需要,可走特批流程。
|
||||
>
|
||||
> 1、发起付款申请:由 ERP 发起付款申请,涉及合同的付款,必须通过付款合规性校验,才可推送金蝶。合同系统提供付款控制相关查询接口,ERP 在发起付款时、以及推送单据时调用,避免付款合规性风险。
|
||||
>
|
||||
> 2、金蝶创建付款单:合规性校验校验通过后创建付款单。
|
||||
>
|
||||
> 3、同步付款信息:合同系统定时查询金蝶,更新付款结果。
|
||||
>
|
||||
> 4、已推送金蝶的付款单,ERP 进行锁单,财务共享审批后,如被驳回,ERP 推送的字段不允许进行修改;如需对单据进行修改,需在金蝶对该单据进行反审核及删除后,由 ERP 重新推送。
|
||||
|
||||
### 4.2 泳道节点文字版
|
||||
|
||||
**ERP 栏**
|
||||
|
||||
开始 → 付款申请 → 付款审核通过 → 合规性校验通过 → 推送金蝶 → 高风险客商(如有)→ 特批申请(内部审批) → 重新推送付款申请 → 异常处理 / 重新推送 → 金蝶同步标识成功 → 业务单据锁定 → 更新付款结果 → 推送付款相关材料(关键附件文件 + 详细材料下载地址,**·每日定时推送**) → 反审核及删除 → 更新付款结果
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
付款额度校验(**ERP 无额度校验则需调用**)
|
||||
根据证件号码查询相对方风险等级 → 对方风险等级
|
||||
推送金蝶:A103-1 应付下推付款申请、A103-1 预付款申请、A103-2 付款申请单查询、A902 附件上传到指定单据
|
||||
特批申请 → 流程挂起 → C106-3_付款特批流程发起 → 集团审批通过(流程结束) → B103_特批结果回传 → 通知 → 允许本次付款
|
||||
不通过 → A103-2 付款申请单查询
|
||||
**·定时查询** → 查询金蝶付款结果 → A103-2 付款申请单查询 → 更新付款信息
|
||||
解锁单据,反审核及删除 → B901 锁单/解锁 → 更新付款结果 → 结束
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
创建应付单 / 付款申请单(预付) → 财务共享审批 →(不通过 / 通过)→ 付款处理 → 付款完成
|
||||
**·定时查询** → 查询金蝶付款结果 → A103-2 付款申请单查询
|
||||
反审核及删除(如有)
|
||||
|
||||
### 4.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ERP | 发起付款申请(正式结算付款 / 预付款) | — | 付款前先做额度与风险校验 |
|
||||
| 2 | 合同合规 | 付款额度校验(项目/合同剩余额度) | C106-1 项目/合同额度校验 | **ERP 无额度校验则必须调用** |
|
||||
| 3 | 合同合规 | 按证件号码查询相对方风险等级 | **C101-1 客商风险等级查询** | 非高风险、非黑名单方可继续 |
|
||||
| 4 | ERP | 付款审核通过后推送金蝶 | 正式付款:**A103-1 付款申请保存(应付下推)**;预付款:**A103-3 付款申请保存(预付款)**;附件:A902 附件上传到指定单据 | 正式付款须先推财务应付单(A102-2)再推付款申请;预付款只推付款申请单 |
|
||||
| 5 | ERP | 查询付款申请单状态;核对应付金额与已付款情况 | A103-2 付款申请单查询;A102-4 财务应付单查询 | 异常 → 异常处理 → 重新推送 |
|
||||
| 6 | 合同合规 | **高风险客商(如有)**:拦截付款 → 发起付款特批 | C106-3 付款特批流程发起(更新用 C106-4) | 流程挂起;审批流需在合同系统配置 |
|
||||
| 7 | 合同合规→ERP | 集团审批通过(流程结束),允许本次付款 → 通知 ERP | **B103 特批结果回传** | 特批单次有效,每次付款都要重新申请 |
|
||||
| 8 | 金蝶 | 创建应付单/付款申请单(预付),进入财务共享审批 | A103-1 / A103-3 | 新增付款申请单在财务系统需审核,当前为机器人处理 |
|
||||
| 9 | 金蝶 | 财务共享审批(不通过 / 通过)→ 付款处理 → 付款完成 | — | 财务共享审批只校验内部风险与资金计划,不再调合同合规接口 |
|
||||
| 10 | ERP | 金蝶同步标识成功后**业务单据锁定**(锁单) | B901 锁单/解锁 | 已推金蝶单据 ERP 不可改 |
|
||||
| 11 | ERP/合同合规 | **·定时查询** 金蝶付款结果,更新付款信息与履约付款数据 | A103-2 付款申请单查询、A103-4 付款处理查询 | 付款结果同步至合同系统 |
|
||||
| 12 | ERP→合同合规 | 推送付款相关材料:关键附件文件 + 详细材料下载地址 | C106-2 付款附件推送(同 C103-2 上传接口) | **每日定时推送** |
|
||||
| 13 | 金蝶/ERP | 异常回收:金蝶反审核及删除(如有)→ 解锁单据 → 反审核及删除 → 更新付款结果 | B901 锁单/解锁 | 被驳回的推送字段不允许修改,须金蝶反审核+删除后由 ERP 重新推送 |
|
||||
|
||||
### 4.4 关键规则摘录
|
||||
|
||||
- **正式付款**:先推财务应付单(A102-2),再推付款申请单(A103-1);**预付款**只推付款申请单(A103-3、付款类型=预付款,不绑应付单)。
|
||||
- 涉及合同的付款**必须通过付款合规性校验**才可推送金蝶;不通过则中止付款,可走特批。
|
||||
- **特批单次有效**,每次付款都要重新申请;额度校验需同时满足客户额度与项目额度。
|
||||
- 已推金蝶的付款单 ERP **锁单**;财务共享驳回后 TMS 只能看到"已提交"状态,看不到审批节点与驳回原因,需金蝶反审核+删除后 ERP 重推。
|
||||
- 收款账号变更 TMS 与金蝶流程不对接,需人工双系统确认;止付按整单(冻结→关闭)或明细(冻结→关闭)处理,对应应付单由金蝶财务调减、红冲。
|
||||
|
||||
---
|
||||
|
||||
## 5. 图 04:财务应收及开票(销项开票)
|
||||
|
||||
- **图片文件**:`04_财务应收及开票.png`(4842×4461)
|
||||
- **图内流程块**:开票申请(正向/反向开票)
|
||||
- **对应场景**:财务应收 + 销项开票
|
||||
|
||||
**图 4 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph ERP["ERP / TMS"]
|
||||
e0(["开始"]) --> e1["基于已审批结算单提交开票申请<br/>正向 / 反向开票"]
|
||||
e1 --> e2["审核通过后推送,附件随单上传"]
|
||||
e2 --> e3["定时查询开票结果与发票凭证<br/>更新开票结果"]
|
||||
e3 --> e4(["结束"])
|
||||
e5["已推金蝶的开票单 ERP 锁单<br/>需修改时先金蝶红冲,再由 ERP 重新推送"] --> e4
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["A303-1 开票申请单新增"]
|
||||
h2["创建开票单 → 审核通过"]
|
||||
h3["A303-5 开票申请单发票查询(定时查询)<br/>A303-4 开票申请单查询(同步申请附件)"]
|
||||
h4["发票红冲(如有)→ 更新开票结果"]
|
||||
end
|
||||
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j0["财务应收侧:运单对账 → 应收结算审核 → 全额推送财务应收单"]
|
||||
j1["创建开票单 → 审核开票申请 → 开票处理 → 开票完成"]
|
||||
end
|
||||
|
||||
j0 -.->|"A302-2 财务应收单保存 / A302-4 财务应收单查询<br/>正式结算开票须先推财务应收单"| e1
|
||||
e2 -->|"A303-1,附件随单 A902 上传"| h1
|
||||
h1 --> h2
|
||||
h2 --> j1
|
||||
j1 -->|"开票完成,回写开票结果与凭证"| h4
|
||||
h4 --> e3
|
||||
e3 -->|"A303-5 / A303-4"| h3
|
||||
h3 -.->|"业务系统在合同系统查询开票结果及凭证"| e3
|
||||
```
|
||||
|
||||
### 5.1 备注栏原文
|
||||
|
||||
> **付款单集成说明**
|
||||
>场景:业务发起合同付款,满足付款合规性的,允许发起付款,并将付款结果同步至合同系统,以完成履约付款情况监控。不满足受控付款合规性,不满足付款合规性的,中止业务系统发起的付款。如有付款需要,可走特批流程。
|
||||
>
|
||||
>1. **发起付款申请:** 由ERP发起付款申请,涉及合同的付款,必须通过付款合规性校验,才可推送金蝶。合同系统提供付款控制相关查询接口,ERP在发起付款时、以及推送单据时调用,避免付款合规性风险。
|
||||
> 2. **金蝶创建付款单:** 合规性校验校验通过后创建付款单。
|
||||
>3. **同步付款信息:** 合同系统定时查询金蝶,更新付款结果。
|
||||
> 4. **已推送金蝶的付款单,ERP进行锁单,财务共享审批后,如被驳回,ERP推送的字段不允许进行修改,如需对单据进行修改,需在金蝶对该单据进行反审核及删除后,由ERP重新推送。**
|
||||
|
||||
### 5.2 泳道节点文字版
|
||||
|
||||
**ERP 栏**
|
||||
|
||||
开始 → 提交开票申请(正向/反向开票) → 审核通过 → 异常处理 / 重新推送 → 更新开票结果 → 结束
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
A303-1 开票申请单新增、A303-4 开票申请单查询、A902 附件上传到指定单据
|
||||
创建开票单 → 审核通过 → **·定时查询** → A303-5 开票申请单发票查询 → 开票完成 → 发票红冲(如有)→ 更新开票结果 → 同步申请附件 → 更新开票结果 → 结束
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
创建开票单 → 审核通过 → 开票完成 → 发票红冲(如有)
|
||||
|
||||
### 5.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ERP | 基于已审批结算单提交开票申请(正向/反向开票) | A303-1 开票申请单保存 | 结算流程与开票流程分开审批,须先校验结算审批通过 |
|
||||
| 2 | ERP | 开票申请审核通过后推送,附件随单上传 | A902 附件上传到指定单据 | 失败 → 异常处理 → 重新推送 |
|
||||
| 3 | 合同合规/金蝶 | 创建开票单,审核通过,进行开票处理,完成开票;支持发票红冲(如有) | A303-1、A303-4 开票申请单查询 | 新增开票申请单在财务系统需审核,当前为机器人处理 |
|
||||
| 4 | ERP/合同合规 | **·定时查询** 开票结果与发票凭证,更新开票结果与履约数据,同步申请附件 | **A303-5 开票申请单发票查询**、A303-4 | 业务系统在合同系统查询开票结果及凭证 |
|
||||
| 5 | ERP | 已推金蝶的开票单 ERP 锁单;需修改时先金蝶红冲,再由 ERP 重新推送 | — | 已真实开出的数电票不能作废,只能红冲后重开 |
|
||||
| 6 | — | 财务应收侧:运单完成对账生成应收结算,审核通过后全额推金蝶生成财务应收单(口径见 `TMS业财融合-业务流程与接口梳理.md`) | A302-2 财务应收单保存、A302-4 财务应收单查询 | 正式结算开票须先推财务应收单再推开票申请单 |
|
||||
|
||||
### 5.4 关键规则摘录
|
||||
|
||||
- 开票基于已审批的结算单发起,一张 TMS 开票申请按"发票张数"生成多个金蝶开票申请单,按票面行拆分开票明细。
|
||||
- **运输发票需单独开具**,不可与其他费用混开。
|
||||
- 发票凭证支持接口查询、下载,并发送到业务部公用邮箱;开票结果及附件定时推送合同系统。
|
||||
- 已推金蝶的开票单锁单:仅申请未开票/开票失败的可直接作废或撤销;**已真实开出数电票的(当月或跨月)必须走红冲流程**。
|
||||
|
||||
### 5.5 流程梳理
|
||||
|
||||
整个业务流程围绕“合同付款的合规性管控”展开,涉及ERP系统、合同合规系统以及司库/星瀚(金蝶)系统。整体流程可以划分为以下五大核心阶段:
|
||||
|
||||
- 阶段一:付款申请与合规校验(ERP ↔ 合同合规系统)
|
||||
|
||||
1. **发起申请**:业务流程在ERP中发起【付款申请】。
|
||||
2. **初步审核**:ERP进行【付款审核】。
|
||||
3. **合规校验**:系统调用合同合规系统进行【合规性校验】(通过C101-1进行客商风险等级查询,根据证件号码查询对方风险等级)。
|
||||
4. **高风险处理(如需)**:
|
||||
- 如果命中高风险客户,ERP进入【特批申请(内部审批)】。
|
||||
- 合同系统【流程挂起】,发起C106-3付款特批流程。
|
||||
- 集团【审批通过】后,通知B103特批结果回传至ERP。
|
||||
- 如果允许本次付款,则继续流程;否则需在ERP【重新推送付款申请】。
|
||||
|
||||
- 阶段二:推送金蝶与单据创建
|
||||
|
||||
1. **推送数据**:合规校验通过后,合同系统向司库/星瀚推送数据(包含:A103-1应付下推付款申请、A103-1预付付款申请、A103-2付款申请单查询、A902附件上传到指定单据)。
|
||||
2. **创建付款单**:司库/星瀚(金蝶)生成【金蝶应付单/付款单/退单(预付)】。
|
||||
3. **异常处理**:如果推送或创建**失败**,流程流转至ERP【异常处理重新推送】。
|
||||
4. **锁单处理**:如果**成功**,ERP接收信号后执行【金蝶同步标识成功 业务单据锁定】。(注意:此时ERP端字段被锁定,不可修改)。
|
||||
|
||||
- 阶段三:财务审批与付款执行
|
||||
|
||||
1. **共享审批**:单据进入司库/星瀚,进行【财务共享审批】。
|
||||
2. **审批驳回**:如果【不通过】,通过A103-2付款申请单查询反馈至ERP,ERP【更新付款结果】。
|
||||
3. **审批通过**:如果【通过】,进入【付款处理】并完成【付款完成】。
|
||||
|
||||
- 阶段四:付款结果同步与附件归档
|
||||
|
||||
1. **结果查询**:合同合规系统通过【定时查询】,调用A103-2查询金蝶付款结果。
|
||||
2. **更新ERP**:合同系统将结果同步至ERP,ERP【更新付款结果】。
|
||||
3. **附件推送**:合同系统每日定时推送(C106-2付款附件推送),将关键附件文件、详细材料及下载地址推送至ERP并【更新付款信息】。
|
||||
4. 流程正常【结束】。
|
||||
|
||||
- 阶段五:反审核与删除(逆向流程)
|
||||
|
||||
- 如果已推送金蝶的付款单需要修改(需遵循备注4的原则):
|
||||
|
||||
1. 司库/星瀚发起【反审核及删除(如有)】。
|
||||
2. 执行【解锁单据,反审核及删除 B901锁单/解锁】。
|
||||
3. 通知ERP端进行【反审核及删除】。
|
||||
4. ERP完成操作后【更新付款结果】,流程【结束】。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. 图 05:付款-收票查询及认领(进项收票)
|
||||
|
||||
- **图片文件**:`05_付款-收票查询及认领.png`(4842×4857)
|
||||
- **图内流程块**:收票单新增/变更
|
||||
- **对应场景**:收票查询及认领(发票池查询 → 收票单 → 指定应付单)
|
||||
|
||||
**图 5 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph ERP["ERP / TMS"]
|
||||
e0(["开始"]) --> e1["基于结算单发起收票"]
|
||||
e1 --> d1{"是否有发票"}
|
||||
d1 -->|"否"| e2["查询金蝶全票池,获取发票票面信息"]
|
||||
d1 -->|"是"| e3["随财务应付单推送"]
|
||||
e2 --> e4["收票单新增 / 变更<br/>ERP 内部完成收票认领"]
|
||||
e3 --> e4
|
||||
e4 --> e5["推送收票单,并指定对应应付单"]
|
||||
e5 --> e6["业务单据锁定"]
|
||||
e6 --> e7["推送收票信息,更新收票信息"]
|
||||
e7 --> e8(["结束"])
|
||||
e9(["异常处理"]) --> e10["发票红冲(如有)→ 解锁单据,反审核及删除<br/>→ 重新推送"]
|
||||
e10 --> e8
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["A303-2 收票单批量保存<br/>创建收票单"]
|
||||
h2["A302-6 收票指定应付<br/>关联应付单"]
|
||||
h3["C107-1 收票认领结果同步<br/>拟开发 / 开发中"]
|
||||
end
|
||||
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j1["企业进项发票票池"]
|
||||
j2["创建收票单 → 关联应付单"]
|
||||
j3["金蝶暂不支持一张发票指定多张应付单分摊金额<br/>合同系统暂不推送金蝶收票单"]
|
||||
end
|
||||
|
||||
e2 -->|"A801-1 查询全票池发票数据"| j1
|
||||
e5 -->|"A303-2 / A302-6"| h1
|
||||
h1 --> h2
|
||||
h2 --> j2
|
||||
j2 -.-> j3
|
||||
e7 -->|"C107-1 收票认领结果同步"| h3
|
||||
h3 -.->|"更新收票信息"| e7
|
||||
```
|
||||
|
||||
### 6.1 备注栏原文
|
||||
|
||||
> **收票单集成说明**
|
||||
>
|
||||
> 场景:将业务合同关联的收票信息同步到合同系统,以完成合同履约-收票情况监控。
|
||||
>
|
||||
> 1、发起收票:收票单由 ERP 发起,审核通过后推送合同系统生成收票记录。
|
||||
>
|
||||
> 2、金蝶创建收票单:金蝶当前暂不支持一张发票指定多张应付单分摊金额,合同系统暂不推送金蝶收票单。
|
||||
|
||||
### 6.2 泳道节点文字版
|
||||
|
||||
**ERP 栏**
|
||||
|
||||
开始 → 结算单 → 是否有发票
|
||||
├ **否**:A801-1 查询全票池发票数据(企业进项发票票池)→ 获取发票
|
||||
└ **是**:随财务应付单推送
|
||||
→ 收票单新增/变更 → 异常处理 / 重新推送 / 失败 → 创建收票单 → 成功 → A302-6_收票指定应付 → 关联应付单 → 同步标识成功 → 业务单据锁定 → 发票红冲(如有)→ 解锁单据,反审核及删除 → 推送收票信息 → C107-1 收票认领结果同步 → 更新收票信息 → 结束
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
否,A801-1 查询全票池发票数据
|
||||
A303-2 收票单批量保存、A302-6_收票指定应付
|
||||
创建收票单 → 关联应付单 → 发票红冲(如有)→ 解锁单据,反审核及删除 → 更新收票信息 → 结束
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
企业进项发票票池 → 创建收票单 → 关联应付单 → 发票红冲(如有)
|
||||
|
||||
### 6.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ERP | 基于结算单发起收票,判断是否有发票 | — | **无发票** → 步 2;**已有发票** → 随财务应付单一起推送 |
|
||||
| 2 | ERP→金蝶 | 按发票号查询金蝶全票池发票数据,获取票面信息 | **A801-1 查询全票池发票数据** | 对应金蝶侧"企业进项发票票池" |
|
||||
| 3 | ERP | 收票单新增/变更,完成 ERP 内部收票认领 | — | 收票时按品类与结算单校验数量、税率、含税金额一致 |
|
||||
| 4 | ERP→合同合规 | 推送收票单,合同系统生成收票记录 | **A303-2 收票单批量保存** | 失败 → 异常处理 → 重新推送;单张进项票 = 单个收票单,按票面行拆明细 |
|
||||
| 5 | ERP→金蝶 | 收票单指定(关联)对应财务应付单,完成进项票与应付单绑定 | **A302-6 收票指定应付** | 同步标识成功后业务单据锁定 |
|
||||
| 6 | ERP→合同合规 | 推送收票认领结果,更新履约收票数据 | **C107-1 收票认领结果同步**(拟开发/开发中) | — |
|
||||
| 7 | 金蝶/ERP | 发票红冲(如有)→ 解锁单据,反审核及删除 | — | 收票单异常须先解除收票与应付单关系,再反审核删除,由 ERP 重推 |
|
||||
|
||||
### 6.4 关键规则摘录
|
||||
|
||||
- **金蝶当前暂不支持一张发票指定多张应付单分摊金额,因此合同系统暂不推送金蝶收票单**(图中明确标注)。
|
||||
- 接口生成的收票单默认审核通过,**不支持实时验真验重**;金蝶每 5 分钟查验,异常结果可通过收票单关联的应付单查询。
|
||||
- 金蝶不支持直接推送数电票 OFD 附件;发票须先关联结算单再推金蝶。
|
||||
- 进项发票凭证查询下载:A801-2 进项发票下载;收票单查询:A801-3。
|
||||
|
||||
---
|
||||
|
||||
## 7. 图 06:收款查询及认领(回款认领)
|
||||
|
||||
- **图片文件**:`收款查询及认领.jpg`(4842×2685)
|
||||
- **图内流程块**:收款认领
|
||||
- **对应场景**:收款查询及认领(两种集成方式可选)
|
||||
|
||||
**图 6 流程图(Mermaid,接口编号已标注在连线上)**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph JD["司库 / 星瀚(经 IPASS 中转)"]
|
||||
j0(["开始"]) --> j1["司库收到银行流水"]
|
||||
j1 --> j2["金蝶第一轮自动认领<br/>仅能认领到客户维度"]
|
||||
j3["生成 / 更新收款单,更新认领结果"]
|
||||
end
|
||||
|
||||
subgraph ERP["ERP / TMS"]
|
||||
e1["二次认领:认领到合同 / 履约计划名称 / 批次维度<br/>一笔回款对应多笔结算单时手工分摊"]
|
||||
e2["推送认领结果(认领至合同履约计划)"]
|
||||
e3(["结束"])
|
||||
end
|
||||
|
||||
subgraph HT["合同合规系统"]
|
||||
h1["更新履约收款数据"]
|
||||
h2["定时查询金蝶认领数据"]
|
||||
end
|
||||
|
||||
j2 --> e1
|
||||
e1 -->|"A301-1 收款单查询 / A301-2 收款认领公告查询"| e2
|
||||
e2 --> e3
|
||||
|
||||
e2 -->|"场景一:C104-1 收款信息同步(认领结果不推金蝶时调用,拟开发)"| h1
|
||||
j3 -.->|"场景二"| h2
|
||||
h2 -->|"场景二:A301-1 收款单查询认领结果"| h1
|
||||
e2 -->|"A301-3 收款认领结果推送<br/>(ERP 推送认领结果给金蝶生成收款单)"| j3
|
||||
```
|
||||
|
||||
### 7.1 备注栏原文
|
||||
|
||||
> **收款认领集成说明**
|
||||
>
|
||||
> 场景:将业务合同关联的收款结果同步到合同系统,以完成合同履约-收款情况监控。
|
||||
>
|
||||
> 1、银行流水金蝶自动认领:司库收到银行流水,金蝶可实现第一轮的自动认领(到客户的维度)。
|
||||
>
|
||||
> 2、认领银行流水:由于金蝶当前只能认领到客户,具体流水是属于哪个合同/履约计划名称/批次,需要 ERP 完成认领。
|
||||
>
|
||||
> 3、认领结果推送合同系统:合同系统定时查询金蝶认领数据,合同系统更新履约收款数据。
|
||||
|
||||
### 7.2 泳道节点文字版
|
||||
|
||||
**ERP 栏**
|
||||
|
||||
收款认领(认领到合同履约计划)→ 推送认领结果 → 推送认领结果(场景一):C104-1_收款信息同步 / 查询认领结果(场景二):A301-1_收款单查询
|
||||
|
||||
**合同合规系统栏**
|
||||
|
||||
A301-1_收款单查询 / A301-2_收款认领公告查询
|
||||
A301-3_收款认领结果推送(认领至合同履约计划)
|
||||
更新履约收款数据 → 查询认领结果(场景二)→ A301-1_收款单查询
|
||||
|
||||
**司库/星瀚栏**
|
||||
|
||||
开始 → 司库收到银行流水 → 更新认领结果
|
||||
|
||||
### 7.3 流程步骤还原
|
||||
|
||||
| 步骤 | 责任方 | 动作 | 涉及接口 | 分支/条件 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 金蝶/司库 | 司库收到银行流水,金蝶完成**第一轮自动认领(到客户维度)** | — | 金蝶只能认领到客户 |
|
||||
| 2 | ERP | TMS 认领银行流水到**合同/履约计划名称/批次**维度 | A301-1 收款单查询、A301-2 收款认领公告查询 | 一笔回款对应多笔结算单时手工分摊 |
|
||||
| 3 | ERP | 推送认领结果 | **A301-3 收款认领结果推送**(认领至合同履约计划) | — |
|
||||
| 4 | 合同合规 | 定时查询金蝶认领数据,更新履约收款数据 | C104-1 收款信息同步(拟开发) | 认领结果不推金蝶时调用 C104-1 |
|
||||
|
||||
### 7.4 两种集成方式(源自 `合同业财接口排期.xlsx`「场景及流程图说明」原文)
|
||||
|
||||
- **场景一(财务先行认领)**:财务进行"一次认领"至客户 → ERP 查询财务收款单(A301-1)→ ERP 进行"二次认领"至合同或更细维度 → ERP 推送二次认领结果给合同系统(C104-1)。
|
||||
- **场景二(业务先行认领)**:ERP 查询财务收款公告(A301-2)→ ERP 进行"一次认领"至合同 → ERP 推送认领结果给金蝶生成收款单(A301-3)→ 合同系统查询财务系统收款单的认领结果(A301-1)。
|
||||
- 两种方式**可根据各单位财务部需求选择不同集成方式**。
|
||||
|
||||
### 7.5 关键规则摘录
|
||||
|
||||
- 收款流水定时拉取有延时;时效性高的收款由财务人工在 TMS 录入。
|
||||
- 认领结果回写合同系统更新履约台账,支持认领作废;项目预付(无关联结算单)在后续正式结算时与尾款核销。
|
||||
|
||||
---
|
||||
|
||||
## 8. 业务流程串联梳理
|
||||
|
||||
### 8.1 主数据流(客商 / 项目 / 合同)
|
||||
|
||||
1. **客商**:ERP 查金蝶(A902-1/A901-1)→ 不存在则在 ERP 新建并审核 → 推金蝶工商信息(A902-2)→ 金蝶校验并创建(机器人审核)→ 同步合同合规系统相对方 → 风险等级(C101-1,当天有效)与黑名单(A801-5)作为签约、付款的准入条件。
|
||||
2. **项目**:无法通过合同付款计划管控、需按项目管控收付款额度的,项目创建后推送合同系统(C102-1/C102-2),后续依赖项目做履约校验;可通过合同付款计划管控的可不做项目集成。
|
||||
3. **合同**:ERP 创建并审批 → 签约前查风险等级(C101-1)→ 推送合同及附件(C103-1/C103-2)→ 涉及收付款的创建履约计划(C103-9/C103-10)→ 推送金蝶合同档案(A101-1);高风险客商走合同特批(C103-8,结果经 B103 回传)。
|
||||
|
||||
### 8.2 付款流(应付 → 付款)
|
||||
|
||||
预付款路径:预结算单 → 付款申请(A103-3,不绑应付单)→ 金蝶创建付款申请单 → 财务共享审批 → 付款。
|
||||
正式付款路径:正式结算单 → 财务应付单(A102-2,金额与状态可用 A102-4 财务应付单查询 核对)→ 付款申请(A103-1 应付下推)→ 金蝶付款申请单 → 财务共享审批 → 付款 → 结果回写(A103-2/A103-4)→ 推送合同系统更新履约(C106-2 附件)。
|
||||
两条路径前置均需:额度校验(C106-1)+ 风险校验(C101-1),不通过走付款特批(C106-3/C106-4),特批结果经 B103 回传。
|
||||
|
||||
### 8.3 收票流(进项)
|
||||
|
||||
结算 → 是否有发票 → 无票则查全票池(A801-1)→ 收票认领 → 推收票单(A303-2)→ 指定应付单(A302-6)→ 推送收票认领结果至合同系统(C107-1)。
|
||||
|
||||
### 8.4 开票流(应收/销项)
|
||||
|
||||
运单对账 → 应收结算审核 → 全额推财务应收单(A302-2)→ 基于结算单提交开票申请(A303-1)→ 金蝶开票处理 → 查开票结果及凭证(A303-5)→ 更新履约与开票结果。
|
||||
|
||||
### 8.5 回款流(收款)
|
||||
|
||||
司库收流水 → 金蝶一次认领到客户 → ERP 二次认领到合同/履约计划(A301-1/A301-2)→ 推送认领结果(A301-3)→ 合同系统定时查询并更新履约收款数据(C104-1)。
|
||||
|
||||
---
|
||||
|
||||
## 9. 通用机制与异常处理
|
||||
|
||||
| 机制 | 说明 |
|
||||
|---|---|
|
||||
| 校验前置 | 签约前查客商风险(C101-1);付款前查风险 + 额度(C101-1、C106-1);不通过即拦截,可走特批 |
|
||||
| 特批 | 合同特批(C103-8)、付款特批(C106-3/C106-4)**均单次有效**;结果经 B103 回传 ERP;审批流需在合同系统预配置 |
|
||||
| 锁单 | 已推金蝶的单据 ERP 执行锁单;修改须金蝶反审核 + 删除后 ERP 重推;锁单/解锁经 B901 通知 |
|
||||
| 红冲 | 数电票开出后不能作废只能红冲;红冲应收须先红冲发票再冲销应收单,ERP 定时同步状态并自动作废内部单据 |
|
||||
| 定时同步 | 付款结果、开票结果、收票/收款认领结果、客商数据均由定时任务查询回写;付款附件每日定时推送 |
|
||||
| 汇率 | 汇率由金蝶维护,TMS 结算时通过 **A801-4 汇率查询** 获取并记录在结算单据上;期末调汇、汇兑损益全部在金蝶处理,TMS 只记录原币与折算人民币 |
|
||||
| 异常重推 | 推送失败统一走"异常处理 → 重新推送";收票单异常须先解除收票-应付关系再反审核删除 |
|
||||
| 黑盒限制 | 财务共享审批对 TMS 黑盒,仅"已提交"状态,看不到审批节点与驳回原因 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 本批流程图涉及的接口速查
|
||||
|
||||
| 编号 | 名称 | 提供方 | 所属流程 |
|
||||
|---|---|---|---|
|
||||
| A902-1 / A902-2 | 客户查询 / 客户保存 | 金蝶 | 客商新建与同步 |
|
||||
| A901-1 | 供应商查询 | 金蝶 | 客商同步(客户自动下推供应商) |
|
||||
| A801-4 | 汇率查询 | 金蝶 | 结算取汇率(记录在结算单据上) |
|
||||
| A801-5 | 黑名单查询 | 金蝶 | 客商准入 |
|
||||
| A913 | 项目信息保存 | 金蝶 | 项目同步 |
|
||||
| C101-1 | 客商风险等级查询 | 合同合规 | 签约、付款前置校验 |
|
||||
| C102-1/2/3 | 项目立项新增/更新/查询 | 合同合规 | 项目同步 |
|
||||
| C103-1 / C103-11 | 合同同步 / 合同信息更新 | 合同合规 | 合同新增及同步 |
|
||||
| C103-2 | 合同附件上传(C106-2 付款附件推送复用) | 合同合规 | 合同、付款附件 |
|
||||
| C103-3 / C103-4 / C103-5 | 合同列表查询 / 详情查询 / 附件下载 | 合同合规 | 合同同步结果回查 |
|
||||
| C103-6 / C103-7 / C103-12 | 合同模板列表 / 合同分类列表 / 合同币种列表 | 合同合规 | 合同创建前置 |
|
||||
| C103-8 | 合同发起特批 | 合同合规 | 高风险客商签约 |
|
||||
| C103-9 / C103-10 | 履约计划保存 / 更新 | 合同合规 | 履约计划 |
|
||||
| C106-1 | 项目/合同额度校验 | 合同合规 | 付款前置校验 |
|
||||
| C106-3 / C106-4 | 付款特批流程发起 / 更新 | 合同合规 | 付款特批 |
|
||||
| C108-1 / C108-2 | 履约记录新建 / 更新 | 合同合规 | 履约数据同步 |
|
||||
| C104-1 | 收款信息同步(拟开发) | 合同合规 | 收款认领场景一 |
|
||||
| C107-1 | 收票认领结果同步(开发中) | 合同合规 | 进项收票 |
|
||||
| A101-1 / A101-2 | 合同信息表保存(二开)/ 查询 | 金蝶 | 合同推送金蝶 |
|
||||
| A102-1 / A102-2 | 暂估应付单保存 / 财务应付单保存 | 金蝶 | 应付 |
|
||||
| A102-4 | 财务应付单查询 | 金蝶 | 查询财务应付单金额与已付款情况,付款前后核对 |
|
||||
| A103-1 / A103-2 / A103-3 / A103-4 | 付款申请保存(应付下推)/ 付款申请单查询 / 预付款申请 / 付款处理查询 | 金蝶 | 对公付款 |
|
||||
| A302-1 / A302-2 | 暂估应收单保存 / 财务应收单保存 | 金蝶 | 应收 |
|
||||
| A303-1 / A303-4 / A303-5 | 开票申请单保存 / 查询 / 发票查询 | 金蝶 | 销项开票 |
|
||||
| A801-1 | 查询全票池发票数据 | 金蝶 | 进项收票 |
|
||||
| A303-2 / A302-6 / A801-2 / A801-3 | 收票单批量保存 / 收票指定应付 / 进项发票下载 / 收票单查询 | 金蝶 | 进项收票 |
|
||||
| A301-1 / A301-2 / A301-3 | 收款单查询 / 收款认领公告查询 / 收款认领结果推送 | 金蝶 | 收款认领 |
|
||||
| A902 | 附件上传到指定单据 | 金蝶 | 各类单据附件 |
|
||||
| A100-1/2/3、C100-1/2 | 认证接口 | 金蝶 / 合同合规 | 全局 |
|
||||
| B901 | 锁单/解锁通知 | ERP | 锁单机制 |
|
||||
| B103 | 特批结果回传(拟开发) | ERP | 合同特批、付款特批 |
|
||||
|
||||
> 完整 62 项接口清单(含地址、出入参)见 `TMS业财融合-业务流程与接口梳理.md` 第 5 节及 `合同业财接口排期.xlsx`「接口导航」。
|
||||
|
||||
---
|
||||
|
||||
## 11. 未决事项与待确认
|
||||
|
||||
1. **图中标注"待定/非必须"的能力**:合同电子签署(集成 E 签宝)标注"待定";资信报告查询下载、合同文件智能审核标注"非必须",由 ERP 按实际情况决定是否集成。
|
||||
2. **拟开发/开发中接口**:C104-1 收款信息同步、C107-1 收票认领结果同步(开发中 50%)、B103 特批结果回传(拟开发),联调前需补齐。
|
||||
3. **图中的业务限制**:金蝶暂不支持一张发票指定多张应付单分摊金额,收票单暂不推送金蝶;金蝶收款只能认领到客户维度,合同/履约维度需 ERP 完成。
|
||||
4. **本文字版系图片 OCR + 人工校对所得**,与 `TMS业财融合方案.docx` 中的原型/流程图如存在差异,以最新合同合规与金蝶接口文档为准;建议对照原图核验第 2.2、3.2、4.2、5.2、6.2、7.2 节中靠近栏位边界的少量标注。
|
||||
Binary file not shown.
@@ -171,7 +171,7 @@ CustomerArchiveController CustomerArchiveServiceImpl
|
||||
| shortName(客商简称) | simplename | 仅当表单为空时回填,**不锁定**(业务信息,TMS 可改) |
|
||||
| —(回填来源标记) | status | `status=C` 时置 `kingdeeStatus=exist`,随表单提交落库;金蝶客户编码与 TMS 客商编号一致,无需单独存储 |
|
||||
|
||||
**锁定字段集合**(`kingdeeStatus=exist` 时表单置灰):统一社会信用代码、客商名称、企业法人、注册地址(省市区+详细)、经营范围、注册资金、营业期限。客商分类、客商性质、所属组织、开票税点、信用额度、负责人、联系电话、客商材料等业务信息正常编辑。
|
||||
**锁定字段集合**(`kingdeeStatus=exist` 时表单置灰):客商名称、企业法人、注册资金;统一社会信用代码仅编辑态锁定,新增态允许重新输入——修改代码后重置回填数据(`kingdeeStatus` 还原为 `none`,清空名称/法人/注册资金/详细地址/经营范围/营业期限),并对新代码重新触发 A902-1 查询。经营范围、营业期限、所在地区、详细地址仅回填、不锁定(TMS 可改)。客商分类、客商性质、所属组织、开票税点、信用额度、负责人、联系电话、客商材料等业务信息正常编辑。
|
||||
|
||||
TMS 无对应字段的金蝶返回项(注册资本原文、成立日期 establishdate、纳税人识别号等)不回填、不入库。
|
||||
|
||||
@@ -184,51 +184,38 @@ TMS 无对应字段的金蝶返回项(注册资本原文、成立日期 establ
|
||||
| societycreditcode | unifiedCreditCode | 直传(必填,候选键) |
|
||||
| tx_register_no | unifiedCreditCode | 与统一社会信用代码一致时推送 |
|
||||
| artificialperson | legalPerson | 直传 |
|
||||
| type(伙伴类型) | customerNature(客商性质) | **常量映射表**,见 4.3;映射缺失时兜底默认值 |
|
||||
| type(伙伴类型) | customerNature(客商性质) | 客商性质字典(`nature_of_client`)dictKey 即金蝶伙伴类型编码,直接推送;dictKey 为空或非有效编码(1~17)时抛 `ServiceException`(推送置 failed,不兜底) |
|
||||
| bizpartner_address | registeredAddress | `prepare()` 已拼接的完整地址直传 |
|
||||
| businessscope | businessScope | 多选编码 → 选项 label 文本、以「、」拼接 |
|
||||
| businessterm | businessTermType + businessEndDate | `长期` → `长期`;`固定期限` → `至 yyyy-MM-dd`(TMS 未采集起始日) |
|
||||
| bizpartner_phone | contactPhone | 直传 |
|
||||
| fcusbeizhu | remark | 直传,空串传 `""` |
|
||||
| bizfunction | 固定 | `1,2,3,4` |
|
||||
| awrp_datasourcesys | 配置 | `@Value("${thirdParty.bfi.customer.srcSys:WLTMS}")`,默认 `WLTMS`(运输TMS) |
|
||||
| awrp_datasourcesys | 配置 | `BfiProperties`(公共键 `thirdParty.bfi.srcSys`),默认 `WLTMS`(运输TMS) |
|
||||
| awrp_cusfortrade | 固定 | `A` 是(`BfiConstant.CUS_FOR_TRADE_YES`) |
|
||||
| entry_groupstandard | 固定 | `[{standardid_number: JBFLBZ, groupid_number: 1102}]`(外部客户) |
|
||||
| createorg_number | 配置 | `@Value("${thirdParty.bfi.customer.createOrg:WLTMS}")`,与财务确认后可改 |
|
||||
| entry_groupstandard | customerKind | `standardid_number` 固定 JBFLBZ;`groupid_number` 按客商类型:内部组织(internal)→ 1101,外部客商(external,含空)→ 1102 |
|
||||
| createorg_number | 不传 | 由星瀚按默认创建组织处理 |
|
||||
| number | customerCode | 传 TMS 客商编号,**金蝶客户编码与 TMS 客商编号保持一致**,无需本地冗余存储 |
|
||||
| entry_bank / entry_linkman | 不传 | 本期不推银行与联系人分录 |
|
||||
| entry_bank | receiptAccounts 收款账户明细 | 每条账户一行分录:`bankaccount`=银行账号、`accountname`=开户行、`currency_number`=CNY(`BfiConstant.CURRENCY_CNY`)、`isdefault_bank`=是否默认;未填收款账户时不传该分录 |
|
||||
| entry_linkman | principal + contactPhone | `contactperson`=客商负责人、`phone`=联系电话、`isdefault_linkman`=true;未填负责人时不传该分录 |
|
||||
| 注册资金 regcapital | — | **A902-2 无此字段**,新客商推送不含;仅 A902-1 回填使用 |
|
||||
|
||||
### 4.3 客商性质 → 金蝶伙伴类型映射(常量类)
|
||||
### 4.3 伙伴类型取值(客商性质字典直取)
|
||||
|
||||
映射与全部固定值集中放在 `blade-transport` 常量类 `org.springblade.transport.constant.CustomerBfiConstants`(**不走 Nacos 配置**):
|
||||
`nature_of_client` 字典已重构:**dictKey 即金蝶伙伴类型编码**,录入时按《客商填报审核编码规范》(`doc/docs/客商填报审核编码规范.xlsx`)选择性质(看我区/非我区、机构类别)。前端字典下拉按项目约定存 dictValue 文本,推送时 `CustomerBfiConverter.resolvePartnerType(customerNature)` 将其解析为 dictKey 作为 `type`:
|
||||
|
||||
```java
|
||||
public class CustomerBfiConstants {
|
||||
| dictKey | dictValue(客商性质) | 金蝶伙伴类型 |
|
||||
| --- | --- | --- |
|
||||
| 8 | 我区国企/国企控股 | 8 我区国有企业 |
|
||||
| 7 | 非我区国企/国企控股 | 7 非我区国有企业 |
|
||||
| 6 | 民企/民企控股 | 6 民营企业 |
|
||||
| 12 | 三资企业 | 12 其他 |
|
||||
| 17 | 集体企业 | 17 集体经济组织 |
|
||||
| 5 | 个体 | 5 个体户 |
|
||||
|
||||
/** 推送金蝶固定值:业务职能 全选(1销售,2结算,3付款,4收货) */
|
||||
public static final String BIZ_FUNCTION_ALL = "1,2,3,4";
|
||||
取值规则(`CustomerBfiConverter.resolvePartnerType(customerNature)`):前端字典下拉存 **dictValue 文本**(项目约定),后端解析时——值为数字编码(dictKey,1~17)直接使用;为 dictValue 文本(如「我区国企/国企控股」,含存量数据)时按 `nature_of_client` 字典反查对应 dictKey;均无法解析时抛 `ServiceException`(提示「客商性质未配置有效的金蝶伙伴类型编码」),`syncKingdee` 推送环节捕获后置 `failed` 并记录失败原因,等待修正字典数据后重推。
|
||||
|
||||
/** 推送金蝶固定值:伙伴类型兜底编码(民营企业),客商性质未命中映射时使用 */
|
||||
public static final String DEFAULT_PARTNER_TYPE = "6";
|
||||
|
||||
/**
|
||||
* 客商性质(nature_of_client 字典 dictKey)→ 金蝶伙伴类型编码
|
||||
* 键名以数据库字典 nature_of_client 实际 dictKey 为准,实施时核对;未命中走 DEFAULT_PARTNER_TYPE
|
||||
*/
|
||||
public static final Map<String, String> NATURE_TYPE_MAPPING = Map.of(
|
||||
"企业法人", "1", // 法人企业
|
||||
"个人", "4", // 个人
|
||||
"个体工商户", "5", // 个体户
|
||||
"民营企业", "6", // 民营企业
|
||||
"国有企业", "8", // 我区国有企业
|
||||
"政府事业单位", "9", // 政府事业单位等
|
||||
"其他", "12" // 其他
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
> 金蝶伙伴类型全集见 `BfiCustomerSaveDTO.type` 注释(1 法人企业 / 2 非法人企业 / 3 非企业单位 / 4 个人 / 5 个体户 / 6 民营企业 / 7 非我区国有企业 / 8 我区国有企业 / 9 政府事业单位等 / 10 农民专业合作社 / 11 民政部门 / 12 其他 / 13 境外客商 / …)。初始映射实施前需与财务核对一遍。
|
||||
固定值集中放在 `blade-transport` 常量类 `org.springblade.transport.constant.CustomerBfiConstants`(**不走 Nacos 配置**),伙伴类型编码全集见 `BfiCustomerSaveDTO.type` 注释(1 法人企业 / 2 非法人企业 / 3 非企业单位 / 4 个人 / 5 个体户 / 6 民营企业 / 7 非我区国有企业 / 8 我区国有企业 / 9 政府事业单位等 / 10 农民专业合作社 / 11 民政部门 / 12 其他 / 13 境外客商 / 14 工会 / 15 司法行政 / 16 虚拟客商 / 17 集体经济组织)。
|
||||
|
||||
---
|
||||
|
||||
@@ -273,7 +260,7 @@ VALUES (2075431800000000001, {客商档案菜单id}, 'customer_archive_sync', '
|
||||
| 文件 | 动作 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `src/api/vehicle/customer-archive.js` | 修改 | 新增 `queryKingdeeCustomer(creditCode)`(GET `/blade-transport/bfi/customer/query-by-credit-code`)、`syncKingdee(id)`(POST `/blade-transport/customer-archive/sync-kingdee`) |
|
||||
| `src/views/vehicle/customer-archive.vue` | 修改 | ① 新增态 watch `unifiedCreditCode`:满 18 位且通过现有格式校验(18 位字符 + 校验码)后防抖 500ms 自动查询;② 三分支处理(2.3);③ `kingdeeStatus==='exist'` 时锁定 4.1 字段集合(disabled);④ `normalizeArchive()` 携带 `kingdeeStatus/kingdeeNumber`;⑤ 列表新增「同步金蝶」按钮(仅 `approved + failed` 可点)与「金蝶客户编码」「金蝶同步状态」列;⑥ 编辑态不触发查询;⑦ 审批通过推送由后端 approve 端点内部触发,前端无需额外调用 |
|
||||
| `src/views/vehicle/customer-archive.vue` | 修改 | ① 新增态 watch `unifiedCreditCode`:满 18 位且通过现有格式校验(18 位字符 + 校验码)后防抖 500ms 自动查询;② 三分支处理(2.3);③ `kingdeeStatus==='exist'` 时锁定 4.1 锁定字段集合(disabled);④ `normalizeArchive()` 携带 `kingdeeStatus/kingdeeNumber`;⑤ 列表新增「同步金蝶」按钮(仅 `approved + failed` 可点)与「金蝶客户编码」「金蝶同步状态」列;⑥ 编辑态不触发查询;⑦ 审批通过推送由后端 approve 端点内部触发,前端无需额外调用 |
|
||||
|
||||
---
|
||||
|
||||
@@ -293,7 +280,7 @@ VALUES (2075431800000000001, {客商档案菜单id}, 'customer_archive_sync', '
|
||||
|
||||
## 7. 实施核对清单
|
||||
|
||||
1. [ ] 与财务核对 4.3 客商性质初始映射(键 = `nature_of_client` 字典实际 value)与 `createorg_number` 取值。
|
||||
1. [ ] 与财务核对 4.3 客商性质字典 dictKey 与金蝶伙伴类型编码对应关系(录入侧按《客商填报审核编码规范》选择性质),以及 `createorg_number` 取值。
|
||||
2. [ ] DDL 按 `doc/sql/` 各数据库方言同步(MySQL / PostgreSQL / Oracle / SQL Server / 达梦 / 人大金仓 / 崖山),排序规则 `utf8mb4_general_ci`。
|
||||
3. [ ] 前端锁定字段集合与 4.1 一致;`exist` 状态下后端不额外强校验锁定字段是否被改(前端已置灰,以提交值为准,工商信息实际以金蝶为准)。
|
||||
4. [ ] 「同步金蝶」按钮权限码 `customer_archive_sync` 与菜单 SQL 一致。
|
||||
@@ -308,5 +295,12 @@ VALUES (2075431800000000001, {客商档案菜单id}, 'customer_archive_sync', '
|
||||
- 2026-09-17(第二轮调整):
|
||||
- **取消 `kingdee_number` 字段**:A902-2 `number` 直接传 TMS 客商编号,金蝶客户编码与客商编号保持一致;DDL 缩减为 3 字段,前端移除「金蝶客户编码」列及相关引用。
|
||||
- **客商数据定时同步子流程本期不做**:经确认 ERP/TMS 无此既有逻辑,且金蝶 SDK(blade-bfi-api)暂未提供 A901-1 供应商查询;该子流程不阻塞核心链路,待 A901-1 能力补齐后按 §2.3 步骤9(ERP 定时调 A902-1/A901-1 更新客商数据与使用状态)另行立项。推送失败(`failed`)由列表「同步金蝶」按钮人工重推。
|
||||
- 2026-09-17(第四轮调整):经确认放宽锁定范围,经营范围、营业期限、所在地区(省市区)、详细地址在 `exist` 状态下仅回填不置灰,可正常编辑;锁定字段集合缩减为客商名称、企业法人、注册资金。统一社会信用代码在新增态支持重新输入:修改代码即重置回填数据并重新触发 A902-1 查询,编辑态仍锁定。
|
||||
- 2026-09-17(第五轮调整):A902-2 伙伴类型转换改为依据 `doc/docs/客商填报审核编码规范.xlsx`:以统一社会信用代码登记管理部门前缀为主(身份证/手机号→个人,1→政府事业单位等、3→司法行政、5→民政部门、8→工会、N→集体经济组织、Y→其他、92→个体户、93→农民专业合作社、91→企业按客商性质细分),原客商性质映射降级为前缀未识别/代码缺失时的兜底。`CustomerBfiConstants` 新增伙伴类型编码常量与前缀映射表,`CustomerBfiConverter.resolvePartnerType` 增加 `unifiedCreditCode` 入参。`mvn clean compile` 通过。
|
||||
- 2026-09-17(第六轮调整):按数据库字典 `nature_of_client` 实际值(国企/国企控股、民企/民企控股、三资企业、集体企业、个体)重建 `NATURE_TYPE_MAPPING`;91 开头企业取消「含国有」文本特判,统一走性质映射(国企/国企控股→8)。三资企业→其他(12)、集体企业→集体经济组织(17) 为近似映射,待财务核对。`mvn clean compile` 通过。
|
||||
- 2026-09-17(第七轮调整):BFI 推送配置抽取统一为 `org.springblade.transport.config.BfiProperties`(`@ConfigurationProperties(prefix = "thirdparty.bfi")`,prefix 须全小写,宽松绑定匹配 Nacos 中 camelCase 键):数据来源系统编码收口为公共键 `thirdParty.bfi.srcSys`(原 `thirdParty.bfi.customer.srcSys` / `thirdParty.bfi.payApply.srcSys` 废弃,环境变量改用 `BFI_SRC_SYS`),客商 `customer.createOrg`、付款申请 `payApply.billtype/exratetable/srcType` 集中管理;`CustomerBfiConverter`、`PaymentApplicationServiceImpl`、`KingdeeApBillSyncSupport` 改为注入 `BfiProperties`。Nacos 配置(blade-dev/blade-prod/third-party-api.yaml)同步:bfi 节点新增 `srcSys`、`customer.createOrg`,payApply 节点移除 `srcSys`。`mvn clean compile` 通过。
|
||||
- 2026-09-17(第八轮调整):`nature_of_client` 字典重构为 dictKey 即金蝶伙伴类型编码(8 我区国企/国企控股、7 非我区国企/国企控股、6 民企/民企控股、12 三资企业、17 集体企业、5 个体),录入时按编码规范选择性质,推送侧 `resolvePartnerType` 直接取 dictKey 推送(1~17 校验,非法/为空/存量文本值兜底 `6`);删除信用代码前缀转换与文本映射表及 `CustomerBfiConstants` 中相关常量。`mvn clean compile` 通过。
|
||||
- 2026-09-17(第九轮调整):伙伴类型取消兜底,`resolvePartnerType` 在客商性质 dictKey 为空或非有效编码(1~17)时抛 `ServiceException`,由 `syncKingdee` 推送环节捕获置 `failed` 并记录原因,修正数据后可重推;删除 `DEFAULT_PARTNER_TYPE` 常量。`mvn clean compile` 通过。
|
||||
- 2026-09-20(第十轮调整):移除 `customer.createOrg` 配置项,`createorg_number` 固定传 `CustomerBfiConstants.CUSTOMER_CREATE_ORG`(WLTMS),`BfiProperties` 删除 customer 节点,仓库与 Nacos(blade-dev)配置同步移除。前端修复:统一社会信用代码查询去除同码去重守卫(原 `kingdeeQueriedCode` 拦截导致改回历史代码不再触发 A902-1 查询),代码一经变化即防抖重新查询。`mvn clean compile` 与 `pnpm run build` 通过。
|
||||
- 待人工执行:`doc/sql/transport/blade_customer_archive_kingdee_20260917.sql`(含「同步金蝶」按钮菜单 INSERT);与财务核对客商性质映射键与 `createorg_number` 取值。
|
||||
- 2026-09-17(第三轮新增定时任务):新增 `task/CustomerKingdeeSyncTask`(仿 `PaymentKingdeeResultTask`,开关 `thirdParty.bfi.customer.syncEnabled` 默认关闭、cron `thirdParty.bfi.customer.cron` 默认每天 02:00)与 `ICustomerArchiveService.syncKingdeeCustomerData()`:① 待推送客商(approved 且 none/failed)复用 `syncKingdee` 自动推送(自代理逐条独立事务,单条失败不中断);② 已同步客商(synced/exist)按信用代码分批(50/批)A902-1 查询,金蝶禁用(enable=0)联动停用客商档案并记变更,金蝶恢复可用不自动启用。A901-1 供应商查询仍待 SDK 提供能力后扩展。`mvn clean compile` 通过。
|
||||
|
||||
@@ -0,0 +1,334 @@
|
||||
# 应付单与付款申请同步金蝶全链路业务流程(正式结算单同步 → 付款管理批量同步 → 付款结果定时回写)
|
||||
|
||||
> 适用系统:TMS(BladeX 微服务平台,服务:blade-transport)
|
||||
> 对接系统:金蝶云·星瀚(业财融合 BFI,经 iPaaS 网关)
|
||||
> 覆盖接口:A102-2 财务应付单保存、A102-4 财务应付单查询、A103-1 付款申请保存(应付下推)、A103-2 付款申请单查询
|
||||
> 关联文档:`2026-09-18-付款管理金蝶同步全链路逻辑梳理(推送链路与回写链路连贯性).md`、`2026-09-16-付款管理正式付款同步金蝶(财务应付单+付款申请下推)技术文档.md`、`2026-09-17-付款管理金蝶付款结果定时回写(A103-2付款申请单查询+A103-4付款处理查询)技术文档.md`
|
||||
> 最后更新:2026-09-20(按当前代码重新梳理:A102-2 已由正式结算单页面触发推送)
|
||||
|
||||
---
|
||||
|
||||
## 1. 整体业务链路
|
||||
|
||||
一笔正式结算付款要完成金蝶同步,整体分**三个环节**,由三个页面/功能接力完成:
|
||||
|
||||
```
|
||||
环节一:正式结算单「同步金蝶」(人工,正式付款单页面)
|
||||
审批通过的应付类正式结算单 → 推送金蝶财务应付单(A102-2,前置 A102-4 幂等预检)
|
||||
→ 回写结算单:金蝶单据编号 + 同步状态 synced
|
||||
|
||||
环节二:付款管理「批量同步」(人工,付款管理页面)
|
||||
审批通过的付款申请(结算付款)→ 前置校验应付单已生成(A102-4)→ A103-2 幂等预检
|
||||
→ 推送金蝶付款申请单(A103-1 应付下推,分录勾稽应付单付款计划分录)
|
||||
→ 回写付款申请:金蝶单据id/编号 + 同步状态 synced
|
||||
(预付款 project_advance / progress_advance 不走本链路,直接 A103-3 保存,见关联文档)
|
||||
|
||||
环节三:PaymentKingdeeResultTask 定时回写(自动,默认每10分钟)
|
||||
① A103-2 付款申请单查询:回填金蝶单据编号、单据状态、已付金额(synced → paying → paid/closed)
|
||||
② A103-4 付款处理查询:回填真实付款记录(金额、付款日期、凭证留档)
|
||||
```
|
||||
|
||||
核心设计原则:**以金蝶侧实际生成为准**。每一步推送前先查询(防重键)确认金蝶是否已有单据:已生成则幂等跳过/回填勾稽,未生成才推送;推送接口真正报错才算同步失败。任一环节中断后重新触发,均从断点续传而非从头重推。
|
||||
|
||||
---
|
||||
|
||||
## 2. 四个接口在链路中的角色
|
||||
|
||||
| 接口 | 名称 | 方向 | 触发环节 | 业务用途 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| A102-2 | 财务应付单保存 | TMS → 金蝶 | 环节一 | 一张正式结算单生成一张金蝶财务应付单 |
|
||||
| A102-4 | 财务应付单查询 | TMS → 金蝶(查询) | 环节一前置 / 环节二前置 | ①推送前幂等预检应付单是否已生成;②反查应付单付款计划分录标识(awrp_entry_code_p),供 A103-1 勾稽 |
|
||||
| A103-1 | 付款申请保存(应付下推) | TMS → 金蝶 | 环节二 | 基于已生成的应付单下推生成金蝶付款申请单 |
|
||||
| A103-2 | 付款申请单查询 | TMS → 金蝶(查询) | 环节二前置(幂等预检/恢复勾稽)+ 环节三①(定时回写) | 查询付款申请单是否已生成、单据状态与付款进度 |
|
||||
| A103-4 | 付款处理查询 | TMS → 金蝶(查询) | 环节三② | 回填实际付款记录(本文档附带说明,逻辑在定时任务内) |
|
||||
|
||||
(A103-3 预付款直接保存仅预付款链路使用,不在本文范围。)
|
||||
|
||||
---
|
||||
|
||||
## 3. 环节一:正式结算单「同步金蝶」(推送 A102-2)
|
||||
|
||||
### 3.1 业务流程
|
||||
|
||||
1. 操作入口:正式付款单(正式结算单)页面「同步金蝶」按钮,单笔操作。
|
||||
2. 前置状态校验(不满足直接报错,不调用金蝶):
|
||||
- 审批状态必须是 **审批通过(approved)**;草稿/审批中/已驳回/已作废均不允许。
|
||||
- 结算类型必须是 **应付(payable)**;应收(receivable)对应财务应收单(A302-2),推送规则未确认,当前拦截报错。
|
||||
- 同步状态已是 **已同步(synced)** 时幂等返回,不重复推送。
|
||||
- 正式结算单必须存在结算明细(分录取数来源)。
|
||||
3. 组装财务应付单防重键(外部系统来源单据号):**正式结算单号_结算明细单据号1_单据号2…**(单据号去重、保持行序、下划线拼接)。一张结算单对应一张金蝶应付单,同一结算单下多笔付款申请共享该应付单。
|
||||
4. 解析应付单明细分录:逐条**应付货物费用行**生成一条分录(不聚合),取数校验(任一不满足报错拦截):
|
||||
- 结算明细对应应付明细必须存在货物费用行(取数必须来自应付费用明细,无兜底);
|
||||
- 货物类型必须在货物类型档案中维护货物编码(多种货物类型以「、/,」分隔时不拆行,取第一种类型);
|
||||
- 运费计算单位不能为空(优先快照运费计算单位,兜底数量单位;计量单位档案暂无编码字段,暂以单位名称作编码)。
|
||||
5. A102-4 幂等预检:按防重键查询金蝶是否已生成财务应付单。
|
||||
- **已生成** → 幂等跳过保存,直接取已有单据编号(说明上次同步已保存成功、在后续环节中断);
|
||||
- **未生成** → 调用 A102-2 保存。
|
||||
6. 落库回写正式结算单:金蝶单据编号(A102-2 返回的应付单编号)、同步状态 = synced、同步时间。应付单内部 id 不落库。
|
||||
|
||||
### 3.2 A102-2 入参来源
|
||||
|
||||
主表:
|
||||
|
||||
| 接口字段 | 含义 | 必填 | 来源 |
|
||||
| --- | --- | --- | --- |
|
||||
| billtypeid_number | 单据类型.编码 | 是 | 常量默认名称「服务采购应付」经单据类型映射字典转为编码 `ApFin_service_BT_S` |
|
||||
| org_number | 结算组织.编码 | 是 | 合同所属组织:合同.organizationId → 部门编码(未维护报错) |
|
||||
| bizdate | 单据日期 | 是 | 同步当日(格式 yyyy-MM-dd HH:mm:ss) |
|
||||
| asstacttype | 往来类型 | 是 | 按合同类别路由:合同类别=「客户合同」→ bd_customer(客户),否则 bd_supplier(供应商) |
|
||||
| asstact_number | 往来户.编码 | 是 | 合同乙方 → 客商档案按全称/简称匹配取客商编码(乙方为空或未维护客商编码均报错) |
|
||||
| purmode | 付款方式 | 是 | 常量 CASH(现购,金蝶自动 100% 推付款) |
|
||||
| currency_number | 结算币别.货币代码 | 是 | 合同结算币种,RMB 统一映射 CNY(为空报错) |
|
||||
| payorg_number | 付款组织.编码 | 是 | 同结算组织编码 |
|
||||
| payproperty_number | 款项性质.编码 | 是 | 常量 2001(待金蝶确认) |
|
||||
| isincludetax / ispricetotal / isintax | 录入含税价/录入总价/是否含税 | 否 | 固定 true / true / false(录入总价免单价换算) |
|
||||
| awrp_src_sys | 外部系统编号 | 是 | 配置项,默认 WLTMS(应付单防重键之一) |
|
||||
| awrp_src_code | 外部系统来源单据号 | 是 | 防重键:正式结算单号_结算明细单据号拼接 |
|
||||
| awrp_src_type | 外部单据类型 | 是 | 常量「TMS财务应付单」(待金蝶确认) |
|
||||
|
||||
明细分录(detailentry,每条应付货物费用行一条):
|
||||
|
||||
| 接口字段 | 含义 | 必填 | 来源 |
|
||||
| --- | --- | --- | --- |
|
||||
| material_number | 物料编码.编码 | 是 | 货物类型 → 货物类型档案货物编码;**联调期临时固定传金蝶测试档案值 SP0324** |
|
||||
| measureunit_number | 计量单位.编码 | 是 | 快照运费计算单位(兜底数量单位);**联调期临时固定传 TON** |
|
||||
| quantity | 数量 | 是 | 该行运输数量,无吨位兜底 1 |
|
||||
| price | 单价 | 否 | 费用明细运输单价(单据头录入总价,单价仅参考) |
|
||||
| e_pricetaxtotal | 应付金额(含税) | 是 | 该费用行调整后总金额(含税) |
|
||||
| e_amount | 金额(不含税) | 否 | 结算货物费用行不含税金额(应付费用行无不含税字段,经结算费用行回链;无映射兜底 0) |
|
||||
| project_number | 项目.项目编码 | 是 | **联调期临时固定传金蝶测试档案值 999**(真实取值:项目档案项目编码,无项目传 999) |
|
||||
| awrp_entry_code | 外部系统来源分录标识 | 是 | 应付货物费用行 id(雪花 id 天然唯一);A103-1 的 awrp_entry_code 与之对应 |
|
||||
|
||||
付款计划(planentity)暂不传:由金蝶按明细自动汇总生成,其付款计划分录标识(awrp_entry_code_p)后续经 A102-4 反查。
|
||||
|
||||
### 3.3 返回与落库
|
||||
|
||||
- 成功:返回 `result[0].number`(金蝶应付单编号)→ 写入正式结算单金蝶单据编号;`result[0].id` 为星瀚内部主键,不落库。
|
||||
- 失败:金蝶单据级失败以 errors 明细抛出业务异常,本次同步失败(结算单同步状态保持原值,可重新触发)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 环节二:付款管理「批量同步」(推送 A103-1)
|
||||
|
||||
### 4.1 业务流程
|
||||
|
||||
1. 操作入口:付款管理页面勾选记录点「批量同步」(也支持单笔同步接口);权限码 `payment_application_sync`。
|
||||
2. 批量语义:
|
||||
- 逐单独立事务:**单条失败不中断整批**,失败单据落「生成失败(failed)」状态并返回失败原因;
|
||||
- 整批共享档案缓存(合同/客商/货物类型/结算明细等),首单加载后全批复用;
|
||||
- 批量开始前整批一次 A102-4 批量查询(每批最多 50 个防重键),预热应付单是否已生成的缓存,消除逐单远程查询。
|
||||
3. 前置状态校验(逐单,不满足不调金蝶):
|
||||
- 审批状态必须是 **审批通过(approved)**;
|
||||
- 金蝶同步状态为 **synced / paying / paid / closed** 的幂等跳过,直接返回已有金蝶单据 id,不重复推送;
|
||||
- 付款类型为**结算付款(settlement_payment)** 走本链路;预付款(project_advance / progress_advance)走 A103-3 直推,不在本文范围。
|
||||
4. 结算付款链路逐步动作:
|
||||
1. **结算类型路由**:关联正式结算单结算类型为应收(receivable)时拦截报错(A302-2 未启用);聚合多结算单场景暂按应付处理。
|
||||
2. **应付单已生成前置校验(A102-4)**:按每张关联正式结算单的防重键查询,任一应付单未生成则报错提示「请先在正式付款单页面同步金蝶」——即环节一未完成时环节二不允许执行。
|
||||
3. **A103-2 幂等预检(恢复勾稽)**:按付款申请号查询金蝶付款申请单是否已生成(防上次下推成功但本地回滚的断链场景)。已生成 → 直接回填单据 id 与编号,视为同步成功,跳过下推。
|
||||
4. **解析付款申请分录**:与环节一应付单明细分录同源(逐条应付货物费用行一条,含校验项相同)。
|
||||
5. **A103-1 应付下推**:每条分录先经 A102-4 按所属结算单防重键反查金蝶生成的付款计划分录标识(awrp_entry_code_p,同一结算单只反查一次),用于分录勾稽关联。
|
||||
6. **落库**:金蝶单据 id(星瀚付款申请单内部主键)、金蝶单据编号(下推返回的单据编号,立即可见)、同步状态 = synced。
|
||||
5. 失败处理:任一步异常 → 单据事务回滚,独立事务落「生成失败(failed)」(仅审批通过单据生效),返回原因(含金蝶 errors 明细)。failed 单据可重新勾选同步,从断点续传。
|
||||
|
||||
### 4.2 A103-1 入参来源
|
||||
|
||||
主表:
|
||||
|
||||
| 接口字段 | 含义 | 必填 | 来源 |
|
||||
| --- | --- | --- | --- |
|
||||
| awrp_src_code | 外部系统来源单据号 | 是 | 付款申请号(付款申请单防重键) |
|
||||
| awrp_src_sys | 外部系统编号 | 是 | 配置项,默认 WLTMS |
|
||||
| applydate | 申请日期 | 是 | 付款申请申请日期(空取当天,格式 yyyy-MM-dd HH:mm:ss) |
|
||||
|
||||
其余主表字段(付款组织、采购组织、请款事由、汇率、付款渠道、申请人等)当前不传,由金蝶根据应付单自动带出。
|
||||
|
||||
分录(entry,与应付单明细分录一一对应):
|
||||
|
||||
| 接口字段 | 含义 | 必填 | 来源 |
|
||||
| --- | --- | --- | --- |
|
||||
| e_paymenttype_number | 付款类型.编码 | 是 | 常量 201(正式付款) |
|
||||
| awrp_finapbill_entryid | 结算单分录id(勾稽键) | 是 | 经 A102-4 反查该分录所属正式结算单应付单的付款计划分录标识 awrp_entry_code_p |
|
||||
| awrp_entry_code | 对方系统唯一行id(不能重复) | 是 | 应付货物费用行 id(与环节一应付单明细 awrp_entry_code 同源同值) |
|
||||
| e_assacct | 往来账户 | 是 | 付款申请收款账户(收款方银行账号) |
|
||||
| e_bebank_number | 往来银行.编码 | 是 | **联调期临时固定传金蝶测试档案值 001110012009**(待建立银行档案编码映射) |
|
||||
| e_applyamount | 申请金额 | 是 | 该分录应付金额(含税),与对应应付单分录一致 |
|
||||
| project_number | 项目.项目编码 | 是 | **联调期临时固定传 999** |
|
||||
| awrp_src_type | 外部单据类型 | 是 | 配置项(默认 0KzXs,待金蝶确认) |
|
||||
|
||||
### 4.3 A103-2 幂等预检入参来源
|
||||
|
||||
| 接口字段 | 含义 | 来源 |
|
||||
| --- | --- | --- |
|
||||
| awrp_src_code | 外部系统来源单据号(支持多值) | 付款申请号 |
|
||||
| awrp_src_sys | 外部系统编号 | 配置项 WLTMS |
|
||||
| pageNo / pageSize | 分页 | 自动翻页(页大小 200,最大 50 页保护) |
|
||||
|
||||
查询结果按来源单号归并,同一单号取最近修改(modifytime 最大)的一条;查到 `id`/`billno` 即回填并视为已生成。
|
||||
|
||||
---
|
||||
|
||||
## 5. 环节三:PaymentKingdeeResultTask 定时回写(A103-2 / A103-4)
|
||||
|
||||
### 5.1 任务与触发
|
||||
|
||||
- 调度:Spring 定时任务,默认**每 10 分钟**一次;由 Nacos 配置 `thirdParty.bfi.payResult.syncEnabled`(开关,默认关)与 `thirdParty.bfi.payResult.cron` 控制。
|
||||
- 手动触发:付款管理「手动回写金蝶付款结果」接口,逻辑同一入口。
|
||||
- 任务只**查询回写,不主动推送**。
|
||||
|
||||
### 5.2 ① A103-2 付款申请单查询回写
|
||||
|
||||
1. 轮询范围(同时满足):审批状态 = approved,且金蝶同步状态 ∈ {synced, paying, failed}。paid / closed 为终态不再轮询;failed 纳入勾稽——金蝶查到说明上次推送实际成功(如请求超时但远端已落单),自动纠偏回填,防止人工重推产生重复单据。
|
||||
2. 查询方式:按付款申请号分批(每批 50)调 A103-2,自动翻页;同一来源单号取最近修改一条。
|
||||
3. 回写内容(查到才更新,未查到状态不变):
|
||||
- 金蝶单据编号 ← 返回 billno;金蝶单据 id ← 返回 id;
|
||||
- 金蝶同步状态 ← 按「A103-2 状态映射」(见 6.2);
|
||||
- 已付金额 ← 分录已付金额(e_paidamt)汇总;分录缺失且已付款时兜底取申请金额。
|
||||
4. 付款完成(paid)联动:更新履约付款数据(预结算预付记录、正式结算付款记录)。
|
||||
|
||||
### 5.3 ② A103-4 付款处理查询回填付款记录
|
||||
|
||||
1. 回填候选:
|
||||
- 本轮 A103-2 查到付款状态 ≠ Unpaid(已开始付款)的单据;
|
||||
- 已付款(paid)但尚无真实付款记录的单据(补偿轮询)。
|
||||
2. 查询方式:按**付款人(公司)编码**分组查询(编码优先取 A103-2 返回的付款组织编码,兜底按合同所属组织解析);业务日期窗口固定最近 1 个月(接口限制);自动翻页。
|
||||
3. 勾稽匹配:付款处理单的源单 id = 本地金蝶单据 id 优先;源单编号 = 本地金蝶单据编号 兜底。
|
||||
4. 回填:按付款处理单号 upsert 付款记录——实际付款金额、付款日期、付款处理单整体 JSON 留档(凭证号、银行流水、电子回单等);同时清理历史模拟(MOCK-PAY- 前缀)付款记录。
|
||||
|
||||
---
|
||||
|
||||
## 6. 状态限制与状态机
|
||||
|
||||
### 6.1 各环节调用前的状态门禁汇总
|
||||
|
||||
| 环节 | 单据 | 必须满足 | 幂等跳过 | 拦截报错 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 环节一 正式结算单同步 | 正式结算单 | 审批状态=approved;结算类型=payable;有结算明细 | 同步状态=synced 直接返回已有编号 | 草稿/审批中/已驳回/已作废;应收结算类型;无结算明细;档案缺失(组织编码/币种/客商编码/货物编码/计量单位/货物费用行) |
|
||||
| 环节二 付款管理同步 | 付款申请 | 审批状态=approved | 金蝶状态∈{synced,paying,paid,closed} 直接返回已有单据id | 未审批;结算类型为应收;关联正式结算单的应付单未生成(提示先完成环节一);档案缺失 |
|
||||
| 环节三 定时回写 | 付款申请 | 审批状态=approved 且金蝶状态∈{synced,paying,failed} | paid/closed 终态不再轮询 | 单笔回写异常仅计数不中断整轮 |
|
||||
|
||||
### 6.2 金蝶同步状态机(本地字段 kingdeeStatus / kingdeeSyncStatus)
|
||||
|
||||
```
|
||||
unsynced 未生成 ──推送成功──> synced 已生成 ──paystatus=Inpayment──> paying 付款中 ──paystatus=Alreadypay──> paid 已付款(终态)
|
||||
│ │ │
|
||||
│ └────billstatus=D──> closed 已关闭(终态)└──billstatus=D──> closed 已关闭(终态)
|
||||
└──推送异常(事务回滚+独立事务落状态)──> failed 生成失败 ──重推成功或回写勾稽纠偏──> synced / paying / paid
|
||||
```
|
||||
|
||||
### 6.3 A103-2 返回值 → 本地状态映射
|
||||
|
||||
| A103-2 返回 | 本地状态 | 是否终态(停止轮询) |
|
||||
| --- | --- | --- |
|
||||
| 付款状态 paystatus = Alreadypay | paid 已付款 | 是 |
|
||||
| 单据状态 billstatus = D | closed 已关闭 | 是 |
|
||||
| 付款状态 paystatus = Inpayment | paying 付款中 | 否(继续轮询) |
|
||||
| 其余(billstatus=A/B/C 且 paystatus=Unpaid) | synced 已生成 | 否(继续轮询) |
|
||||
| 查无此单(金蝶未生成) | 状态不变 | —(failed 单据保持等待人工处理) |
|
||||
|
||||
---
|
||||
|
||||
## 7. 字典对照表
|
||||
|
||||
### 7.1 审批状态(approvalStatus,正式结算单/付款申请共用)
|
||||
|
||||
| 字典值 | 含义 |
|
||||
| --- | --- |
|
||||
| draft | 草稿 |
|
||||
| reviewing | 审批中(财务审核) |
|
||||
| approved | 审批通过(**唯一允许同步金蝶的状态**) |
|
||||
| returned | 已驳回 |
|
||||
| voided | 已作废 |
|
||||
|
||||
### 7.2 金蝶同步状态(kingdeeStatus / kingdeeSyncStatus,本地)
|
||||
|
||||
| 字典值 | 含义 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| unsynced | 未生成 | 新建单据默认 |
|
||||
| synced | 已生成 | 推送成功,等待金蝶付款 |
|
||||
| paying | 付款中 | A103-2 paystatus=Inpayment 部分付款 |
|
||||
| paid | 已付款 | A103-2 paystatus=Alreadypay,终态 |
|
||||
| closed | 已关闭 | A103-2 billstatus=D,终态 |
|
||||
| failed | 生成失败 | 推送异常/金蝶返回失败,可重推 |
|
||||
|
||||
### 7.3 金蝶付款申请单状态(A103-2 返回)
|
||||
|
||||
| 字段 | 字典值 | 含义 |
|
||||
| --- | --- | --- |
|
||||
| paystatus 付款状态 | Alreadypay | 已付款 |
|
||||
| paystatus 付款状态 | Inpayment | 部分付款(付款中) |
|
||||
| paystatus 付款状态 | Unpaid | 未付款 |
|
||||
| billstatus 单据状态 | A | 暂存 |
|
||||
| billstatus 单据状态 | B | 已提交 |
|
||||
| billstatus 单据状态 | C | 已审核 |
|
||||
| billstatus 单据状态 | D | 已关闭 |
|
||||
|
||||
### 7.4 金蝶单据枚举(常量维护,待金蝶侧确认后调整)
|
||||
|
||||
| 类别 | 字典值 | 含义 |
|
||||
| --- | --- | --- |
|
||||
| 付款类型 e_paymenttype_number | 201 | 正式付款(结算付款) |
|
||||
| 付款类型 e_paymenttype_number | 202 | 预付款(A103-3 路径使用) |
|
||||
| 往来类型 asstacttype | bd_supplier | 供应商(合同类别非「客户合同」) |
|
||||
| 往来类型 asstacttype | bd_customer | 客户(合同类别=「客户合同」) |
|
||||
| 付款方式 purmode | CASH | 现购(金蝶自动 100% 推付款,当前使用) |
|
||||
| 付款方式 purmode | CREDIT | 赊购(金蝶侧可调付款金额,备用) |
|
||||
| 财务应付单单据类型 | 服务采购应付 → ApFin_service_BT_S | A102-2 当前默认(另有借贷项调整/费用采购应付/其他应付/产品委外应付/标准采购应付/采购费用应付/销售费用应付/资产采购应付共 9 项映射字典) |
|
||||
| 财务应收单单据类型 | 服务销售应收 → arfin_sersal_BT_S 等 5 项 | 应收链路未启用 |
|
||||
| 付款申请单单据类型 | 采购付款申请 → ap_payapply_BT_S、其他付款申请 → ap_payapply_oth_BT_S | 使用规则待业务确认 |
|
||||
| 款项性质 payproperty_number | 2001 | 材料采购(暂定,待金蝶确认) |
|
||||
| 外部单据类型 awrp_src_type | TMS财务应付单(A102-2)/ 配置值(A103-1) | 应付单/付款申请单来源标识,待金蝶确认 |
|
||||
|
||||
### 7.5 TMS 业务类型
|
||||
|
||||
| 字段 | 字典值 | 含义 |
|
||||
| --- | --- | --- |
|
||||
| paymentType 付款类型 | settlement_payment | 结算付款(走 A102-4 预检 + A103-1 下推链路) |
|
||||
| paymentType 付款类型 | project_advance | 项目预付款(走 A103-3 直推链路) |
|
||||
| paymentType 付款类型 | progress_advance | 进度预付款(走 A103-3 直推链路) |
|
||||
| settlementType 结算类型 | payable | 应付(对应财务应付单 A102-2,已启用) |
|
||||
| settlementType 结算类型 | receivable | 应收(对应财务应收单 A302-2,未启用,同步拦截) |
|
||||
| 请款事由 applycause | 结算付款申请 / 项目预付款申请 / 进度预付款申请 | 按 paymentType 路由(A103-3 路径使用) |
|
||||
|
||||
### 7.6 防重键体系(awrp_src_sys = WLTMS)
|
||||
|
||||
| 单据 | 防重键 awrp_src_code 取值 | 使用接口 |
|
||||
| --- | --- | --- |
|
||||
| 财务应付单 | 正式结算单号_结算明细单据号1_单据号2…(去重保序拼接) | A102-2 / A102-4 |
|
||||
| 付款申请单 | 付款申请号(paymentNo) | A103-1 / A103-2 / A103-3 |
|
||||
| 应付单付款计划分录 | awrp_entry_code_p:金蝶自动生成,A102-4 反查获得 | A103-1 勾稽关联 |
|
||||
| 分录唯一标识 | awrp_entry_code:应付货物费用行 id(雪花 id) | A102-2 明细 / A103-1 分录 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 异常与恢复场景
|
||||
|
||||
| # | 断点场景 | 金蝶侧实际 | 本地状态 | 恢复路径 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | 环节一推送前校验失败(档案缺失等) | 无应付单 | 结算单状态不变 | 补档案后重新同步 |
|
||||
| 2 | A102-2 成功后中断(返回未落库) | 应付单已生成 | 结算单未 synced | 重新同步:A102-4 预检命中 → 幂等跳过保存,直接回填编号 |
|
||||
| 3 | 环节二前置校验:应付单未生成 | 无应付单 | 付款申请状态不变 | 报错提示先在正式付款单页面同步金蝶(先完成环节一) |
|
||||
| 4 | A103-1 远端已落单但本地回滚 | 应付单+付款申请单均已生成 | failed | 重推:A102-4 命中跳过前置 → A103-2 勾稽命中 → 回填置 synced;或定时任务自动纠偏 |
|
||||
| 5 | 同步成功但状态待推进 | 付款申请单已生成 | synced | 定时任务 A103-2 回写驱动 synced→paying→paid/closed,A103-4 回填付款记录 |
|
||||
| 6 | 金蝶反审核删除后重推 | 无单据 | failed/synced | 预检查无 → 重新推送生成新单据 |
|
||||
| 7 | failed 且金蝶确无单据 | 无单据 | failed | 每轮任务空查一次 A103-2,状态保持,等待人工处理(已知边界) |
|
||||
|
||||
---
|
||||
|
||||
## 9. 涉及功能与代码位置(索引用)
|
||||
|
||||
| 内容 | 位置 |
|
||||
| --- | --- |
|
||||
| 环节一入口 | `FormalSettlementServiceImpl.syncKingdee`(正式付款单页面「同步金蝶」) |
|
||||
| 环节二入口 | `PaymentApplicationController`(/sync-kingdee、/sync-kingdee-batch、/sync-kingdee-result)→ `PaymentApplicationServiceImpl`(syncKingdee / doSyncKingdee / syncKingdeeBatch) |
|
||||
| 环节三定时任务 | `PaymentKingdeeResultTask` → `PaymentApplicationServiceImpl.syncKingdeePaymentResult`(applyPayApplyResult / applyPayBillRecord) |
|
||||
| A102-2/A102-4 公共支撑 | `KingdeeApBillSyncSupport`(防重键组装、A102-4 查询/反查、A102-2 组装保存、分录解析、档案取数) |
|
||||
| 金蝶常量/字典 | `KingdeeBfiConstant`;配置 `thirdParty.bfi.*`(srcSys=WLTMS 等) |
|
||||
| BFI 客户端 | `blade-third-party-api/blade-bfi-api`:IBfiClient / BfiServiceImpl(saveApBill=A102-2、queryApBill=A102-4、pushPayApply=A103-1、queryPayApply=A103-2、queryPayBill=A103-4) |
|
||||
|
||||
## 10. 遗留注意事项
|
||||
|
||||
1. **联调临时取值**:A102-2 明细物料/计量单位、A103-1 往来银行编码、双方项目编码当前传金蝶测试档案值(SP0324 / TON / 001110012009 / 999),档案对齐后需恢复真实取值。
|
||||
2. **应收链路未启用**:结算类型为应收的单据在两侧均拦截报错(A302-2 待业务确认)。
|
||||
3. **kingdeeBillNo 阶段语义**:正式结算单上为应付单编号;付款申请上先为下推返回的付款申请单编号,后续被 A103-2 回写覆盖校准。
|
||||
4. **failed 空查**:确无金蝶单据的 failed 付款申请会被定时任务每轮空查一次,量大可考虑窗口截断(当前保持简单)。
|
||||
5. **付款申请单/收入确认单类型映射、预付抵扣 preentry、结算方式/税率**:均待业务或金蝶侧确认,本期不传/未启用。
|
||||
Binary file not shown.
Binary file not shown.
@@ -123,16 +123,16 @@ thirdParty:
|
||||
bfi:
|
||||
# 业财融合(BFI)应用及接口配置,敏感值通过环境变量注入
|
||||
baseUrl: ${BFI_BASE_URL:http://172.16.203.134:8000/gwzh/BFI}
|
||||
authorization: ${BFI_AUTHORIZATION:}
|
||||
clientId: ${BFI_CLIENT_ID:}
|
||||
clientSecret: ${BFI_CLIENT_SECRET:}
|
||||
username: ${BFI_USERNAME:}
|
||||
accountId: ${BFI_ACCOUNT_ID:}
|
||||
authorization: ${BFI_AUTHORIZATION:3F7e8yI6RV8S53mJ9tYa0672r3W4n279}
|
||||
clientId: ${BFI_CLIENT_ID:WLTMS}
|
||||
clientSecret: ${BFI_CLIENT_SECRET:XDWLwltmstest@HT2026}
|
||||
username: ${BFI_USERNAME:XDWL-03024}
|
||||
accountId: ${BFI_ACCOUNT_ID:2454399096727798784}
|
||||
language: ${BFI_LANGUAGE:zh_CN}
|
||||
# 数据来源系统编码(推送金蝶公共参数:客商、付款申请等统一使用),默认 WLTMS(运输TMS)
|
||||
srcSys: ${BFI_SRC_SYS:WLTMS}
|
||||
# 付款申请推送配置(A103-3 付款申请保存)
|
||||
payApply:
|
||||
# 外部系统编号,与来源单据号共同防重
|
||||
srcSys: ${BFI_PAY_APPLY_SRC_SYS:WLTMS}
|
||||
# 单据类型编码:ap_payapply_BT_S 采购付款申请、ap_payapply_oth_BT_S 其他付款申请
|
||||
billtype: ${BFI_PAY_APPLY_BILLTYPE:ap_payapply_oth_BT_S}
|
||||
# 组织编码、币种取自付款申请关联合同的所属组织与结算币种
|
||||
|
||||
@@ -101,10 +101,10 @@ thirdParty:
|
||||
username: ${BFI_USERNAME:}
|
||||
accountId: ${BFI_ACCOUNT_ID:}
|
||||
language: ${BFI_LANGUAGE:zh_CN}
|
||||
# 数据来源系统编码(推送金蝶公共参数:客商、付款申请等统一使用),默认 WLTMS(运输TMS)
|
||||
srcSys: ${BFI_SRC_SYS:WLTMS}
|
||||
# 付款申请推送配置(A103-3 付款申请保存)
|
||||
payApply:
|
||||
# 外部系统编号,与来源单据号共同防重
|
||||
srcSys: ${BFI_PAY_APPLY_SRC_SYS:WLTMS}
|
||||
# 单据类型编码:ap_payapply_BT_S 采购付款申请、ap_payapply_oth_BT_S 其他付款申请
|
||||
billtype: ${BFI_PAY_APPLY_BILLTYPE:ap_payapply_oth_BT_S}
|
||||
# 组织编码、币种取自付款申请关联合同的所属组织与结算币种
|
||||
|
||||
@@ -32,10 +32,10 @@ thirdParty:
|
||||
accountId: ${BFI_ACCOUNT_ID:}
|
||||
# 语言字串,默认 zh_CN
|
||||
language: ${BFI_LANGUAGE:zh_CN}
|
||||
# 数据来源系统编码(推送金蝶公共参数:客商、付款申请等统一使用),默认 WLTMS(运输TMS)
|
||||
srcSys: ${BFI_SRC_SYS:WLTMS}
|
||||
# 付款申请推送配置(A103-3 付款申请保存)
|
||||
payApply:
|
||||
# 外部系统编号,与来源单据号共同防重
|
||||
srcSys: ${BFI_PAY_APPLY_SRC_SYS:WLTMS}
|
||||
# 单据类型编码:ap_payapply_BT_S 采购付款申请、ap_payapply_oth_BT_S 其他付款申请
|
||||
billtype: ${BFI_PAY_APPLY_BILLTYPE:ap_payapply_oth_BT_S}
|
||||
# 组织编码、币种取自付款申请关联合同的所属组织与结算币种
|
||||
|
||||
Reference in New Issue
Block a user