feat(reports): stabilize on-demand generation, live presence and 1C fallback
This commit is contained in:
+63
-49
@@ -1,13 +1,13 @@
|
||||
# План реализации (ROADMAP)
|
||||
|
||||
## 1. Очистка от регулярок и костылей (`tool_injector.py`) `[ЗАВЕРШЕНО]`
|
||||
- [x] Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов[cite: 2].
|
||||
- [x] Оставить в модуле только базовую санитарную очистку сырых тегов (`<tool_call>`)[cite: 2].
|
||||
- [x] Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов.
|
||||
- [x] Оставить в модуле только базовую санитарную очистку сырых тегов (`<tool_call>`).
|
||||
|
||||
---
|
||||
|
||||
## 2. Настройка контекста и инструкций сессии (`agent.py`) `[ЗАВЕРШЕНО]`
|
||||
- [x] Передать управление диалогом языковой модели через системный блок `role: "system"`[cite: 2].
|
||||
- [x] Передать управление диалогом языковой модели через системный блок `role: "system"`.
|
||||
- [x] При активном состоянии `PROMPT_PREVIEW` передавать модели инструкцию[cite: 2]:
|
||||
- **Подтверждение / отмена / корректировка:** продолжать работу с превью и вызывать соответствующие инструменты[cite: 2].
|
||||
- **Смена темы:** вежливо напомнить об открытом изменении и запросить решение[cite: 2].
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
## 11. Стабилизация генератора отчетов и верстки `[ЗАВЕРШЕНО]`
|
||||
- [x] **Миграция на `XlsxWriter`:** полный перевод экспорта книг (`scud_export.py`, `excel_exporter.py`) на чистый генератор, устранивший ошибки OpenXML и окна восстановления при открытии[cite: 2].
|
||||
- [x] **Интерактивные группировки в Сводке:** восстановление сворачивания категорий по умолчанию (`level=1`, `collapsed=True`) и кнопок управления уровнями `[+]`/`[-]` (`outline_settings(symbols_below=False)`)[cite: 2].
|
||||
- [x] **Интективные группировки в Сводке:** восстановление сворачивания категорий по умолчанию (`level=1`, `collapsed=True`) и кнопок управления уровнями `[+]`/`[-]` (`outline_settings(symbols_below=False)`)[cite: 2].
|
||||
- [x] **Компактная экранная верстка Детального отчета:** центрирование столбца «Подразделение», расширение столбца «ФИО» (+10%, ширина 33), оптимизация ширины колонок «Первая активность» (11) и «Отклонение от нормы» (11) для отображения без горизонтальной прокрутки[cite: 2].
|
||||
- [x] **Защита от блокировок занятых файлов (Fallback Timestamp):** механизм перехвата `FileCreateError`/`OSError` в `safe_close_workbook` с сохранением копии при открытом в Excel файле[cite: 2].
|
||||
- [x] **Безопасная синхронизация 1С с сетевой шары:** переход на `shutil.copyfile` в `share_copier.py` для устранения сбоев прав доступа (`Operation not permitted`) на SMB/CIFS-ресурсах[cite: 2].
|
||||
@@ -156,48 +156,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 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. Миграция инфраструктуры, отказоустойчивость отчетов и Упрощенный отчет `[ЗАВЕРШЕНО]`
|
||||
## 14. Миграция инфраструктуры, отказоустойчивость отчетов и Упрощенный отчет `[ЗАВЕРШЕНО]`
|
||||
- [x] **Миграция на новый сервер (Debian 12):**
|
||||
- Актуализация путей виртуального окружения в cron-скриптах (`scripts/cron/*.sh`).
|
||||
- Восстановление прямого подключения к базе 1С:ЗУП (MS SQL Server `ACCOUNT-01`).
|
||||
@@ -209,8 +168,63 @@
|
||||
- Устранение предупреждений `UserWarning: Boolean Series key will be reindexed` при вычислении метрик штата.
|
||||
- [x] **Стабилизация генерации Excel-книг (`otchet_builder.py`):**
|
||||
- Включение защитной опции `nan_inf_to_errors: True` в `xlsxwriter.Workbook`.
|
||||
- Полная санитарная очистка ячеек от значений `NaN` / `None` / `pd.NA` перед записью, устранившая критический сбой `TypeError: NAN/INF not supported in write_number()`.
|
||||
- Санитизация ячеек от значений `NaN` / `None` / `pd.NA` перед записью, устранившая критический сбой `TypeError: NAN/INF not supported in write_number()`.
|
||||
- [x] **Генератор «Упрощенного отчета» (`services/reports/simplified_builder.py`):**
|
||||
- Создание нового генератора по эталонному формату: заголовок `Упрощенный отчет: c ДД.ММ.ГГГГ по ДД.ММ.ГГГГ`, сокращение ФИО до инициалов (`Фамилия И.О.`), отображение времени с текстовыми заглушками (`Нет входа (0:00)`, `Нет выхода (23:59)`).
|
||||
- Создание генератора по эталонному шаблону: заголовок `Упрощенный отчет: c ДД.ММ.ГГГГ по ДД.ММ.ГГГГ`, сокращение ФИО до инициалов (`Фамилия И.О.`), отображение времени с текстовыми заглушками (`Нет входа (0:00)`, `Нет выхода (23:59)`).
|
||||
- Сортировка по подразделениям и алфавиту сотрудников.
|
||||
- Интеграция этапа сборки упрощенного отчета за вчера в ETL-конвейер (`main_etl.py`).
|
||||
- Интеграция этапа сборки упрощенного отчета за вчера в ETL-конвейер (`main_etl.py`).
|
||||
- [x] **Компактный динамический сборщик слепков (`make_etl_snapshot.py`):**
|
||||
- Автоматический обход дерева (auto-discovery) с отсечением дублирующих архивных манифестов, временных файлов и пустых `__init__.py`.
|
||||
|
||||
---
|
||||
|
||||
## 15. ПРИОРИТЕТ 1: Внутридневной контроль, экран «Кто в здании» и On-Demand генерация `[В РАБОТЕ]`
|
||||
- [x] **Оперативный контроль «Кто в здании прямо сейчас» (Live Presence):**
|
||||
- [x] REST API эндпоинт `GET /api/v1/presence/live` на базе таблицы `scud_events_raw` и оконной функции последнего события прохода.
|
||||
- [x] Выделенная модальная панель в веб-интерфейсе:
|
||||
- Метрики реального времени: *Штат 1С*, *В здании*, *Вышли*, *На удаленке*, *В командировке/отпуске*, *Не пришли*, *Исключения*.
|
||||
- Быстрый поиск сотрудника и фильтрация по подразделениям.
|
||||
- Учет специфики служебных входов/выходов во двор (флигель/двор).
|
||||
- [x] **On-Demand генерация отчетов из UI и сайдбара:**
|
||||
- [x] Кнопка **«Сводка»** в сайдбаре: моментальный сбор книги по последнему готовому срезу SQLite без блокирующих опросов MS SQL.
|
||||
- [x] Кнопки **«Детальн.»** и **«Упрощ.»**: строгое формирование отчетов за **ВЧЕРА** (с учетом выходных) по финальному суточному срезу `Y` (23:59:59).
|
||||
- [x] Каскадный fallback кадровых файлов: при отсутствии свежего штата за текущее утро автоматическое использование актуального среза из `zup_staff` в SQLite.
|
||||
- [x] **Атомарная публикация и отдача файлов (Report Delivery Engine):**
|
||||
- [x] Устранение 404 ошибок: рекурсивный поиск файлов в иерархии `output/reports/{ГОД}/{МЕСЯЦ}/` и декодирование URL-имён.
|
||||
- [x] Синхронизация при отдаче: автоматическая отдача прямой ссылки на скачивание в браузер.
|
||||
- [ ] **Реестр «Графики работы» (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С.
|
||||
|
||||
---
|
||||
|
||||
## 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$ ИИ-арбитраж).
|
||||
|
||||
---
|
||||
|
||||
## 17. ПРИОРИТЕТ 3: Векторная база знаний (RAG) и внешний контекст `[В ПЛАНАХ]`
|
||||
- [ ] **Векторный поиск по регламентам компании (ChromaDB / RAG Engine):**
|
||||
- [ ] Встраиваемая векторная база для семантического поиска по ПВТР, положениям о пропускном режиме и должностным инструкциям.
|
||||
- [ ] Мгновенная выдача ссылок на пункты локальных нормативных актов при консультации оператора в чате.
|
||||
- [ ] Семантическая классификация нестандартных формулировок причин отсутствий из писем и заявлений.
|
||||
- [ ] **Внешний контекстный инструмент (Web Search Agent):**
|
||||
- [ ] Нативный инструмент `web_search` для обращения к производственному календарю РФ (переносы праздников, предпраздничные сокращенные смены по ст. 95 ТК РФ).
|
||||
- [ ] Справка по статьям Трудового кодекса РФ (сверхурочные, выходные дни).
|
||||
|
||||
---
|
||||
|
||||
## 18. Исследовательский трек: Изолированная песочница кода `[ОТЛОЖЕНО]`
|
||||
- [ ] **Docker/gVisor контур:**
|
||||
- [ ] Изолированный контейнер без доступа к внешней сети (`network: none`) с жесткими cgroups-лимитами и монтированием данных в режиме Read-Only.
|
||||
- [ ] Генерация и выполнение Python/Pandas скриптов для построения сложных графиков и нестандартной статистики на лету.
|
||||
Reference in New Issue
Block a user