From 71683083ef1d01e922a6d92fd763d3b822d0d23f Mon Sep 17 00:00:00 2001 From: hjhan Date: Thu, 20 Aug 2026 17:29:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(swap):=20EQD-6953=20=E5=B9=B3=E4=BB=93?= =?UTF-8?q?=E6=9C=9F=E6=9C=AB=E7=BB=93=E7=AE=97=E6=94=B6=E7=9B=8A=E7=8E=87?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=BD=BD=E4=BD=93+=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E4=B9=A6Excel=E5=AF=BC=E5=87=BA=E2=80=94?= =?UTF-8?q?=E2=80=94[NotMapped]ExitYtm=E9=9A=8FUnwindData=E8=BF=9Bswap=5Fe?= =?UTF-8?q?vent.EventData(=E9=9B=B6=E8=A1=A8=E7=BB=93=E6=9E=84=E5=8F=98?= =?UTF-8?q?=E6=9B=B4)=EF=BC=9B=E7=94=9F=E6=88=90=E5=99=A8=E4=BB=8E?= =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=85=BF=E5=9B=9E=E8=AF=BB=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=9B=BA=E5=AE=9A4=E4=BD=8D=E4=B8=8D=E5=8E=BB=E9=9B=B6(0.0000)?= =?UTF-8?q?=EF=BC=9B=E6=A8=A1=E6=9D=BFnodma=5F01.xlsx=E6=96=B0=E5=A2=9ES?= =?UTF-8?q?=E5=88=97=EF=BC=9B=E5=91=BD=E5=90=8D=E9=81=B5=E3=80=8A=E4=BA=92?= =?UTF-8?q?=E6=8D=A2=E4=BB=B7=E6=A0=BC=E5=AD=97=E6=AE=B5=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=86=B3=E7=AD=96=E6=96=87=E6=A1=A3=E3=80=8B?= =?UTF-8?q?=E5=B9=B3=E4=BB=93=3DExit(=E9=9D=9EEnd/Close/Final)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YLErp.Core/DBModels/SwapFlowEvent.cs | 13 +++++++++++++ .../YLErp.Core/Models/SwapEndConfirmModel.cs | 6 ++++++ .../settlement_template/nodma_01.xlsx | Bin 10445 -> 6130 bytes .../TradeSettleBillGenerator.cs | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs index b635b672..7b61672f 100644 --- a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs +++ b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs @@ -400,5 +400,18 @@ namespace YLErp.DBModels [NotMapped] public decimal? InitYtm { get; set; } + /// + /// 期末标的结算收益率(EQD-6953 平仓)。普通债券类收益互换平仓时由债券计算器按 + /// 期末标的交割全价反算(估值日=平仓日 ValueDate),允许手工覆盖。 + /// 命名遵循《互换价格字段命名规范决策文档》时点维度:平仓/了结用 Exit(勿用 End/Close/Final)。 + /// [NotMapped]:不落 swap_flow_event 表列;仅随 UnwindData 序列化进 swap_event.EventData JSON, + /// 由平仓待复核回显(GetSwapEvent)与结算确认书 Excel(TradeSettleBillGenerator) 消费。 + /// ⚠️ 存储口径为【展示态百分数】(如 6.3721 表示 6.3721%),与同页期末交割全价(展示态)一致, + /// 区别于录入页 trade.InitYtm 的存储态小数(0.063721)——两者载体不同、互不干扰,勿"顺手统一"。 + /// 精度:确认书导出固定 4 位小数不去零(ToString("0.0000"));本字段保留 4 位(四舍五入)。 + /// + [NotMapped] + public decimal? ExitYtm { get; set; } + } } diff --git a/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs b/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs index b796debe..55ddcf9e 100644 --- a/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs +++ b/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs @@ -45,5 +45,11 @@ namespace YLErp.Models public string DividendIn { get; set; } public string Quantity { get; set; } + + /// + /// 期末标的结算收益率(EQD-6953)。普通债券类收益互换平仓收益率,展示态百分数, + /// 固定 4 位小数不去零("0.0000");非债券/历史无值时为空串。 + /// + public string ExitYtm { get; set; } } } diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/nodma_01.xlsx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/nodma_01.xlsx index 2cf6a553190a988bc29368ba950ad764186abc5b..0415cc61533f2eda60684484d8bb2899bc0992c7 100644 GIT binary patch literal 6130 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 H-#+~h&#u-S diff --git a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs index 7523323b..e78f361b 100644 --- a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs +++ b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs @@ -67,6 +67,9 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator decimal interestRate = unwindFlowEvents.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).Sum(s => s.InterestRate); row.InterestRate = interestRate.ToString("0.00%"); var PosiNotionalValue = flowEventGroup.Quantity * flowEventGroup.ContractSize * posi.PosiGrossPrice; + // EQD-6953 期末标的结算收益率:平仓簿记时随 UnwindData 存进 swap_event.EventData, + // 此处从浮动腿(PositionType>0)回读。存储态=展示态百分数(6.3721),导出固定 4 位不去零。 + decimal? exitYtm = null; if (flowEventGroup.EventId.HasValue) { var swapEvent = Context.GetEvent(flowEventGroup.EventId.Value); @@ -74,8 +77,12 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator { swapEvent.unwindData = JsonHelper.Deserialize(swapEvent.EventData); PosiNotionalValue = swapEvent.unwindData.CloseNotionalValue; + exitYtm = swapEvent.unwindData.FlowEvents? + .FirstOrDefault(f => f.PositionType > 0)? + .ExitYtm; } } + row.ExitYtm = exitYtm?.ToString("0.0000") ?? string.Empty; row.Quantity = flowEventGroup.Quantity.ToString("0.00"); row.PosiNotionalValue = PosiNotionalValue.ToString("0.00");