fix(swap): 修复预付金腿计息基数计算问题

- 在多个单元测试文件中添加InterestIncomeSum字段以保持数据一致性
- 修改GLMS20260105PartialCloseDividendBugTest测试,改进EOD快照验证逻辑
- 修复SwapDealService中预付金腿的orginPv计算逻辑,使用上一日保证金本金作为基准
- 更新SwapPositionComposeScenarioTest中的测试数据结构和利率设置
- 修正平仓日利息计算精度问题,使用Math.Round确保计算准确性
This commit is contained in:
张名锐
2026-08-09 22:28:40 +08:00
parent 2c4cd56111
commit 2ee38384ac
5 changed files with 28 additions and 16 deletions
@@ -1194,13 +1194,19 @@ namespace YLErp.Modules.SwapModule
// 根因修复:预付金(保证金)腿的计息基数维度应为"保证金本金"自身,而非整笔交易的名义本金(orginPv)。
// 否则公式 dynomicPrincipal = TdInterestPrincipal + posiPrincipal - orginPv
// 会把交易名义本金(千万~亿级)当减项扣掉,使"应返还本金"(InterestPrincipal)与计息基数变成巨负值。
// 此处将预付金腿的 orginPv 对齐为其自身保证金(InterestPrincipalFix)
// 与日终路径(SwapEodPositionService 对预付金腿 orginPv=InterestPrincipalFix)保持一致
// 此处将预付金腿的 orginPv 对齐为上一日保证金本金;无历史归档时才取当前本金。
// 差分公式必须使用同一时点口径:上一日本金 + 当前本金 - 上一本金 = 当前本金
// 若已有部分平仓后仍取当前本金,会把上一日本金原样保留,导致当日继续按平仓前本金计息。
// 仅作用于初始预付金(5)/追加预付金(6);其它计息模式(含债券本金腿 标的期初全价=9)仍用交易名义本金,不受影响。
if (position.InterestMode == (int)InterestModeEnum.
|| position.InterestMode == (int)InterestModeEnum.)
{
orginPv = position.InterestPrincipalFix;
var previousPrincipal = preEodPosition.InterestPrincipalFix != 0m
? preEodPosition.InterestPrincipalFix
: preEodPosition.TdInterestPrincipal;
orginPv = preEodPosition.id != 0 && previousPrincipal != 0m
? previousPrincipal
: position.InterestPrincipalFix;
}
if (swap)