mcpField
E
esg-document-intelligence

esg-document-intelligence

github.com/happy-technologies-llcデータ・データベース4141 回インストール2 日前に更新
リポジトリ

esg-document-intelligence について

ServiceNow向けに、文書やレコードからESGデータを抽出し、報告や分析に利用できる形に整えるスキルです。開示フレームワーク、排出スコープ、推移分析、元文書への追跡を扱います。

主な機能

  1. 01エネルギー・排出・廃棄物データを抽出
  2. 02指標をESGフレームワークに対応付け
  3. 03Scope 1・2・3の排出量を追跡
  4. 04開示の完全性とデータ不足を確認
  5. 05ダッシュボード用の推移データを作成

活用シーン

  1. 01年次サステナビリティ報告書の準備
  2. 02公共料金請求書から指標を登録
  3. 03ESG開示前の不足項目の特定
  4. 04監査時に報告指標の出典を追跡

MCP 対応

ServiceNow MCP ツールでESGレコードの検索、文書検索、データポイント作成、指標更新、計算を行います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill esg-document-intelligence

インストール後、Claude Code で/esg-document-intelligenceを入力して読み込まれたか確認します。

詳細

ESG ドキュメントインテリジェンス

概要

このスキルは、ドキュメントやServiceNowのレコードから環境・社会・ガバナンス(ESG)データを抽出して分析します。以下の内容に対応しています。

  • 公共料金の請求書やレポートから、エネルギー消費量、炭素排出量、廃棄物データを抽出する
  • 抽出した指標をESGフレームワークの要件(GRI、SASB、TCFD、CDP、CSRD)にマッピングする
  • 施設や期間ごとにスコープ1、2、3の温室効果ガス排出量を追跡する
  • 規制上および任意の報告フレームワークに照らして、開示の網羅性を分析する
  • トレンド分析とベンチマークを含むESGパフォーマンスダッシュボードを生成する
  • 開示の正確性やコンプライアンスに影響する可能性のあるデータの不足を特定する

使用する場面:

  • 年次ESG/サステナビリティレポートの作成時
  • 公共料金の請求書を処理して環境指標を更新する場合
  • CDP、GRI、CSRDの開示を提出する前
  • 経営陣が環境パフォーマンスの概要を必要とする場合
  • 指標をソースドキュメントまで追跡する必要があるESG監査時

前提条件

  • ロール: sn_esg.admin、sn_esg.manager、sn_esg.data_entry、またはadmin
  • プラグイン: com.sn_esg(ESG Management)
  • アクセス: sn_esg_metric、sn_esg_disclosure、sn_esg_frameworkテーブルへの読み取り/書き込みアクセス
  • 知識: ESGフレームワーク(GRI Standards、SASB、TCFD)、排出量算定のGHG Protocol、および組織のマテリアリティ評価に関する理解

主なESGテーブル

テーブル用途主なフィールド
sn_esg_metricESGパフォーマンス指標number, metric_name, category, value, unit, period, location, scope, framework, data_source
sn_esg_disclosureフレームワークの開示回答number, framework, disclosure_id, response, status, evidence, reporting_period, reviewer
sn_esg_frameworkESGフレームワークの定義name, version, category, standard_body, active, disclosure_count
sn_esg_data_pointソースからの生データポイントmetric, value, date, source_document, location, verified, notes
cmn_location施設/場所のレコードname, city, state, country, building, latitude, longitude

手順

ステップ1:既存のESG指標を照会する

現在のESG指標を取得して、ベースラインを把握します。

MCPを使用する(Claude Code/Desktop):

Tool: SN-Query-Table
Parameters:
  table_name: sn_esg_metric
  query: active=true^ORDERBYcategory
  fields: sys_id,number,metric_name,category,value,unit,period,location,scope,framework,data_source,last_updated
  limit: 100

REST APIを使用する:

GET /api/now/table/sn_esg_metric?sysparm_query=active=true^ORDERBYcategory&sysparm_fields=sys_id,number,metric_name,category,value,unit,period,location,scope,framework,data_source,last_updated&sysparm_limit=100&sysparm_display_value=true
ステップ2:公共料金の請求書からデータを抽出する

公共料金の請求書データを処理し、環境指標を抽出します。

