mcpField
R
regulatory-alert-analysis

regulatory-alert-analysis

github.com/happy-technologies-llc其他4141 次安装2 天前更新
代码仓库

关于 regulatory-alert-analysis

regulatory-alert-analysis 是面向合规团队的 ServiceNow GRC 技能,用于评估监管警报的业务影响。它将警报关联到法规引文、政策和控制措施,并支持生成影响评估及跟踪变更任务。

主要功能

  1. 01分级处理监管警报
  2. 02查找受影响的法规引文和政策
  3. 03识别受影响的控制措施与目标
  4. 04生成结构化影响评估
  5. 05创建监管变更任务
  6. 06将评估结果更新到警报

适用场景

  1. 01评估新收到的监管警报
  2. 02为合规委员会准备法规更新
  3. 03确定所需的政策和控制措施变更
  4. 04跟踪合规响应活动

MCP 相关

使用 ServiceNow MCP 工具查询警报、法规引文和政策,创建监管变更任务、更新警报记录,并运行影响分析脚本。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill regulatory-alert-analysis

安装后在 Claude Code 中输入/regulatory-alert-analysis确认已加载。

详细介绍

法规警报分析

概述

此技能用于分析 ServiceNow GRC 中的法规警报,评估其业务影响并推动合规响应。包括:

  • 按紧急程度和范围检索并分流收到的法规警报
  • 识别受法规变更影响的政策、控制措施和法规引文
  • 为合规领导层生成结构化的影响评估
  • 创建法规变更任务,以跟踪所需的更新
  • 将警报映射到现有合规框架和控制目标
  • 为合规团队制定建议行动计划

适用场景:

  • 收到新的法规警报,需要进行影响分析时
  • 监测法规环境并开展前瞻扫描时
  • 法规发生变更,现有合规计划需要更新时
  • 合规委员会会议前,需要介绍法规动态时
  • 评估新法规是否需要新增控制措施或更新政策时

前提条件

  • 角色: sn_compliance.manager、sn_grc.manager 或 admin
  • 插件: com.sn_compliance、com.sn_grc
  • 访问权限: 对 sn_regulatory_alert、sn_regulatory_change_task、sn_compliance_policy、sn_compliance_citation 表具有读写权限
  • 知识: 了解适用的法规环境和组织的合规义务

主要法规表

表用途主要字段
sn_regulatory_alert收到的法规警报number、short_description、description、state、priority、regulation、authority、effective_date、alert_type、impact_level
sn_regulatory_change_task用于实施法规变更的任务number、short_description、state、assigned_to、due_date、alert、change_type
sn_compliance_policy可能受影响的合规政策number、short_description、state、owner、policy_statement、effective_date
sn_compliance_citation需要更新的法规引文number、short_description、reference、regulation、authority、citation_text
sn_compliance_control受法规变更影响的控制措施number、short_description、state、control_objective、owner、effectiveness
sn_compliance_control_objective需要修订的控制目标number、short_description、framework、effectiveness、owner

操作步骤

步骤 1:检索待处理的法规警报

查询尚未处理或最近收到的法规警报。

使用 MCP(Claude Code/Desktop):

Tool: SN-Query-Table
Parameters:
  table_name: sn_regulatory_alert
  query: active=true^stateIN1,2^ORDERBYDESCpriority
  fields: sys_id,number,short_description,description,state,priority,regulation,authority,effective_date,alert_type,impact_level,sys_created_on
  limit: 50

使用 REST API:

GET /api/now/table/sn_regulatory_alert?sysparm_query=active=true^stateIN1,2^ORDERBYDESCpriority&sysparm_fields=sys_id,number,short_description,description,state,priority,regulation,authority,effective_date,alert_type,impact_level&sysparm_limit=50
步骤 2:识别受影响的引文和法规

对于每条警报,查找引用相同法规或监管机构的现有引文。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sn_compliance_citation
  query: active=true^regulationLIKE[regulation_name]
  fields: sys_id,number,short_description,reference,regulation,authority,citation_text
  limit: 50

按监管机构搜索(例如 SEC、CNIL、HHS):

Tool: SN-Query-Table
Parameters:
  table_name: sn_compliance_citation
  query: active=true^authorityLIKE[authority_name]
  fields: sys_id,number,short_description,reference,regulation,authority,citation_text
  limit: 50

使用 REST API:

