From 8897b141974e8783b7d97e517c69d5195b2cd067 Mon Sep 17 00:00:00 2001 From: manoraga Date: Wed, 12 Aug 2026 17:33:48 +0300 Subject: [PATCH] =?UTF-8?q?12.08.2026=2017:30=20=D0=9B=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82,=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D1=8F=20=D1=83=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F,=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=D1=81=D1=83=D1=82=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=BE=D1=82=D1=80=D1=83=D0=B4=D0=BD=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=B2=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=20=D1=81=D0=B1=D0=BE=D1=8F=20=D0=A1=D0=9A=D0=A3=D0=94=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO/помощь со скриптами диагностики.md | 59 ++++++ compare_xlsx.py | 21 +++ core/database.py | 123 ++++++++----- data/scud_orion_ai.db | Bin 3100672 -> 4513792 bytes main.py | 207 ++++++++++------------ scripts/db_cli.py | 49 ++++- scripts/diagnostics/inspect_db.py | 47 +++++ scripts/diagnostics/inspect_files.py | 23 +++ scripts/diagnostics/make_code_snapshot.py | 31 ++++ scud_orion_ai_old.db => scud_orion_ai.db | 0 scud_orion_ai_v2.tar.gz | Bin 291719 -> 146925 bytes services/data_loader.py | 85 ++++++--- services/scud_export.py | 14 +- 13 files changed, 467 insertions(+), 192 deletions(-) create mode 100644 HOWTO/помощь со скриптами диагностики.md create mode 100644 compare_xlsx.py create mode 100644 scripts/diagnostics/inspect_db.py create mode 100644 scripts/diagnostics/inspect_files.py create mode 100644 scripts/diagnostics/make_code_snapshot.py rename scud_orion_ai_old.db => scud_orion_ai.db (100%) diff --git a/HOWTO/помощь со скриптами диагностики.md b/HOWTO/помощь со скриптами диагностики.md new file mode 100644 index 0000000..4e51764 --- /dev/null +++ b/HOWTO/помощь со скриптами диагностики.md @@ -0,0 +1,59 @@ +# 🛠 HOWTO: Помощь в технической диагностике системы (`scud_orion_ai_v2`) + +Данный документ содержит руководство по работе со служебными диагностическими утилитами проекта. Скрипты предназначены для быстрой оценки состояния базы данных SQLite, анализа файловой структуры и формирования контекстного снимка кодовой базы для ИИ. + +--- + +## 📋 Содержимое папки `scripts/diagnostics/` + +Рекомендуется размещать диагностические скрипты в отдельной директории `scripts/diagnostics/`: + +1. **`inspect_db.py`** — Инспектор таблиц и записей базы данных SQLite. +2. **`inspect_files.py`** — Сканер дискового пространства и структуры файлов. +3. **`make_code_snapshot.py`** — Генератор единого текстового слепка кода для ИИ. + +--- + +## 🚀 Назначение и запуск утилит + +### 1. Инспектор базы данных SQLite (`inspect_db.py`) + +* **Назначение:** + * Проверяет доступность базы данных (`data/scud_orion_ai.db`). + * Автоматически считывает список всех таблиц и их колонок. + * Подсчитывает количество записей в каждой таблице (`scud_logs`, `zup_staff`, `zup_absences` и др.). + * Выводит список всех активных правил из таблицы `ai_knowledge_base`. + +* **Команда для запуска:** + ```bash + python scripts/diagnostics/inspect_db.py +2. Сканер файловой структуры (inspect_files.py) +Назначение: + +Обходит структуру каталогов проекта. + +Показывает точный размер каждого файла в байтах и итоговый вес проекта в мегабайтах. + +Автоматически игнорирует служебные и временные папки (.git, __pycache__, venv, .venv). + +Команда для запуска: + +Bash +python scripts/diagnostics/inspect_files.py +3. Генератор контекстного снимка кода (make_code_snapshot.py) +Назначение: + +Собирает весь исходный код Python (.py), настройки (.json), инструкции (.md) и скрипты (.sh) в единый файл project_code_snapshot.md. + +Исключает тяжелые архивы, логи и виртуальное окружение. + +Сформированный файл передается нейросети (LLM) для быстрого погружения в контекст проекта без потери архитектурных деталей. + +Команда для запуска: + +Bash +python scripts/diagnostics/make_code_snapshot.py +🎯 Чек-лист применения при сбоях +Ошибка или несостыковка в отчетах: запустить inspect_db.py и проверить, заполнены ли таблицы scud_logs и zup_absences. + +Передача задачи или кода ИИ-ассистенту: запустить make_code_snapshot.py и прикрепить итоговый project_code_snapshot.md к запросу. \ No newline at end of file diff --git a/compare_xlsx.py b/compare_xlsx.py new file mode 100644 index 0000000..2755c89 --- /dev/null +++ b/compare_xlsx.py @@ -0,0 +1,21 @@ +import openpyxl + +wb_good = openpyxl.load_workbook('output/5 августа 2026 отчет.xlsx') # или ваш путь к рабочему +wb_bad = openpyxl.load_workbook('output/10 августа 2026 отчет.xlsx') + +ws_good = wb_good.active +ws_bad = wb_bad.active + +print(f"Размер хорошего: {ws_good.max_row} строк, {ws_good.max_column} колонок") +print(f"Размер с ошибкой: {ws_bad.max_row} строк, {ws_bad.max_column} колонок") + +# Сравним типы ячеек в колонках +for r in range(4, min(ws_good.max_row, ws_bad.max_row) + 1): + for c in range(1, 11): + v_g = ws_good.cell(row=r, column=c).value + v_b = ws_bad.cell(row=r, column=c).value + t_g = type(v_g) + t_b = type(v_b) + if t_g != t_b: + + print(f"Строка {r}, колонка {c}: тип в хорошем {t_g}, в плохом {t_b}") \ No newline at end of file diff --git a/core/database.py b/core/database.py index a57063e..0e0ed14 100644 --- a/core/database.py +++ b/core/database.py @@ -231,57 +231,73 @@ def get_latest_snapshot_time(date_str=None): def load_scud_from_db_by_snapshot(date_str, snapshot_param=None): """ - Загружает логи СКУД по ID снапшота ('20260805-001', 'Y20260805-001') или по штампу времени. - С автоматическим маппингом полей Подразделения и Должности. + Загружает логи СКУД по ID снапшота. + Если snapshot_param не задан (или искался прошлый день), приоритетно выбирает + финальный вечерний снапшот, начинающийся с буквы 'Y' (срез на 22:00) за дату date_str. """ with get_connection() as conn: df = pd.DataFrame() + # 1. Если передан конкретный ID снапшота (например, '20260810-001') if snapshot_param: - if "-" in str(snapshot_param) or str(snapshot_param).startswith('Y'): - df = pd.read_sql_query( - "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_id = ?", - conn, params=(date_str, str(snapshot_param)) - ) - if df.empty: - df = pd.read_sql_query( - "SELECT * FROM scud_logs WHERE snapshot_id = ?", - conn, params=(str(snapshot_param),) - ) + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE snapshot_id = ?", + conn, params=(str(snapshot_param),) + ) - if df.empty: - df = pd.read_sql_query( - "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_time = ?", - conn, params=(date_str, str(snapshot_param)) - ) - - if df.empty: - latest_time = get_latest_snapshot_time(date_str) - if latest_time: - df = pd.read_sql_query( - "SELECT * FROM scud_logs WHERE log_date = ? AND snapshot_time = ?", - conn, params=(date_str, latest_time) - ) - - if not df.empty: - df['Сотрудник'] = df['fio'] - df['Пришел'] = df['is_present'].astype(int) == 1 if 'is_present' in df.columns else False - df['Начало_дня'] = df['time_in'] - df['Первая_активность'] = df['first_activity'] - df['Конец_дня'] = df['time_out'] - df['Находился_в_здании'] = df['time_in_building'] + # 2. Если по snapshot_param ничего не найдено ИЛИ snapshot_param=None (запрос за вчерашний день): + if df.empty and date_str: + cursor = conn.cursor() - # 💡 Маппинг колонок БД в стандартные русские наименования - if 'department' in df.columns and 'Подразделение' not in df.columns: - df['Подразделение'] = df['department'] - if 'position' in df.columns and 'Должность' not in df.columns: - df['Должность'] = df['position'] - else: - df = pd.DataFrame(columns=[ - 'Сотрудник', 'fio_clean', 'Подразделение', 'Должность', - 'Начало_дня', 'Первая_активность', 'Конец_дня', - 'Находился_в_здании', 'Пришел', 'anomaly_flag' - ]) + # ⭐️ ПРИОРИТЕТ 1: Ищем срез, начальный символ которого 'Y' (вечерний зафиксированный Y-снапшот) + cursor.execute( + "SELECT snapshot_id FROM scud_logs WHERE log_date = ? AND snapshot_id LIKE 'Y%' ORDER BY id DESC LIMIT 1", + (date_str,) + ) + row = cursor.fetchone() + + # ⭐️ ПРИОРИТЕТ 2: Если Y-снапшот не найден, берем самый свежий обычный + if not row: + cursor.execute( + "SELECT snapshot_id FROM scud_logs WHERE log_date = ? ORDER BY id DESC LIMIT 1", + (date_str,) + ) + row = cursor.fetchone() + + if row and row[0]: + target_snap_id = row[0] + df = pd.read_sql_query( + "SELECT * FROM scud_logs WHERE snapshot_id = ?", + conn, params=(target_snap_id,) + ) + + # Приводим названия колонок к стандарту + if not df.empty: + rename_map = { + 'department': 'Подразделение', + 'position': 'Должность', + 'fio': 'Сотрудник', + 'time_in': 'Начало_дня', + 'first_activity': 'Первая_активность', + 'time_out': 'Конец_дня', + 'duration': 'Находился_в_здании', + 'is_present': 'Пришел' + } + # Переименовываем имеющиеся колонки + df = df.rename(columns={k: v for k, v in rename_map.items() if k in df.columns}) + + # Заполняем недостающие колонки значениями по умолчанию, если их не было в БД + required_cols = ['Пришел', 'Начало_дня', 'Первая_активность', 'Конец_дня', 'Находился_в_здании', 'anomaly_flag'] + for col in required_cols: + if col not in df.columns: + if col == 'Пришел': + df[col] = False + else: + df[col] = '—' + + # Приводим тип флага Пришел к bool + if 'Пришел' in df.columns: + df['Пришел'] = df['Пришел'].astype(bool) return df @@ -443,3 +459,22 @@ def add_department_synonym_to_db(short_name, full_name): ) conn.commit() print(f"[✓] В базу SQLite добавлен новый синоним отдела: '{short_name}' ⟷ '{full_name}'") + +def load_staff_from_db(date_str): + """Загружает Штатное расписание 1С из базы SQLite за указанную дату.""" + with get_connection() as conn: + df = pd.read_sql_query( + "SELECT fio as 'ФИО', fio_clean, department as 'Подразделение', position as 'Должность' FROM zup_staff WHERE snapshot_date = ?", + conn, params=(date_str,) + ) + return df if not df.empty else None + +def load_absences_from_db(date_str): + """Загружает документальные отсутствия 1С из базы SQLite за указанную дату.""" + with get_connection() as conn: + df = pd.read_sql_query( + "SELECT fio as 'ФИО', fio_clean, absence_type as 'Вид_отсутствия' FROM zup_absences WHERE absence_date = ?", + conn, params=(date_str,) + ) + return df if not df.empty else None + \ No newline at end of file diff --git a/data/scud_orion_ai.db b/data/scud_orion_ai.db index 0283c273eab862e3e7cbc81188bd30134301bae0..ea4bd45f3c85fb6e4fb0274274ea4887a916701b 100644 GIT binary patch delta 573896 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