請求書の添付ファイルを取得する:

Tool: SN-Query-Table
Parameters:
  table_name: sys_attachment
  query: table_nameLIKEesg^ORtable_nameLIKEutility^ORtable_nameLIKEinvoice^content_typeLIKEpdf
  fields: sys_id,file_name,table_name,table_sys_id,content_type,size_bytes,sys_created_on
  limit: 50
  order_by_desc: sys_created_on

抽出したエネルギーデータを解析して記録する:

Tool: SN-Create-Record
Parameters:
  table_name: sn_esg_data_point
  fields:
    metric: [energy_metric_sys_id]
    value: 45230
    date: 2026-02-28
    source_document: "February 2026 Electric Utility Invoice - Building A"
    location: [location_sys_id]
    verified: false
    notes: "Extracted from utility invoice. 45,230 kWh electricity consumption."
ステップ3:炭素排出量を算定する

ソースデータからスコープ1、2、3の排出量を算定する:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    // EPA emission factors (2025 US average)
    var EMISSION_FACTORS = {
      electricity_kwh: 0.000386, // metric tons CO2e per kWh (US avg grid)
      natural_gas_therm: 0.005302, // metric tons CO2e per therm
      diesel_gallon: 0.010180, // metric tons CO2e per gallon
      gasoline_gallon: 0.008887, // metric tons CO2e per gallon
      propane_gallon: 0.005740  // metric tons CO2e per gallon
    };

    var period = '2026-Q1';
    var emissions = {
      period: period,
      scope1: { total: 0, sources: {} },
      scope2: { total: 0, sources: {} },
      scope3: { total: 0, sources: {} },
      total_co2e: 0,
      unit: 'metric tons CO2e'
    };

    // Query energy data points for the period
    var dp = new GlideRecord('sn_esg_data_point');
    dp.addQuery('date', '>=', '2026-01-01');
    dp.addQuery('date', '<=', '2026-03-31');
    dp.query();

    while (dp.next()) {
      var metricRec = new GlideRecord('sn_esg_metric');
      metricRec.get(dp.metric.toString());
      var metricName = metricRec.metric_name.toString().toLowerCase();
      var value = parseFloat(dp.value.toString()) || 0;
      var scope = metricRec.scope.toString();

      var co2e = 0;
      if (metricName.match(/electricity/)) co2e = value * EMISSION_FACTORS.electricity_kwh;
      else if (metricName.match(/natural gas/)) co2e = value * EMISSION_FACTORS.natural_gas_therm;
      else if (metricName.match(/diesel/)) co2e = value * EMISSION_FACTORS.diesel_gallon;
      else if (metricName.match(/gasoline/)) co2e = value * EMISSION_FACTORS.gasoline_gallon;

      if (scope == '1') {
        emissions.scope1.total += co2e;
        emissions.scope1.sources[metricName] = (emissions.scope1.sources[metricName] || 0) + co2e;
      } else if (scope == '2') {
        emissions.scope2.total += co2e;
        emissions.scope2.sources[metricName] = (emissions.scope2.sources[metricName] || 0) + co2e;
      } else {
        emissions.scope3.total += co2e;
        emissions.scope3.sources[metricName] = (emissions.scope3.sources[metricName] || 0) + co2e;
      }
    }

    emissions.scope1.total = Math.round(emissions.scope1.total * 100) / 100;
    emissions.scope2.total = Math.round(emissions.scope2.total * 100) / 100;
    emissions.scope3.total = Math.round(emissions.scope3.total * 100) / 100;
    emissions.total_co2e = emissions.scope1.total + emissions.scope2.total + emissions.scope3.total;

    gs.info('EMISSIONS CALCULATION:\n' + JSON.stringify(emissions, null, 2));
  description: "ESG: Calculate GHG emissions by scope from energy data points"
ステップ4:開示の網羅性を評価する

