Files
scud_ai/docs/in_progress/ROADMAP.md
T

22 KiB
Raw Blame History

План реализации (ROADMAP)

1. Очистка от регулярок и костылей (tool_injector.py) [ЗАВЕРШЕНО]

  • Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов[cite: 2].
  • Оставить в модуле только базовую санитарную очистку сырых тегов (<tool_call>)[cite: 2].

2. Настройка контекста и инструкций сессии (agent.py) [ЗАВЕРШЕНО]

  • Передать управление диалогом языковой модели через системный блок role: "system"[cite: 2].
  • При активном состоянии PROMPT_PREVIEW передавать модели инструкцию[cite: 2]:
    • Подтверждение / отмена / корректировка: продолжать работу с превью и вызывать соответствующие инструменты[cite: 2].
    • Смена темы: вежливо напомнить об открытом изменении и запросить решение[cite: 2].
  • Обеспечить видимость эфемерных сообщений (is_ephemeral = 1) для модели во время активной работы с превью[cite: 2].
  • Внедрить семантический Topic Drift Guard (idle_turns = 3) с вопросами и кнопками из tool_action_registry[cite: 2].
  • Реализовать детерминированный мгновенный сброс сессии и зачистку эфемерного контекста при вызове сторонних инструментов[cite: 2].

3. Очистка эфемерных сообщений при завершении (fast_path.py / context_manager.py) [ЗАВЕРШЕНО]

  • Настроить удаление временных сообщений превью (db_purge_ephemeral_messages) строго в момент нажатия кнопок «Подтвердить» или «Отменить»[cite: 2].
  • Сбрасывать состояние сессии в базе данных после фиксации решения[cite: 2].
  • Внедрить прямое точечное применение изменений через db_apply_prompt_node_action[cite: 2].
  • Добавить обработку фазы PROMPT_FOLLOWUP с кнопками завершения и очистки контекста[cite: 2].
  • Создать context_manager.py для строгого разграничения служебных tool-пар (is_ephemeral=1) и содержательного диалога (is_ephemeral=0), сохраняя беседы Topic Drift в истории[cite: 2].

4. Инлайн-редактор в окне диалога (core.js) [ЗАВЕРШЕНО]

  • Проверить работу блока ручного редактирования (inline-prompt-editor-container) с кнопками «Сохранить правки» и «Свернуть»[cite: 2].
  • Обеспечить сохранение черновика через API (/api/v1/chat/draft) и отображение обновленного текста перед подтверждением[cite: 2].
  • Реализовать двусторонний клиентский Diff-рендерер (одновременная подсветка добавленных строк и зачеркивание удаленных [УДАЛЕНИЕ])[cite: 2].
  • Добавить авто-форматирование и отступы подпунктов (X.Y.) при ручном сохранении черновика[cite: 2].

5. Тестирование и валидация системного промпта [ЗАВЕРШЕНО]

  • Нативные вызовы: проверить добавление, редактирование и удаление пунктов через нативные вызовы модели (db_prompt_node_edit)[cite: 2].
  • Контекстные сценарии: проверить поведение модели при смене темы диалога оператором (Guardrail)[cite: 2].
  • UI и очистка: проверить ручное редактирование через кнопку в окне чата и последующую очистку контекста (db_purge_ephemeral_messages)[cite: 2].
  • Строгий вызов Базы Знаний: внедрено правило 2.9 в системный промпт для пресечения текстовой имитации вызова db_get_rules[cite: 2].

