using YLErp.DBModels; namespace YLErp.Modules.SwapModule.InterestLegs; /// /// 预付金(保证金)利息腿。mode 5 初始预付金 / mode 6 追加预付金 共用。 /// /// 业务本质:预付金是客户"存"在券商的钱,券商对其付息(方向与普通利息腿相反)。 /// 计息基数 = InterestPrincipalFix(预付金余额),随平仓递减。 /// /// 本类只封装 CalcNotionalByMode 的计息基数计算部分: /// closePrincipal = Fix × closePercent /// posiPrincipal = Fix /// /// 预付金腿的其它独有逻辑(方向翻转、orginPv 重映射、衡泰路径返还置0)不在此处, /// 后续分别抽成独立方法,保持每个类/方法最小。 /// public sealed class PrepayLeg : IInterestLegStrategy { // 预付金两个 mode(初始/追加)共用同一套计息基数公式,构造时指定 private readonly InterestModeEnum _mode; public InterestModeEnum Mode => _mode; public PrepayLeg(InterestModeEnum mode) { if (mode != InterestModeEnum.初始预付金 && mode != InterestModeEnum.追加预付金) throw new ArgumentException($"PrepayLeg 仅支持 初始预付金/追加预付金,收到 {mode}", nameof(mode)); _mode = mode; } public NotionalResult CalcNotional(decimal fix, decimal posiNotional, decimal posiLong, decimal posiShort, decimal closePercent) => new(fix * closePercent, fix, closePercent); }