Commit Graph
3 Commits
Author SHA1 Message Date
hjhan 66a97e03ef fix(swap): 复利重置日=平仓日时 calcLast 不再跳过 FR007 取价
根因(GLMS-JIATT-20260805):InterestCalcMode='10'(算头不算尾,calcLast=false)时,
CalcDailyCompoundInterest 循环的 'if(!calcLast && accrueDate==endDate) continue'
会跳过平仓日。若平仓日恰好是重置日(i%period==0),取价代码块被一并跳过,
导致 flowEvent.FloatRate 落库为旧周期利率,传染后续 EOD 复利计算。

修复:把重置日的 FR007 取价提前到 calcFirst/calcLast 跳过判断之前——
calcLast 只应跳过'计息',不应跳过'重置日利率取价'。同时循环外用最终
floatRate 兜底赋值 flowEvent.FloatRate,确保落库值反映最后重置日的利率。

验证:
- CI_007 合成测试(平仓日=重置日):修复前 FloatRate=旧值(FAIL),修复后=新值(PASS)
- 连库验证(GLMS-JIATT-20260805 8/4平仓):FloatRate 0.0123→0.0213(8/3新值)
- 利息金额不变(calcLast 不计当天利息,Amount 不受影响,只修正 FloatRate 字段)
- 全套 swap 测试无新增回归(334通过,2失败均为pre-existing单利/EOD路径)

附:CI_007 复现测试 + GLMS20260805 FR007/EOD 诊断工具 + 文档 longRatio 状态更新
2026-08-07 20:43:16 +08:00
hjhan 7e2042510f docs(swap): 记录 income 页当前行为与待确认项
- 第七章开头加状态说明:'income 漏 longRatio 即错' 标注为待业务背书的
  Working Hypothesis,非最终定性。
- 新增第八章'当前行为实录与待确认项':
  * 8.1 income(收益结算按钮)页 MarkClosePnl 当前公式实录(无 longRatio,代码实证)
  * 8.2 swap_position.PosiGrossPrice 恒为期初价 P0、结算/平仓后不滚动(代码实证)
  * 8.3 已确认事实 vs 待确认假设 对照表
  * 8.4 待业务/量化确认的 4 个问题清单
  * 8.5 两条验证 SQL(空头结息事件 / 同持仓多次结算)
  * 8.6 多轮回归未暴露原因(覆盖空洞+校验同源+数据隐形+多头恒等)
- 本次仅记录现状与待确认项,不改代码、不加测试;longRatio 不一致与
  基准不滚动的真实生产影响仍为待证(需跑 8.5 SQL 定性)。
2026-08-07 15:26:54 +08:00
hjhan aaeb4bddf8 docs(swap): 新增互换 MarkClosePnl 口径一致性审计与空头回归红测试(不改生产代码)
- 项目文档/互换计算口径一致性_残留问题与治理路线.md:定义 BUG 本质(分散计算/字段重叠/硬编码精度),
  定位 income 页缺 longRatio 导致空头符号相反的残留点,并给出如何确认 income 错/unwind 对 的裁决链与改动安全性论证。
- YLErpWeb/fe-tests/_proof_short_income.js:纯 Node 红测试原型,证明多头两页一致(掩盖)、空头符号相反、补 longRatio 后一致。
- YLErpWeb/fe-tests/markClosePnlShortConsistency.test.js:jest 格式红测试(与 parity.test.js 同风格),作为后续修复的回归护栏。

说明:仅审计与测试资产,本次未修改任何生产代码(前端页面/后端 C# 均未改动)。
2026-08-06 22:00:44 +08:00