28 KiB
28 KiB
План реализации (ROADMAP)
1. Очистка от регулярок и костылей (tool_injector.py) [ЗАВЕРШЕНО]
- Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов.
- Оставить в модуле только базовую санитарную очистку сырых тегов (
<tool_call>).
2. Настройка контекста и инструкций сессии (agent.py) [ЗАВЕРШЕНО]
- Передать управление диалогом языковой модели через системный блок
role: "system". - При активном состоянии
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].
- Изолированный пул соединений SQLite (
- Декомпозиция предметных доменов (
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и полная поддержка в CLIscripts/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) по согласованию с отделом кадров. - Сохранение честного статуса «Нет выхода» для прозрачности кадрового аудита и выявления нарушений.
- Полное отключение механизма дорисовывания 8.5 часов (
- Кэш сопоставлений личностей (
person_identity_mapping):- Таблица в SQLite и команды
db_cli.py mapping [list|add|del][cite: 2]. - Теневой режим ИИ-подсказок по нечетким ФИО в
text_reporter.py[cite: 2].
- Таблица в SQLite и команды
- Каскадный fallback кадровых отсутствий:
MS SQL ЗУП\rightarrowрезервный парсингОтсутствия_*.xlsx\rightarrowstatic_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. Миграция инфраструктуры, отказоустойчивость отчетов и Упрощенный отчет [ЗАВЕРШЕНО]
- Миграция на новый сервер (Debian 12):
- Актуализация путей виртуального окружения в cron-скриптах (
scripts/cron/*.sh). - Восстановление прямого подключения к базе 1С:ЗУП (MS SQL Server
ACCOUNT-01). - Настройка автоматического CIFS-монтирования шары отчетов
//storage/SCUD/Отчетыв/etc/fstabс правами пользователя.
- Актуализация путей виртуального окружения в cron-скриптах (
- Разделение статусов наличия в кадровых реестрах (
merger.py):- Выделение сотрудников, заведенных в СКУД, но не принятых в ЗУП (
not_hired_yet = True), в отдельный раздел сводки «Не приняты на работу». - Полное исключение непринятых сотрудников из детального суточного табеля за прошлые смены.
- Обособление штатных сотрудников без карт СКУД (
no_scud_pass = True) в раздел «Нет пропуска» с исключением их из «Неизвестных». - Устранение предупреждений
UserWarning: Boolean Series key will be reindexedпри вычислении метрик штата.
- Выделение сотрудников, заведенных в СКУД, но не принятых в ЗУП (
- Стабилизация генерации Excel-книг (
otchet_builder.py):- Включение защитной опции
nan_inf_to_errors: Trueвxlsxwriter.Workbook. - Санитизация ячеек от значений
NaN/None/pd.NAперед записью, устранившая критический сбойTypeError: NAN/INF not supported in write_number().
- Включение защитной опции
- Генератор «Упрощенного отчета» (
services/reports/simplified_builder.py):- Создание генератора по эталонному шаблону: заголовок
Упрощенный отчет: c ДД.ММ.ГГГГ по ДД.ММ.ГГГГ, сокращение ФИО до инициалов (Фамилия И.О.), отображение времени с текстовыми заглушками (Нет входа (0:00),Нет выхода (23:59)). - Сортировка по подразделениям и алфавиту сотрудников.
- Интеграция этапа сборки упрощенного отчета за вчера в ETL-конвейер (
main_etl.py).
- Создание генератора по эталонному шаблону: заголовок
- Компактный динамический сборщик слепков (
make_etl_snapshot.py):- Автоматический обход дерева (auto-discovery) с отсечением дублирующих архивных манифестов, временных файлов и пустых
__init__.py.
- Автоматический обход дерева (auto-discovery) с отсечением дублирующих архивных манифестов, временных файлов и пустых
15. ПРИОРИТЕТ 1: Внутридневной контроль, экран «Кто в здании» и On-Demand генерация [В РАБОТЕ]
- Оперативный контроль «Кто в здании прямо сейчас» (Live Presence):
- REST API эндпоинт
GET /api/v1/presence/liveна базе таблицыscud_events_rawи оконной функции последнего события прохода. - Выделенная модальная панель в веб-интерфейсе:
- Метрики реального времени: Штат 1С, В здании, Вышли, На удаленке, В командировке/отпуске, Не пришли, Исключения.
- Быстрый поиск сотрудника и фильтрация по подразделениям.
- Учет специфики служебных входов/выходов во двор (флигель/двор).
- REST API эндпоинт
- On-Demand генерация отчетов из UI и сайдбара:
- Кнопка «Сводка» в сайдбаре: моментальный сбор книги по последнему готовому срезу SQLite без блокирующих опросов MS SQL.
- Кнопки «Детальн.» и «Упрощ.»: строгое формирование отчетов за ВЧЕРА (с учетом выходных) по финальному суточному срезу
Y(23:59:59). - Каскадный fallback кадровых файлов: при отсутствии свежего штата за текущее утро автоматическое использование актуального среза из
zup_staffв SQLite.
- Атомарная публикация и отдача файлов (Report Delivery Engine):
- Устранение 404 ошибок: рекурсивный поиск файлов в иерархии
output/reports/{ГОД}/{МЕСЯЦ}/и декодирование URL-имён. - Синхронизация при отдаче: автоматическая отдача прямой ссылки на скачивание в браузер.
- Устранение 404 ошибок: рекурсивный поиск файлов в иерархии
- Реестр «Графики работы» (Custom Work Schedules):
- Таблица в SQLite
work_schedules_registry(fio_clean,department,schedule_type,norm_hours,time_start_window,time_end_window,valid_from,valid_to). - Интеграция индивидуальной нормы часов (4, 7, 11, 24 ч) в калькулятор выработки
calculators.pyвместо константы 8 ч. - Вкладка управления графиками в сайдбаре «Реестры» с автоподбором сотрудников из 1С.
- Таблица в SQLite
16. ПРИОРИТЕТ 2: Кадровый арбитраж до отчетов и интеграция с MS Exchange [В ПЛАНАХ]
- Почтовый агент MS Exchange (Email-Driven Controller & Human-in-the-Loop):
- Фоновый сервис
services/mail/exchange_bot.pyдля опроса служебного ящика по IMAP/SMTP (imaplib/email) или EWS (exchangelib). - Белый список доверенных отправителей (адреса сотрудников ОК, СБ и руководства).
- Генерация отчетов по письму: распознавание запросов в теме/теле писем («Сводка на 14:00», «Отчет за 22.09.2026») и отправка файла в ответном письме.
- Разрешение кадровых коллизий через почту: обработка ответов СБ на утреннюю рассылку аномалий (подтверждение связок в
person_identity_mapping) и регистрация командировок/служебок вmanual_absences. - Двухфазный Guardrail: запрос подтверждения у кадровика по почте при низкой уверенности в сопоставлении тёзок (<90%).
- Фоновый сервис
- Интеллектуальный кадровый арбитраж ДО генерации отчетов:
- Перенос арбитража не сопоставившихся персон на этап [2.5] ДО сохранения Excel-файлов
сводка.xlsxиотчет.xlsx. - Якорный табельный номер (TabNo Matching): извлечение
TabNoиз MS SQL СКУД Орион и 1С:ЗУП, защита от смены фамилий и опечаток. - 4-уровневая система предохранителей (Точный матч
\rightarrowТабельный номер\rightarrowКэш связок\rightarrowИИ-арбитраж).
- Перенос арбитража не сопоставившихся персон на этап [2.5] ДО сохранения Excel-файлов
17. ПРИОРИТЕТ 3: Векторная база знаний (RAG) и внешний контекст [В ПЛАНАХ]
- Векторный поиск по регламентам компании (ChromaDB / RAG Engine):
- Встраиваемая векторная база для семантического поиска по ПВТР, положениям о пропускном режиме и должностным инструкциям.
- Мгновенная выдача ссылок на пункты локальных нормативных актов при консультации оператора в чате.
- Семантическая классификация нестандартных формулировок причин отсутствий из писем и заявлений.
- Внешний контекстный инструмент (Web Search Agent):
- Нативный инструмент
web_searchдля обращения к производственному календарю РФ (переносы праздников, предпраздничные сокращенные смены по ст. 95 ТК РФ). - Справка по статьям Трудового кодекса РФ (сверхурочные, выходные дни).
- Нативный инструмент
18. Исследовательский трек: Изолированная песочница кода [ОТЛОЖЕНО]
- Docker/gVisor контур:
- Изолированный контейнер без доступа к внешней сети (
network: none) с жесткими cgroups-лимитами и монтированием данных в режиме Read-Only. - Генерация и выполнение Python/Pandas скриптов для построения сложных графиков и нестандартной статистики на лету.
- Изолированный контейнер без доступа к внешней сети (