esg-document-intelligence について
ServiceNow向けに、文書やレコードからESGデータを抽出し、報告や分析に利用できる形に整えるスキルです。開示フレームワーク、排出スコープ、推移分析、元文書への追跡を扱います。
主な機能
- 01エネルギー・排出・廃棄物データを抽出
- 02指標をESGフレームワークに対応付け
- 03Scope 1・2・3の排出量を追跡
- 04開示の完全性とデータ不足を確認
- 05ダッシュボード用の推移データを作成
活用シーン
- 01年次サステナビリティ報告書の準備
- 02公共料金請求書から指標を登録
- 03ESG開示前の不足項目の特定
- 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_metric | ESGパフォーマンス指標 | 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_framework | ESGフレームワークの定義 | 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-Table | GET /api/now/table/sn_esg_metric |
| 開示項目の照会 | SN-Query-Table | GET /api/now/table/sn_esg_disclosure |
| フレームワークの照会 | SN-Query-Table | GET /api/now/table/sn_esg_framework |
| データポイントの作成 | SN-Create-Record | POST /api/now/table/sn_esg_data_point |
| 指標の更新 | SN-Update-Record | PATCH /api/now/table/sn_esg_metric |
| 排出量の算定 | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| ドキュメントの検索 | SN-Natural-Language-Search | N/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エグゼクティブダッシュボードを構築