diff --git a/Framework/YLErp.Core/DBModels/SwapEvent.cs b/Framework/YLErp.Core/DBModels/SwapEvent.cs index eff65bac..27d51c07 100644 --- a/Framework/YLErp.Core/DBModels/SwapEvent.cs +++ b/Framework/YLErp.Core/DBModels/SwapEvent.cs @@ -118,6 +118,11 @@ namespace YLErp.DBModels /// public decimal ClosePercent { get; set; } /// + /// 是否计罚息(EQD-6977):提前终止平仓时利息端按持有至到期计息。默认 false=否。 + /// 由平仓页“是否罚息”下拉写入,经 GetUnwindInterests 透传至罚息接缝层。 + /// + public bool IsPenaltyInterest { get; set; } + /// /// 平仓名义本金 /// public decimal CloseNotionalValue { get; set; } diff --git a/YLErpDAL/Modules/SwapModule/InterestCalcRequest.cs b/YLErpDAL/Modules/SwapModule/InterestCalcRequest.cs index fcaff397..56e2a5cb 100644 --- a/YLErpDAL/Modules/SwapModule/InterestCalcRequest.cs +++ b/YLErpDAL/Modules/SwapModule/InterestCalcRequest.cs @@ -36,19 +36,24 @@ public sealed class InterestCalcRequest public bool NewCalcLast { get; } public List CloseList { get; } + /// 是否计罚息(EQD-6977):利息端按持有至到期计息。由平仓页下拉经 UnwindData 透传;默认 false。 + public bool IsPenaltyInterest { get; } + private InterestCalcRequest( trade td, trade_extend tradeExtend, DateTime valueDate, DateTime unwindDate, List eodPositions, List positions, decimal posiNotionalValue, decimal closePosiNotionalValue, decimal closePercent, int eventType, bool tdClose, decimal orginPv, - bool add, bool newCalcLast, List closeList) + bool add, bool newCalcLast, List closeList, + bool isPenaltyInterest = false) { Td = td; TradeExtend = tradeExtend; ValueDate = valueDate; UnwindDate = unwindDate; EodPositions = eodPositions; Positions = positions; PosiNotionalValue = posiNotionalValue; ClosePosiNotionalValue = closePosiNotionalValue; ClosePercent = closePercent; EventType = eventType; TdClose = tdClose; OrginPv = orginPv; Add = add; NewCalcLast = newCalcLast; CloseList = closeList; + IsPenaltyInterest = isPenaltyInterest; } /// @@ -62,10 +67,11 @@ public sealed class InterestCalcRequest List eodPositions, List positions, decimal preCloseNotional, decimal closedNotional, decimal closePercentRemaining, int eventType, bool tdClose, decimal orginPv, - bool add, bool newCalcLast, List closeList) + bool add, bool newCalcLast, List closeList, + bool isPenaltyInterest = false) => new(td, tradeExtend, valueDate, unwindDate, eodPositions, positions, preCloseNotional, closedNotional, closePercentRemaining, - eventType, tdClose, orginPv, add, newCalcLast, closeList); + eventType, tdClose, orginPv, add, newCalcLast, closeList, isPenaltyInterest); /// /// 【EOD 当日有平仓后的收盘结息】场景(→ CalcEodPostCloseSettleInterests,settment:false 全额结息)。 diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index 44714bd6..16e7ae35 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -444,7 +444,7 @@ namespace YLErp.Modules.SwapModule /// 平仓比例 /// /// - public List GetUnwindInterests(DateTime valueDate, DateTime unwindDate, int tradeId, decimal closePercent, int eventType) + public List GetUnwindInterests(DateTime valueDate, DateTime unwindDate, int tradeId, decimal closePercent, int eventType, bool isPenaltyInterest = false) { List interests = new List(); if (closePercent > 1) @@ -484,7 +484,8 @@ namespace YLErp.Modules.SwapModule interests = GetIntradayUnwindInterests(InterestCalcRequest.IntradayUnwind( td, tradeExtend, valueDate, unwindDate, lastEodPositions, positions, stockEqvNotional, posiNotionalValue, - closePercent, eventType, tdClose, orginPv, add: true, newCalcLast: false, closeList)); + closePercent, eventType, tdClose, orginPv, add: true, newCalcLast: false, closeList, + isPenaltyInterest)); return interests; }