6. Распространение архитектурного паттерна на модуль задач (tasks) [ЗАВЕРШЕНО]

  • Масштабирование UI задач:
    • Увеличена ширина карточки до max-w-4xl и динамическая высота скролла до 70vh[cite: 2].
    • Реализованы переключатели фильтрации: «В работе» (по умолчанию), «В планах», «Готово», «Все»[cite: 2].
    • Разделены кнопки действия: «В работу» (для плановых) и «Готово» (для текущих)[cite: 2].
  • Инлайн-редактирование карточки задачи:
    • Плавная трансформация карточки в 3-строчную форму (текст, дата со встроенным пикером, выпадающий список важности)[cite: 2].
    • Отображение даты создания задачи[cite: 2].
    • Сохранение через REST API эндпоинт PATCH /api/v1/tasks/{id}[cite: 2].
  • Детерминированный Fast-Path и двухфазное удаление:
    • Мгновенная смена статусов без задержек LLM[cite: 2].
    • Карточка подтверждения удаления с автоочисткой контекста[cite: 2].
  • Генерация отчетов задач в Markdown:
    • Добавлен инструмент db_export_tasks_markdown для формирования Markdown-файла с группировкой по модулям и чекбоксами [x] / [ ][cite: 2].
    • Реализован роутер безопасной отдачи файлов с сохранением имени (/api/v1/files/download/...)[cite: 2].
  • Доменная консолидация задач:
    • Реализован консолидированный инструмент db_tasks_edit(action: ["ADD", "UPDATE", "DELETE", "EXPORT"], ...)[cite: 2].

7. Распространение на модуль снапшотов (snapshots) [ЗАВЕРШЕНО]

  • Поддержка Y-снапшотов: универсальный парсинг и поиск по snapshot_id LIKE 'Y%' и срезам за 22:00:00 / 23:59:59[cite: 2].
  • Single Active Snapshot View: сохранение активного среза в контексте для аналитики с автоматической ротацией и зачисткой при запросе новых дат[cite: 2].
  • Интерактивный UI с чекбоксами и защитой срезов:
    • Чекбоксы в строках дневных срезов и кнопка «Выбрать все» в шапке[cite: 2].
    • Защита итогового вечернего среза Y (иконка замочка 🔒, блокировка выбора)[cite: 2].
    • Динамическая кнопка «Удалить выбранные (N)» в подвале карточки[cite: 2].
  • Декларативное управление удалением срезов:
    • Добавлен параметр confirmed в схему TOOLS_SCHEMA для db_delete_snapshots, исключающий зацикливание подтверждений в LLM.
    • Двухфазное подтверждение удаления (одиночное и пакетное) с корректным счётчиком количества удаляемых элементов[cite: 2].
    • Корректное отображение времени создания срезов в интерфейсе (устранение смещения UTC относительно локального времени сервера).

8. Глубокий архитектурный рефакторинг ядра и сервисов [ЗАВЕРШЕНО]

  • Выделение общего слоя ядра (core/):
    • Изолированный пул соединений SQLite (core/connection.py) с поддержкой WAL и таймаутов[cite: 2].
    • DDL-схемы таблиц и индексов (core/schema.py)[cite: 2].
    • Репозитории СКУД и 1С (core/repositories/scud_repo.py, core/repositories/zup_repo.py)[cite: 2].
    • Фасад обратной совместимости (core/database.py)[cite: 2].
  • Декомпозиция предметных доменов (services/):
    • Сервис задач (services/tasks/), системного промпта (services/prompts/), срезов СКУД (services/snapshots/), базы знаний (services/knowledge/)[cite: 2].
  • Рефакторинг ETL-конвейера (services/scud_etl/):
    • Оркестратор pipeline.py, детектор аномалий anomaly_detector.py, слияние merger.py[cite: 2].
  • Модульный ИИ-оркестратор (modules/ai_engine/):
    • Динамический строитель системного контекста (context_builder.py)[cite: 2].
    • Изолированные обработчики инструментов в handlers/[cite: 2].