GET /api/now/table/sn_compliance_citation?sysparm_query=active=true^regulationLIKE[regulation_name]&sysparm_fields=sys_id,number,short_description,reference,regulation,authority,citation_text&sysparm_limit=50
步骤 3:识别受影响的政策

查找关联到受影响法规的政策:

Tool: SN-Query-Table
Parameters:
  table_name: sn_compliance_policy
  query: active=true^short_descriptionLIKE[regulation_keyword]^ORdescriptionLIKE[regulation_keyword]
  limit: 25

用于评估政策影响的结构化查询:

Tool: SN-Query-Table
Parameters:
  table_name: sn_compliance_policy
  query: active=true^short_descriptionLIKE[regulation_keyword]^ORdescriptionLIKE[regulation_keyword]
  fields: sys_id,number,short_description,state,owner,policy_statement,effective_date
  limit: 30
步骤 4:识别受影响的控制措施和目标

查询与受影响法规相关的控制措施:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var regulationKeyword = 'GDPR'; // Replace with target regulation
    var affected = {
      controls: [],
      objectives: [],
      total_controls: 0,
      total_objectives: 0
    };

    // Find affected control objectives
    var obj = new GlideRecord('sn_compliance_control_objective');
    obj.addQuery('active', true);
    obj.addEncodedQuery('short_descriptionLIKE' + regulationKeyword + '^ORdescriptionLIKE' + regulationKeyword + '^ORframeworkLIKE' + regulationKeyword);
    obj.query();

    while (obj.next()) {
      affected.total_objectives++;
      affected.objectives.push({
        number: obj.number.toString(),
        title: obj.short_description.toString(),
        framework: obj.framework.getDisplayValue() || '',
        effectiveness: obj.effectiveness.getDisplayValue() || 'Not Assessed',
        owner: obj.owner.getDisplayValue()
      });

      // Find controls for each objective
      var ctrl = new GlideRecord('sn_compliance_control');
      ctrl.addQuery('control_objective', obj.sys_id.toString());
      ctrl.addQuery('active', true);
      ctrl.query();

      while (ctrl.next()) {
        affected.total_controls++;
        affected.controls.push({
          number: ctrl.number.toString(),
          title: ctrl.short_description.toString(),
          state: ctrl.state.getDisplayValue(),
          effectiveness: ctrl.effectiveness.getDisplayValue() || '',
          objective: obj.number.toString(),
          owner: ctrl.owner.getDisplayValue()
        });
      }
    }

    gs.info('AFFECTED CONTROLS AND OBJECTIVES:\n' + JSON.stringify(affected, null, 2));
  description: "GRC: Identify controls and objectives affected by a regulatory change"
步骤 5:生成影响评估

