docs(swap): 双入口口径分歧裁决申请——复利mode2部分平仓(EOD多结63%)

- 契约验算:盘中口径0.036165=确认书∏复利公式手算值(3.7e-7舍入差)
- 机制定位:SwapDealService:1220 closePrecent==1 分支是全平专属设计,
  但EOD入口传参惯例percent恒1→EOD部分平仓30%掉进全平分支,
  剩余100%持仓待实现利息被一次结走
- 待业务裁决两项:部分平仓应结口径(推荐=契约公式/盘中口径)、全平维持现公式
- 裁决后修复方案已就绪:EOD传真实比例+1220分支回归全平专属+2035e1df粘合退役
- 附生产影响面查证建议(EOD自动部分平仓×复利mode2/9存量事件比对)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
hjhan
2026-08-16 11:18:15 +08:00
co-authored by Claude Opus 4.7
parent c94a3e8c97
commit 5a92709c42
@@ -0,0 +1,56 @@
# 裁决申请:复利×mode2×部分平仓 双入口结息额分歧
> 2026-08-16 | 来源:`GetInterestsEntrySemanticsTest.复利_mode2_部分平仓_双入口口径钉住现状`(b01b485e 实测钉住)
> 状态:**待业务裁决**——同一经济事件,两个入口算出两种结息额,当前测试锁死两值防漂移。
## 一、分歧事实(生产代码实测,已钉住)
场景:合约名义本金(mode2)×复利×浮动 FR007×部分平仓 30%
参数:本金 1000,平掉 300,剩余 700;FR007=0.1%,利差=1.0%;[4/27 起息,4/30 平仓] 算头算尾 4 天;重置周期 3 天。
| 入口 | 结息额 | 计算方式 |
|---|---|---|
| 盘中平仓试算 | **0.036165** | 平掉额 300 从 4/27 到 4/30 全程复利重放 |
| EOD 平仓后收盘 | **0.059042** | 剩余持仓全部待实现利息(0.05) + 平掉额 4/30 末段增量(0.009042) |
**EOD 比盘中多结 63%**(多出的 0.023 ≈ 剩余 700 份额对应的待实现利息,却在平 30% 时被全额结走)。
## 二、契约验算(确认书公式,模板:国联民生收益互换确认书-现券/ETF 四份一致)
```
参考利率(绝对) = ∏[i=1..k] ( 1 + (FR007i + 利差) × di / 365 ) 1
结息额(平仓部分) = 实际平掉额 × 参考利率(绝对)
```
手算(300×[(1+0.011×3/365)×(1+0.011×1/365)1])= **0.0361652**
**= 盘中口径**(差 3.7e-7 为引擎利率舍入量级)。EOD 口径无法由契约公式推出。
## 三、机制定位(为什么 EOD 会算成这样)
`SwapDealService.cs:1220``closePrecent == 1m` 分支,设计意图是**最终全平专属**
(注释原文:"最终全平只重放上一日终之后的新增利息……以上一日 InterestIncomeSum 为起点,保证之前攒下的尾差最后一次带走")——
全平时该公式正确。
但 EOD 平仓后收盘入口的传参惯例是 **closePrecent 恒 1**(见 `InterestCalcRequest.EodPostCloseSettle` 工厂,
"结算本次事件覆盖的全部")。于是 **EOD 部分平仓 30% 也掉进全平专属分支**,把剩余 100% 持仓的
待实现利息全部结走。数字 1 承载了两种语义:"平仓比例=100%" vs "本次事件全额结息"。
## 四、请业务裁决
1. **部分平仓(含 EOD 自动平仓)应结利息**:是否 = 确认书公式下"实际平掉额 × 全程利率"?
(即盘中口径 0.036165)——契约公式直接支持,推荐。
2. **最终全平应结利息**:维持现公式"剩余持仓待实现 + 末段增量"(尾差一次带走)——合理,建议维持。
## 五、裁决后的修复方案(技术侧已就绪,预计 1~2 天)
- EOD 入口改为传**真实比例**(实际平掉额/剩余)而非恒 1;部分平仓自然走重放路径(与盘中同语义)
- 全平保留 percent=1,1220 分支回归"全平专属"设计意图
- `GetInterests` 内 mode2 无条件覆盖/mode9 兜底(2035e1df 粘合)随之退役删除
- 钉住测试翻转为"两入口相等" oracle 断言;黄金回放 diff 仅允许出现在本格子的 EOD 结息额(=裁决修正值)
## 六、生产影响面(待查证)
- 受影响格子:EOD 自动平仓 × mode2/9 × 复利 × **部分**平仓(若生产存在此路径的存量交易)
- 建议内网查:swap_flow_event 中 EventType=平仓 且当日 closePercent<1 的复利 mode2/9 事件,
与盘中口径重算值比对差值