9. Реляционный реестр исключений, схлопывание мульти-пропусков и кадровый аудит [ЗАВЕРШЕНО]

  • Реестр исключений в SQLite (exceptions_registry):
    • Хранение категорий departments, positions, fio, position_keywords, include_fio в БД[cite: 2].
    • Доменный сервис exceptions_repo.py и полная поддержка в CLI scripts/db_cli.py exceptions[cite: 2].
  • Агрегация мульти-пропусков физлиц в СКУД:
    • Функция aggregate_scud_by_person в merger.py: объединение событий всех пропусков одного человека (ранний вход, поздний выход, присутствие)[cite: 2].
    • Автоматическая фиксация аномалий дублирования пропусков (DUPLICATE_SCUD_CARD)[cite: 2].
  • Умный выбор ставки совместителей 1С:ЗУП:
    • Функция select_best_zup_position в merger.py: привязка ставки 1С по подразделению физического нахождения в СКУД[cite: 2].
  • Отказ от искусственного автозакрытия смен:
    • Полное отключение механизма дорисовывания 8.5 часов (calculate_autoclose_time) по согласованию с отделом кадров.
    • Сохранение честного статуса «Нет выхода» для прозрачности кадрового аудита и выявления нарушений.
  • Кэш сопоставлений личностей (person_identity_mapping):
    • Таблица в SQLite и команды db_cli.py mapping [list|add|del][cite: 2].
    • Теневой режим ИИ-подсказок по нечетким ФИО в text_reporter.py[cite: 2].
  • Каскадный fallback кадровых отсутствий:
    • MS SQL ЗУП \rightarrow резервный парсинг Отсутствия_*.xlsx \rightarrow static_reason_workers.csv[cite: 2].

10. Разделение генераторов и почасовые срезы [ЗАВЕРШЕНО]

  • Разделение логики генерации на svodka_generator.py и otchet_generator.py[cite: 2].
  • Перевод времени суточного среза Y на 23:59:59[cite: 2].
  • Интеллектуальный поиск срезов services/snapshots/finder.py (Snap-to-Grid ±20 мин)[cite: 2].
  • Флаг --time и интерактивный help в main_etl.py[cite: 2].
  • Флаг --export-only для почасового крона[cite: 2].
  • Политика ночной ротации промежуточных срезов services/snapshots/retention.py[cite: 2].
  • Исправление целочисленного инкремента snapshot_id[cite: 2].

11. Стабилизация генератора отчетов и верстки [ЗАВЕРШЕНО]

  • Миграция на XlsxWriter: полный перевод экспорта книг (scud_export.py, excel_exporter.py) на чистый генератор, устранивший ошибки OpenXML и окна восстановления при открытии[cite: 2].
  • Интерактивные группировки в Сводке: восстановление сворачивания категорий по умолчанию (level=1, collapsed=True) и кнопок управления уровнями [+]/[-] (outline_settings(symbols_below=False))[cite: 2].
  • Компактная экранная верстка Детального отчета: центрирование столбца «Подразделение», расширение столбца «ФИО» (+10%, ширина 33), оптимизация ширины колонок «Первая активность» (11) и «Отклонение от нормы» (11) для отображения без горизонтальной прокрутки[cite: 2].
  • Защита от блокировок занятых файлов (Fallback Timestamp): механизм перехвата FileCreateError/OSError в safe_close_workbook с сохранением копии при открытом в Excel файле[cite: 2].
  • Безопасная синхронизация 1С с сетевой шары: переход на shutil.copyfile в share_copier.py для устранения сбоев прав доступа (Operation not permitted) на SMB/CIFS-ресурсах[cite: 2].

12. UI/UX веб-интерфейса и управление реестрами [ЗАВЕРШЕНО]

  • Паттерн Gemini-скролла: реализация функции scrollToUserMessageTop в core.js, позиционирующей свежий вопрос пользователя строго по верхней кромке видимой области[cite: 2].
  • Полное скрытие истории: предыдущие объемные ответы модели гарантированно вытесняются за верхний край экрана[cite: 2].
  • Стабилизация панели ввода: настройка padding-bottom: 80vh для #chat-messages-container в index.html, обеспечивающая необходимый запас высоты прокрутки без сдвига строки ввода текста[cite: 2].
  • Модальные формы реестров с автокомплитом 1С:
    • Полный отказ от браузерного prompt() при работе со списками исключений.
    • Единое Tailwind-окно для добавления исключений с живым поиском сотрудников по базе 1С:ЗУП (staff-autocomplete) и полем для комментария/основания.