为合规团队生成结构化的影响评估:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var alertNumber = 'REG0001234'; // Replace with target alert
    var gr = new GlideRecord('sn_regulatory_alert');
    gr.addQuery('number', alertNumber);
    gr.query();

    if (gr.next()) {
      var assessment = {
        alert: {
          number: gr.number.toString(),
          title: gr.short_description.toString(),
          description: gr.description.toString(),
          regulation: gr.regulation.getDisplayValue() || gr.regulation.toString(),
          authority: gr.authority.getDisplayValue() || gr.authority.toString(),
          effective_date: gr.effective_date.toString(),
          priority: gr.priority.getDisplayValue(),
          impact_level: gr.impact_level.getDisplayValue() || ''
        },
        impact_analysis: {
          affected_citations: 0,
          affected_policies: 0,
          affected_controls: 0,
          affected_objectives: 0,
          affected_profiles: 0
        },
        affected_citations: [],
        affected_policies: [],
        compliance_gaps: [],
        recommended_actions: [],
        timeline: {}
      };

      var regName = gr.regulation.toString() || gr.short_description.toString();

      // Count affected citations
      var cite = new GlideRecord('sn_compliance_citation');
      cite.addEncodedQuery('regulationLIKE' + regName + '^ORauthorityLIKE' + regName);
      cite.addQuery('active', true);
      cite.query();
      while (cite.next()) {
        assessment.impact_analysis.affected_citations++;
        assessment.affected_citations.push({
          number: cite.number.toString(),
          reference: cite.reference.toString(),
          title: cite.short_description.toString()
        });
      }

      // Count affected policies
      var pol = new GlideRecord('sn_compliance_policy');
      pol.addEncodedQuery('short_descriptionLIKE' + regName + '^ORdescriptionLIKE' + regName);
      pol.addQuery('active', true);
      pol.query();
      while (pol.next()) {
        assessment.impact_analysis.affected_policies++;
        assessment.affected_policies.push({
          number: pol.number.toString(),
          title: pol.short_description.toString(),
          owner: pol.owner.getDisplayValue(),
          state: pol.state.getDisplayValue()
        });
      }

      // Count affected controls
      var ctrl = new GlideAggregate('sn_compliance_control');
      ctrl.addEncodedQuery('short_descriptionLIKE' + regName + '^ORdescriptionLIKE' + regName);
      ctrl.addQuery('active', true);
      ctrl.addAggregate('COUNT');
      ctrl.query();
      if (ctrl.next()) assessment.impact_analysis.affected_controls = parseInt(ctrl.getAggregate('COUNT'));

      // Determine impact level and timeline
      var priority = parseInt(gr.priority) || 3;
      var effectiveDate = gr.effective_date.toString();

      if (priority <= 2 || assessment.impact_analysis.affected_policies >= 3) {
        assessment.timeline = {
          impact_level: 'HIGH',
          initial_review_days: 5,
          policy_update_days: 30,
          control_update_days: 60,
          full_compliance_days: 90,
          escalation: 'Immediate notification to Chief Compliance Officer and General Counsel'
        };
      } else if (priority == 3) {
        assessment.timeline = {
          impact_level: 'MEDIUM',
          initial_review_days: 10,
          policy_update_days: 60,
          control_update_days: 90,
          full_compliance_days: 120,
          escalation: 'Include in next compliance committee agenda'
        };
      } else {
        assessment.timeline = {
          impact_level: 'LOW',
          initial_review_days: 30,
          policy_update_days: 90,
          control_update_days: 120,
          full_compliance_days: 180,
          escalation: 'Standard quarterly reporting'
        };
      }

      // Generate recommended actions
      if (assessment.impact_analysis.affected_citations > 0) {
        assessment.recommended_actions.push('Review and update ' + assessment.impact_analysis.affected_citations + ' affected citations to reflect new regulatory language');
      }
      if (assessment.impact_analysis.affected_policies > 0) {
        assessment.recommended_actions.push('Revise ' + assessment.impact_analysis.affected_policies + ' policies to align with updated regulatory requirements');
      }
      if (assessment.impact_analysis.affected_controls > 0) {
        assessment.recommended_actions.push('Reassess ' + assessment.impact_analysis.affected_controls + ' controls for continued effectiveness under new requirements');
      }
      if (assessment.impact_analysis.affected_citations === 0) {
        assessment.recommended_actions.push('Create new compliance citations to capture this regulatory requirement');
      }
      assessment.recommended_actions.push('Conduct training and awareness for affected control owners');
      assessment.recommended_actions.push('Schedule post-implementation review to verify compliance');

      gs.info('REGULATORY IMPACT ASSESSMENT:\n' + JSON.stringify(assessment, null, 2));
    }
  description: "GRC: Generate regulatory alert impact assessment"
步骤 6:创建法规变更任务

创建任务以跟踪合规响应活动:

使用 MCP:

Tool: SN-Create-Record
Parameters:
  table_name: sn_regulatory_change_task
  fields:
    short_description: "Update data privacy policies for GDPR amendment on AI processing"
    description: "Review and update all data privacy policies to address new GDPR requirements for AI-based data processing. Ensure updated policies reference new Article 22a requirements for algorithmic transparency."
    assigned_to: [compliance_manager_sys_id]
    due_date: 2026-05-15
    priority: 2
    state: 1
    alert: [regulatory_alert_sys_id]
    change_type: policy_update

使用 REST API:

POST /api/now/table/sn_regulatory_change_task
Content-Type: application/json

{
  "short_description": "Update data privacy policies for GDPR amendment on AI processing",
  "description": "Review and update data privacy policies for new GDPR AI processing requirements.",
  "assigned_to": "[user_sys_id]",
  "due_date": "2026-05-15",
  "priority": "2",
  "state": "1",
  "alert": "[alert_sys_id]"
}

为控制措施更新创建其他任务:

Tool: SN-Create-Record
Parameters:
  table_name: sn_regulatory_change_task
  fields:
    short_description: "Reassess access controls for updated GDPR AI transparency requirements"
    description: "Evaluate existing access controls and data processing controls against new GDPR AI requirements. Design additional controls if gaps are identified. Update control testing procedures."
    assigned_to: [control_owner_sys_id]
    due_date: 2026-06-30
    priority: 2
    state: 1
    alert: [regulatory_alert_sys_id]
    change_type: control_update
