fix: 手工结算合计费用行按计费方案规则补送税率

This commit is contained in:
刘泉佳
2026-11-05 16:14:45 +08:00
parent b603fa9b38
commit d7da2d218c
@@ -408,7 +408,7 @@ public class KingdeeApBillSyncSupport {
entry.setEPricetaxtotal(entryGroup.amount()); entry.setEPricetaxtotal(entryGroup.amount());
// 金额(不含税):结算明细行结算金额(不含税),结算合计费用项行无不含税金额不传 // 金额(不含税):结算明细行结算金额(不含税),结算合计费用项行无不含税金额不传
entry.setEAmount(entryGroup.amountNoTax()); entry.setEAmount(entryGroup.amountNoTax());
// 税率(%):合同计费方案规则税率(按税率拆行维度),未配置税率/结算合计费用项行不送,金蝶按默认带出 // 税率(%):合同计费方案规则税率(按税率拆行维度),结算合计费用项行按费用项/费用类型匹配规则,未配置税率不送
entry.setTaxrate(entryGroup.taxRate()); entry.setTaxrate(entryGroup.taxRate());
// 税率编码(taxrateid_number):thirdparty.bfi.taxrate 配置 税率数值->编码,未维护该税率拦截报错 // 税率编码(taxrateid_number):thirdparty.bfi.taxrate 配置 税率数值->编码,未维护该税率拦截报错
entry.setTaxrateidNumber(taxrateCode(entryGroup.taxRate())); entry.setTaxrateidNumber(taxrateCode(entryGroup.taxRate()));
@@ -758,6 +758,7 @@ public class KingdeeApBillSyncSupport {
/** /**
* 单条手动添加的结算合计费用项生成一条分录:运费类按项目业务模式/运输方式映射(运输方式取结算明细首行), * 单条手动添加的结算合计费用项生成一条分录:运费类按项目业务模式/运输方式映射(运输方式取结算明细首行),
* 仓储大类(档案编码 A05)映射仓储物料,其余非运费类映射装卸物料; * 仓储大类(档案编码 A05)映射仓储物料,其余非运费类映射装卸物料;
* 税率按费用项/费用类型匹配合同计费方案规则(与结算明细行同口径),规则未覆盖不送;
* 非运费类数量默认 1,金额取合计行结算金额,运输货物/车号不传,分录标识取结算单号-费用类型-费用项拼接 * 非运费类数量默认 1,金额取合计行结算金额,运输货物/车号不传,分录标识取结算单号-费用类型-费用项拼接
*/ */
private void appendSummaryEntry(List<BfiEntryGroup> entryGroups, EntryResolveContext context, private void appendSummaryEntry(List<BfiEntryGroup> entryGroups, EntryResolveContext context,
@@ -774,13 +775,18 @@ public class KingdeeApBillSyncSupport {
BigDecimal quantity = BigDecimal.ONE; BigDecimal quantity = BigDecimal.ONE;
BigDecimal amount = money(summaryFee.getSettlementAmount()); BigDecimal amount = money(summaryFee.getSettlementAmount());
BigDecimal price = entryPrice(amount, quantity); BigDecimal price = entryPrice(amount, quantity);
// 税率:优先费用项匹配合同计费方案规则,费用项未命中回退费用类型(与结算明细行同口径)
BigDecimal taxRate = context.taxRateByRule().get(feeItem);
if (taxRate == null) {
taxRate = context.taxRateByRule().get(feeType);
}
// 分录唯一标识(awrp_entry_code):结算单号-费用类型-费用项(费用项为空时仅拼结算单号-费用类型) // 分录唯一标识(awrp_entry_code):结算单号-费用类型-费用项(费用项为空时仅拼结算单号-费用类型)
String entryCode = settlement.getFormalSettlementNo() + "-" String entryCode = settlement.getFormalSettlementNo() + "-"
+ (Func.isBlank(feeItem) ? feeType : feeType + "-" + feeItem); + (Func.isBlank(feeItem) ? feeType : feeType + "-" + feeItem);
entryGroups.add(new BfiEntryGroup(materialNumber, entryCode, quantity, price, amount, entryGroups.add(new BfiEntryGroup(materialNumber, entryCode, quantity, price, amount,
null, null, null, settlement.getId(), null)); null, null, null, settlement.getId(), taxRate));
log.info("金蝶应付单分录生成:来源[{}],分录标识[{}],物料编码[{}],数量[{}],单价[{}],含税金额[{}]", log.info("金蝶应付单分录生成:来源[{}],分录标识[{}],物料编码[{}],数量[{}],单价[{}],含税金额[{}],税率[{}]",
sourceDesc, entryCode, materialNumber, quantity, price, amount); sourceDesc, entryCode, materialNumber, quantity, price, amount, taxRate);
} }
/** /**
@@ -1480,7 +1486,7 @@ public class KingdeeApBillSyncSupport {
* @param transportGoods 运输货物(金蝶接口新字段 awrp_transport):结算明细货物名称,结算合计费用项行为 null 不传 * @param transportGoods 运输货物(金蝶接口新字段 awrp_transport):结算明细货物名称,结算合计费用项行为 null 不传
* @param vehicleNo 车号(金蝶接口新字段 awrp_lpn):结算明细车号,结算合计费用项行为 null 不传 * @param vehicleNo 车号(金蝶接口新字段 awrp_lpn):结算明细车号,结算合计费用项行为 null 不传
* @param formalSettlementId 分录所属正式结算单id(多结算单付款申请 A103-1 按结算单勾稽各自应付单) * @param formalSettlementId 分录所属正式结算单id(多结算单付款申请 A103-1 按结算单勾稽各自应付单)
* @param taxRate 该行税率(%)(合同计费方案规则税率,按税率拆行维度),无税率组/结算合计费用项行为 null 不传 * @param taxRate 该行税率(%)(合同计费方案规则税率,按税率拆行维度;结算合计费用项行按费用项/费用类型匹配规则),无税率组/规则未覆盖为 null 不传
*/ */
public record BfiEntryGroup(String materialNumber, String entryCode, public record BfiEntryGroup(String materialNumber, String entryCode,
BigDecimal quantity, BigDecimal price, BigDecimal amount, BigDecimal amountNoTax, BigDecimal quantity, BigDecimal price, BigDecimal amount, BigDecimal amountNoTax,