From 9d68e56797005e71dca1a1c6a034d88f7185a88f Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 21 Aug 2026 08:41:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(swap):=20EQD-6977=20=E7=BD=9A=E6=81=AF?= =?UTF-8?q?trace=E8=85=BF=E6=A0=87=E8=AF=86p{id}=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E8=9E=8D=E8=B5=84=E8=85=BF{id}=E2=80=94=E2=80=94=E5=8E=9F?= =?UTF-8?q?=E7=BC=A9=E5=86=99p=E5=8F=AF=E8=AF=BB=E6=80=A7=E5=B7=AE(?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8F=8D=E9=A6=88)=EF=BC=8C=E5=85=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B69=E5=A4=84=E7=BB=9F=E4=B8=80=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=EF=BC=9B=E6=97=A0=E6=B5=8B=E8=AF=95=E6=96=AD=E8=A8=80?= =?UTF-8?q?/=E5=A4=96=E9=83=A8=E6=B6=88=E8=B4=B9=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E8=AF=A5=E5=AD=97=E7=AC=A6=E4=B8=B2=EF=BC=8C27=E4=B8=AA?= =?UTF-8?q?=E7=BD=9A=E6=81=AF=E5=8D=95=E6=B5=8B=E5=85=A8=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Penalty/PenaltyInterestFeeMerger.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/Penalty/PenaltyInterestFeeMerger.cs b/YLErpDAL/Modules/SwapModule/Penalty/PenaltyInterestFeeMerger.cs index aa0b4ce0..54289c5b 100644 --- a/YLErpDAL/Modules/SwapModule/Penalty/PenaltyInterestFeeMerger.cs +++ b/YLErpDAL/Modules/SwapModule/Penalty/PenaltyInterestFeeMerger.cs @@ -52,7 +52,7 @@ public static class PenaltyInterestFeeMerger var normalEvent = interests.FirstOrDefault(x => x.PositionId == position.id); if (normalEvent == null) { - trace?.Note($"PENALTY|p{position.id} 跳过 无正常平仓利息流(意外:融资腿应有对应事件)"); + trace?.Note($"PENALTY|融资腿{position.id} 跳过 无正常平仓利息流(意外:融资腿应有对应事件)"); continue; } @@ -88,7 +88,7 @@ public static class PenaltyInterestFeeMerger } catch (Exception ex) { - trace?.Note($"PENALTY|p{position.id} 跳过 冻结利率解析失败:{ex.Message}"); + trace?.Note($"PENALTY|融资腿{position.id} 跳过 冻结利率解析失败:{ex.Message}"); continue; } @@ -111,7 +111,7 @@ public static class PenaltyInterestFeeMerger normalEvent.InterestClosePnL += penalty * DirectionRatio.ReceivePay(position.InterestDirection); trace?.Note( - $"PENALTY|p{position.id} 完成 mode={mode} {(isCompound ? "复利" : "单利")} " + + $"PENALTY|融资腿{position.id} 完成 mode={mode} {(isCompound ? "复利" : "单利")} " + $"窗口=[{unwindDate:yyyy-MM-dd}→{maturityDate:yyyy-MM-dd}] 平仓日已结={unwindDaySettled} 到期算尾={maturityCalcLast} | " + $"本金 close={closePrincipal:F2} posi={r.PosiPrincipal:F2} share={share:P4} | " + $"冻结利率={frozenRate.AllInRate:P6} 来源={rateSource} | " + @@ -143,10 +143,10 @@ public static class PenaltyInterestFeeMerger capitalized = (preEod?.InterestIncomeSum ?? 0m) * share; if (preEod != null) trace?.Note( - $"PENALTY|p{position.id} 承接①推导 重置日平仓+有快照:快照{preEod.ValueDate:yyyy-MM-dd} " + + $"PENALTY|融资腿{position.id} 承接①推导 重置日平仓+有快照:快照{preEod.ValueDate:yyyy-MM-dd} " + $"昨日待实现利息InterestIncomeSum={preEod.InterestIncomeSum:F4} ×share={share:P4} → ①={capitalized:F4}"); if (preEod == null && (unwindDate - position.PosiStartDate).Days >= periodDays) - trace?.Note($"PENALTY|p{position.id} 注意 无preEod且平仓日=重置日:①退化0(此前重置并入额缺失,请核对日终归档完整性)"); + trace?.Note($"PENALTY|融资腿{position.id} 注意 无preEod且平仓日=重置日:①退化0(此前重置并入额缺失,请核对日终归档完整性)"); } else if (preEod != null) { @@ -155,7 +155,7 @@ public static class PenaltyInterestFeeMerger var rawCarry = preEod.TdInterestPrincipal * share - closePrincipal; capitalized = Math.Max(0m, rawCarry); trace?.Note( - $"PENALTY|p{position.id} 承接①推导 段中平仓+有快照:快照{preEod.ValueDate:yyyy-MM-dd} " + + $"PENALTY|融资腿{position.id} 承接①推导 段中平仓+有快照:快照{preEod.ValueDate:yyyy-MM-dd} " + $"滚动基数TdInterestPrincipal={preEod.TdInterestPrincipal:F4} ×share={share:P4} −平仓本金{closePrincipal:F4} = {rawCarry:F4} → ①={capitalized:F4}" + (rawCarry < 0m ? "(原始差为负已钳0:快照滚动基数×份额小于平仓本金,疑部分平仓比例与快照归档口径不一致,请核对eod_swap_position.TdInterestPrincipal)" : "")); } @@ -163,13 +163,13 @@ public static class PenaltyInterestFeeMerger { capitalized = Math.Max(0m, normalEvent.InterestPrincipal - closePrincipal); trace?.Note( - $"PENALTY|p{position.id} 承接①推导 段中平仓+无快照兜底:事件基数InterestPrincipal={normalEvent.InterestPrincipal:F4} −平仓本金{closePrincipal:F4} → ①={capitalized:F4}"); + $"PENALTY|融资腿{position.id} 承接①推导 段中平仓+无快照兜底:事件基数InterestPrincipal={normalEvent.InterestPrincipal:F4} −平仓本金{closePrincipal:F4} → ①={capitalized:F4}"); // 兜底①=0 但账龄已过重置周期:复利每周期并本,理应 ①>0——多为 interestWindowEmpty // (当日已结息)早退未重放覆盖种子值、或日终归档缺失。留痕含两侧基数与账龄,供直接定位根因。 var ageDays = (unwindDate - position.PosiStartDate).Days; if (capitalized == 0m && ageDays >= periodDays) trace?.Note( - $"PENALTY|p{position.id} 注意 无preEod兜底①=0但账龄{ageDays}天≥重置周期{periodDays}天:" + + $"PENALTY|融资腿{position.id} 注意 无preEod兜底①=0但账龄{ageDays}天≥重置周期{periodDays}天:" + $"事件基数{normalEvent.InterestPrincipal:F2}=平仓本金{closePrincipal:F2}(疑似interestWindowEmpty种子未重放/日终归档缺失," + $"请核对swap_flow_event.InterestPrincipal重放回写与eod_swap_position归档)"); } @@ -177,7 +177,7 @@ public static class PenaltyInterestFeeMerger // ① 不得超过实结金额(数据异常时钳制并留痕,避免负②进入计息) if (capitalized > Math.Max(0m, normalEvent.InterestAmount)) { - trace?.Note($"PENALTY|p{position.id} 注意 承接①钳制:推导 {capitalized:F4} > 实结 {normalEvent.InterestAmount:F4}(快照/事件数据异常,请核对 preEod.TdInterestPrincipal/InterestIncomeSum)"); + trace?.Note($"PENALTY|融资腿{position.id} 注意 承接①钳制:推导 {capitalized:F4} > 实结 {normalEvent.InterestAmount:F4}(快照/事件数据异常,请核对 preEod.TdInterestPrincipal/InterestIncomeSum)"); capitalized = Math.Max(0m, normalEvent.InterestAmount); } return (capitalized, normalEvent.InterestAmount - capitalized);