各フレームワークの開示項目について、完了状況と不足項目を確認する:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var frameworks = ['GRI', 'SASB', 'TCFD', 'CDP'];
    var completeness = { reporting_period: '2025', frameworks: {} };

    for (var f = 0; f < frameworks.length; f++) {
      var fw = frameworks[f];
      completeness.frameworks[fw] = { total: 0, complete: 0, in_progress: 0, not_started: 0, gaps: [] };

      var disc = new GlideRecord('sn_esg_disclosure');
      disc.addQuery('framework.name', fw);
      disc.addQuery('reporting_period', '2025');
      disc.query();

      while (disc.next()) {
        completeness.frameworks[fw].total++;
        var status = disc.status.toString().toLowerCase();
        if (status == 'complete' || status == 'submitted') {
          completeness.frameworks[fw].complete++;
        } else if (status == 'in_progress' || status == 'draft') {
          completeness.frameworks[fw].in_progress++;
        } else {
          completeness.frameworks[fw].not_started++;
          completeness.frameworks[fw].gaps.push({
            disclosure_id: disc.disclosure_id.toString(),
            description: disc.short_description.toString()
          });
        }
      }
    }

    gs.info('DISCLOSURE COMPLETENESS:\n' + JSON.stringify(completeness, null, 2));
  description: "ESG: Assess disclosure completeness across ESG frameworks"
ステップ5:ESGパフォーマンスダッシュボードのデータを生成する

経営層向けレポート用にトレンドデータをまとめる:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var dashboard = {
      generated_date: new GlideDateTime().toString(),
      environmental: {
        total_emissions_ytd: 0,
        emissions_vs_target: '',
        energy_consumption_kwh: 0,
        renewable_percentage: 0,
        waste_diverted_percentage: 0,
        water_usage_gallons: 0
      },
      yoy_comparison: {},
      by_location: {},
      data_quality: { verified: 0, unverified: 0, missing: 0 }
    };

    // Aggregate YTD metrics by category
    var categories = {
      'emissions': 'total_emissions_ytd',
      'energy': 'energy_consumption_kwh',
      'water': 'water_usage_gallons'
    };

    var metric = new GlideRecord('sn_esg_metric');
    metric.addQuery('category', 'environmental');
    metric.addQuery('active', true);
    metric.query();
    while (metric.next()) {
      var loc = metric.location.getDisplayValue() || 'Unknown';
      if (!dashboard.by_location[loc]) dashboard.by_location[loc] = { emissions: 0, energy: 0 };

      var val = parseFloat(metric.value.toString()) || 0;
      var mName = metric.metric_name.toString().toLowerCase();
      if (mName.match(/emission|co2|ghg/)) {
        dashboard.environmental.total_emissions_ytd += val;
        dashboard.by_location[loc].emissions += val;
      }
      if (mName.match(/energy|electricity|kwh/)) {
        dashboard.environmental.energy_consumption_kwh += val;
        dashboard.by_location[loc].energy += val;
      }
    }

    // Data quality check
    var dp = new GlideAggregate('sn_esg_data_point');
    dp.addQuery('verified', true);
    dp.addAggregate('COUNT');
    dp.query();
    if (dp.next()) dashboard.data_quality.verified = parseInt(dp.getAggregate('COUNT'));

    var dpUnverified = new GlideAggregate('sn_esg_data_point');
    dpUnverified.addQuery('verified', false);
    dpUnverified.addAggregate('COUNT');
    dpUnverified.query();
    if (dpUnverified.next()) dashboard.data_quality.unverified = parseInt(dpUnverified.getAggregate('COUNT'));

    gs.info('ESG DASHBOARD DATA:\n' + JSON.stringify(dashboard, null, 2));
  description: "ESG: Generate environmental performance dashboard data"
ステップ6:抽出したデータで指標を更新する

新たに抽出した指標をESGモジュールに記録する:

Tool: SN-Update-Record
Parameters:
  table_name: sn_esg_metric
  sys_id: [metric_sys_id]
  data:
    value: 1245.6
    last_updated: 2026-03-19
    data_source: "Utility invoices Q1 2026 - Buildings A, B, C"
    work_notes: "Updated from Q1 utility invoice extraction. Previous value: 1180.2. Increase of 5.5% due to expanded Building C operations."

ツールの使用

