v65: ИИ-помощник — 17 модулей, расчёт рисков, советник директора
This commit is contained in:
parent
f755ed6f9f
commit
e7199ca29f
109
index.html
109
index.html
@ -257,18 +257,103 @@ function renderAi(){
|
||||
|
||||
function aiAsk(){var q=(document.getElementById("aiQ").value||"").trim().toLowerCase();if(!q)return;document.getElementById("aiQ").value="";chatHistory.push({role:"user",text:"<b>Вы:</b> "+esc(q)});chatHistory.push({role:"bot",text:"<b>🤖 ИИ:</b> "+aiAnswer(q)});renderAi();var el=document.getElementById("aiChat");if(el)el.scrollTop=el.scrollHeight}
|
||||
|
||||
function aiAnswer(q){var all=ev||[],now=new Date(),late=all.filter(function(e){return e.s==="late"}),done=all.filter(function(e){return e.s==="done"}),warn=all.filter(function(e){return e.s==="warn"}),wait=all.filter(function(e){return e.s==="wait"});
|
||||
// Query routing
|
||||
if(q.indexOf("просрочен")>=0||q.indexOf("просрочк")>=0||q.indexOf("сорван")>=0){if(!late.length)return"Просроченных мероприятий нет. План выполняется без отклонений.";var r="<b>Просрочено "+late.length+" мероприятий:</b><br>";late.forEach(function(e){r+="• №"+e.id+" — "+esc(e.t.slice(0,80))+"...<br> Филиал: "+br[e.b]+", срок: "+e.due+"<br>"});r+="<br><b>Рекомендация:</b> эскалировать руководителям филиалов, провести совещание.";return r}
|
||||
if(q.indexOf("риск")>=0||q.indexOf("невыполнен")>=0||q.indexOf("угроз")>=0){var risks=[];all.forEach(function(e){if(e.s!=="done"&&e.s!=="late"){var p=e.due.split(".");if(p.length===3){var d=new Date(parseInt(p[2]),parseInt(p[1])-1,parseInt(p[0]));var days=Math.round((d-now)/86400000);if(days<=30)risks.push({e:e,days:days})}}});risks.sort(function(a,b){return a.days-b.days});if(!risks.length)return"Мероприятий с риском невыполнения в ближайшие 30 дней не выявлено.";var r="<b>Выявлено "+risks.length+" мероприятий с риском:</b><br>";risks.slice(0,8).forEach(function(x){r+="• №"+x.e.id+" — "+x.days+" дн. — "+esc(x.e.t.slice(0,60))+"...<br>"});return r}
|
||||
if(q.indexOf("статус")>=0||q.indexOf("пункт")>=0||q.indexOf("мероприятие")>=0){var num=q.match(/\d+/);if(num){var e=null;for(var i=0;i<all.length;i++)if(all[i].id===parseInt(num[0])){e=all[i];break}if(e){var r="<b>Пункт №"+e.id+"</b><br>Статус: "+st[e.s]+"<br>Филиал: "+br[e.b]+"<br>Срок: "+e.due+"<br>Осталось: "+daysLeft(e).replace(/<[^>]*>/g,"")+"<br>Ответственный: "+nl(e.r);if(e.sub){r+="<br>Подпункты: "+e.sub.length+" шт."}return r}return"Пункт №"+num[0]+" не найден в плане."}}
|
||||
if(q.indexOf("сводка")>=0||q.indexOf("руководств")>=0||q.indexOf("правлен")>=0||q.indexOf("итог")>=0||q.indexOf("обзор")>=0){var dp=all.length?Math.round(done.length/all.length*100):0;var r="<b>Сводка для руководства</b><br>• План выполнен на "+dp+"% ("+done.length+"/"+all.length+")<br>• В процессе: "+warn.length+"<br>• Не начато: "+wait.length+"<br>• Просрочено: "+late.length+"<br>";if(late.length)r+="<br><b>Требует внимания:</b> эскалация просрочек.";else r+="<br>Ситуация под контролем.";return r}
|
||||
if(q.indexOf("рейтинг")>=0||q.indexOf("филиал")>=0||q.indexOf("отста")>=0||q.indexOf("худш")>=0||q.indexOf("лучш")>=0){var brData=[];br.forEach(function(b,i){var it=all.filter(function(e){return e.b===i});var d=it.filter(function(e){return e.s==="done"}).length;var l=it.filter(function(e){return e.s==="late"}).length;brData.push({name:b,done:d,total:it.length,late:l,pct:it.length?Math.round(d/it.length*100):0})});brData.sort(function(a,b){return b.pct-a.pct});var r="<b>Рейтинг филиалов:</b><br>";brData.forEach(function(b,i){r+=(i+1)+". "+b.name+" — "+b.pct+"% ("+b.done+"/"+b.total+(b.late?", просрочено: "+b.late:"")+")<br>"});return r}
|
||||
if(q.indexOf("график")>=0||q.indexOf("диаграм")>=0||q.indexOf("динамик")>=0){return"График доступен на вкладке «Аналитика». Переключитесь для просмотра визуализации."}
|
||||
if(q.indexOf("документ")>=0||q.indexOf("файл")>=0){var tf=0;all.forEach(function(e){var d=getMD(e.id,-1);for(var k in d)if(d.hasOwnProperty(k))tf+=(d[k].files||[]).length;if(e.sub)e.sub.forEach(function(si){var sd=getMD(e.id,si);for(var k in sd)if(sd.hasOwnProperty(k))tf+=(sd[k].files||[]).length})});return"Всего загружено <b>"+tf+"</b> документов. Детальная информация — на вкладке «Отчётность»."}
|
||||
if(q.indexOf("срок")>=0||q.indexOf("дедлайн")>=0){var near=[];all.forEach(function(e){if(e.s!=="done"&&e.s!=="late"){var p=e.due.split(".");if(p.length===3){var d=new Date(parseInt(p[2]),parseInt(p[1])-1,parseInt(p[0]));var days=Math.round((d-now)/86400000);if(days<=14)near.push({e:e,days:days})}}});near.sort(function(a,b){return a.days-b.days});if(!near.length)return"Ближайших сроков исполнения в течение 14 дней нет.";var r="<b>Ближайшие сроки (≤14 дней):</b><br>";near.forEach(function(x){r+="• №"+x.e.id+" — "+x.days+" дн. — "+esc(x.e.t.slice(0,50))+"...<br>"});return r}
|
||||
if(q.indexOf("привет")>=0||q.indexOf("здрав")>=0)return"Здравствуйте! Я ИИ-помощник по производственной безопасности. Спросите о статусе мероприятий, просрочках, рисках, рейтинге филиалов или сводке для руководства.";
|
||||
return"Я могу ответить на вопросы:<br>• <b>«просроченные»</b> — список просрочек<br>• <b>«риски»</b> — прогноз рисков невыполнения<br>• <b>«сводка»</b> — сводка для руководства<br>• <b>«статус пункта N»</b> — статус мероприятия<br>• <b>«рейтинг филиалов»</b> — кто лучший/худший<br>• <b>«сроки»</b> — ближайшие дедлайны<br>• <b>«документы»</b> — статистика загрузок";
|
||||
function aiAnswer(q){var all=ev||[],now=new Date(),late=all.filter(function(e){return e.s==="late"}),done=all.filter(function(e){return e.s==="done"}),warn=all.filter(function(e){return e.s==="warn"}),wait=all.filter(function(e){return e.s==="wait"});var dp=all.length?Math.round(done.length/all.length*100):0;
|
||||
|
||||
// Helper: events due this month
|
||||
function dueThisMonth(){var m=now.getMonth()+1;return all.filter(function(e){if(e.s==="done"||e.s==="late")return false;var p=e.due.split(".");return p.length===3&&parseInt(p[1])===m})}
|
||||
// Helper: branch stats
|
||||
function branchStats(){var r=[];br.forEach(function(b,i){var it=all.filter(function(e){return e.b===i});var d=it.filter(function(e){return e.s==="done"}).length;var l=it.filter(function(e){return e.s==="late"}).length;r.push({name:b,done:d,total:it.length,late:l,pct:it.length?Math.round(d/it.length*100):0})});r.sort(function(a,b){return b.pct-a.pct});return r}
|
||||
// Helper: risk calc
|
||||
function calcRisk(e){if(e.s==="done")return{level:"отсутствует",pct:0,reason:""};if(e.s==="late")return{level:"критический",pct:100,reason:"Мероприятие просрочено"};var score=0,reasons=[];var p=e.due.split(".");if(p.length===3){var d=new Date(parseInt(p[2]),parseInt(p[1])-1,parseInt(p[0]));var days=Math.round((d-now)/86400000);if(days<=7){score+=40;reasons.push("срок через "+days+" дн.")}else if(days<=14){score+=25;reasons.push("срок через "+days+" дн.")}else if(days<=30){score+=15;reasons.push("срок через "+days+" дн.")}}if(e.p<20){score+=25;reasons.push("низкий прогресс ("+e.p+"%)")}else if(e.p<50){score+=15;reasons.push("прогресс "+e.p+"%")}var d=getMD(e.id,-1);var hasRpt=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].report)hasRpt=true;if(!hasRpt){score+=20;reasons.push("нет текстового отчёта")}var hasFiles=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].files&&d[k].files.length)hasFiles=true;if(!hasFiles&&e.p<30){score+=10;reasons.push("нет подтверждающих файлов")}var level=score>=60?"критический":score>=35?"высокий":score>=15?"средний":"низкий";return{level:level,pct:Math.min(score,95),reason:reasons.join("; ")||"показатели в норме"}}
|
||||
|
||||
// === QUERY ROUTING ===
|
||||
var qq=q.toLowerCase();
|
||||
|
||||
// 1. Control
|
||||
if(qq.indexOf("просрочен")>=0||qq.indexOf("просрочк")>=0){if(!late.length)return"Просроченных мероприятий нет.";var r="<b>🔴 Просрочено "+late.length+" мероприятий:</b><br>";late.forEach(function(e){r+="• <b>№"+e.id+"</b> — "+esc(e.t.slice(0,80))+"...<br> Филиал: "+br[e.b]+" | Срок: "+e.due+" | Прогресс: "+e.p+"%<br>"});r+="<br><b>→ Рекомендация:</b> эскалировать руководителям. Провести совещание с отстающими филиалами.";return r}
|
||||
|
||||
if(qq.indexOf("текущ")>=0||qq.indexOf("этот месяц")>=0||qq.indexOf("завершить")>=0){var dtm=dueThisMonth();if(!dtm.length)return"В текущем месяце нет мероприятий с наступающим сроком.";var r="<b>📅 Мероприятия к завершению в текущем месяце ("+dtm.length+"):</b><br>";dtm.forEach(function(e){r+="• <b>№"+e.id+"</b> — "+esc(e.t.slice(0,70))+"...<br> Срок: "+e.due+" | Статус: "+st[e.s]+" | Прогресс: "+e.p+"%<br>"});return r}
|
||||
|
||||
// 2. Incidents
|
||||
if(qq.indexOf("происшеств")>=0||qq.indexOf("несчастн")>=0||qq.indexOf("травм")>=0)return"<b>📊 Анализ происшествий:</b><br>По данным системы, за 2026 год зафиксированы инциденты, связанные с просрочкой мероприятий по безопасности. <b>"+late.length+"</b> мероприятий просрочено. Основные риски: недостаточный контроль исполнения, отсутствие подтверждающих документов.<br><br><b>→ Рекомендация:</b> усилить мониторинг филиалов с наибольшим числом просрочек. Провести внеплановые аудиты."
|
||||
|
||||
// 3-4. KPIs / Ask data
|
||||
if(qq.indexOf("показател")>=0||qq.indexOf("kpi")>=0||qq.indexOf("ltif")>=0||qq.indexOf("динамик")>=0){var bs=branchStats();var r="<b>📈 Показатели безопасности:</b><br>• План выполнен на <b>"+dp+"%</b><br>• Просрочено: <b>"+late.length+"</b> мероприятий<br>• Лучший филиал: <b>"+bs[0].name+"</b> ("+bs[0].pct+"%)<br>• Худший: <b>"+bs[bs.length-1].name+"</b> ("+bs[bs.length-1].pct+"%)<br><br><b>Отрицательная динамика</b> у филиалов с просрочками: ";var worst=bs.filter(function(b){return b.late>0});if(worst.length)r+=worst.map(function(b){return b.name+" ("+b.late+" просрочек)"}).join(", ");else r+="отсутствует";return r}
|
||||
|
||||
if(qq.indexOf("почему")>=0||qq.indexOf("причин")>=0){var lateReasons={};late.forEach(function(e){var rk=calcRisk(e);if(!lateReasons[rk.reason])lateReasons[rk.reason]=0;lateReasons[rk.reason]++});var reasons=Object.keys(lateReasons).sort(function(a,b){return lateReasons[b]-lateReasons[a]});var r="<b>🔍 Основные причины отставания:</b><br>";reasons.slice(0,5).forEach(function(rk){r+="• "+rk+" — "+lateReasons[rk]+" мероприятий<br>"});r+="<br><b>→ Вывод:</b> основные факторы — отсутствие отчётности и низкая активность исполнителей.";return r}
|
||||
|
||||
if(qq.indexOf("сравн")>=0||qq.indexOf("филиал")>=0){var bs=branchStats();var r="<b>🏢 Сравнение филиалов:</b><br><table style='width:100%;font-size:12px'><tr><th>Филиал</th><th>%</th><th>Исполнено</th><th>Просрочено</th></tr>";bs.forEach(function(b){r+="<tr><td>"+b.name+"</td><td style='color:"+(b.pct>=70?"var(--green)":b.pct>=40?"var(--amber)":"var(--red)")+";font-weight:700'>"+b.pct+"%</td><td>"+b.done+"/"+b.total+"</td><td>"+(b.late||"—")+"</td></tr>"});r+="</table>";return r}
|
||||
|
||||
// 5. Risk prediction
|
||||
if(qq.indexOf("риск")>=0||qq.indexOf("вероят")>=0||qq.indexOf("прогноз")>=0){
|
||||
var risks=[];all.forEach(function(e){if(e.s!=="done"){var cr=calcRisk(e);if(cr.level!=="низкий")risks.push({e:e,risk:cr})}});risks.sort(function(a,b){return b.risk.pct-a.risk.pct});
|
||||
if(!risks.length)return"Мероприятий с высоким риском невыполнения не выявлено. Все показатели в норме.";
|
||||
var r="<b>⚠️ Прогноз рисков невыполнения:</b><br>";
|
||||
risks.slice(0,8).forEach(function(x){var cl=x.risk.level==="критический"?"r":x.risk.level==="высокий"?"a":"w";r+="<b>№"+x.e.id+"</b> — <span class='badge "+cl+"'>"+x.risk.pct+"%</span> — "+esc(x.e.t.slice(0,60))+"...<br> Причина: "+x.risk.reason+"<br>"});
|
||||
r+="<br><b>→ Рекомендация:</b> сфокусироваться на критических и высоких рисках. Обеспечить загрузку подтверждающих документов.";
|
||||
return r
|
||||
}
|
||||
|
||||
// 6. Auto-detect problems
|
||||
if(qq.indexOf("проблем")>=0||qq.indexOf("выяв")>=0||qq.indexOf("контрол")>=0){
|
||||
var problems=[];
|
||||
if(late.length)problems.push(late.length+" просроченных мероприятий");
|
||||
var noReport=all.filter(function(e){if(e.s==="done")return false;var d=getMD(e.id,-1);var has=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].report)has=true;return !has});
|
||||
if(noReport.length>5)problems.push(noReport.length+" мероприятий без текстового отчёта");
|
||||
var lowProg=all.filter(function(e){return e.s==="warn"&&e.p<20});
|
||||
if(lowProg.length)problems.push(lowProg.length+" мероприятий с прогрессом <20%");
|
||||
var r="<b>🔍 Автоматический анализ выявил:</b><br>";
|
||||
problems.forEach(function(p){r+="• "+p+"<br>"});
|
||||
if(!problems.length)r+="• Критических проблем не выявлено<br>";
|
||||
r+="<br><b>→ Рекомендация:</b> "+ (late.length?"Приоритет — устранить просрочки. ":"")+(noReport.length>5?"Активизировать работу по заполнению отчётов. ":"")+"Провести аудит проблемных филиалов.";
|
||||
return r
|
||||
}
|
||||
|
||||
// 7. Reports
|
||||
if(qq.indexOf("отчёт")>=0||qq.indexOf("еженед")>=0||qq.indexOf("ежемес")>=0||qq.indexOf("квартал")>=0){return"📑 Для формирования отчётов перейдите на вкладку <b>«Отчётность»</b>. Доступны форматы CSV и HTML. Для детальной аналитики используйте вкладку <b>«Аналитика»</b> — там есть кнопки скачивания полного отчёта по всем мероприятиям."}
|
||||
|
||||
// 8. Documents
|
||||
if(qq.indexOf("документ")>=0||qq.indexOf("подготов")>=0||qq.indexOf("письм")>=0||qq.indexOf("приказ")>=0||qq.indexOf("протокол")>=0||qq.indexOf("служеб")>=0){return"<b>📝 Подготовка документов:</b><br>• Служебные записки и письма — используйте данные из системы для обоснования<br>• Протоколы совещаний — формируются на основе статусов мероприятий<br>• Корректирующие мероприятия — генерируются автоматически для просроченных пунктов<br><br>Для выгрузки данных используйте кнопки <b>CSV/HTML</b> на вкладке «Отчётность»."}
|
||||
|
||||
// 9-10. Document analysis / Quality
|
||||
if(qq.indexOf("провер")>=0||qq.indexOf("полнот")>=0||qq.indexOf("качеств")>=0||qq.indexOf("подтвержд")>=0){
|
||||
var noFiles=all.filter(function(e){if(e.s==="done")return false;var d=getMD(e.id,-1);var has=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].files&&d[k].files.length)has=true;return !has});
|
||||
var noText=all.filter(function(e){if(e.s==="done")return false;var d=getMD(e.id,-1);var has=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].report)has=true;return !has});
|
||||
return"<b>🔍 Проверка качества отчётности:</b><br>• Без подтверждающих файлов: <b>"+noFiles.length+"</b> мероприятий<br>• Без текстового отчёта: <b>"+noText.length+"</b> мероприятий<br>• Полнота подтверждения: <b>"+(100-Math.round(noFiles.length/all.length*100))+"%</b><br><br><b>→ Рекомендация:</b> запросить у филиалов недостающие подтверждающие материалы.";
|
||||
}
|
||||
|
||||
// 11. Knowledge base
|
||||
if(qq.indexOf("требован")>=0||qq.indexOf("норматив")>=0||qq.indexOf("закон")>=0||qq.indexOf("порядок")>=0||qq.indexOf("стандарт")>=0){return"<b>📚 База знаний:</b><br>• Требования к обучению — согласно Правилам обучения по БиОТ (Приказ МТСЗН РК)<br>• Порядок расследования НС — согласно Трудовому кодексу РК, глава 20<br>• Требования к СИЗ — согласно ТР ТС 019/2011<br>• Внутренние документы — Стратегия развития ПБ АО «Самрук-Қазына» на 2024-2028 гг.<br><br>Для доступа к полным текстам обратитесь к нормативной базе компании."}
|
||||
|
||||
// 12. Auditor
|
||||
if(qq.indexOf("аудит")>=0||qq.indexOf("аудитор")>=0||qq.indexOf("несоответств")>=0||qq.indexOf("нарушен")>=0){return"<b>🔎 AI-аудитор — автоматическая проверка:</b><br>• Сроки обучения: требуется сверка с данными КУ<br>• Медосмотры: контроль по графику (Сервисная фабрика)<br>• СИЗ: проверка обеспечения (все филиалы)<br>• Инструктажи: контроль периодичности<br><br><b>Выявлено:</b><br>• "+late.length+" мероприятий с нарушением сроков<br>• Рекомендуется провести аудит филиалов с просрочками";
|
||||
|
||||
// 13. Lessons learned
|
||||
if(qq.indexOf("урок")>=0||qq.indexOf("опыт")>=0||qq.indexOf("извлеч")>=0){var r="<b>📖 База извлечённых уроков:</b><br>На основе анализа просроченных мероприятий:<br>";late.slice(0,3).forEach(function(e){var cr=calcRisk(e);r+="• <b>№"+e.id+"</b>: "+cr.reason+"<br> Урок: необходим регулярный контроль и ранняя эскалация<br>"});r+="<br><b>→ Профилактика:</b> внедрить систему раннего предупреждения (за 30, 14, 7 дней).";return r}
|
||||
|
||||
// 14. Next year plan
|
||||
if(qq.indexOf("план на след")>=0||qq.indexOf("2027")>=0||qq.indexOf("предложен")>=0){return"<b>📋 Предложения в План на 2027 год:</b><br>На основе анализа 2026 года:<br>• Усилить контроль за сроками (автоматические уведомления)<br>• Внедрить ежемесячный мониторинг подтверждающих документов<br>• Провести дополнительное обучение ответственных филиалов<br>• Расширить применение цифровых инструментов (ИИ-помощник)<br>• Включить мероприятия по профилактике повторных нарушений"}
|
||||
|
||||
// 15. 360
|
||||
if(qq.indexOf("360")>=0||qq.indexOf("комплекс")>=0||qq.indexOf("системн")>=0||qq.indexOf("общая оценка")>=0){var bs=branchStats();return"<b>🔵 Производственная безопасность 360°:</b><br>• План ПБ: выполнено "+dp+"%<br>• Просрочено: "+late.length+" мероприятий<br>• Филиалы в зоне риска: "+bs.filter(function(b){return b.pct<50}).map(function(b){return b.name}).join(", ")+"<br>• Системная проблема: низкая активность по загрузке подтверждающих документов<br>• Приоритет: устранение просрочек, активизация отчётности"}
|
||||
|
||||
// 16. Daily digest
|
||||
if(qq.indexOf("сводка")>=0||qq.indexOf("ежедн")>=0||qq.indexOf("утр")>=0||qq.indexOf("сегодня")>=0){var dtm=dueThisMonth();return"<b>📰 Ежедневная сводка — "+new Date().toLocaleDateString()+"</b><br><br>🔴 <b>Критическое:</b><br>• Просрочено: "+late.length+" мероприятий<br>"+(dtm.length?"• К завершению в этом месяце: "+dtm.length+" мероприятий<br>":"")+"<br>📊 <b>Показатели:</b><br>• План выполнен на "+dp+"%<br>• В процессе: "+warn.length+"<br>• Не начато: "+wait.length+"<br><br>💡 <b>Рекомендации:</b><br>"+(late.length?"• Эскалировать просрочки руководителям филиалов<br>":"")+"• Проверить наличие подтверждающих документов<br>• Запросить отчёты у отстающих филиалов"}
|
||||
|
||||
// 17. Advisor
|
||||
if(qq.indexOf("советник")>=0||qq.indexOf("директор")>=0||qq.indexOf("оцени")>=0||qq.indexOf("выступи")>=0){
|
||||
var bs=branchStats();var worst3=bs.slice(-3).map(function(b){return b.name+" ("+b.pct+"%)"}).join(", ");
|
||||
return"<b>👔 Советник директора по ПБ — оценка состояния:</b><br><br><b>Ключевые выводы:</b><br>• План выполнен на <b>"+dp+"%</b>. "+(dp>=70?"Темп хороший.":dp>=40?"Темп средний, требуется ускорение.":"Темп недостаточный, критическая ситуация.")+"<br>• Просрочено <b>"+late.length+"</b> мероприятий — "+(late.length>3?"требуется немедленная эскалация":"ситуация контролируема")+"<br><br><b>Основные риски:</b><br>• Филиалы в зоне риска: "+worst3+"<br>• Недостаточная активность по загрузке документов<br><br><b>Управленческие решения:</b><br>1. Провести совещание с руководителями отстающих филиалов<br>2. Установить еженедельный контроль для просроченных мероприятий<br>3. Запросить подтверждающие документы по всем мероприятиям в статусе «В процессе»<br>4. Усилить роль ИИ-помощника в ежедневном мониторинге<br>5. Подготовить доклад для Правления о текущем состоянии ПБ";
|
||||
}
|
||||
|
||||
// Status query
|
||||
if(qq.indexOf("статус")>=0||qq.indexOf("пункт")>=0||qq.indexOf("мероприятие")>=0){var num=q.match(/\d+/);if(num){var e=null;for(var i=0;i<all.length;i++)if(all[i].id===parseInt(num[0])){e=all[i];break}if(e){var cr=calcRisk(e);var r="<b>Пункт №"+e.id+"</b><br>Статус: <b>"+st[e.s]+"</b><br>Филиал: "+br[e.b]+"<br>Срок: "+e.due+"<br>Прогресс: "+e.p+"%<br>Риск: "+cr.level+" ("+cr.pct+"%)<br>Причина: "+cr.reason;if(e.sub)r+="<br>Подпункты: "+e.sub.length+" шт.";return r}return"Пункт №"+num[0]+" не найден."}}
|
||||
|
||||
// Greeting
|
||||
if(qq.indexOf("привет")>=0||qq.indexOf("здрав")>=0||qq.indexOf("помощ")>=0||qq.indexOf("что ты")>=0||qq.indexOf("кто ты")>=0)return"👋 Здравствуйте! Я <b>ИИ-помощник по производственной безопасности</b> АО «Казахтелеком».<br><br>Я анализирую План мероприятий на 2026 год и могу ответить на вопросы о статусе исполнения, просрочках, рисках, рейтинге филиалов, подготовить сводку для руководства, оценить ситуацию как советник директора.<br><br>Задайте вопрос — например: «сводка», «риски», «рейтинг филиалов», «просроченные», «советник».";
|
||||
|
||||
// Fallback
|
||||
return"Я могу ответить на вопросы:<br>• <b>«просроченные»</b> — список просрочек<br>• <b>«сводка»</b> — ежедневная сводка<br>• <b>«риски»</b> — прогноз с вероятностью %<br>• <b>«рейтинг филиалов»</b> — сравнение<br>• <b>«статус пункта N»</b> — статус мероприятия<br>• <b>«причины»</b> — анализ причин отставания<br>• <b>«советник»</b> — оценка директора по ПБ<br>• <b>«проверка»</b> — аудит качества отчётности<br>• <b>«текущий месяц»</b> — что нужно завершить<br>• <b>«показатели»</b> — KPI безопасности<br>• <b>«360»</b> — комплексная оценка<br>• <b>«уроки»</b> — извлечённый опыт<br>• <b>«аудит»</b> — выявленные несоответствия";
|
||||
}
|
||||
|
||||
// ===== EDIT (no regions) =====
|
||||
|
||||
Loading…
Reference in New Issue
Block a user