перед внедрением веб интерфейса и API для взаимодействием с gemini.

This commit is contained in:
2026-08-05 23:02:35 +03:00
parent 8f611ec41a
commit 9deca9ab34
10 changed files with 495 additions and 194 deletions
+15 -12
View File
@@ -36,19 +36,19 @@ def ask_ollama(prompt, system_prompt=None):
def get_system_rules_context():
"""
Загружает глобальные системные правила компании прямо из Базы Данных SQLite.
Загружает динамические системные правила компании напрямую из Базы Данных SQLite.
"""
rules = get_all_rules_from_db()
if not rules:
return ""
rules_text = "\n".join([f"- {r}" for r in rules])
return f"\nОБЯЗАТЕЛЬНЫЕ ГЛОБАЛЬНЫЕ ПРАВИЛА И ПРИОРИТЕТЫ КОМПАНИИ:\n{rules_text}\n"
return f"\nОБЯЗАТЕЛЬНЫЕ ГЛОБАЛЬНЫЕ ПРАВИЛА И ПРИОРИТЕТЫ КОМПАНИИ (ИЗ SQLITE БД):\n{rules_text}\n"
def analyze_scud_mass_failure_ai(df_scud):
"""
Оценивает процент аномалий 'ANOMALY_NO_IN_HAS_ACTIVITY' в выгрузке.
Если процент аномалий превышает 5% от смены, вызывает ИИ для генерации критического алерта.
Если процент аномалий превышает 5% от смены или 10 человек, вызывает ИИ для генерации критического алерта.
"""
if df_scud is None or df_scud.empty:
return None
@@ -66,9 +66,9 @@ def analyze_scud_mass_failure_ai(df_scud):
rules_context = get_system_rules_context()
prompt = f"""
{rules_context}
ВНИМАНИЕ! Проведён анализ дневной смены СКУД:
ВНИМАНИЕ! Проведён анализ смены СКУД:
- Всего записей за смену: {total_records}
- Выявлено сотрудников без утреннего входа, но с зафиксированной дневной активностью (первая активность): {anomaly_count} ({anomaly_percent}% от смены)
- Выявлено сотрудников без утреннего входа, но с зафиксированной дневной активностью: {anomaly_count} ({anomaly_percent}% от смены)
Сформируй понятное предупреждение для Администратора СКУД и Руководителя.
Объясни, что это критический массовый сбой турникетов/контроллеров входа на КПП, и порекомендуй действия.
@@ -90,13 +90,16 @@ def analyze_scud_mass_failure_ai(df_scud):
def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
"""
ИИ-сверка опечаток и несовпадений ФИО между СКУД и 1С:ЗУП.
Записи из 1С считаются 100% эталоном.
"""
if not unrecognized_scud_fios or not staff_fios:
return {}
# 🛡 Исключаем точные совпадения (чтобы ИИ не совершал ложных замен)
staff_fios_set = set(staff_fios)
real_unrecognized = [f for f in unrecognized_scud_fios if f not in staff_fios_set]
if not real_unrecognized:
return {}
rules_context = get_system_rules_context()
prompt = f"""
@@ -110,7 +113,7 @@ def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
2. В СКУД допущена опечатка.
3. Любое присутствие сотрудника по СКУД при наличии в 1С документа отсутствия (кроме командировок) является гарантированной аномалией.
4. В поле "warning" опиши обнаруженную опечатку.
5. Запрещено выдумывать опечатки!
5. Запрещено выдумывать опечатки и объединять разных людей/однофамильцев!
ОТВЕЧАЙ ТОЛЬКО ИСКЛЮЧИТЕЛЬНО В ФОРМАТЕ JSON!
@@ -148,10 +151,10 @@ def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
return mapping
def ai_verify_department_exceptions(unexplained_df, exception_departments):
"""
Локальный ИИ проверит, не являются ли оставшиеся неотмеченными отделы
синонимами/аббревиатурами отделов из exceptions.json.
Локальный ИИ проверяет, не являются ли неотмеченные отделы синонимами отделов-исключений.
"""
if unexplained_df.empty or not exception_departments:
return []