25 KiB
25 KiB
План реализации (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].
- Изолированный пул соединений 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. Внутридневной контроль и генерация отчетов из веб-интерфейса [В РАБОТЕ]
- Моментальное создание срезов из 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].
17. Миграция инфраструктуры, отказоустойчивость отчетов и Упрощенный отчет [ЗАВЕРШЕНО]
- Миграция на новый сервер (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).
- Создание нового генератора по эталонному формату: заголовок