13. Архитектура обработки событий турникетов и двухконтурный учет [ЗАВЕРШЕНО]

  • Опора на физический факт прохода (Event 32):
    • Устранение потери событий из-за рассинхронизации меток Event 28 (разрешение) и Event 32 (проход).
    • Переход на плоский SQL-запрос выборки первого входа (Mode = 1) и последнего выхода (Mode = 2).
  • Двухконтурная модель турникетов (Левый/Правый PERCo):
    • Разрешение использования обоих турникетов (DoorIndex IN (1, 2)) для сотрудников дворовых служб (отделы ЭТО, ЛЦ и др.).
    • Защита основного пула офисных сотрудников от транзитных отметок на правом турникете (DoorIndex = 1).
    • Реестр «Пр. турникет» (turnstile_fio, turnstile_departments) в базе данных и веб-панели.
    • Корректное сопоставление составных ФИО (Name + FirstName + MidName) в запросе к pList.
  • Таблица сырых событий (scud_events_raw):
    • Создание DDL-схемы таблицы и логирование всех физических проходов дня параллельно со снапшотами.

14. Внутридневной контроль и генерация отчетов из веб-интерфейса [В РАБОТЕ]

  • Моментальное создание срезов из UI:
    • Кнопка «Создать моментальный срез» в шапке хаба «Срезы».
    • Вызов scud_export.py с фиксацией состояния на текущую минуту и добавлением среза в список без перезагрузки страницы.
  • Контекстные кнопки генерации в строках срезов:
    • Размещение кнопок быстрых действий напротив каждой карточки среза в сайдбаре:
      • Для промежуточных срезов (HH:00): кнопка «Сводка» \rightarrow запуск svodka_generator.py на момент среза.
      • Для итоговых срезов (_FINAL / Y): кнопка «Отчет» \rightarrow запуск otchet_generator.py со сверкой 1С:ЗУП за сутки.
    • Фоновая сборка документа с отображением индикатора и автоматической выдачей ссылки на скачивание файла (/api/v1/files/download/...).
  • Выделенный экран оперативного мониторинга («Текущая сводка»):
    • Отдельная страница/вкладка оперативного контроля присутствия в реальном времени:
      • Метрики: Всего по штату, В здании прямо сейчас, На удаленке, В командировке, Отсутствуют без причины.
      • Быстрый поиск и фильтрация по подразделениям.
      • Подсветка аномалий внутри дня (вход без выхода более 10 часов, активность без прохода турникета).

15. Интеллектуальный кадровый арбитраж ДО генерации отчетов [В ПЛАНАХ]

  • Двухконтурный вызов ИИ: перенос арбитража не сопоставившихся персон на этап [2.5] ДО сохранения Excel-файлов сводка.xlsx и отчет.xlsx[cite: 2].
  • Якорный табельный номер (TabNo Matching):
    • Извлечение TabNo из MS SQL СКУД Орион и 1С:ЗУП[cite: 2].
    • Добавление колонок scud_tab_no и zup_tab_no в SQLite[cite: 2].
    • Защита от смены фамилий и опечаток через инвариант табельного номера[cite: 2].
  • 4-уровневая система предохранителей (Guardrails):
    • Уровень 1: Точный матч ФИО (100%)[cite: 2].
    • Уровень 2: Матч по табельному номеру при расхождении ФИО[cite: 2].
    • Уровень 3: Валидация кэша person_identity_mapping с проверкой актуальности статуса в 1С[cite: 2].
    • Уровень 4: ИИ-арбитраж с записью верифицированной связки в кэш[cite: 2].

16. Изолированная песочница кода (Code Execution Sandbox Engine) [В ПЛАНАХ]

  • Docker/gVisor контур:
    • Создание изолированного контейнера без доступа к внешней сети (network: none) с ограниченными лимитами по памяти и CPU (cgroups)[cite: 2].
    • Настройка безопасного монтирования только необходимых CSV/Parquet-файлов данных в режиме Read-Only[cite: 2].
  • Динамические Python/Pandas вычисления:
    • Инструмент генерации и безопасного выполнения скриптов агрегации и аналитики данных СКУД / 1С на лету[cite: 2].
    • Перехват stdout/stderr, сбор результатов расчетов и графиков с передачей в UI-чата[cite: 2].