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時間以内に処理します
  • 規制とのマッピング: アラートは一般的なフレームワークへの参照だけでなく、必ず具体的な引用やポリシーにマッピングします
  • 発効日の追跡: 重大度だけでなく、コンプライアンス期限までの期間に基づいて優先順位を付けます
  • 関係者への連絡: 影響評価の完了後、影響を受けるポリシーおよび管理策の責任者に直ちに通知します
  • 規制横断分析: 1つの規制変更が複数のコンプライアンスフレームワークに影響するかどうかを確認します
  • 証跡の保全: 監査証跡として、元のアラート本文と評価の根拠を作業メモに記録します
  • フィードバックループ: 変更の実装後、法務顧問とともに、対応が規制要件を十分に満たしていることを確認します

トラブルシューティング

規制アラートテーブルが見つからない

症状: 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 を確認します。Regulatory Change Management モジュールには、com.sn_compliance_regulatory プラグインが必要な場合があります。

アラートに一致する引用がない

症状: 影響分析で規制アラートに一致する引用が見つからない 原因: 新しい規制の引用がまだ存在しないか、命名規則が異なる可能性があります 解決策: 規制名の完全一致ではなく、アラートの説明に含まれるキーワードを使って検索範囲を広げます。引用が存在しない場合は、新しい引用レコードの作成を推奨する対応を含めます。

規制変更タスクテーブルを利用できない

症状: sn_regulatory_change_task にレコードを作成できない 原因: テーブルを利用するには追加のプラグインの有効化が必要であるか、別のテーブルを使用する可能性があります 解決策: 規制変更活動の追跡には、代わりに sn_compliance_task を使用します。カテゴリまたはタグフィールドを設定し、規制変更タスクを他のコンプライアンスタスクと区別します。

アラートの発効日の解析に関する問題

症状: 発効日の比較に失敗する、または誤った結果が返される 原因: アラートのソースとServiceNow内部形式の間で日付形式に一貫性がない 解決策: すべての日付比較に GlideDateTime を使用します。effective_date フィールドが日付型ではなく文字列の場合は、比較の前に解析します。

例

例 1:GDPR 改正の影響分析

シナリオ: AI の透明性に関する新しい GDPR 改正について、分析が必要です

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

影響評価の出力:

  • アラート: REG0002341 - GDPR 改正:AI の透明性要件
  • 当局: European Data Protection Board
  • 施行日: 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-01ICFR 統制を確認します
REG0002343HIPAA高2026-08-15PHI の取り扱い手順を更新します
REG0002344PCI-DSS中2026-12-01第 3 四半期の統制レビューを予定します
REG0002345地域プライバシー低2027-01-01監視し、四半期レビューに含めます

関連スキル

  • grc/control-objective-management - 規制変更の影響を受ける統制目標を更新します
  • grc/issue-action-plan - 規制上のギャップに起因するコンプライアンス上の課題について、アクションプランを作成します
  • grc/issue-summarization - 規制アラートの調査結果から作成された課題を要約します
  • grc/risk-assessment-summarization - 規制変更のリスクへの影響を評価します
  • security/audit-compliance - 規制対応活動の監査証跡を作成します

参考資料

コメント