Files
site_aegisone/py_service/CHANGELOG.md
T

226 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog — AegisOne Service Portal
## 1.7.1 (29.05.2026)
### Исправления
- **P2 (CSS):** bot_consent, bot_tickets, bot_kb, bot_settings — var(--light-bg)→var(--bg-card), хардкод цвета→CSS-переменные
- **M7 (bot_test.html):** тема наследуется через CSS-переменные + скрипт инициализации
- **C3 (Email typo):** contact proxy — user.email вместо user.phone
## 1.7.0 (29.05.2026)
### Новые функции
- **Прокси-роуты для бота:** /api/bot/webhook с пробросом X-Max-Bot-Api-Secret
- **Страницы бота:** bot_consent.html (превью + таймер 10 сек), bot_kb.html (✏️ редактирование), bot_settings.html (showNotification, max_bot_id)
- **Тосты:** глобальная showNotification() в base.html, CSS-классы .toast-* в service.css
- **CSS-переменные:** var(--white)→var(--bg-card), var(--text)→var(--text-primary) во всех шаблонах
### Исправления
- Проброс secret через webhook-прокси
## 1.5.5 (23.05.2026)
### Новые функции
- Этап 4 завершён: все 8 feature-обработчиков (risk_score, sla_status, photo_report, appointment, quality_rate, commercial, my_objects, sla_ticket)
- max_notifications.py: notify_operator, notify_level2, notify_client, notify_handoff_escalation, notify_ticket_created
- emotion_detector.py + categorizer.py: GPT с fallback на keywords
- Handoff-диалоги (/service/bot-settings/handoffs) с polling и кнопкой "Взять в работу"
- Уведомления бота (/service/bot-settings/notifications) + mark-read
- API: handoffs, notifications, risk-questions (CRUD), tickets (list/get/create/message/status), engineers
- Страница "Вопросы риск-инжиниринга" (bot_risk_questions.html) — управление через портал
- Страница "Заявки" (bot_tickets.html) — просмотр, создание, детали, сообщения, смена статуса
- risk_score.py переписан: чтение вопросов из БД (BotRiskQuestion) вместо хардкода
- SQL миграция v1.5.5: CREATE TABLE для bot_notifications, bot_notification_subscriptions, bot_risk_questions, bot_tickets, bot_ticket_messages, bot_ticket_statuses + seed-данные
- MaxAPIClient.test_mode — заглушка для тестового прогона без отправки в MAX
- /api/bot/test-run — вызывает handle_update с test_mode, симулируя настоящий диалог
- portal_settings.html: кнопка тестового прогона с живой симуляцией
- role_settings.html: новые permission (bot_tickets, bot_notifications, bot_risk_questions)
- Сайдбар: добавлены "Заявки" и "Вопросы риск-инжиниринга" в раздел Чат-бот Max
- Пользователи (users.html): колонка MAX ID + поле в форме создания/редактирования
### Исправления и улучшения
- bot_engine.py: callback `rate_*` → прямой вызов quality_rate handler
- bot_engine.py: добавлен вызов notify_handoff_escalation при негативных эмоциях
- Users stub: login, full_name, role, is_active, max_user_id
- Proxy-роуты py_service: добавлены все API для risk-questions, tickets, engineers
- Тесты max_bot: проверка всех роутов
- **Добавлена фича "Напоминания"** — reminders.py handler, состояние FEATURE_REMINDERS в FSM, кнопка в меню
- **broadcasts.py зарегистрирован** — добавлен в _handle_feature (main_menu.py) и в build_main_menu_buttons (inline.py)
- **FSM.transition("done")** — все feature-хендлеры теперь возвращают в MAIN_MENU вместо IDLE, показывают меню
- **FSM изоляция** — risk_score, appointment, commercial переписаны с set_temp/get_temp вместо прямого доступа к _states
- **settings_cache.py** — исправлены get_phones() (парсит phone_1/phone_2) и get_email() (читает support_email)
- **Delete forms** — bot_categories.html, bot_kb.html, bot_settings.html: заменены form POST на fetch() с JSON
- **SQL миграция v1.5.5 исправлена** — bot_notifications + recipient_max_user_id/related_*, подписки с boolean-колонками
- **Версия обновлена до 1.5.5
## 1.5.4 (22.05.2026)
### Новые функции
- Страница Handoff-диалогов (bot_handoffs.html) с polling
- Страница Уведомлений бота (bot_notifications.html) с mark-read
- API: handoffs, notifications, risk-questions, tickets, engineers (max_bot/main.py)
- max_notifications.py: уведомления операторам, level2, клиентам, эскалация
- emotion_detector.py + categorizer.py: модули GPT + keyword fallback
- risk_score.py: анкета 7 вопросов с in-memory хранением через FSM
- Уведомления FSM (notifications.py + broadcasts.py): подписка / отписка
- Users stub (login, full_name, role, max_user_id)
- Пользователи: колонка MAX ID + поле в форме (users.html)
- SQL миграция v1.5.5 (черновик)
### Исправления и улучшения
- risk_score.py: переключение с хардкода на БД (BotRiskQuestion)
- bot_engine.py: маршрутизация feature-состояний через _feature_handlers
- bot_engine.py: callback rate_* → прямой вызов handle_quality_rate
## 1.5.3 (22.05.2026)
### Новые функции
- П.8: Роли: обновлён список MENU_ITEMS под новую структуру (7 секций: Панель, Управление, Работа, Чат-бот Max, Контент, Внешние системы, Настройки)
- П.8: Коэффициенты и Тест формул объединены в одну страницу **Формулы** (/service/formulas) с 2 табами
- П.8: Чат-бот Max в Настройках — 6 табов (Общие, Шаблоны ответов, Функции, Категории, База знаний, Тестовый прогон)
- П.8: Расширены дефолтные права engineer (charts, bot_analytics, bot_conversations)
- Переключатель ролей в navbar: owner может переключиться на engineer/technician, engineer — на technician
- Тема: текст (Светлая/Тёмная/Авто) перенесён во всплывающую подсказку (title) на кнопке
- Тесты (pytest): проверка регистрации всех роутов smoke-тест для сервера
### Исправления и улучшения
- Все старые отдельные страницы (formula_test, coefficients, bot_responses, bot_features, bot_categories, bot_kb, bot_test_runner) продолжают работать через прямые роуты
- Исправлен баг: BotTicket FK → bot_users (NoReferencedTableError при старте)
## 1.5.2 (21.05.2026)
### Новые функции
- П.8: Настройка портала (/service/portal-settings) — Yandex GPT ключ, Яндекс.Диск OAuth
- П.8: Настройка Ролей (/service/role-settings) — owner управляет видимостью пунктов меню для engineer/technician
- Ролевые права меню: sidebar скрывает пункты на основе role_menu_permissions
### Исправления и улучшения
- max_bot: Исправлен NameError в api_bot_features (добавлен импорт BotFeature)
- py_service: Добавлен PermissionsMiddleware для загрузки прав меню в каждый шаблон
- SQL: Дефолтные права engineer (10 пунктов) и technician (4 пункта) создаются при пустой таблице
## 1.5.1 (21.05.2026)
### Новые функции
- П.8: Рассылка с предпросмотром — выбор получателей (чекбоксы), живой предпросмотр, черновик, история рассылок
- П.8: Фильтр согласия ФЗ-152 — рассылка только с `consent_given = true`
### Исправления и улучшения
- П.8: Аналитика — "Всего пользователей" теперь показывает только согласных, карточка согласий удалена
- П.8: Пользователи — сортировка по всем колонкам (клик на заголовок), пагинация, фильтр по согласию
- П.8: Пользователи — строки без согласия выделены красным фоном
- max_bot: Broadcast API — preview (draft) + send режимы, recipients endpoint, history endpoint
- py_service: Прокси-роуты для recipients/history
## 1.5.0 (21.05.2026)
### Новые функции
- Интеграция бота Max "София": управление ботом в сервисном портале
- 11 новых страниц: настройки, шаблоны, функции, категории, база знаний, диалоги, пользователи, тестовый прогон, аналитика
- SQL миграция v1.5.0: bot_tickets, bot_features.sla_ticket
## 1.4.0 (20.05.2026)
## 1.3.0 (20.05.2026)
### Новые функции
- П.49: Подключены favicon (ico, png, webmanifest, apple-touch-icon) + лого на странице логина
- П.44: Сохранение scroll сайдбара при навигации (sessionStorage)
- П.47: Липкий тулбар редактора документов (верх/низ)
- П.33: Кастомный модал подтверждения выхода из опросника (вместо системного confirm)
- П.33: Добавлен POST /service/questionnaire/save/{step} — сохранение черновика
### Исправления и улучшения
- П.35: Версия ПО отображается на всех страницах, не только дашборде
- П.40: Звёзды избранного выровнены в одну строку с пунктами меню
- П.42: discover_docs() вызывается при каждом открытии документа — новые .md сразу видны
- П.43: POST /admin/permissions использует discover_docs вместо load_permissions
- П.45: Футер сайдбара: имя → выход → версия
- П.46: Иконки EasyMDE видны на тёмной теме ([data-theme="dark"] overrides)
- П.48: Создание "Пример из практики" — добавлен action="/service/cases/create"
- П.29: SLA — action="/service/sla/create" у формы + safe type conversions в edit
- П.31: Идеи — защита от None description ((idea.description or '')[:100])
- П.49: Назначения — a.object_name → a.object.name, a.user_name → a.user.full_name
- П.26: Заголовок "Назначения" → "Назначение сотрудников"
- П.24: Объекты — список клиентов в select (c.id/c.name вместо c[0]/c[1])
- П.24: Объекты — editObject защита от None customer_id + safe int() в backend
- П.23: Валидация клиентов: * у обязательных полей, KPP (9 цифр), маска телефона "8 (___) ___-__-__"
- П.36: Portainer URL https://81.177.141.34:9443
## 1.2.1 (20.05.2026)
### Новые функции
- П.38: Стилизация логина — "One" цветом #00ADEF
- П.45: Футер сайдбара: имя → выход → версия
- П.44: Сохранение scroll сайдбара при навигации (sessionStorage)
- П.47: Липкий тулбар редактора документов
- П.49: Подключены favicon (ico, png, webmanifest, apple-touch-icon)
### Исправления и улучшения
- П.35: Версия ПО отображается на всех страницах, не только дашборде
- П.40: Звёзды избранного выровнены в одну строку с пунктами меню
- П.42: discover_docs() вызывается при каждом открытии документа — новые .md сразу видны
- П.43: Управление документами — POST использует discover_docs вместо load_permissions
- П.46: Иконки EasyMDE видны на тёмной теме
- П.48: Создание "Пример из практики" — добавлен action="/service/cases/create"
- П.29: SLA — добавлен action="/service/sla/create" у формы, safe type conversions
- П.31: Идеи — защита от None description (|default(''))
- П.49: Назначения — a.object_name → a.object.name, a.user_name → a.user.full_name
- П.26: Заголовок "Назначения" → "Назначение сотрудников"
- П.24: Объекты — список клиентов в select (c.id/c.name вместо c[0]/c[1])
- П.36: Portainer URL через https://81.177.141.34:9443
- П.33: Опросник — добавлен POST /service/questionnaire/save/{step}, кастомный модал
## 1.2.0 (20.05.2026)
### Доработки
- П.21: Кнопка "Настроить" на дашборде — выбор отображаемых показателей (localStorage)
- П.22: Исправлена ошибка Internal Server Error при редактировании пользователя (добавлен action у формы)
- П.23: Исправлена ошибка Method Not Allowed при создании клиента; ИНН обязателен (10/12 цифр)
- П.24: Тип объекта переведён на русский (select вместо input)
- П.25: Исправлена ошибка Method Not Allowed при создании/редактировании объекта
- П.26: "Назначения" → "Назначение сотрудников"
- П.27: Статус SLA по умолчанию — "Переговоры" (negotiation)
- П.28: Уровни SLA отображаются на русском: Базовый/Оптимальный/Максимальный
- П.29: Проверена работа создания и редактирования SLA контрактов
- П.30: Расширены графики: группировка (день/неделя/месяц), название, сохранение/экспорт PNG
- П.31: Исправлена ошибка Internal Server Error при смене статуса идеи
- П.32: Быстрое меню заменено на звёздочки (★) — избранное в localStorage
- П.33: Кнопка "Выйти" в опроснике с подтверждением сохранения черновика
- П.34: Убрана надпись "Главная" под каждым меню
- П.35: Версия показывается полностью только на дашборде, в остальных — "v"
- П.36: Ссылка Portainer изменена на IP:порт (через PORTAINER_URL)
- П.37: Документация: левое меню (page.html), авто-загрузка .md из /py_service/docs
## 1.1.0 (18.05.2026)
### Баги
- discover_docs: миграция существующих permissions без technician — добавляется technician: {view: false} + engineer: {edit: false, cancel: false}
- favicon: исправлен тип (image/x-icon → image/svg+xml) и расширение (favicon.ico → favicon.svg)
### Доработки
- П.15: Визуальная система формул — коэффициенты сгруппированы по formula_ref в аккордеоны
- П.15: Информация о формуле (📐) — модалка с текстом формулы и описанием результата
- П.15: Песочница формул (/service/coefficients/test) — подстановка параметров и расчёт для 7 формул:
risk_score, complexity, object_index, engineer, ecs, shs, ceo_shs
- П.15: Иконка 🧪 у каждой группы ведёт в песочницу с предвыбором группы
- П.15: В сайдбар добавлена ссылка "Тест формул" (owner)
- CSS: добавлены стили аккордеона и панели теста формул
## 1.0.3 (18.05.2026)
### Баги
- П.18: Ченджлог не открывался — CHANGELOG.md исключался .dockerignore (*.md убран)
- П.20: Ошибка при сохранении пользователя — исправлена логика is_active (без дефолта), phone/email не сбрасываются
### Доработки
- П.12: Авто-добавление документов из /py_service/docs через discover_docs() в lifespan
- П.13: Владелец редактирует .md файлы через /service/documents/{slug}/edit (EasyMDE)
- П.14: Система прав документов:
- Владелец видит/создаёт/редактирует/удаляет все документы
- Владелец назначает engineer'у просмотр/редактирование через /service/documents/admin/permissions
- Engineer видит только назначенные документы
- Engineer даёт technician'у просмотр своих документов через /service/documents/tech-access
- Technician видит только те документы, что открыл engineer
- П.15: Удаление коэффициентов (кнопка ✕); предложен редизайн с группировкой по formula_ref
- П.16: Гибкие графики для владельца (/service/charts) — Chart.js: задачи/SHS/KPI/MRR/объекты, типы: bar/line/pie/doughnut
- П.17: "Service Portal" увеличен с 10px до 12px
- П.19: Роль убрана из футера сайдбара, "Выйти" под ФИО
- Удалены дублирующие ручки /service/docs* (старая система), везде /service/documents/
## 1.0.2 (18.05.2026)
### Доработки
- П.3: Логотип AegisOne в sidebare (sidebar-logo-text, 2rem)
- П.5: Версия кликабельна — модалка с историей изменений (changelog)
- П.6: Текст логотипа увеличен (sidebar-logo-text, 2rem)
- П.7: Верхнее меню упрощено — только логотип и кнопка темы
- П.8: Быстрое меню — настройка своих и техниковских ссылок (owner/engineer)
- П.9: Система идей — CRUD + статусы (normal/in_progress/completed)
- П.11: Ссылки на Portainer и Gitea в левом меню (owner)
## 1.0.1 (18.05.2026)
## 1.0.0
### Новые функции
- Первый запуск сервисного портала на FastAPI
- Базовые страницы: логин, дашборд, документация
- Авторизация (owner/engineer/technician)
- Дашборд с основной статистикой (объекты, задачи, инциденты, SLA, SHS)