Files
zszq-trs/YLErpDAL/Modules/TradeModule/DealModule/SwapTradeValidator.cs
T
2024-05-09 14:06:26 +08:00

81 lines
3.9 KiB
C#

using YLErp.Model.Enum;
using YLErp.Modules.DataProviderModule;
namespace YLErp.Modules.TradeModule.DealModule
{
/// <summary>
/// 收益互换数据验证
/// </summary>
public static class SwapTradeValidator
{
/// <summary>
/// 收益互换预付金校验
/// </summary>
public static string Validate(trade req)
{
var errorMsg = string.Empty;
var client = DataCacheProvider.GetClientDataSource().GetData(req.ClientId);
if (client.DerivativesInvestmentVarieties == null || !client.DerivativesInvestmentVarieties.Contains((int)DerivativesInvestmentVarietiesEnum.场外互换 + ""))
{
return $"客户:{client.Name}未设置交易种类“场外互换”,无法生成互换交易!";
}
//收益互换初始预付金校验
//errorMsg = checkMarginRate(req.trade_swap);
return errorMsg;
}
private static string checkMarginRate(trade_swap tradeSwap)
{
var errorMsg = "";
//多空组合
if (ClientMarginTypeEnum.多空组合.ToString().Equals(tradeSwap.SwapType))
{
if (tradeSwap.GetMarginRate < 0.25)
{
errorMsg = $"根据监管要求权益类多空组合型收益互换预付金不得低于25%,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!";
}
}
else
{
//获取标的品种
var underlingData = new UnderlyingDataProvider();
var underlyingCode = tradeSwap.PayUnderlyingCode;
if (tradeSwap.IsGetFloatingProfit)
{
underlyingCode = tradeSwap.GetUnderlyingCode;
}
var underlying = underlingData.GetUnderlying(underlyingCode);
var variety = underlingData.GetVariety(underlying.UnderlyingTypeId);
if (variety == null)
{
errorMsg = $"所设置标的未对应品种,请设置对应品种后再进行交易!";
}
else
{
//股票、窄基股票指数及其产品、信用债 初始预付金比率 必须大于等于100%
if ((variety.AssetType == "个股" || (variety.AssetType == "指数" && "窄基指数".Equals(variety.IndexType))) && tradeSwap.GetMarginRate < 1)
{
errorMsg = $"所交易标的为股票或窄基指数及其产品、信用债,初始预付金比例不得低于100%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!";
}
else if ((variety.AssetType == "指数" && "宽基指数".Equals(variety.IndexType)) && tradeSwap.GetMarginRate < 0.5)
{
//挂钩宽基股票指数及其产品,无对应期货品种的 向单一交易对手方收取的预付金比例不得低于50%
errorMsg = $"所交易标的挂钩宽基股票指数及其产品,无对应期货品种的,初始预付金比例不得低于50%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!";
}
else if (tradeSwap.GetMarginRate < (variety.Margin ?? 0.0))
{
//有对应期货或集中交易品种的 不得低于品种设置的最低预付金比例
errorMsg = $"所交易标的对应期货或集中交易品种的,初始预付金比例不得低于品种[{ variety.VarietyName}]所设置最低预付金比例{variety.Margin * 100}%!,当前交易预付金率为:{ tradeSwap.GetMarginRate * 100}%,不符合监管要求!";
}
}
}
return errorMsg;
}
}
}