промежуточный этап. Работает.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
import re
|
||||
import requests
|
||||
import pandas as pd
|
||||
from config import OLLAMA_URL, OLLAMA_MODEL
|
||||
from core.database import get_all_rules_from_db
|
||||
|
||||
@@ -44,6 +45,50 @@ def get_system_rules_context():
|
||||
return f"\nОБЯЗАТЕЛЬНЫЕ ГЛОБАЛЬНЫЕ ПРАВИЛА И ПРИОРИТЕТЫ КОМПАНИИ:\n{rules_text}\n"
|
||||
|
||||
|
||||
def analyze_scud_mass_failure_ai(df_scud):
|
||||
"""
|
||||
Оценивает процент аномалий 'ANOMALY_NO_IN_HAS_ACTIVITY' в выгрузке.
|
||||
Если процент аномалий превышает 5% от смены, вызывает ИИ для генерации критического алерта.
|
||||
"""
|
||||
if df_scud is None or df_scud.empty:
|
||||
return None
|
||||
|
||||
total_records = len(df_scud)
|
||||
anomaly_rows = df_scud[df_scud.get('anomaly_flag', 'NONE') == 'ANOMALY_NO_IN_HAS_ACTIVITY']
|
||||
anomaly_count = len(anomaly_rows)
|
||||
|
||||
if total_records == 0:
|
||||
return None
|
||||
|
||||
anomaly_percent = round((anomaly_count / total_records) * 100, 1)
|
||||
|
||||
if anomaly_percent > 5.0 or anomaly_count >= 10:
|
||||
rules_context = get_system_rules_context()
|
||||
prompt = f"""
|
||||
{rules_context}
|
||||
ВНИМАНИЕ! Проведён анализ дневной смены СКУД:
|
||||
- Всего записей за смену: {total_records}
|
||||
- Выявлено сотрудников без утреннего входа, но с зафиксированной дневной активностью (первая активность): {anomaly_count} ({anomaly_percent}% от смены)
|
||||
|
||||
Сформируй понятное предупреждение для Администратора СКУД и Руководителя.
|
||||
Объясни, что это критический массовый сбой турникетов/контроллеров входа на КПП, и порекомендуй действия.
|
||||
"""
|
||||
alert_text = ask_ollama(prompt, system_prompt="Ты — ИИ-аналитик контроллинга СКУД. Отвечай кратко и строго по делу.")
|
||||
return {
|
||||
"is_mass_failure": True,
|
||||
"anomaly_count": anomaly_count,
|
||||
"anomaly_percent": anomaly_percent,
|
||||
"alert_text": alert_text
|
||||
}
|
||||
|
||||
return {
|
||||
"is_mass_failure": False,
|
||||
"anomaly_count": anomaly_count,
|
||||
"anomaly_percent": anomaly_percent,
|
||||
"alert_text": "Массовых сбоев оборудования не зафиксировано."
|
||||
}
|
||||
|
||||
|
||||
def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
|
||||
"""
|
||||
ИИ-сверка опечаток и несовпадений ФИО между СКУД и 1С:ЗУП.
|
||||
|
||||
Reference in New Issue
Block a user