Files
scud_orion_ai_v2/PROJECT_SNAPSHOT_03.08.2026.md

7.6 KiB
Raw Permalink Blame History

🔄 ПАСПОРТ АЛГОРИТМА И 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 Обучающие правила для нейросети