fix(swap): PosiDividendSum精度差异修复(GLMS-20260105-0007)

问题:互换后PosiDividendSum=-89999.64(应为-90000),差0.36元。
根因:UpdateEodPosition cs:1635从头重算PosiDividendSum
  (Round(全程,2)-已实现),与CopyEodPosition逐天递增
  (每天Round(增量,2)累积)产生舍入误差累积。

修复:cs:1635改为递增模式
  PosiDividendSum = eod.PosiDividendSum + TdPosiDividend - TdCloseDividend
  与InterestIncomeSum的递增模式一致,避免从头重算的精度差异。

验证(golden录制/回放TDD):
- 真实数据录制GLMS-20260105-0007的eod快照+输入数据
- 回放重新调UpdateEodPosition:修复前=-89999.64(红灯),
  修复后=-90000(绿灯,精确匹配)
- 121个测试全通过,无回归
This commit is contained in:
hjhan
2026-07-02 10:47:23 +08:00
parent 56f9f980c2
commit 0910969e3f
3 changed files with 982 additions and 40 deletions
@@ -1624,15 +1624,11 @@ namespace YLErp.Modules.SwapModule
curretEod.RealizedDividend = curretEod.RealizedDividend + curretEod.TdCloseDividend;
// 分红与互换解耦:持仓>0时从起始日重算待实现分红,不再受互换事件影响
// 修改,互换事件会影响待实现的分红的,现在要算上
// 分红与互换解耦:持仓>0时待实现分红用递增模式(前日+当天新计-当天实现),
// 与 CopyEodPosition 的逐天递增口径一致,避免从头重算的舍入累积差异。
if (curretEod.PosiQuantity > 0)
{
//decimal tax = um.ValueAddedTax ?? 0;
//BondPaymentService bondPaymentService = new BondPaymentService(UserInfo);
//decimal totalPayment = bondPaymentService.CalcPayment(curretEod.UnderlyingCode, td.StartDate.Value, valueDate, (decimal)originNotional, shortRatio, directionRatio);
//var totalInterest = totalPayment / (1 + tax) * (1 - tax);
curretEod.PosiDividendSum = Math.Round(totalInterest,2) - curretEod.RealizedDividend;
curretEod.PosiDividendSum = eod.PosiDividendSum + curretEod.TdPosiDividend - curretEod.TdCloseDividend;
}
else
{