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;
}