J-04 環境対応 放置コスト診断

ダッシュボードを準備中…
環境対応 放置コスト診断
環境対応を放置した場合の10年累積コストを可視化
● DEMO
📂 ファイル読み込み
CSV・Excel → スライダー自動反映 / PDF・Word・画像 → テキスト参照
OCR処理中…
📄 参照テキスト

必須入力(請求書3枚で完結)
電力使用量(年間)120,000 kWh
0〜2,000,000 kWh
都市ガス使用量(年間)5,000 m³
0〜200,000 m³
燃料使用量(年間)10,000 L
0〜500,000 L or kg
燃料種別
従業員数30 人
1〜500人
業種

任意入力(拡張分析)
年商(億円)0 億円
0〜100億円(0=未入力)
主要取引先の業種


🔥
環境対応 放置コスト診断
左のパネルでデータを入力し「診断する」を押してください
または「デモデータで診断」でモデルケースをご覧いただけます

Governar Consultant Mode

📄 報告書
📋 面談準備
💰 次回提案
var CHART_OPTS = { responsive: true, maintainAspectRatio: false, plugins: { legend: { labels: { color: ‘#94a3b8’, font: { size: 11 } } } } }; function initCharts(d) { // 既存チャート破棄 Object.keys(_charts).forEach(function(k) { if (_charts[k]) { _charts[k].destroy(); _charts[k] = null; } }); // ドーナツチャート(エネルギー源別CO2) var ctxD = document.getElementById(‘ch-donut’).getContext(‘2d’); _charts.donut = new Chart(ctxD, { type: ‘doughnut’, data: { labels: [‘電力(Scope2)’,’都市ガス(Scope1)’,’燃料(Scope1)’], datasets: [{ data: [d.scope2.toFixed(1), d.scope1gas.toFixed(1), d.scope1fuel.toFixed(1)], backgroundColor: [‘#60a5fa’,’#f59e0b’,’#ef4444′], borderColor: ‘#1e293b’, borderWidth: 2 }] }, options: Object.assign({}, CHART_OPTS, { plugins: { legend: { position: ‘bottom’, labels: { color: ‘#94a3b8’, font: { size: 10 }, padding: 10 } }, tooltip: { callbacks: { label: function(c) { return c.label + ‘: ‘ + c.parsed.toFixed(1) + ‘ t-CO2’; } } } } }) }); // 横棒チャート(Scope別 + 業種平均) var ctxS = document.getElementById(‘ch-scope’).getContext(‘2d’); _charts.scope = new Chart(ctxS, { type: ‘bar’, data: { labels: [‘Scope2(電力)’,’Scope1(ガス)’,’Scope1(燃料)’,’自社計’,’業種平均’], datasets: [{ label: ‘t-CO2/年’, data: [d.scope2.toFixed(1), d.scope1gas.toFixed(1), d.scope1fuel.toFixed(1), d.totalCO2.toFixed(1), (d.bench*d.emp).toFixed(1)], backgroundColor: [‘#60a5fa’,’#f59e0b’,’#ef4444′,’#dc2626′,’#475569′], borderRadius: 4 }] }, options: Object.assign({}, CHART_OPTS, { indexAxis: ‘y’, plugins: { legend: { display: false } }, scales: { x: { ticks: { color: ‘#94a3b8’, font: { size: 10 } }, grid: { color: ‘#334155’ } }, y: { ticks: { color: ‘#94a3b8’, font: { size: 10 } }, grid: { display: false } } } }) }); // シナリオ折れ線チャート var ctxSc = document.getElementById(‘ch-scenario’).getContext(‘2d’); var years = d.midByYear.map(function(r){return r.y;}); _charts.scenario = new Chart(ctxSc, { type: ‘bar’, data: { labels: years, datasets: [ { type: ‘line’, label: ‘悲観シナリオ’, data: d.midByYear.map(function(r){return r.pes.toFixed(0);}), borderColor: ‘#ef4444’, backgroundColor: ‘transparent’, pointBackgroundColor: ‘#ef4444’, tension: 0.3, borderWidth: 2, pointRadius: 3 },{ type: ‘line’, label: ‘中位シナリオ’, data: d.midByYear.map(function(r){return r.mid.toFixed(0);}), borderColor: ‘#f59e0b’, backgroundColor: ‘transparent’, pointBackgroundColor: ‘#f59e0b’, tension: 0.3, borderWidth: 2, pointRadius: 3 },{ type: ‘bar’, label: ‘楽観シナリオ’, data: d.midByYear.map(function(r){return r.opt.toFixed(0);}), backgroundColor: ‘rgba(16,185,129,.4)’, borderColor: ‘#10b981’, borderWidth: 1, borderRadius: 4 } ] }, options: Object.assign({}, CHART_OPTS, { plugins: { legend: { position: ‘top’, labels: { color: ‘#94a3b8’, font: { size: 11 } } } }, scales: { x: { ticks: { color: ‘#94a3b8’, font: { size: 10 } }, grid: { color: ‘#334155’ } }, y: { ticks: { color: ‘#94a3b8′, font: { size: 10 }, callback: function(v){ return v.toLocaleString()+’万’; } }, grid: { color: ‘#334155’ } } } }) }); // 施策別削減効果(横棒) var ctxSv = document.getElementById(‘ch-savings’).getContext(‘2d’); _charts.savings = new Chart(ctxSv, { type: ‘bar’, data: { labels: [‘💡 LED照明’,’❄️ 高効率空調’,’⚙️ コンプレッサー’], datasets: [{ label: ‘年間削減額(万円)’, data: [55, 125, 95], backgroundColor: [‘rgba(16,185,129,.6)’,’rgba(5,150,105,.6)’,’rgba(4,120,87,.6)’], borderColor: [‘#10b981′,’#059669′,’#047857’], borderWidth: 1, borderRadius: 6 }] }, options: Object.assign({}, CHART_OPTS, { indexAxis: ‘y’, plugins: { legend: { display: false } }, scales: { x: { ticks: { color: ‘#94a3b8’, font: { size: 10 } }, grid: { color: ‘#334155’ } }, y: { ticks: { color: ‘#94a3b8’, font: { size: 11 } }, grid: { display: false } } } }) }); // 損益分岐点チャート var ctxBe = document.getElementById(‘ch-breakeven’).getContext(‘2d’); var yrs = [0,1,2,3,4,5,6,7,8,9,10]; var pkgNet = d.pkgNet; var annSave = d.pkgSave; var investCurve = yrs.map(function(y){ return Math.max(0, pkgNet – annSave*y); }); var lossBase = d.loss1 / 11; // 平均年間 var lossCurve = yrs.map(function(y){ return Math.round(lossBase * y); }); _charts.breakeven = new Chart(ctxBe, { type: ‘line’, data: { labels: yrs.map(function(y){return y+’年後’;}), datasets: [ { label: ‘放置コスト累積(万円)’, data: lossCurve, borderColor: ‘#ef4444’, backgroundColor: ‘rgba(220,38,38,.1)’, fill: true, tension: 0.3, borderWidth: 2, pointRadius: 2 },{ label: ‘投資コスト(補助後)’, data: investCurve, borderColor: ‘#10b981’, backgroundColor: ‘rgba(16,185,129,.1)’, fill: true, tension: 0.3, borderWidth: 2, pointRadius: 2 } ] }, options: Object.assign({}, CHART_OPTS, { plugins: { legend: { position: ‘top’, labels: { color: ‘#94a3b8’, font: { size: 10 } } } }, scales: { x: { ticks: { color: ‘#94a3b8’, font: { size: 10 } }, grid: { color: ‘#334155’ } }, y: { ticks: { color: ‘#94a3b8′, font: { size: 10 }, callback: function(v){ return v.toLocaleString()+’万’; } }, grid: { color: ‘#334155’ } } } }) }); } function updateCharts(d) { initCharts(d); } // ======================================== // 初期化 // ======================================== document.addEventListener(‘DOMContentLoaded’, function() { // localStorageから設定復元(エラー無視) try { var raw = localStorage.getItem(STORAGE_KEY); if (raw) { var s = JSON.parse(raw); if (s.elec) document.getElementById(‘inp-elec’).value = s.elec; if (s.gas) document.getElementById(‘inp-gas’).value = s.gas; if (s.fuel) document.getElementById(‘inp-fuel’).value = s.fuel; if (s.fuelType) document.getElementById(‘inp-fuel-type’).value = s.fuelType; if (s.emp) document.getElementById(‘inp-emp’).value = s.emp; if (s.ind) document.getElementById(‘inp-industry’).value = s.ind; if (s.rev) document.getElementById(‘inp-revenue’).value = s.rev; if (s.cli) document.getElementById(‘inp-client’).value = s.cli; } } catch(e) {} // カウントダウン(診断前も動かす) _cdInterval = setInterval(function() { var target = new Date(‘2028-04-01T00:00:00+09:00’).getTime(); var diff = target – Date.now(); if (diff <= 0) { clearInterval(_cdInterval); return; } var days=Math.floor(diff/86400000); var hrs=Math.floor((diff%86400000)/3600000); var mins=Math.floor((diff%3600000)/60000); var secs=Math.floor((diff%60000)/1000); var yr=Math.floor(days/365); var rd=days%365; var el=document.getElementById('counter-cd'); if (el) el.textContent='あと ' +yr+'年 '+rd+' 日 '+String(hrs).padStart(2,' 0')+':'+String(mins).padStart(2,'0')+':'+String(secs).padStart(2,'0'); }, 1000); });