- ScopeIsGlobal 类型由 bool 改为 int 以兼容前端传输 0/1 - 修复 QueryApplicationList 中 Status 投影 EF Core enum 转换失败 - 新增 Scope 字段查询支持(逗号分隔集合精确匹配) - 新增变量列表 DataType 筛选 - 修复审计日志日期查询范围(EndDate 纳入整天数据) - 统一 Application 审计日志 OperationType 前缀(APP_xxx) - 审计日志 OperationDetail 枚举值映射为中文
293 lines
14 KiB
SQL
293 lines
14 KiB
SQL
-- ============================================================
|
||
-- 规则初始数据(对应设计文档 §4.9.1 通用规则预置参考)
|
||
-- 依赖:seed_variables.sql(变量池数据需先插入,ID 1~44)
|
||
--
|
||
-- 变量 ID 映射(seed_variables.sql 自增):
|
||
-- 1=合约名义本金 2=合约起息日 3=合约到期日 4=合约平仓日
|
||
-- 5=合约支付日 6=期初净价 7=期初全价 8=期初收益率
|
||
-- 9=期初价格 10=期末全价 11=期末价格 12=保证金利率
|
||
-- 13=保证金比例 14=客户授信额度
|
||
-- 15=上一收盘日中债估值净价 16=上一收盘日中债估值全价 17=上一收盘日中债估值收益率
|
||
-- 18=上一日收盘价 19=借贷加权费率 20=FR007 21=当前日期
|
||
-- 22=挂钩标的到期日 23=标的发行余额
|
||
-- 24=挂钩标的集中度 25=授信占用率 26=合约期限 27=Delta
|
||
-- 28=Gamma 29=Vega 30=Theta 31=利息端利率
|
||
-- 32=对手方累计标的数量 33=同一标的累计名义本金 34=同一客户累计名义本金
|
||
-- 35=总持仓名义本金
|
||
-- 36=到期日是否银行间交易日 37=平仓日是否银行间交易日 38=支付日是否银行间交易日
|
||
-- 39=利息端/浮动端方向是否同向 40=关键业务要素是否一致
|
||
-- 41=多空方向为多头 42=多空方向为空头
|
||
-- 43=保证金收支方向为支付 44=保证金收支方向为收取
|
||
-- 45=期初净价偏离度 46=期初收益率偏离度 47=期初价格偏离度
|
||
-- 48=利息端利率与FR007偏离度 49=利息端利率与借贷加权费率偏离度
|
||
-- 50=执行价偏离度 51=执行价 52=客户品种最低保证金率 53=参考价格
|
||
--
|
||
-- ConditionJson 精简设计:只存 VariableId/Operator/ThresholdType/Value/ThresholdVariableId
|
||
-- 展示字段(VariableName/VariableType/Unit/ThresholdVariableName)从变量接口关联获取
|
||
-- ============================================================
|
||
|
||
|
||
-- ============================================================
|
||
-- 插入 21 条通用规则
|
||
-- ============================================================
|
||
|
||
-- 规则1:挂钩标的集中度超阈值(审批,全局)
|
||
-- 条件:挂钩标的集中度(ID=24) > 30%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('挂钩标的集中度超阈值',
|
||
'挂钩标的集中度超过阈值(默认30%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 24,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 30
|
||
)),
|
||
'calc.UnderlyingConcentration > 30',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则2:挂钩标的到期日小于合约到期日(禁止,全局)
|
||
-- 条件:挂钩标的到期日(ID=22) < 合约到期日(ID=3)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('挂钩标的到期日小于合约到期日',
|
||
'挂钩标的到期日早于合约到期日时禁止交易',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 22,
|
||
'Operator', '早于', 'ThresholdType', 'Variable',
|
||
'ThresholdVariableId', 3
|
||
)),
|
||
'market.UnderlyingMaturityDate < trade.ExerciseDate',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则3:名义本金超阈值(审批,账户/合约类型)
|
||
-- 条件:合约名义本金(ID=1) > 100000000(1亿元)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('名义本金超阈值',
|
||
'合约名义本金超过阈值(默认1亿元)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 1,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 100000000
|
||
)),
|
||
'trade.StockEqvNotional > 100000000',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则4:保证金支付比例超阈值(审批,账户/标的类型)
|
||
-- 条件:保证金比例(ID=13) > 50%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('保证金支付比例超阈值',
|
||
'保证金比例超过阈值(默认50%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 13,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 50
|
||
)),
|
||
'trade.MarginRate > 50',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则5:保证金利率偏离(审批,账户)
|
||
-- 条件:保证金利率(ID=12) 不介于 [2%, 5%]
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('保证金利率偏离',
|
||
'保证金利率不在配置区间内(默认2%~5%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 12,
|
||
'Operator', '不介于', 'ThresholdType', 'Fixed', 'Value', JSON_ARRAY(2, 5),
|
||
'IncludeLowerBound', true, 'IncludeUpperBound', true
|
||
)),
|
||
'!(client_marginrate.InitMarginRebateRate >= 2 && client_marginrate.InitMarginRebateRate <= 5)',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则6:保证金收取比例低于最低标准(审批,账户/标的类型)
|
||
-- 条件:保证金比例(ID=13) < 客户品种最低保证金率(ID=52)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('保证金收取比例低于最低标准',
|
||
'保证金比例低于客户品种最低保证金率时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 13,
|
||
'Operator', '<', 'ThresholdType', 'Variable',
|
||
'ThresholdVariableId', 52
|
||
)),
|
||
'trade.MarginRate < config.MinMarginRate',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则7:起息日早于当前日期(审批,全局)
|
||
-- 条件:合约起息日(ID=2) < 当前日期(ID=21)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('起息日早于当前日期',
|
||
'合约起息日早于当前日期时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 2,
|
||
'Operator', '早于', 'ThresholdType', 'Variable',
|
||
'ThresholdVariableId', 21
|
||
)),
|
||
'trade.StartDate < sys.CurrentDate',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则8:支付日为银行间交易日(审批,全局)
|
||
-- 条件:支付日是否银行间交易日(ID=38) = 是
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('支付日为银行间交易日',
|
||
'支付日为银行间交易日时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 38,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
)),
|
||
'calc.IsSettlementDateTradingDay == true',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则9:到期日为银行间交易日(审批,全局)
|
||
-- 条件:到期日是否银行间交易日(ID=36) = 是
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('到期日为银行间交易日',
|
||
'到期日为银行间交易日时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 36,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
)),
|
||
'calc.IsExerciseDateTradingDay == true',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则10:平仓日为银行间交易日(审批,全局)
|
||
-- 条件:平仓日是否银行间交易日(ID=37) = 是
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('平仓日为银行间交易日',
|
||
'平仓日为银行间交易日时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 37,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
)),
|
||
'calc.IsUnwindDateTradingDay == true',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则11:合约期限超阈值(审批,账户)
|
||
-- 条件:合约期限(ID=26) > 365天
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('合约期限超阈值',
|
||
'合约期限超过阈值(默认365天)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 26,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 365
|
||
)),
|
||
'calc.MaturityDays > 365',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则12:债券类净价偏离(审批,全局)
|
||
-- 条件:期初净价偏离度(ID=45) > 5%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('债券类净价偏离',
|
||
'期初净价与上一收盘日中债估值净价偏离度超阈值(默认5%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 45,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 5
|
||
)),
|
||
'Math.Abs(swap_position.PosiNetNoFeePrice - market.CBValuationNetPrice) / market.CBValuationNetPrice * 100 > 5',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则13:债券类收益率偏离(审批,全局)
|
||
-- 条件:期初收益率偏离度(ID=46) > 5%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('债券类收益率偏离',
|
||
'期初收益率与上一收盘日中债估值收益率偏离度超阈值(默认5%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 46,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 5
|
||
)),
|
||
'Math.Abs(trade.InitYtm - market.CBValuationYtm) / market.CBValuationYtm * 100 > 5',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则14:非债券类价格偏离(审批,全局)
|
||
-- 条件:期初价格偏离度(ID=47) > 5%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('非债券类价格偏离',
|
||
'期初价格与上一日收盘价偏离度超阈值(默认5%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 47,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 5
|
||
)),
|
||
'Math.Abs(trade.SpotPrice - market.LastClosePrice) / market.LastClosePrice * 100 > 5',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则15:单一交易对手累计标的数量超阈值(审批,对手方)
|
||
-- 条件:对手方累计标的数量(ID=32) > 10个
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('单一交易对手累计标的数量超阈值',
|
||
'对手方累计标的数量超过阈值(默认10个)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 32,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 10
|
||
)),
|
||
'calc.CounterpartyUnderlyingCount > 10',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则16:多头支付固定端利率偏离(审批,账户)
|
||
-- 条件:多空方向为多头(ID=41) AND 利息端利率与FR007偏离度(ID=48) > 3%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('多头支付固定端利率偏离',
|
||
'多头方向支付固定端场景下,利息端利率与FR007偏离度超阈值(默认3%)时触发审批',
|
||
JSON_ARRAY(
|
||
JSON_OBJECT(
|
||
'VariableId', 41,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
),
|
||
JSON_OBJECT(
|
||
'VariableId', 48,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 3
|
||
)
|
||
),
|
||
'calc.IsLongDirection == true && Math.Abs(calc.InterestRate - market.FR007) / market.FR007 * 100 > 3',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则17:空头利率减点借贷加权偏离(审批,账户)
|
||
-- 条件:多空方向为空头(ID=42) AND 利息端利率与借贷加权费率偏离度(ID=49) > 2%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('空头利率减点借贷加权偏离',
|
||
'空头方向场景下,利息端利率与借贷加权费率偏离度超阈值(默认2%)时触发审批',
|
||
JSON_ARRAY(
|
||
JSON_OBJECT(
|
||
'VariableId', 42,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
),
|
||
JSON_OBJECT(
|
||
'VariableId', 49,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 2
|
||
)
|
||
),
|
||
'calc.IsShortDirection == true && Math.Abs(calc.InterestRate - market.BondLendingRate) / market.BondLendingRate * 100 > 2',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则18:账户授权收支方向不匹配(禁止,账户)
|
||
-- 条件:保证金收支方向为支付(ID=43)(实际需结合账户授权方向判断,此处简化)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('账户授权收支方向不匹配',
|
||
'保证金收支方向与账户授权方向不匹配时禁止交易',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 43,
|
||
'Operator', '是', 'ThresholdType', 'Fixed', 'Value', true
|
||
)),
|
||
'calc.IsMarginPay == true',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则19:执行价偏离超阈值(审批,账户)
|
||
-- 条件:执行价偏离度(ID=50) > 5%
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('执行价偏离超阈值',
|
||
'执行价与参考价格偏离度超阈值(默认5%)时触发审批',
|
||
JSON_ARRAY(JSON_OBJECT(
|
||
'VariableId', 50,
|
||
'Operator', '>', 'ThresholdType', 'Fixed', 'Value', 5
|
||
)),
|
||
'Math.Abs(trade.StrikePrice - market.ReferencePrice) / market.ReferencePrice * 100 > 5',
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则20:希腊字母限额超阈值(提示,预留接口,一期不纳入)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('希腊字母限额超阈值',
|
||
'Delta/Gamma/Vega/Theta任一超阈值时提示(预留接口,一期不纳入)',
|
||
NULL,
|
||
NULL,
|
||
1, 1, 0, 'SYSTEM', NOW());
|
||
|
||
-- 规则21:接近/触发敲入敲出价(提示,预留接口,需确认具体判断逻辑)
|
||
INSERT INTO `glms_risk_rule` (`RuleName`, `RuleText`, `ConditionJson`, `RuleExpr`, `Status`, `Version`, `OptId`, `OptName`, `OptDate`) VALUES
|
||
('接近/触发敲入敲出价',
|
||
'标的价格接近敲入/敲出价时提示(预留接口,需确认具体判断逻辑)',
|
||
NULL,
|
||
NULL,
|
||
1, 1, 0, 'SYSTEM', NOW());
|