tengyufan
|
46316c1400
|
fix: 恢复互换平仓交易费用按基础费率计算
|
2026-08-05 18:26:15 +08:00 |
|
tengyufan
|
864a29d6a8
|
#EQD-6605 国联民生-确认书编号规则调整(不基于甲方乙方判定)
feat: 国联民生收益互换按簿记分类生成交易编号
簿记账户新增“簿记分类”字段,支持代客、融券,新增账户默认代客,历史账户统一初始化为代客
簿记账户分类设为必填,列表、编辑及详情页面同步展示
修改已被交易引用的簿记账户分类时增加二次确认,并提示关联交易数量
国联民生收益互换交易编号不再根据甲乙方判断,改为根据簿记账户分类生成
代客使用数字序号,融券使用字母序号,分别从已有同客户同日编号的最大序号继续递增
保留手工交易编号优先逻辑,标准格式的手工编号参与后续最大序号计算
生成候选编号后检查完整交易编号是否已存在,存在则继续递增
新增簿记分类编号格式、最大序号计算及数字字母序列隔离专项单测
|
2026-08-05 15:55:01 +08:00 |
|
张名锐
|
613fd66b65
|
fix(swap): 解决(观察日)利率计算精度问题并优化价格精度处理
- 在SwapDealService中对GetFixedRate结果进行精度调整,解决原数据精度误差问题
- 在swapPricePrecisionHelper中添加roundDecimal方法并移除TODO注释
- 新增observationRate相关的精度处理函数,包括roundObservationRate和percent转换函数
- 创建serializeSwapIntervals函数用于处理掉期区间利率精度序列化
- 将consNumberFormat.umpriceP替换为swapPricePrecision.shiftDecimal进行百分比转换
- 使用新的精度处理函数替代原有的toFixed(6)和乘以0.01的操作
|
2026-08-03 13:21:23 +08:00 |
|
张名锐
|
3670dde9bf
|
fix(swap): 修复利息互换平仓结算中的尾差处理和本金计算问题
- 修复ExecuteSaveAutoEodInterestPosition方法参数传递,添加lastEodSwap、posiLongNotional和orginPv参数
- 修正平仓利息计算逻辑,区分手动结算和平仓后自动结算的利息处理
- 新增ResolveUnwindPreviousNotional静态方法,优化平仓前本金计算逻辑
- 修复部分平仓后利息累积边界问题,确保仅从上次EOD快照后开始计算
- 完善自动结算利息的四舍五入处理,避免精度丢失
- 修正支付端方向符号应用,确保方向只应用一次
- 更新TdInterestPrincipal计算逻辑,处理不同利息模式下的本金赋值
- 修复TdCloseInterest计算,合并手动和自动结算利息金额
- 优化InterestIncomeSum计算,正确处理结算后剩余未实现利息
|
2026-07-30 23:29:07 +08:00 |
|
张名锐
|
78aac109d0
|
Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber
|
2026-07-30 13:05:41 +08:00 |
|
tengyufan
|
b3484c3618
|
fix: 国联民生收益互换支持审批前生成交易确认书
- 仅国联民生收益互换支持在新增待确认、修改待确认、审批中生成交易确认书,期权、其他公司及其他交易状态保持原限制
- 交易确认书页面同步开放上述交易的“生成确认书”按钮,后端批量生成链路同步放开状态过滤
- 审批前生成仅校验客户、标的、初始持仓等模板必需核心数据;不以银行账户、联系人、保证金等非模板必填资料阻断
- 审批前已生成确认书的交易被修改时,使该交易原确认书关联失效,重新生成仍按原覆盖逻辑处理
- 审批拒绝时清理该交易审批前生成的确认书关联、OA 结果及用印队列;无其他有效引用时删除确认书数据,避免遗留无效确认书
- 保持原交易编号逻辑:自动生成和手工填写均不复用已拒绝交易编号
- 新增审批前适用范围、确认书关联及 OA 清理谓词专项单测
|
2026-07-30 11:10:48 +08:00 |
|
张名锐
|
85f1bccb24
|
Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber
# Conflicts:
# YLErpWeb/App_Data/Config/otcformat.js
# YLErpWeb/Views/SwapTrade2/TradeEdit.cshtml
# YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js
|
2026-07-30 10:50:44 +08:00 |
|
张名锐
|
db46e48ec5
|
fix(swap): 修复互换产品到期结算和利息计算逻辑
- 优化到期日最终结算判断逻辑,确保只有完全覆盖才清零待实现余额
- 引入利息金额舍入处理,避免精度差异导致的结算误差
- 完善自动互换流水处理,确保实际结算金额与待实现计算分离
- 修复部分平仓后日终持仓继承逻辑,保持利息累计连续性
- 调整到期自动互换处理,确保最后结算后待实现余额正确归零
- 优化利息收入和费用的独立计算,避免历史数据重复计算问题
|
2026-07-29 17:37:57 +08:00 |
|
tengyufan
|
e1c5f72418
|
#EQD-6604 国联民生-确认书编码生成环节移到簿记(支持手工录入)
feat: 国联民生收益互换簿记后按确认书规则生成交易编号
- - 国联收益互换首次入库后复用原交易确认书编号规则生成交易编号,保留手工填写的交易编号
- 覆盖手工新增、系统流水自动簿记、普通交易导入、流水导入和日终合成今日交易流水
- 自动流水簿记增加本地事务,交易编号回写与基础簿记数据失败时统一回滚
- 交易确认书生成时直接取交易编号,不再重新生成确认书编号
- 结算管理-交易确认书页面将合约编号更名为交易确认书编号
- 上传确认书时将合约编号更名为交易确认书编号
- 历史交易编号不处理
|
2026-07-29 16:45:29 +08:00 |
|
张名锐
|
3d73835be5
|
fix(swap): 结算或全部平仓后,待实现置0
- 添加 NormalizeSettledInterestAmounts 方法处理手工平仓和互换的利息事件精度
- 添加 NormalizeManualSettlementAmounts 方法在手工结算前收敛流水金额
- 将利息计算精度从 ConsGlobal.PriceRound 统一调整为 InterestCalculationPrecision(12位)
- 在日终持仓快照中添加精度标准化处理,利息腿保留12位精度
- 修复全量平仓时待实现利息和费用的清零逻辑
- 在收益结算事件后清空待实现利息余额避免重复计算
- 更新单元测试验证现金与两位利息事件的一致性
|
2026-07-29 14:42:03 +08:00 |
|
tengyufan
|
8c4f452482
|
fix: 统一互换部分平仓交易费用与待结算费用的分摊舍入
|
2026-07-29 13:47:45 +08:00 |
|
tengyufan
|
e1d68393f8
|
fix: 修复基础费率平仓待结算费用按实际平仓规模分摊
|
2026-07-29 13:07:55 +08:00 |
|
张名锐
|
fd2a054764
|
feat(swap): 实现互换交易价格精度控制功能 init
- 添加 swapPricePrecisionHelper.js 工具类处理价格精度格式化
- 新增 swappriceprecision.js 配置文件定义各类金融产品的精度规则
- 在 EodPositionRisks.cshtml 和 SwapIncome.cshtml 中引入新的价格格式化脚本
- 替换原有的价格格式化函数为基于产品类型的动态精度控制
- 移除旧的价格验证和标准化逻辑,改用新的精度控制机制
- 添加 vue-swap-price-input 组件用于精确的价格输入控制
- 更新 Controller 中的价格处理逻辑以支持新精度格式化方式
|
2026-07-29 09:44:04 +08:00 |
|
张名锐
|
af364b5c8a
|
Revert "fix(swaptrade): 互换开平仓事件流水 小数点精度调整"
This reverts commit bf6b27ba19.
|
2026-07-28 14:50:01 +08:00 |
|
张名锐
|
53b858cba4
|
Revert "refactor(swap): 互换开平仓事件流水 导出小数点精度调整"
This reverts commit 89da38fab9.
|
2026-07-28 14:30:03 +08:00 |
|
张名锐
|
89da38fab9
|
refactor(swap): 互换开平仓事件流水 导出小数点精度调整
- 将InitYtm属性从decimal?类型更改为string类型
- 调整TradingAmountAvg、TradingAmountFeeAvg和Quantity字段的小数位数从4位改为2位
- 修改InitYtm的赋值逻辑,添加空值检查并应用OtcFormatMoney格式化方法
- 统一货币金额格式化参数设置,移除分组符号并指定小数位数
|
2026-07-27 13:35:16 +08:00 |
|
张名锐
|
b6afab6a91
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
|
2026-07-27 13:17:51 +08:00 |
|
张名锐
|
bf6b27ba19
|
fix(swaptrade): 互换开平仓事件流水 小数点精度调整
- 将事件列表中的价格字段格式化统一为两位小数或九位小数
- 替换原有的otcformat.trading.umprice格式化方法
- 在前端JavaScript中添加EventTwoDecimalFormat和EventNineDecimalFormat函数
- 修改后端C#代码中的OtcFormat调用改为OtcFormatMoney并调整精度参数
- 为事件列表脚本添加版本参数以确保缓存更新
|
2026-07-27 13:17:39 +08:00 |
|
tengyufan
|
4987962aca
|
#EQD-6597 国联民生-簿记时新增基本费率字段(开平仓费用),并且自动计算
feat: 完善互换平仓交易费用自动计算
- 支持百分比和单位数量模式自动计算平仓交易费用
- 支持全部平仓和部分平仓联动重算
- 保持手动互换不自动填充平仓交易费用
- 补充前后端相关单测
|
2026-07-27 11:57:20 +08:00 |
|
tengyufan
|
a575de7bbe
|
Revert "feat(swap): 新增基础费率字段,支持百分比/单位数量模式切换及自动计算"
This reverts commit c9071a4eff.
|
2026-07-27 09:45:41 +08:00 |
|
tengyufan
|
c9071a4eff
|
feat(swap): 新增基础费率字段,支持百分比/单位数量模式切换及自动计算
- 浮动收益端新增基础费率列(原单位交易费用),位于数量与交易费用后付之间
- 支持百分比模式(4位小数)与单位数量模式(2位小数)切换,默认百分比
- 填入基础费率后自动计算交易费用后付,手动修改后反算基础费率
- 平仓时根据 PosiFeeType 自动计算平仓交易费用,支持全部/部分平仓联动
- 收益结算(手动互换)不自动填充平仓交易费用
- 查看交易页面新增基础费率展示(百分比带%后缀4位,单位数量2位)
- swap_position 表新增 PosiFeeType 字段标识费率模式(0=百分比 1=单位数量)
- 切换模式时基础费率和交易费用归零,避免精度冲突
- 修复 TradeView.cshtml 引用了不存在字段 category_tag 的编译错误
|
2026-07-24 17:32:07 +08:00 |
|
张名锐
|
aa8fb9fd7a
|
Merge branch 'glms/feature/swaptrade_6603_mbb' into glms/feature/1.4.2
# Conflicts:
# YLErpDAL/Modules/SwapModule/SwapTradeService.cs
|
2026-07-24 13:29:10 +08:00 |
|
张名锐
|
32af85d35c
|
Merge branch 'glms/feature/dotnumber' into glms/feature/1.4.2
# Conflicts:
# YLErpWeb/Views/SwapTrade2/TradeEdit.cshtml
# YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js
|
2026-07-23 17:53:37 +08:00 |
|
张名锐
|
c4379d4b90
|
fix(swap): 修正日终保证金本金计算逻辑
- 移除保证金本金的1/10缩放处理,改为直接使用实际本金数值
- 修正了保证金本金计算中的除以10逻辑,确保显示正确的本金金额
- 保持利息计算使用原始本金累积值,避免破坏保证金利息金额准确性
- 更新注释说明,明确当前风险页按日终保证金
|
2026-07-23 17:49:02 +08:00 |
|
马冰冰
|
ef179fc26c
|
新增利息端类型字段
|
2026-07-23 16:59:58 +08:00 |
|
张名锐
|
32a3a45c85
|
refactor(swap): 修复债券日终价格映射
- 移除 GetSwapValuationPrice 方法中的 posiGrossPrice 参数
- 删除债券价格转换相关的注释代码和日志记录
- 简化债券价格处理逻辑,直接使用原始价格进行四舍五入
- 更新所有调用 GetSwapValuationPrice 的地方以匹配新方法签名
- 移除多余的价格转换和展示态判断逻辑
|
2026-07-23 14:17:26 +08:00 |
|
hjhan
|
185a23e978
|
fix(swap-trade): 修复新增互换交易时 InitYtm 为 null 触发数据库约束报错
根因:InnerSaveNewTrade 只做 req.Clone() 直接入库,未给 trade.InitYtm 赋值;
而编辑场景(InnerSaveEditTrade:582)有从 swap_positions 取 InitYtm 的逻辑,
新增场景漏了。前端填的"成交收益率"存在 swap_position.InitYtm 上,但 trade
表 InitYtm 列要求 NOT NULL,新增时为 null 直接报错。
修复:新增场景同样从 req.swap_positions 取 InitYtm,无则默认 0(与
PrepareTrade:353 的 flowMerge.InitYtm ?? 0 处理一致)。
验证:dotnet build 0 错误
|
2026-07-23 13:52:04 +08:00 |
|
hjhan
|
7b007bddfa
|
refactor(swap-test): 抽取 TestableSwapEodPositionService 公共基类收敛重复 Stub
- 新建 TestableSwapEodPositionService 收敛 8/8 Stub 重复的高频 override
(PersistEodSwapPosition/SaveAllChanges/GetCurrencyRate/AddClientCash)
+ 统一 OptUserInfo 构造 + PersistedPositions/SaveChangesCount 输出捕获
- SwapEodPositionService.DealInterests 改 protected virtual(行为零变化)
- 8 个 ScenarioTest 改为继承基类,删除重复 override
- 消灭 DealInterestsScenarioTest/DealInterestsGoldenReplayTest 的反射调用
(typeof().GetMethod().Invoke → 直接调用 DealInterests)
验证:dotnet build 0 错误;dotnet test SwapModule 284通过/6跳过/0失败
|
2026-07-23 11:16:11 +08:00 |
|
张名锐
|
bc961c3411
|
fix(swap): 修复互换交易中债券价格精度处理问题,扩充到11位计算
- 统一债券价格四舍五入规则,使用AwayFromZero模式
- 为债券类型添加特殊的精度处理逻辑
- 修复前端价格显示精度计算问题
- 优化价格存储精度控制,区分债券和其他产品类型
- 修复初始化YTM和净价精度处理问题
- 更新价格验证逻辑以支持动态精度设置
|
2026-07-23 11:06:50 +08:00 |
|
张名锐
|
018136c615
|
fix(swap): 修复收益互换价格转换和初始保证金计算问题
- 移除债券价格显示态和存储态转换的错误判断逻辑
- 简化债券价格转换条件,只对债券标的进行存储态转换
- 添加初始保证金计算前的金额精度统一处理
- 重构初始保证金准备逻辑到独立方法中
- 修复因价格单位不一致导致的浮动损益计算错误
|
2026-07-23 10:13:09 +08:00 |
|
马冰冰
|
4f9a9e2d72
|
fix: 更改保证金模板名称配置的取值 由admin-> 数据字典
|
2026-07-22 16:51:40 +08:00 |
|
马冰冰
|
4419a4125b
|
(fix): 将原保证金模板名称=系统默认 的默认值改为null。
|
2026-07-22 16:28:17 +08:00 |
|
张名锐
|
c58a9d40c4
|
feat(swap): 统一【期初、期末交割价格】精度处理
- 在ConsGlobal中新增SwapDeliveryPriceRound常量定义为9位小数
- 更新incomeSwapTrade.js中交割价格计算逻辑,添加getStorageDeliveryPrice方法
- 修改SwapConsumerService中TradingAmountAvg字段的精度处理
- 添加ValidateDeliveryPrices和NormalizeDeliveryPrices方法进行交割价格验证和标准化
- 在SwapEodPositionService中对PosiGrossPrice和UnderlyingPrice进行精度处理
- 更新SwapFlowEventService中TradingAmountAvg字段的精度处理
- 在SwapFlowImportService中添加交割价格精度处理
- 更新前端界面中的输入格式配置,使用新的交割价格精度设置
- 修改SwapflowList.js中交割价格精度处理逻辑
- 在SwapFlowService中添加交割价格验证和精度处理
- 更新SwapTradeAutoService中交割价格精度处理
- 修改SwapTradeService中PosiGrossPrice字段的精度处理
- 更新unwindSwapTrade.js中交割价格计算逻辑
|
2026-07-22 14:53:46 +08:00 |
|
马冰冰
|
05ce6fb02f
|
(feature):保证金模板字段添加
|
2026-07-22 14:46:01 +08:00 |
|
张名锐
|
0755233ab6
|
fix(swap): 统一处理【名义本金】数值精度舍入问题
- 在多个位置添加 Math.Round 函数确保金额计算精度
- 新增 NormalizeNotionalValues 方法统一处理 UnwindData 中的名义本金舍入
- 修复交易平仓时 StockEqvNotional 扣减计算的精度问题
- 解决持仓数据 PosiNotionalValue 的精度舍入处理
- 修复前端页面显示格式化问题
- 添加单元测试验证名义本金舍入逻辑正确性
|
2026-07-22 13:05:49 +08:00 |
|
hjhan
|
a179675efd
|
refactor(swap-deal): 前端盈亏校验抽为 SwapFrontendPnlValidator
BuildFrontendValidationDiffs/FrontendPnlDiff/AddDiffIfOverThreshold 从2043行 SwapDealService 移至新文件,本文件仅留调用+日志。纯位置迁移,零行为变更。
|
2026-07-21 15:28:14 +08:00 |
|
hjhan
|
a153a1d1a6
|
refactor(swap-eod): 抽出期末头寸纯函数并放宽可见性
SetFixedLegRealizedPnl 替换4处复制粘贴(清理L1296双分号); NormalizeInterestSignForReport 替换16行内联报表分支; CalculateWeightedMarginInterest private->public static。均为纯静态无实例依赖,配套无库单测锁定行为。
|
2026-07-21 15:28:13 +08:00 |
|
张名锐
|
f4ffe71071
|
fix(swap): 修复期末头寸已实现盈亏计算问题
- 在新创建的期末付款头寸中添加已实现盈亏字段计算
- 对历史数据的利息和已实现利息进行符号标准化处理
- 添加预付金腿利息方向与保证金本金方向的反向逻辑
- 兼容修复前已落库的利息腿数据缺失已实现盈亏字段问题
- 统一风险报表按绝对金额和业务方向的数据口径
|
2026-07-20 15:28:40 +08:00 |
|
张名锐
|
a0f8dc9df7
|
refactor(SwapModule): 简化预付金利息计算逻辑
- 移除本金绝对值加权平均的复杂计算方式
- 直接对各腿利息金额进行轧差求和
- 保留收取为正、支付为负的方向转换逻辑
- 删除不再使用的本金权重计算代码
- 简化方法实现并提高计算效率
|
2026-07-20 09:30:01 +08:00 |
|
hjhan
|
e261137c1d
|
fix(swap): 修复多次部分平仓 ClosePercent 口径(A占期初→B占剩余)转换缺失
- SwapDealService.ApplySwapTrade 入口补 ToRemainingClosePercent(A→B) 转换,与 SwapUnwind 保持一致;缺此转换导致 SaveSwapDealInternal 的 B→A 还原出错(GLMS-20260701-0006:第二次部分平仓50%被错误还原为32.5%)
- unwindSwapTrade.js 改用 swapCalc.calcCloseQtyByOriginalPercent 的 roundHalfAwayFromZero,规避 JS 浮点精度偏差(32500000*(0.5/0.65) 应为 25000000)
- SwapUnwind.cshtml 引入 swapCalc.js
- 新增 ApplySwapTradeClosePercentBugTest 回归测试;补充 swapCalc.test.js 精度用例与 GLMS20260701DbDiagnoseTest 诊断测试([Ignore])
|
2026-07-17 10:59:18 +08:00 |
|
张名锐
|
415539704d
|
fix(swap): 修复债券结息价差盈亏计算逻辑
- 将价差盈亏计算从使用CloseNotionalValue改为使用PositionQty和ContractSize
- 更新前端JavaScript代码中的计算公式,按持仓数量和合约乘数计算价差盈亏
- 在UnwindInput模型中添加PositionQty和ContractSize字段
- 修正后台计算服务中的数据映射逻辑
- 添加FC_009测试用例验证债券价差按数量计算的正确性
- 更新现有测试用例的输入参数以匹配新的计算方式
|
2026-07-17 10:58:31 +08:00 |
|
张名锐
|
f37a5b997c
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
|
2026-07-17 10:02:18 +08:00 |
|
张名锐
|
ce0908c53b
|
fix(swap): 修复浮动端已实现盈亏计算逻辑
- 添加了SetFloatingRealizedPnl方法统一计算已实现盈亏
- 已实现盈亏现在正确包含盯市、分红和费用三个组成部分
- 修复了多处RealizedPnl计算错误,确保数值准确性
- 为DF_008测试场景添加了专门的单元测试验证
- 移除了重复的盈亏计算代码,提高代码可维护性
|
2026-07-17 10:02:06 +08:00 |
|
hjhan
|
2395aa9856
|
test(swap): 补 6676b625 掉期保证金利息方向反向单元测试
抽 CalculateSwapRealizedPnl 为 public static 纯函数(用 ConsTrade.InterestMarginModels 替代实例 marginTypes), 新增 8 个单元测试覆盖: 非保证金腿收取/支付原向, 保证金腿(初始预付金/追加预付金)收取/支付反向, 完整 5 字段汇总两种方向, RealizedInterest=0 边界. 锁定 6676b625 修复的保证金腿利息方向反向契约, 防止后续误改回归.
|
2026-07-17 08:40:19 +08:00 |
|
hjhan
|
43679393bb
|
test(swap): 补 e2fb456b InitUnwind 默认 ClosePercent 单元测试
抽 CalcDefaultInitClosePercent 静态纯函数(PosiNotionalValue/NotionalValue), InitUnwind L270 改为调用此函数, 新增 6 个单元测试覆盖: 未平仓/已平30%/除零保护/GLMS-20260701-0013 真实快照/与 ToRemainingClosePercent 联动自洽不变式/全平完边界场景. 填补 e2fb456b 提交的测试覆盖缺口.
|
2026-07-17 08:23:50 +08:00 |
|
hjhan
|
e2fb456bc3
|
fix 平仓(InitUnwind L267)硬编码 1而不是剩余平仓比例
|
2026-07-16 20:07:50 +08:00 |
|
张名锐
|
55e4c5776b
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
|
2026-07-16 19:55:57 +08:00 |
|
张名锐
|
6676b62573
|
fix(swap): 修正掉期产品保证金利息计算逻辑
- 修正FloatingUnrealizedPnl字段定义,包含未结交易费用
- 更新MarginInterestGain和MarginInterestLoss字段的文档说明
- 添加CalculateSwapRealizedPnl方法处理保证金腿利息现金流方向
- 修正RealizedPnL计算逻辑,避免保证金利息重复计算
- 调整保证金本金和利息计算口径的一致性处理
- 修正保证金利息现金流方向与本金方向的相反关系
|
2026-07-16 19:55:44 +08:00 |
|
hjhan
|
238824f4f4
|
fix(预付金返回/平仓比例): 恢复占期初语义并在后端入口统一转占剩余
之前提交 4f46e263 误将平仓比例改为占剩余持仓(Definition B)语义,与需求不符。
正确需求:每次打开平仓/提前终止均基于最开始原始名义本金(Definition A),
但每次返回的预付金金额需正确(后端按占剩余计算)。
- SwapDealService: 新增 ToRemainingClosePercent/ToOriginalClosePercent 双语义转换;
SwapUnwind 入口把前端传来的占期初(A)转为占剩余(B),全计算链公式不动;
SaveSwapDealInternal 序列化前还原为 A 落库,事件列表读取即显示占期初比例。
- SwapTrade2Controller.GetUnwindInterestList: 接收期初/剩余名义本金,预览利息按 B 计算。
- unwindSwapTrade.js: 回退为占期初语义(ClosePercent/平仓名义本金用 NotionalValue,
oriClosePercent=剩余/期初),提前终止同理。
- 单测 UW_007/008 覆盖 A→B 全平/部分平仓判定。
不影响收盘后盯市/估值(仅平仓入口与展示口径)。
|
2026-07-16 19:54:26 +08:00 |
|
hjhan
|
24266cfad4
|
fix(swap): 多次部分平仓预付金返还默认显示初始值(GLMS-20260701-0008)
根因: GetUnwindInterests 利息腿迭代源取 origPositions(IsInitial=1),
其预付金腿 InterestPrincipalFix 恒为初始值(99000); 而"当前剩余本金"(73260)
存于实时腿 realPositions(IsInitial=0)。CalcNotionalByMode 与 InitSwapDealInterest
均读 position.InterestPrincipalFix, 导致多次部分平仓后平仓页默认按初始本金计算
返还。首次平仓 orig==real 掩盖了 bug, 故此前"只修好一次部分平仓"。
修复: 抽纯函数 ResolveInterestLegPositions(orig, real)——迭代源仍用 origPositions
(保留 orig.id -> eod_swap_position.PositionId 的日终匹配, 全库 eod 均按 orig.id 归档,
换 realPositions 会破坏 preEod 匹配导致利息重算错误), 仅对预付金腿(初始5/追加6)
Clone 覆盖 InterestPrincipalFix 为实时腿剩余本金; real.PositionId == orig.id 精确
1:1 关联; orig==real 时返回原始腿本身不克隆。
测试: 新增 SwapUnwindPrepayOrigVsRealBugTdd(6 用例)直接单测该纯函数, 覆盖既有
19 个用例(均绕过 orig/real 选择)的盲区。dotnet test --filter SwapUnwindPrepay
25 passed(19+6) 失败 0。
|
2026-07-16 10:49:12 +08:00 |
|