Решения: 1. Совещание с отстающими филиалами 2. Еженедельный контроль просрочек 3. Запросить документы у всех в статусе «В процессе» 4. Усилить ИИ-мониторинг 5. Доклад Правлению";}
- if(qq.indexOf("почему")>=0||qq.indexOf("причин")>=0){return"Причины отставания: • Отсутствие текстовых отчётов • Нет подтверждающих файлов • Низкая активность исполнителей • Приближение сроков без обновлений
→ Решение: активизировать загрузку отчётов и документов.";}
- if(qq.indexOf("проверк")>=0||qq.indexOf("качеств")>=0||qq.indexOf("подтвержд")>=0){var nf=all.filter(function(e){if(e.s==="done")return false;var d=getMD(e.id,-1),h=false;for(var k in d)if(d.hasOwnProperty(k)&&d[k]&&d[k].files&&d[k].files.length)h=true;return !h});return"Проверка качества: • Без файлов: "+nf.length+" мероприятий • Полнота: "+(100-Math.round(nf.length/all.length*100))+"%
→ Рекомендация: запросить недостающие документы.";}
- if(qq.indexOf("аудит")>=0)return"🔎 AI-аудитор: • "+late.length+" мероприятий с нарушением сроков • Рекомендуется аудит отстающих филиалов • Проверить: обучение, медосмотры, СИЗ, инструктажи";
- if(qq.indexOf("360")>=0||qq.indexOf("комплекс")>=0){var bsd=bs();return"ПБ 360°: • План: "+dp+"% • Зона риска: "+bsd.filter(function(b){return b.pct<50}).map(function(b){return b.name}).join(", ")+" • Приоритет: устранить просрочки, активизировать отчётность";}
- if(qq.indexOf("показател")>=0||qq.indexOf("kpi")>=0){var bsd=bs();return"KPI безопасности: • План: "+dp+"% • Лучший: "+bsd[0].name+" ("+bsd[0].pct+"%) • Худший: "+bsd[bsd.length-1].name+" ("+bsd[bsd.length-1].pct+"%) • Просрочено: "+late.length;}
- if(qq.indexOf("статус")>=0||qq.indexOf("пункт")>=0){var num=q.match(/\d+/);if(num){var e=null;for(var i=0;iПункт №"+e.id+" Статус: "+st[e.s]+" Филиал: "+br[e.b]+" Срок: "+e.due+" Риск: "+c.l+" ("+c.p+"%)";}return"Пункт №"+num[0]+" не найден.";}}
- if(qq.indexOf("привет")>=0||qq.indexOf("здрав")>=0||qq.indexOf("помощ")>=0)return"👋 Я ИИ-помощник по ПБ АО «Казахтелеком». Спросите: «сводка», «риски», «рейтинг филиалов», «советник», «статус пункта N».";
- return"Спросите: сводка · риски · рейтинг филиалов · советник · просроченные · проверка · аудит · 360 · статус пункта N · причины · показатели";
+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="Просрочено "+late.length+" мероприятий: ";late.forEach(function(e){r+="• №"+e.id+" — "+esc(e.t.slice(0,80))+"... Филиал: "+br[e.b]+", срок: "+e.due+" "});r+=" Рекомендация: эскалировать руководителям филиалов, провести совещание.";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="Выявлено "+risks.length+" мероприятий с риском: ";risks.slice(0,8).forEach(function(x){r+="• №"+x.e.id+" — "+x.days+" дн. — "+esc(x.e.t.slice(0,60))+"... "});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 Статус: "+st[e.s]+" Филиал: "+br[e.b]+" Срок: "+e.due+" Осталось: "+daysLeft(e).replace(/<[^>]*>/g,"")+" Ответственный: "+nl(e.r);if(e.sub){r+=" Подпункты: "+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="Сводка для руководства • План выполнен на "+dp+"% ("+done.length+"/"+all.length+") • В процессе: "+warn.length+" • Не начато: "+wait.length+" • Просрочено: "+late.length+" ";if(late.length)r+=" Требует внимания: эскалация просрочек.";else r+=" Ситуация под контролем.";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="Рейтинг филиалов: ";brData.forEach(function(b,i){r+=(i+1)+". "+b.name+" — "+b.pct+"% ("+b.done+"/"+b.total+(b.late?", просрочено: "+b.late:"")+") "});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"Всего загружено "+tf+" документов. Детальная информация — на вкладке «Отчётность»."}
+ 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="Ближайшие сроки (≤14 дней): ";near.forEach(function(x){r+="• №"+x.e.id+" — "+x.days+" дн. — "+esc(x.e.t.slice(0,50))+"... "});return r}
+ if(q.indexOf("привет")>=0||q.indexOf("здрав")>=0)return"Здравствуйте! Я ИИ-помощник по производственной безопасности. Спросите о статусе мероприятий, просрочках, рисках, рейтинге филиалов или сводке для руководства.";
+ return"Я могу ответить на вопросы: • «просроченные» — список просрочек • «риски» — прогноз рисков невыполнения • «сводка» — сводка для руководства • «статус пункта N» — статус мероприятия • «рейтинг филиалов» — кто лучший/худший • «сроки» — ближайшие дедлайны • «документы» — статистика загрузок";
}
// ===== EDIT (no regions) =====
@@ -294,7 +284,7 @@ function oe(id,mi,si){
h+="";
h+="";
scfs.forEach(function(f,fi){h+="