步骤 7:使用评估结果更新警报

使用 MCP:

Tool: SN-Update-Record
Parameters:
  table_name: sn_regulatory_alert
  sys_id: [alert_sys_id]
  fields:
    work_notes: |
      === IMPACT ASSESSMENT COMPLETED ===
      Assessment Date: 2026-03-19
      Impact Level: HIGH

      Affected Components:
      - Citations: 4 existing citations require update
      - Policies: 2 policies require revision
      - Controls: 8 controls require reassessment
      - Objectives: 3 control objectives may need update

      Regulatory Change Tasks Created: 3
      Target Compliance Date: 2026-06-30
      Escalation: CCO and General Counsel notified

      Recommended Actions:
      1. Update citations with new regulatory language
      2. Revise affected policies within 30 days
      3. Reassess controls within 60 days
      4. Conduct control owner training
    state: 3

使用 REST API:

PATCH /api/now/table/sn_regulatory_alert/[sys_id]
Content-Type: application/json

{
  "work_notes": "Impact assessment completed. HIGH impact. 3 change tasks created.",
  "state": "3"
}
步骤 8:生成法规环境仪表板数据

为合规仪表板生成汇总数据:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var dashboard = {
      generated_date: new GlideDateTime().toString(),
      alert_summary: { total_open: 0, high_impact: 0, medium_impact: 0, low_impact: 0, overdue: 0 },
      by_regulation: {},
      by_authority: {},
      pending_tasks: { total: 0, overdue: 0 },
      recent_alerts: []
    };

    var now = new GlideDateTime();

    // Alert overview
    var gr = new GlideRecord('sn_regulatory_alert');
    gr.addQuery('active', true);
    gr.orderByDesc('sys_created_on');
    gr.query();

    while (gr.next()) {
      dashboard.alert_summary.total_open++;

      var pri = parseInt(gr.priority) || 3;
      if (pri <= 2) dashboard.alert_summary.high_impact++;
      else if (pri == 3) dashboard.alert_summary.medium_impact++;
      else dashboard.alert_summary.low_impact++;

      // Regulation breakdown
      var reg = gr.regulation.getDisplayValue() || 'Unspecified';
      dashboard.by_regulation[reg] = (dashboard.by_regulation[reg] || 0) + 1;

      // Authority breakdown
      var auth = gr.authority.getDisplayValue() || 'Unspecified';
      dashboard.by_authority[auth] = (dashboard.by_authority[auth] || 0) + 1;

      // Recent alerts (top 5)
      if (dashboard.recent_alerts.length < 5) {
        dashboard.recent_alerts.push({
          number: gr.number.toString(),
          title: gr.short_description.toString(),
          regulation: reg,
          priority: gr.priority.getDisplayValue(),
          effective_date: gr.effective_date.toString(),
          created: gr.sys_created_on.toString()
        });
      }
    }

    // Pending regulatory change tasks
    var task = new GlideRecord('sn_regulatory_change_task');
    task.addQuery('active', true);
    task.query();
    while (task.next()) {
      dashboard.pending_tasks.total++;
      if (task.due_date.toString() && new GlideDateTime(task.due_date.toString()).compareTo(now) < 0) {
        dashboard.pending_tasks.overdue++;
      }
    }

    gs.info('REGULATORY LANDSCAPE DASHBOARD:\n' + JSON.stringify(dashboard, null, 2));
  description: "GRC: Generate regulatory landscape dashboard data"

工具使用

操作MCP 工具REST 端点
查询警报SN-Query-TableGET /api/now/table/sn_regulatory_alert
搜索警报SN-Natural-Language-SearchN/A
查询引文SN-Query-TableGET /api/now/table/sn_compliance_citation
查询政策SN-Query-TableGET /api/now/table/sn_compliance_policy
创建变更任务SN-Create-RecordPOST /api/now/table/sn_regulatory_change_task
更新警报SN-Update-RecordPATCH /api/now/table/sn_regulatory_alert
影响分析SN-Execute-Background-ScriptPOST /api/now/table/sys_trigger
架构发现SN-Discover-Table-SchemaGET /api/now/table/sys_dictionary