操作MCPツールRESTエンドポイント
指標の照会SN-Query-TableGET /api/now/table/sn_esg_metric
開示項目の照会SN-Query-TableGET /api/now/table/sn_esg_disclosure
フレームワークの照会SN-Query-TableGET /api/now/table/sn_esg_framework
データポイントの作成SN-Create-RecordPOST /api/now/table/sn_esg_data_point
指標の更新SN-Update-RecordPATCH /api/now/table/sn_esg_metric
排出量の算定SN-Execute-Background-ScriptPOST /api/now/table/sys_trigger
ドキュメントの検索SN-Natural-Language-SearchN/A

ベストプラクティス

  • ソースの追跡可能性: 監査証跡を確保するため、データポイントは必ず請求書やレポートなどのソース文書にリンクしてください
  • 排出係数の最新性: 排出係数は毎年更新してください。入手可能な場合は、全国平均ではなく地域の電力網係数を使用してください
  • 検証ワークフロー: サステナビリティチームが確認するまで、抽出したすべてのデータを未検証としてマークしてください
  • スコープの正確性: GHG Protocolに従って排出量をスコープごとに慎重に分類してください。スコープ2では、マーケット基準とロケーション基準を区別してください
  • 単位の一貫性: 集計前に、施設間で単位(kWh、メートルトンCO2e、ガロン)を統一してください
  • データ不足の記録: データ不足を明確に記録してください。推定値には手法に関する注記を付けてください
  • フレームワークとの整合性: 各指標を、それが裏付けるGRI基準、SASBトピック、またはTCFD提言に対応付けてください
  • 重要性への注力: 組織の重要性評価の結果に沿った指標を優先してください

トラブルシューティング

ESGメトリックテーブルが見つからない

症状: sn_esg_metric に対するクエリで、テーブルが見つからないというエラーが返される 原因: ESG Managementプラグインが有効化されていないか、バージョンによってテーブル名が異なる可能性があります 解決策: nameLIKEesg を指定して sys_db_object をクエリし、利用可能なESGテーブルを確認してください。com.sn_esg プラグインが有効かどうかを確認してください。

排出係数によって不正確な結果が出る

症状: 算出された排出量が不自然に大きい、または小さい 原因: 入力データと排出係数の単位が一致していない(例:MWhとkWh、サームとMMBtu) 解決策: メトリックレコードとデータポイントレコードの両方で、単位フィールドを確認してください。排出係数を適用する前に単位を変換してください。

開示フレームワークのレコードが見つからない

症状: GRI、SASB、またはTCFDの開示レコードが見つからない 原因: フレームワーク開示テンプレートはESGモジュールのセットアップを通じて読み込む必要があります。自動入力はされません 解決策: ServiceNow UIで ESG Management > Frameworks に移動し、該当するフレームワークテンプレートをインポートしてください。

例

例1:月次の公共料金請求書処理

シナリオ: サステナビリティアナリストが、毎月の電気とガスの請求書を処理します

Tool: SN-Create-Record
Parameters:
  table_name: sn_esg_data_point
  fields:
    metric: [electricity_metric_sys_id]
    value: 125400
    date: 2026-02-28
    source_document: "ConEd Invoice #INV-2026-0228 - HQ Building"
    location: [hq_location_sys_id]
    verified: false
    notes: "125,400 kWh. Rate: $0.14/kWh. Total: $17,556. Demand charge: 450 kW peak."

結果: データポイントが記録され、スコープ2排出量が48.4メートルトンCO2eとして自動計算されます。

例2:CDP年次開示の準備

シナリオ: ESGマネージャーが、CDP気候変動質問票の不足項目を特定する必要があります

Tool: SN-Query-Table
Parameters:
  table_name: sn_esg_disclosure
  query: framework.nameLIKECDP^reporting_period=2025^status!=complete
  fields: disclosure_id,short_description,status,response,evidence
  limit: 100

結果: 82件のCDP開示項目のうち14件が未完了です。重要な不足項目:スコープ3カテゴリ6(出張)、スコープ3カテゴリ7(従業員の通勤)、気候関連目標の検証。

関連スキル

  • grc/issue-summarization - ESGコンプライアンスの指摘事項に関するGRC問題分析
  • grc/risk-assessment-summarization - 気候リスク評価の分析
  • grc/regulatory-alert-analysis - ESG規制の変更追跡
  • document/document-extraction - 公共料金の請求書やレポートからデータを抽出
  • reporting/executive-dashboard - ESGエグゼクティブダッシュボードを構築

コメント