客户保证金率设置需求变更:不需要根据发行年限,且增加30年以上一档,交易确认书保证金率获取也需要修改

This commit is contained in:
shangzhongyuan
2025-07-22 17:41:50 +08:00
parent 4e3a00523d
commit 75793f9f4f
8 changed files with 81 additions and 127 deletions
@@ -9,76 +9,54 @@ namespace YLErp.UnitTestProject.Modules.UnderlyingModule
[TestMethod]
public void GetApplicableMarginTerm_RuleTable_AllCases()
{
// 发行期限不限(OpenDate=null),测试(0.00,2.00],应返回2年
// <=2年,应返回2年
var code1 = "UNLIMITED_2Y";
var maturity1 = new DateTime(2030, 1, 1);
var underlying1 = CreateTestUnderlying ( code1, null,maturity1);
var underlying1 = CreateTestUnderlying(code1, null, maturity1);
var valueDate1 = maturity1.AddYears(-1); // 剩余1年
var result1=UnderlyingHelper.GetApplicableMarginTerm(code1, valueDate1);
Assert.AreEqual(ConsMarginTerm.TwoYear, result1, "(0,2]年 不限 应为2年");
var result1 = UnderlyingHelper.GetApplicableMarginTerm(code1, valueDate1);
Assert.AreEqual(ConsMarginTerm.TwoYear, result1, "<=2年 应为2年");
// (2.00,2.25] <5年,应返回2
var code2 = "LT5_2_25";
var open2 = new DateTime(2020, 1, 1); var maturity2 = new DateTime(2024, 3, 1); // 4.17年
var underlying2 = CreateTestUnderlying(code2, open2, maturity2);
var valueDate2 = maturity2.AddYears(-2).AddMonths(-2); // 剩余约2.17
// (2,5]年,应返回5
var code2 = "UNLIMITED_5Y";
var maturity2 = new DateTime(2030, 1, 1);
var underlying2 = CreateTestUnderlying(code2, null, maturity2);
var valueDate2 = maturity2.AddYears(-3); // 剩余3
var result2 = UnderlyingHelper.GetApplicableMarginTerm(code2, valueDate2);
Assert.AreEqual(ConsMarginTerm.TwoYear, result2, "(2,2.25]年 <5 应为2年");
Assert.AreEqual(ConsMarginTerm.FiveYear, result2, "(2,5]年 应为5年");
// (2.00,2.25] >=5年,应返回5
var code3 = "GE5_2_25";
var open3 = new DateTime(2020, 1, 1); var maturity3 = new DateTime(2026, 1, 1); // 6年
var underlying3 = CreateTestUnderlying(code3, open3, maturity3);
var valueDate3_2 = maturity3.AddYears(-2).AddMonths(-1); // 剩余约2.08
// (5,10]年,应返回10
var code3 = "UNLIMITED_10Y";
var maturity3 = new DateTime(2040, 1, 1);
var underlying3 = CreateTestUnderlying(code3, null, maturity3);
var valueDate3 = maturity3.AddYears(-7); // 剩余13
var valueDate3_2 = maturity3.AddYears(-10); // 剩余10年
var result3 = UnderlyingHelper.GetApplicableMarginTerm(code3, valueDate3_2);
Assert.AreEqual(ConsMarginTerm.FiveYear, result3, "(2,2.25]年 >=5 应为5年");
Assert.AreEqual(ConsMarginTerm.TenYear, result3, "(5,10]年 应为10年");
// (2.25,5.00] 不限,应返回5
var code4 = "UNLIMITED_5Y";
var maturity4 = new DateTime(2030, 1, 1);
// (10,30]年,应返回30
var code4 = "UNLIMITED_30Y";
var maturity4 = new DateTime(2050, 1, 1);
var underlying4 = CreateTestUnderlying(code4, null, maturity4);
var valueDate4 = maturity4.AddYears(-3); // 剩余3
var valueDate4 = maturity4.AddYears(-28); // 剩余28
var result4 = UnderlyingHelper.GetApplicableMarginTerm(code4, valueDate4);
Assert.AreEqual(ConsMarginTerm.FiveYear, result4, "(2.25,5]年 不限 应为5年");
Assert.AreEqual(ConsMarginTerm.ThirtyYear, result4, "(10,30]年 应为30年");
// (5.00,5.25] <7年,应返回5年
var code5 = "LT7_5_25";
var open5 = new DateTime(2020, 1, 1); var maturity5 = new DateTime(2026, 1, 1); // 6年
var underlying5 = CreateTestUnderlying(code5, open5, maturity5);
var valueDate5 = maturity5.AddYears(-5).AddMonths(-1); // 剩余约5.08
var result5 = UnderlyingHelper.GetApplicableMarginTerm(underlying5.UnderlyingCode, valueDate5);
Assert.AreEqual(ConsMarginTerm.FiveYear, result5, "(5,5.25]年 <7 应为5年");
// >30年,应返回30年以上
var code5 = "OVER_30Y";
var maturity5 = new DateTime(2060, 1, 1);
var underlying5 = CreateTestUnderlying(code5, null, maturity5);
var valueDate5 = maturity5.AddYears(-31); // 剩余31
var result5 = UnderlyingHelper.GetApplicableMarginTerm(code5, valueDate5);
Assert.AreEqual(ConsMarginTerm.OverThirtyYear, result5, ">30年 应为30年以上");
// (5.00,5.25] >=7年,应返回10年
var code6 = "GE7_5_25";
var open6 = new DateTime(2015, 1, 1); var maturity6 = new DateTime(2023, 2, 1); // 8.08年
var underlying6 = CreateTestUnderlying(code6, open6, maturity6);
var valueDate6 = maturity6.AddYears(-5).AddMonths(-1); // 剩余约5.08年
// 无效的到期日,应为默认
var code6 = "INVALID_TERM";
DateTime? maturity6 = null;
var underlying6 = CreateTestUnderlying(code6, null, maturity6);
var valueDate6 = DateTime.Now.Date;
var result6 = UnderlyingHelper.GetApplicableMarginTerm(code6, valueDate6);
Assert.AreEqual(ConsMarginTerm.TenYear, result6, "(5,5.25]年 >=7 应为10年");
// (5.25,25.00] 不限,应返回10年
var code7 = "UNLIMITED_10Y";
var maturity7 = new DateTime(2040, 1, 1);
var underlying7 = CreateTestUnderlying(code7, null, maturity7);
var valueDate7 = maturity7.AddYears(-10); // 剩余10年
var result7 = UnderlyingHelper.GetApplicableMarginTerm(code7, valueDate7);
Assert.AreEqual(ConsMarginTerm.TenYear, result7, "(5.25,25]年 不限 应为10年");
// (25.00,30.00] 不限,应返回30年
var code8 = "UNLIMITED_30Y";
var maturity8 = new DateTime(2050, 1, 1);
var underlying8 = CreateTestUnderlying(code8, null, maturity8);
var valueDate8 = maturity8.AddYears(-28); // 剩余28年
var result8 = UnderlyingHelper.GetApplicableMarginTerm(code8, valueDate8);
Assert.AreEqual(ConsMarginTerm.ThirtyYear, result8, "(25,30]年 不限 应为30年");
var code9 = "INVALID_TERM";
DateTime? maturity9 = null;
var underlying9 = CreateTestUnderlying(code9, null, maturity9);
var valueDate9 = DateTime.Now.Date;
var result9 = UnderlyingHelper.GetApplicableMarginTerm(code9, valueDate9);
Assert.AreEqual(ConsMarginTerm.Default, result9, "无效的到期日 不限 应为默认");
Assert.AreEqual(ConsMarginTerm.Default, result6, "无效的到期日 应为默认");
}
#region