最佳实践

  • 及时分流: 在收到监管警报后 48 小时内处理;对于影响较大的警报,应在 24 小时内处理
  • 监管映射: 始终将警报映射到具体引文和政策,而不只是通用框架引用
  • 生效日期跟踪: 根据合规截止日期的临近程度确定优先级,而不只是考虑严重性
  • 利益相关方沟通: 完成影响评估后,立即通知受影响的政策和控制负责人
  • 跨法规分析: 检查一项监管变更是否会影响多个合规框架
  • 证据保留: 在工作备注中记录警报原文和评估依据,以便审计追踪
  • 反馈闭环: 实施变更后,请法律顾问确认响应是否充分满足监管要求

故障排除

找不到监管警报表

症状: 查询 sn_regulatory_alert 时返回找不到表 原因: 该表可能使用了不同的名称,或需要额外的插件 解决方案:

Tool: SN-Discover-Table-Schema
Parameters:
  table_name: sn_regulatory_alert

如果未找到,请检查 sn_compliance_alert、sn_grc_regulatory_alert 或 sn_reg_change_alert。监管变更管理模块可能需要 com.sn_compliance_regulatory 插件。

警报没有匹配的引文

症状: 影响分析未找到与监管警报匹配的引文 原因: 新法规可能尚无对应引文,或命名约定不同 解决方案: 扩大搜索范围,使用警报描述中的关键词,而不是法规的确切名称。如果没有引文,建议采取的措施应包括创建新的引文记录。

监管变更任务表不可用

症状: 无法在 sn_regulatory_change_task 中创建记录 原因: 该表可能需要启用额外的插件,或应使用其他表 解决方案: 改用 sn_compliance_task 跟踪监管变更活动。设置类别或标签字段,以便将监管变更任务与其他合规任务区分开来。

警报生效日期解析问题

症状: 生效日期比较失败或返回错误结果 原因: 警报来源中的日期格式与 ServiceNow 内部格式不一致 解决方案: 所有日期比较均使用 GlideDateTime。如果 effective_date 字段是字符串而非日期类型,请先解析再进行比较。

示例

示例 1:GDPR 修正案影响分析

场景: 需要分析 GDPR 关于 AI 透明度的新修正案

Tool: SN-Query-Table
Parameters:
  table_name: sn_regulatory_alert
  query: 123TEXTQUERY321=GDPR artificial intelligence automated processing
  limit: 10

影响评估输出:

  • 警报: REG0002341 - GDPR 修正案:AI 透明度要求
  • 主管机构: 欧洲数据保护委员会
  • 生效日期: 2026-09-01
  • 影响级别: 高
  • 受影响的引文: 4(第 13、14、15、22 条)
  • 受影响的政策: 2(数据隐私政策、AI 道德政策)
  • 受影响的控制措施: 6(同意管理、算法透明度、数据主体访问)
  • 建议采取的行动:
    1. 更新隐私声明,纳入 AI 处理披露(截止日期:2026 年 6 月)
    2. 实施算法影响评估流程(截止日期:2026 年 7 月)
    3. 修订有关 AI 决策的数据主体访问请求工作流(截止日期:2026 年 8 月)
    4. 为数据处理团队提供新要求方面的培训(截止日期:2026 年 8 月)
示例 2:多法规警报分类处理

场景: 合规团队需要对一批近期法规警报进行分类处理

Tool: SN-Query-Table
Parameters:
  table_name: sn_regulatory_alert
  query: active=true^state=1^ORDERBYpriority
  fields: sys_id,number,short_description,regulation,authority,priority,effective_date
  limit: 20

分类处理输出:

警报法规优先级生效日期行动
REG0002341GDPR紧急2026-09-01需要进行全面影响评估
REG0002342SOX高2026-07-01审查 ICFR 控制措施
REG0002343HIPAA高2026-08-15更新 PHI 处理规程
REG0002344PCI-DSS中2026-12-01安排第三季度控制措施审查
REG0002345Local Privacy低2027-01-01持续监控;纳入季度审查

相关技能

  • grc/control-objective-management - 更新受法规变更影响的控制目标
  • grc/issue-action-plan - 针对法规差距导致的合规问题制定行动计划
  • grc/issue-summarization - 总结法规警报调查结果所产生的问题
  • grc/risk-assessment-summarization - 评估法规变更的风险影响
  • security/audit-compliance - 记录法规响应活动的审计轨迹

参考资料

评论

支持 Markdown