83 lines
7.9 KiB
Markdown
83 lines
7.9 KiB
Markdown
# 📦 ПАСПОРТ СНАПШОТА ПРОЕКТА: `scud_orion_ai_v2`
|
||
|
||
> **Архитектура:** Автоматизированный конвейер кадрового контроллинга и детекции аномалий
|
||
> **Интеграционный стек:** `СКУД «Орион Pro»` ⟷ `1С:ЗУП` ⟷ `AI-Аудитор`
|
||
> **Статус:** 🟢 **Готовая боевая сборка** с прямой SQL-интеграцией, обработкой 1С-реестров и обучением на лету.
|
||
|
||
---
|
||
|
||
## 📁 Итоговая структура каталогов
|
||
|
||
```plaintext
|
||
scud_orion_ai_v2/
|
||
├── .gitignore # Настройки исключений отслеживания Git
|
||
├── exceptions.json # Реестр постоянных исключений (ОВК, подрядчики, особые роли)
|
||
├── knowledge_base.json # Динамическая база знаний (накопленные правила ИИ из режима Human-in-the-Loop)
|
||
├── config.py # Глобальная конфигурация путей, моделей Ollama и функций нормализации
|
||
├── main.py # Главный оркестратор (Этапы 0–5, логика слияния, детекция аномалий)
|
||
│
|
||
├── data/ # 📂 Папка входных сырых данных
|
||
│ ├── scud/ # [Автовыгрузка СКУД] Файлы Сотрудники_ДД.ММ.ГГГГ.xlsx из MS SQL
|
||
│ ├── 1c/ # [Кадровые реестры] Файлы из 1С:ЗУП:
|
||
│ │ # • Штатные сотрудники - ОУП.xlsx
|
||
│ │ # • Отсутствия сотрудников - выгрузка.xlsx
|
||
│ └── static_reason_workers.csv# [Справочник] Реестр постоянных причин (Удаленка и т.д.)
|
||
│
|
||
├── output/ # 📂 Результаты работы (Excel-сводки и ИИ-отчеты в Markdown)
|
||
│ ├── Сводка_контроллинга_ДД.ММ.ГГГГ.md
|
||
│ ├── ДД месяца ГГГГ сводка.xlsx
|
||
│ └── ДД месяца ГГГГ отчет.xlsx
|
||
│
|
||
└── modules/ # 📂 Функциональные ядро-модули
|
||
├── scud_export.py # Модуль прямого подключения к MS SQL Server (Орион Pro)
|
||
├── data_loader.py # Загрузка и первичная предобработка СКУД/1С файлов
|
||
├── data_validator.py # Валидатор свежести и корректности входных таблиц
|
||
├── ai_verifier.py # Интеграция с Ollama (Qwen2.5) для нечеткого поиска ФИО и опечаток
|
||
├── text_reporter.py # Формирователь экспертного аналитического отчета ИИ
|
||
├── excel_exporter.py # Генератор итоговых стилизованных Excel-отчетов
|
||
├── feedback_loop.py # Модуль интерактивного обучения и дообучения ИИ (Human-in-the-Loop)
|
||
└── knowledge_base.py # Менеджер чтения/записи базы знаний knowledge_base.json
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ Главные технические наработки и решённые задачи
|
||
|
||
### 1. Автоматический забор данных СКУД из БД MS SQL Server (`scud_export.py`)
|
||
* **Прямой коннект:** Запрос к БД СКУД `Orion-14.01.21-1` через `pyodbc`.
|
||
* **Высокая скорость (0.2 сек):** Использование оконной функции `ROW_NUMBER() OVER (PARTITION BY HozOrgan ORDER BY TimeVal DESC)` для мгновенного сбора событий за 24 часа.
|
||
* **Корректный учет текущего присутствия (`СЕГОДНЯ`):**
|
||
* Если день ещё не окончен и последнее событие — **Вход**, в колонке выводится `Нет выхода`.
|
||
* Ограничено искажение времени для тех, кто ещё находится в здании или уходил на обед.
|
||
* **Поддержка отладки (`-d` / `--debug`):** Вывод детальной статистики в консоль (сколько в здании, сколько ушло, сколько отсутствовало).
|
||
|
||
### 2. Нормализация и ИИ-сборка данных (`config.py` + `data_loader.py` + `ai_verifier.py`)
|
||
* **Удаление технического мусора:** Автоматическая очистка служебных пометок 1С в скобках (`(осн.)`, `(совм.)`, `(сводная)`), предотвращающая расхождение ФИО.
|
||
* **Умное слияние с 1С:** Поиск опечаток и несопоставленных записей в реестре отсутствий через нейросеть `Qwen2.5:14b`.
|
||
|
||
### 3. Комплексный детектор аномалий (`main.py`)
|
||
Автоматическое пересечение всех 4 источников (*СКУД* + *1С* + *Статический реестр* + *Исключения*) с перехватом конфликтов:
|
||
* 🔴 **Критическая аномалия:** Физический проход по СКУД при наличии оформленного документа в 1С (*Отпуск* / *Больничный* / *Командировка*).
|
||
* 🟠 **Удалёнщик в офисе:** Сотрудник числится на постоянной удалёнке, но пришёл через турникет.
|
||
* 🟡 **Конфликт справочников:** Нестыковка данных 1С:ЗУП и реестра статических причин.
|
||
|
||
### 4. Обучение на лету / Human-in-the-Loop (`feedback_loop.py` + `knowledge_base.json`)
|
||
* **Запоминание правил:** Если пользователь разрешает спорную ситуацию *(например: «Незнанова иногда в офисе — не считать аномалией»)*, правило фиксируется в `knowledge_base.json`.
|
||
* **Авто-фильтрация:** Детектор аномалий проверяет Базу Знаний до формирования вопросов, избавляя пользователя от повторных уведомлений по решённым случаям.
|
||
|
||
### 5. Лаконичная аналитическая отчетность (`text_reporter.py`)
|
||
* Формирование строгой сводки в формате Markdown.
|
||
* Выведение отдельным блоком нумерованного списка истинно неизвестных случаев.
|
||
* Отсутствие дублирования ФИО в разделе кадровых рекомендаций.
|
||
|
||
---
|
||
|
||
## 🚀 Команды для запуска снапшота
|
||
|
||
| Режим запуска | Команда в терминале |
|
||
| :--- | :--- |
|
||
| **Стандартный запуск** *(Экспорт СКУД из SQL + ИИ Анализ)* | `python main.py` |
|
||
| **Режим отладки** *(С детальными логами)* | `python main.py -d` |
|
||
| **Без повторного обращения к SQL** *(На сохраненных файлах)* | `python main.py --skip-export` |
|
||
| **Отладка только модуля выгрузки СКУД** | `python modules/scud_export.py -d` |
|