-- ============================================================
-- 变量池初始数据（对应当前 glms_risk_variable 数据库内容）
-- ============================================================

-- 4.4.1 簿记要素类（Category=1）
-- 4.4.2 行情类（Category=2，统一取上一交易日收盘价）
-- 4.4.3 系统计算值类（Category=3）
-- 新增变量（ID 45~53）：
--  45=期初净价偏离度  46=期初收益率偏离度  47=期初价格偏离度
--  48=利息端利率与FR007偏离度  49=利息端利率与借贷加权费率偏离度
--  50=执行价偏离度  51=执行价  52=客户品种最低保证金率  53=参考价格
-- 4.4.4 布尔判断类（Category=4）
-- 说明：结构化 RuleExpr 的固定数值不追加 m；本文件 VariableExpr 为人工维护的 C# 表达式，原有 m 后缀保持不变。

-- 插入当前数据库中的 6 条变量，保留原始 ID 以匹配规则 ConditionJson 中的 VariableId
INSERT INTO `yltrs_ylcms`.`glms_risk_variable` (`id`, `VariableName`, `Category`, `DataType`, `Unit`, `ValueDomain`, `Description`, `VariableExpr`, `Status`, `Version`, `SortOrder`, `OptId`, `OptName`, `OptDate`, `UpdateOptId`, `UpdateOptName`, `UpdateDate`) VALUES
(1,
 '合约名义本金',
 1,
 1,
 '元',
 '≥ 0',
 '',
 'DbContext.trade.First(t => t.id == TradeId).StockEqvNotional',
 1,
 18,
 0,
 0,
 'SYSTEM',
 '2026-06-23 20:13:16',
 1,
 '初始用户',
 '2026-07-17 10:02:27'),
(32,
 '对手方累计标的数量',
 3,
 1,
 '个',
 '≥ 0',
 '当前交易对手方所有存续交易涉及的标的数量（去重）合计（含本笔）',
 'DbContext.swap_position.Where(p => !string.IsNullOrEmpty(p.UnderlyingCode) && !p.IsInitial && p.PosiQuantity > 0 && !p.Invalid && p.PosiDirection > 0 && DbContext.trade.Any(t => t.id == p.SwapTradeId && t.ValidState != "InValid" && t.ClientId == DbContext.trade.First(x => x.id == TradeId).ClientId)).Select(p => p.UnderlyingCode).Distinct().Count()',
 1,
 3,
 0,
 0,
 'SYSTEM',
 '2026-06-23 20:13:16',
 1,
 '初始用户',
 '2026-07-17 11:20:06'),
(45,
 'TRS债券净价偏离绝对值',
 3,
 1,
 '%',
 '≥ 0',
 'abs(期初标的交割净价% - 上一收盘日中债估值净价)',
 'Math.Abs(DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).PosiNetNoFeePrice.Value * 100 - DbContext.china_bond_valuation.Where(v => v.bond_id == DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).UnderlyingCode && v.valuation_date < DbContext.trade.First(t => t.id == TradeId).TradeDate.Value.Date).OrderByDescending(v => v.valuation_date).First().net_price.Value)',
 1,
 6,
 0,
 0,
 'SYSTEM',
 '2026-06-24 15:51:47',
 1,
 '初始用户',
 '2026-07-17 13:28:12'),
(46,
 'TRS债券收益率偏离绝对值',
 3,
 1,
 '%',
 '≥ 0',
 'abs(期初标的成交收益率% - 上一收盘日中债估值收益率)',
 'Math.Abs(DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).InitYtm.Value * 100 - DbContext.china_bond_valuation.Where(v => v.bond_id == DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).UnderlyingCode && v.valuation_date < DbContext.trade.First(t => t.id == TradeId).TradeDate.Value.Date).OrderBy(v => v.credibility).ThenByDescending(v => v.valuation_date).First().yield.Value)',
 1,
 3,
 0,
 0,
 'SYSTEM',
 '2026-06-24 15:51:47',
 1,
 '初始用户',
 '2026-07-17 13:28:30'),
(47,
 'TRS非债券价格偏离绝对值',
 3,
 1,
 '元',
 '≥ 0',
 'abs(期初标的交割全价% - 上一日标的收盘价)',
 'Math.Abs(DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).PosiGrossPrice * 100 - Convert.ToDecimal(DbContext.eod_commodity_future_price.Where(e => e.UnderlyingCode == DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 2 && !string.IsNullOrEmpty(p.UnderlyingCode)).UnderlyingCode && e.ValueDate < DbContext.trade.First(t => t.id == TradeId).TradeDate.Value.Date).OrderByDescending(e => e.ValueDate).First().ClosePrice))',
 1,
 4,
 0,
 0,
 'SYSTEM',
 '2026-06-24 15:51:47',
 1,
 '初始用户',
 '2026-07-17 13:29:43'),
(48,
 '利息端利率与FR007偏离度',
 3,
 1,
 '%',
 '≥ 0',
 'ABS(利息端利率-FR007)/FR007*100',
 'Math.Abs(DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.InterestDirection == 1).InterestRateDefault)*100m',
 1,
 2,
 0,
 0,
 'SYSTEM',
 '2026-06-24 15:51:47',
 1,
 '初始用户',
 '2026-07-16 19:23:05');
