From acc37bdb99c2c5c8f16828a1dba1ff4b4eadf1c0 Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 7 Aug 2026 15:43:11 +0800 Subject: [PATCH] =?UTF-8?q?test(swap):=20=E8=A1=A5=E7=AE=97=E5=B0=BE/?= =?UTF-8?q?=E4=B8=8D=E7=AE=97=E5=B0=BE=E9=83=A8=E5=88=86=E5=B9=B3=E4=BB=93?= =?UTF-8?q?=E7=9A=84=20InterestIncomeSum=20=E9=80=92=E6=8E=A8=E6=96=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DI_MANUAL_PARTIAL_CLOSE_CalcLast/NoCalcLast 原仅断言 TdInterestIncome(当日新计利息 按全额/剩余本金计提),未钉死该差异是否传导到待实现利息总额 InterestIncomeSum。 补一条递推断言:InterestIncomeSum = 前日待实现 + 当日新计 - 当日实现, 锁定"算尾 → 被平仓部分多1天利息 → 进入待实现总额"完整链条,不算尾同理对照。 纯测试改动,生产代码无改动,双绿通过。 --- .../SwapModule/DealInterestsScenarioTest.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/UnitTestProject/Modules/SwapModule/DealInterestsScenarioTest.cs b/UnitTestProject/Modules/SwapModule/DealInterestsScenarioTest.cs index f1a2be29..14bf0381 100644 --- a/UnitTestProject/Modules/SwapModule/DealInterestsScenarioTest.cs +++ b/UnitTestProject/Modules/SwapModule/DealInterestsScenarioTest.cs @@ -829,7 +829,14 @@ namespace YLErp.Modules.SwapModule 500m, 0m, new List { closeFlow }, 500m, false); AssertDecimal(Principal * FixedRate / AnnualDays, result.TdInterestIncome, - "算尾部分平仓的当日新计利息应包含已平仓部分"); + "算尾部分平仓的当日新计利息应包含已平仓部分(按全额本金计提)"); + + // 补充:算尾部分平仓的待实现利息总额应满足递推 + // InterestIncomeSum = 前日待实现 + 当日新计(全额本金,含被平仓部分) - 当日实现 + // 钉死"算尾 → 被平仓部分多1天利息 → 进入待实现总额"的完整链条 + decimal expectedIncomeSum = previousEod.InterestIncomeSum + result.TdInterestIncome - result.TdCloseInterest; + AssertDecimal(expectedIncomeSum, result.InterestIncomeSum, + "算尾部分平仓:InterestIncomeSum 应=前日待实现+当日新计(含被平仓部分)-当日实现"); } [TestMethod] @@ -848,7 +855,14 @@ namespace YLErp.Modules.SwapModule 500m, 0m, new List { closeFlow }, 500m, false); AssertDecimal(500m * FixedRate / AnnualDays, result.TdInterestIncome, - "不算尾部分平仓的当日新计利息只应包含剩余持仓部分"); + "不算尾部分平仓的当日新计利息只应包含剩余持仓部分(按剩余本金计提)"); + + // 补充对照:不算尾时待实现利息总额同样满足递推,但当日新计只含剩余持仓 + // 与 CalcLast 测试对照:不算尾的 TdInterestIncome 更小(差额=被平仓部分1天利息), + // 因此 InterestIncomeSum 也相应更小——证明算尾/不算尾的差异确实传导到待实现总额 + decimal expectedIncomeSum = previousEod.InterestIncomeSum + result.TdInterestIncome - result.TdCloseInterest; + AssertDecimal(expectedIncomeSum, result.InterestIncomeSum, + "不算尾部分平仓:InterestIncomeSum 应=前日待实现+当日新计(仅剩余持仓)-当日实现"); } [TestMethod]