using System; namespace YLErp.Modules.RiskEngine { /// /// 风控规则(合并模型:规则定义 + 应用配置合一) /// /// 最终设计说明: /// 业务上不需要 "一个 Rule 对应多个 Application" 的复杂关系。 /// 每条规则自身包含:公式定义 + 校验策略 + 触发时点 + 适用范围。 /// 规则创建时即完成脚本编译,判风控时直接执行已编译委托(零解析开销)。 /// public class RiskRule { // === 基础信息 === public int Id { get; set; } public string RuleCode { get; set; } public string RuleName { get; set; } public string Description { get; set; } /// /// 【核心】用户输入的规则内容字符串,如"名义本金>1亿" /// 在规则创建/加载时由 RuleCompiler 解析并编译为 CompiledScript /// public string FormulaText { get; set; } /// /// 【核心】公式 JSON(条件列表的结构化存储),如 /// {"conditions":[{"variableCode":"trade.StockEqvNotional","operator":">","value":100000000}]} /// 由 RuleCompiler 解析并编译为 CompiledScript /// public string FormulaJson { get; set; } // === 校验策略(原 Application.ControlStrategy)=== /// /// 校验策略:1=禁止, 2=审批, 3=提示 /// public int ControlStrategy { get; set; } // === 触发时点(原 Application.TriggerPoints)=== /// /// 触发时点,逗号分隔(如 BOOK_CONFIRM,CLOSE_REVIEW) /// public string TriggerPoints { get; set; } // === 适用范围(原 Application.Scope*)=== /// /// 是否全局适用(true=所有交易适用,忽略其他 Scope 字段) /// public bool ScopeIsGlobal { get; set; } public string ScopeAssetBookIds { get; set; } public string ScopeClientIds { get; set; } public string ScopeUnderlyingTypes { get; set; } public string ScopeTradeTypes { get; set; } // === 生命周期 === /// /// 状态:1=已生效(Active), 2=已停用(Disabled), 3=已删除(Deleted) /// public int Status { get; set; } public int Version { get; set; } public bool IsDeleted { get; set; } // === 审计字段 === public int OptId { get; set; } public string OptName { get; set; } public DateTime OptDate { get; set; } public int UpdateOptId { get; set; } public string UpdateOptName { get; set; } public DateTime UpdateDate { get; set; } // === 运行时内存字段(不持久化到数据库)=== /// /// 【核心】预编译的可执行委托 /// 在规则创建/加载时由 RuleCompiler.Compile(this) 生成 /// 判风控时直接调用:rule.CompiledScript(context) → bool /// public Func CompiledScript { get; set; } } }