7.6 KiB
7.6 KiB
🔄 ПАСПОРТ АЛГОРИТМА И ETL-КОНВЕЙЕРА: scud_orion_ai_v2
Архитектурный паттерн: Гибридный ETL (Extract, Transform, Load) с хранением аналитического следа
Хранилище данных: SQLite (режим WAL)
Интеграционный стек:MS SQL Server⟷1С:ЗУП (SMB/Share)⟷Ollama (Qwen 2.5)⟷SQLite
📐 Сквозной цикл работы проекта (main.py)
[БД MS SQL 'Орион Pro'] [Сетевая шара \storage\...]
│ │
(0. run_export) (0.5 share_copier)
▼ ▼
[data/scud/*.xlsx] [data/1c/*.xlsx]
│ │
└────────────────┬───────────────┘
▼
(1. data_validator) ──(Проверка фатальных ошибок)
│
▼
(2. data_loader) ──(Фоллбэки по датам)
│
▼
(3. ai_verifier + Qwen 2.5) ──(Исправление опечаток)
│
▼
(4. Сведение данных)
┌──────────┴──────────┐
▼ ▼
[Данные за ВЧЕРА] [Данные за СЕГОДНЯ]
│ │
▼ ▼
(Detailed Excel) (Summary Excel + Markdown)
│ │
└──────────┬──────────┘
▼
(5. feedback_loop) ──(Обучение ИИ)
│
▼
(database.py / SQLite WAL) ──(Сохранение фактов)
📋 Пошаговый алгоритм по этапам
Этап 0: Извлечение сырых данных (Extract)
1. БД СКУД «Орион Pro» $
ightarrow$ Excel (scud_export.py)
- Скрипт подключается напрямую к MS SQL Server системы «Орион Pro».
- Формирует агрегированные файлы
Сотрудники_DD.MM.YYYY.xlsxв папкуdata/scud/отдельно за Сегодня и за Вчера.
2. Сетевая шара $
ightarrow$ Папка data/1c/ (share_copier.py)
- Заходит по UNC-пути
\storage\SCUD\Обмен\Штат. - Ищет и забирает свежие выгрузки 1С:ЗУП:
Штат_DD_MM_YYYY.xlsxиОтсутствия_DD_MM_YYYY.xlsxза Сегодня и Вчера.
Этап 1: Валидация и защита от сбоев (data_validator.py)
- Проверяет наличие файлов за Вчера (они критически важны для формирования ежедневного табеля).
- Если файлы за Сегодня ещё не выложены кадровой службой на сетевую шару:
- Выдаёт мягкое предупреждение.
- Отменяет генерацию сегодняшней сводки (чтобы не плодить ложные аномалии по понедельникам/утрам).
- Не останавливает работу системы, мягко переходя к формированию вчерашнего отчёта.
Этап 2: Нормализация и загрузка (data_loader.py)
- Очищает и применительно нормализует ФИО через
normalize_fio: удаление лишних пробелов, точек, приведение к единому регистру. - Выделяет факты физического присутствия по СКУД (наличие первого входа / последнего выхода).
- Исключает из анализа подрядчиков, охрану и служебные карты (по реестру исключений).
Этап 3: ИИ-аудит опечаток и сопоставление ФИО (ai_verifier.py)
- Неопознанные проходы СКУД отправляются в локальную нейросеть Qwen 2.5 (через Ollama).
- ИИ сверяет опечатки в СКУД с 100% эталонным реестром Штатного расписания 1С.
- Сопоставленные опечатки автоматически исправляются в датасете перед сведением.
Этап 4: Бизнес-логика, сведение и детекция аномалий
Система разделяет контекст на два независимых потока:
1. Поток ВЧЕРА (Детальный отчёт)
- Объединяет
СКУД (Вчера)+1С:Отсутствия (Вчера). - Считает реальные часы нахождения в здании, обед (30 мин) и отклонение от 8-часовой нормы.
- Формирует Excel
output/[Дата] отчет.xlsx.
2. Поток СЕГОДНЯ (Ежедневная сводка)
- Объединяет
СКУД (Сегодня)+1С:Отсутствия (Сегодня)+Реестр удалёнщиков. - 🔴 Детекция аномалий: Физический приход по СКУД при наличии любого документа отсутствия в 1С (отпуск, больничный и т.д., кроме командировок) помечается как Истинная Аномалия.
- 🟢 Удалёнщики: Удалёнщики, пришедшие в офис, не считаются аномалией (правило компании).
- Формирует Excel
output/[Дата] сводка.xlsx(со свернутыми группами без номеров строк) и текстовую Markdown-сводку.
Этап 5: Обучение Human-in-the-Loop (feedback_loop.py)
- Если ИИ находит спорные случаи, он запрашивает подтверждение оператора в консоли.
- Новые правила, введённые пользователем, мгновенно сохраняются и в
knowledge_base.json, и в таблицуai_knowledge_baseв БД SQLite.
Этап 6: Сохранение аналитического следа в БД (database.py)
Вся история сохраняется в локальную SQLite БД (data/scud_orion_ai.db) в режиме высокой производительности (WAL / executemany):
| Таблица | Содержимое |
|---|---|
scud_logs |
История всех проходов по дням |
zup_staff |
Срезы штатного расписания |
zup_absences |
Оформленные документы из 1С |
anomalies_history |
Найденные и подтверждённые нарушения |
ai_knowledge_base |
Обучающие правила для нейросети |