fix(swap): 固定值利息腿平仓比例缩放缺陷(GLMS) + 证明测试

- SwapDealService.CalcNotionalByMode 固定值分支原实现把 closePrincipal 钉成 Fix 全量
  且 newClosePercent 强制置 1,导致界面『全部平仓→部分平仓』改比例时利息腿数据
  完全不变。修复为 closePrincipal = InterestPrincipalFix * closePercent(与预付金/
  多头/空头/标的期初全价等模式一致),posiPrincipal 仍保留 Fix 全量,newClosePercent
  保留真实平仓比例,两个缩放入口作用于不同项不双重缩放。
- EOD 结算路径 SwapEodPositionService 传 closePrecent=1 字面量,Fix*1=Fix,日终行为不变。
- 新增 SwapFixedInterestLegClosePercentBugTest(9 例真实函数复现+证明)。
- 纠正 SwapUnwindPrepayPrincipalBugTdd 中把『免疫』当期望的断言为线性缩放。
- 引入溯源:95686f4c(吴方海, EQD-5718, 2026-05-08);newClosePercent=1 祖传自 acbd2e76(2024-06-04)。
This commit is contained in:
hjhan
2026-08-08 10:34:10 +08:00
parent 994429d3b7
commit d1badfe48f
3 changed files with 288 additions and 5 deletions
+12 -2
View File
@@ -899,8 +899,18 @@ namespace YLErp.Modules.SwapModule
switch ((InterestModeEnum)position.InterestMode)
{
case InterestModeEnum.:
closePrincipal = posiPrincipal = position.InterestPrincipalFix;
newClosePercent = 1m;
// 【缺陷修复】界面「全部平仓→部分平仓」改比例,下方利息腿数据完全不变。
// 原实现:closePrincipal = posiPrincipal = Fix; newClosePercent = 1m;
// 固定值腿的"计息本金"确实固定(Fix),但"本次平仓结算/返还多少利息"必须按平仓比例缩放。
// 旧代码把 closePrincipal 与 newClosePercent 两个缩放入口同时抹平,
// 导致 GetUnwindInterests 盘中预览无论传 30%/50%/70%/100%,返回利息完全相同。
// 修复口径:与 初始/追加预付金 腿(下方 case)以及 标的期初全价(mode 9) 完全一致——
// closePrincipal 承担"本期新增利息"的缩放,newClosePercent 承担"历史累计/已消耗利息"的缩放,
// 二者作用在不同项上,不会双重缩放(mode 9 已由回归测试证明线性)。
// 兼容性:EOD 结算路径 SwapEodPositionService:1350 传 closePrecent = 1 字面量,
// 此处 Fix × 1 = Fix,日终行为与修复前完全一致。
closePrincipal = position.InterestPrincipalFix * closePercent;
posiPrincipal = position.InterestPrincipalFix;
break;
case InterestModeEnum.:
closePrincipal = posiLong * closePercent;