33 lines
1.7 KiB
C#
33 lines
1.7 KiB
C#
using YLErp.Derivatives.Interest;
|
||
|
||
namespace YLErp.Modules.SwapModule.Accrual;
|
||
|
||
/// <summary>
|
||
/// 计息政策(不可变配置)。把"算头算尾 / 单复利率 / 重置频率 / 年化天数"收敛为一处,
|
||
/// 取代旧代码里散落各处的 calcFirst/calcLast 布尔对与魔法数字。
|
||
///
|
||
/// 单/复利不再另立枚举——直接复用既有 DB 枚举 InterestTypeEnum(单利=0 / 复利=1),
|
||
/// 通过 <see cref="IsCompound"/> 暴露为类型安全的 bool。
|
||
/// </summary>
|
||
public sealed class AccrualPolicy
|
||
{
|
||
/// <summary>算头算尾约定(复用 SwapInterest 已有的 AccrualBoundary,物理上杜绝 calcFirst/calcLast 传反)。</summary>
|
||
public AccrualBoundary Convention { get; }
|
||
|
||
/// <summary>是否复利(利滚利)。来自 DB 的 InterestTypeEnum;单利=false,复利=true。</summary>
|
||
public bool IsCompound { get; }
|
||
|
||
/// <summary>利率重置周期(天)。FR007 通常为 7;复利时亦为"利息并入本金"的周期。</summary>
|
||
public int ResetPeriodDays { get; }
|
||
|
||
/// <summary>年化基数(365 / 360)。</summary>
|
||
public int AnnualDays { get; }
|
||
|
||
/// <summary>是否年化(position.IsAnnualized)。决定利息是否再除以 <see cref="AnnualDays"/>;
|
||
/// 与 <see cref="AnnualDays"/> 一同收敛 daycount 语义,不再作为裸 bool 散落在计息签名里。</summary>
|
||
public bool IsAnnualized { get; }
|
||
|
||
public AccrualPolicy(AccrualBoundary convention, bool isCompound, int resetPeriodDays, int annualDays, bool isAnnualized = false)
|
||
=> (Convention, IsCompound, ResetPeriodDays, AnnualDays, IsAnnualized) = (convention, isCompound, resetPeriodDays, annualDays, isAnnualized);
|
||
}
|