3分でわかる簡易ロス診断
質問に答えるだけで
現場に潜む空調ロスの傾向を確認できます。
function calculate(){
let score={A:0,C:0,I:0,D:0,O:0,S:0};
document.querySelectorAll("input[type=checkbox]:checked").forEach(el=>{
score[el.value]+=3;
});
let order=["A","C","I","D","O","S"];
let sorted=Object.entries(score).sort((a,b)=>{
if(b[1]===a[1]){
return order.indexOf(a[0]) - order.indexOf(b[0]);
}
return b[1]-a[1];
});
let labels={
A:"空気環境系ロス",
C:"制御系ロス",
I:"外乱干渉系ロス",
D:"設備劣化系ロス",
O:"運用系ロス",
S:"設備構成系ロス"
};
let desc={
A:"温度ムラや気流の偏りによりエネルギーが快適性に変換されていない可能性があります",
C:"設定温度や運転時間など制御に起因するロスが疑われます",
I:"換気・出入口・日射など外部要因の影響が大きい可能性があります",
D:"設備劣化や保守不足で性能が低下している可能性があります",
O:"運用方法と空調使用が合っていない可能性があります",
S:"設備容量や構成の問題が含まれている可能性があります"
};
let html="
診断結果
";
sorted.slice(0,3).forEach((item,i)=>{
let level="可能性があります";
if(item[1]>=8) level="可能性が高いです";
if(item[1]>=12) level="強く疑われます";
html+=`
${level}
${desc[item[0]]}
`;
});
html+=`
`;
document.getElementById("result").innerHTML=html;
window.scrollTo({top:document.body.scrollHeight,behavior:"smooth"});
}
const diagnosisData =
{
"tool_name": "heemos_simple_loss_diagnosis",
"version": "1.0",
"title": "簡易ロス診断",
"description": "いくつかの質問に答えるだけで、現場に潜む空調ロスの傾向を簡易的に確認できます。",
"categories": [
{
"code": "C",
"name": "制御系ロス",
"description": "設定温度・運転時間・立ち上げ・無人時間帯の運転など、空調の使い方や制御方法に起因するロスが疑われます。比較的着手しやすい改善が見つかることがあります。",
"next_action": "運転時間と設定温度の見直しから確認してください。"
},
{
"code": "A",
"name": "空気環境系ロス",
"description": "温度ムラ・気流の偏り・冷気だまり・暖気だまりなどにより、投入したエネルギーが快適性に十分変換されていない可能性があります。",
"next_action": "温度ムラや気流の偏りの可視化から始めてください。"
},
{
"code": "I",
"name": "外乱・干渉系ロス",
"description": "換気・出入口・窓・日射・周辺設備などの影響で、空調が本来以上の負荷を受けている可能性があります。",
"next_action": "換気や開口部や周辺設備との干渉確認が有効です。"
},
{
"code": "D",
"name": "設備劣化系ロス",
"description": "汚れ・保守不足・設備劣化・室外機まわりの条件などにより、本来の性能を十分発揮できていない可能性があります。",
"next_action": "内部状態や保守状況や室外機まわりの条件確認が有効です。"
},
{
"code": "O",
"name": "運用系ロス",
"description": "営業時間・在室状況・レイアウト・操作ルールなどと空調の使い方が合っていない可能性があります。",
"next_action": "現場の使い方と操作ルールと在室実態の整理が有効です。"
},
{
"code": "S",
"name": "設備構成系ロス",
"description": "設備容量・系統の分け方・配置・方式など、構成面に起因するロスが含まれている可能性があります。",
"next_action": "設備の分け方や能力や配置を含めた確認が有効です。"
}
],
"score_labels": [
{
"min": 0,
"max": 7,
"label": "可能性があります"
},
{
"min": 8,
"max": 11,
"label": "可能性が高いです"
},
{
"min": 12,
"max": 999,
"label": "強く疑われます"
}
],
"tie_break_priority": ["A", "C", "I", "D", "O", "S"],
"questions": [
{
"id": "Q1",
"title": "あなたの現場に近いものを選んでください",
"type": "checkbox",
"max_select": 1,
"choices": [
{
"id": "Q1_1",
"label": "オフィス",
"scores": { "C": 2, "A": 1, "I": 0, "D": 0, "O": 3, "S": 0 }
},
{
"id": "Q1_2",
"label": "小売店舗",
"scores": { "C": 2, "A": 2, "I": 2, "D": 0, "O": 1, "S": 0 }
},
{
"id": "Q1_3",
"label": "飲食店",
"scores": { "C": 1, "A": 2, "I": 4, "D": 0, "O": 1, "S": 0 }
},
{
"id": "Q1_4",
"label": "スーパーマーケット",
"scores": { "C": 1, "A": 3, "I": 4, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q1_5",
"label": "工場・倉庫",
"scores": { "C": 0, "A": 3, "I": 1, "D": 0, "O": 2, "S": 2 }
},
{
"id": "Q1_6",
"label": "ガソリンスタンド",
"scores": { "C": 2, "A": 1, "I": 2, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q1_7",
"label": "医療・介護施設",
"scores": { "C": 2, "A": 2, "I": 0, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q1_8",
"label": "宿泊施設",
"scores": { "C": 2, "A": 2, "I": 1, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q1_9",
"label": "学校・公共施設",
"scores": { "C": 2, "A": 1, "I": 0, "D": 0, "O": 3, "S": 0 }
},
{
"id": "Q1_10",
"label": "その他",
"scores": { "C": 0, "A": 0, "I": 0, "D": 0, "O": 0, "S": 0 }
}
]
},
{
"id": "Q2",
"title": "現在、どのようなことに困っていますか(複数選択可)",
"type": "checkbox",
"choices": [
{
"id": "Q2_1",
"label": "電気代が高い",
"scores": { "C": 2, "A": 0, "I": 0, "D": 1, "O": 2, "S": 1 }
},
{
"id": "Q2_2",
"label": "暑い、寒いという声が多い",
"scores": { "C": 1, "A": 3, "I": 0, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q2_3",
"label": "場所によって効き方が違う",
"scores": { "C": 0, "A": 4, "I": 0, "D": 0, "O": 1, "S": 2 }
},
{
"id": "Q2_4",
"label": "設定温度をよく変更している",
"scores": { "C": 4, "A": 0, "I": 0, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q2_5",
"label": "換気をすると効きが悪くなる",
"scores": { "C": 1, "A": 0, "I": 4, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q2_6",
"label": "出入口付近だけ暑い、寒い",
"scores": { "C": 0, "A": 2, "I": 4, "D": 0, "O": 0, "S": 0 }
},
{
"id": "Q2_7",
"label": "厨房、ショーケース、発熱設備などの影響がある",
"scores": { "C": 0, "A": 2, "I": 4, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q2_8",
"label": "営業前後の運転が長い気がする",
"scores": { "C": 4, "A": 0, "I": 0, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q2_9",
"label": "人がいない時間も運転している",
"scores": { "C": 4, "A": 0, "I": 0, "D": 0, "O": 3, "S": 0 }
},
{
"id": "Q2_10",
"label": "設備が古く、効率が落ちている気がする",
"scores": { "C": 0, "A": 0, "I": 0, "D": 4, "O": 0, "S": 2 }
},
{
"id": "Q2_11",
"label": "何が原因かわからない",
"scores": { "C": 0, "A": 0, "I": 0, "D": 1, "O": 1, "S": 1 }
}
]
},
{
"id": "Q3",
"title": "空調の使い方について近いものを選んでください(複数選択可)",
"type": "checkbox",
"choices": [
{
"id": "Q3_1",
"label": "複数人が空調を操作している",
"scores": { "C": 3, "A": 0, "I": 0, "D": 0, "O": 3, "S": 0 }
},
{
"id": "Q3_2",
"label": "現場判断で設定温度を変えることが多い",
"scores": { "C": 4, "A": 0, "I": 0, "D": 0, "O": 2, "S": 0 }
},
{
"id": "Q3_3",
"label": "営業時間・稼働時間が長い",
"scores": { "C": 2, "A": 0, "I": 0, "D": 1, "O": 2, "S": 0 }
},
{
"id": "Q3_4",
"label": "人の出入りが多い",
"scores": { "C": 0, "A": 0, "I": 3, "D": 0, "O": 1, "S": 0 }
},
{
"id": "Q3_5",
"label": "季節で悩みが大きく変わる",
"scores": { "C": 1, "A": 2, "I": 2, "D": 0, "O": 0, "S": 0 }
},
{
"id": "Q3_6",
"label": "レイアウト変更後、空調設定を見直していない",
"scores": { "C": 0, "A": 2, "I": 0, "D": 0, "O": 3, "S": 2 }
},
{
"id": "Q3_7",
"label": "換気を強めてから効きが変わった",
"scores": { "C": 0, "A": 1, "I": 4, "D": 0, "O": 0, "S": 0 }
},
{
"id": "Q3_8",
"label": "一部だけ暑い、寒いエリアがある",
"scores": { "C": 0, "A": 4, "I": 0, "D": 0, "O": 1, "S": 1 }
},
{
"id": "Q3_9",
"label": "立ち上げ時に一気に負荷がかかる",
"scores": { "C": 3, "A": 0, "I": 0, "D": 1, "O": 0, "S": 1 }
},
{
"id": "Q3_10",
"label": "24時間運転またはそれに近い運転がある",
"scores": { "C": 3, "A": 0, "I": 0, "D": 1, "O": 3, "S": 0 }
}
]
},
{
"id": "Q4",
"title": "現場の状態として気になるものを選んでください(複数選択可)",
"type": "checkbox",
"choices": [
{
"id": "Q4_1",
"label": "吹出口の近くは寒いが、離れると暑い",
"scores": { "C": 0, "A": 4, "I": 0, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q4_2",
"label": "天井付近と足元で体感が違う",
"scores": { "C": 0, "A": 4, "I": 0, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q4_3",
"label": "出入口や窓まわりの影響が大きい",
"scores": { "C": 0, "A": 1, "I": 4, "D": 0, "O": 0, "S": 0 }
},
{
"id": "Q4_4",
"label": "室外機まわりの環境がよくない気がする",
"scores": { "C": 0, "A": 0, "I": 0, "D": 3, "O": 0, "S": 2 }
},
{
"id": "Q4_5",
"label": "フィルターや内部清掃の状況が気になる",
"scores": { "C": 0, "A": 0, "I": 0, "D": 4, "O": 0, "S": 0 }
},
{
"id": "Q4_6",
"label": "冷房は効くが湿っぽい",
"scores": { "C": 1, "A": 3, "I": 0, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q4_7",
"label": "暖房は効くがのぼせる、足元が寒い",
"scores": { "C": 0, "A": 4, "I": 0, "D": 0, "O": 0, "S": 1 }
},
{
"id": "Q4_8",
"label": "一部設備との干渉が見える",
"scores": { "C": 0, "A": 2, "I": 4, "D": 0, "O": 0, "S": 0 }
},
{
"id": "Q4_9",
"label": "空調は動いているが快適とは言えない",
"scores": { "C": 0, "A": 3, "I": 0, "D": 1, "O": 2, "S": 0 }
},
{
"id": "Q4_10",
"label": "能力不足なのか、使い方の問題なのか分からない",
"scores": { "C": 0, "A": 0, "I": 0, "D": 1, "O": 2, "S": 3 }
}
]
}
],
"result_rules": {
"top_n": 3,
"show_score_label": true,
"show_next_action_for_top1_only": true
},
"cta": {
"consult_button_label": "詳しく相談する",
"thermo_button_label": "サーモ+AI診断について見る"
}
}
let answers = {}
function render(){
let html=""
diagnosisData.questions.forEach(q=>{
html+=`
${q.title}
`
q.choices.forEach(c=>{
html+=`
`
})
})
html+=`
`
document.getElementById("app").innerHTML=html
}
function calculate(){
let scores = {
C:0,A:0,I:0,D:0,O:0,S:0
}
document.querySelectorAll("input:checked").forEach(el=>{
let qid = el.dataset.q
let cid = el.dataset.choice
let question = diagnosisData.questions.find(q=>q.id===qid)
let choice = question.choices.find(c=>c.id===cid)
Object.keys(choice.scores).forEach(k=>{
scores[k]+=choice.scores[k]
})
})
let sorted = Object.entries(scores)
sorted.sort((a,b)=>{
if(b[1]===a[1]){
return diagnosisData.tie_break_priority.indexOf(a[0])-
diagnosisData.tie_break_priority.indexOf(b[0])
}
return b[1]-a[1]
})
showResult(sorted)
}
function getScoreLabel(score){
for(let s of diagnosisData.score_labels){
if(score>=s.min && score<=s.max){ return s.label } } return "" } function showResult(sorted){ let html="
診断結果
"
sorted.slice(0,3).forEach((item,i)=>{
let cat = diagnosisData.categories.find(c=>c.code===item[0])
let label = getScoreLabel(item[1])
html+=`
${i+1}位 ${cat.name}
${label}
${cat.description}
`
if(i==0){
html+=`
おすすめの次の一歩
${cat.next_action}
`
}
html+="
"
})
html+=`
`
document.getElementById("app").innerHTML=html
drawChart(sorted)
}
function drawChart(sorted){
let ctx=document.getElementById("chart")
new Chart(ctx,{
type:'bar',
data:{
labels:sorted.map(s=>{
let cat = diagnosisData.categories.find(c=>c.code===s[0])
return cat.name
}),
datasets:[{
label:'ロス傾向スコア',
data:sorted.map(s=>s[1])
}]
}
})
}
render()
