# Team Planner - Требования к приложению ## Описание продукта Приложение для команды разработки, позволяющее собирать бэклог идей, приоритизировать его, проводить брейнштормы, оценивать задачи и оставлять комментарии. --- ## Функциональные требования ### 1. Управление идеями #### 1.1 Список идей Таблица со следующими полями для каждой идеи: | Поле | Описание | Тип | |------|----------|-----| | Статус | Текущее состояние идеи (Новая, В обсуждении, Одобрена, В работе, Готово, Отклонена) | Enum | | Приоритет | Важность идеи (Критический, Высокий, Средний, Низкий) | Enum | | Модуль | Где реализуется (Frontend, Backend, AI, Mobile, Infrastructure, Other) | Enum/Multi-select | | Суть идеи | Краткое описание идеи | Text | | Для кого | Целевая аудитория / пользователь | Text | | Какую боль решает | Проблема, которую решает идея | Text | | Роль AI | Что делает ИИ в рамках этой идеи (если применимо) | Text | | Способ проверки | Быстрый способ валидации идеи / MVP | Text | | Комментарии | Обсуждение и заметки | Text (список комментариев) | | Цвет | Цветовая маркировка строки | Color | | Оценка времени | AI-генерируемая оценка трудозатрат | Calculated | #### 1.2 Автор идеи - При создании идеи автоматически сохраняется автор (текущий пользователь) - Автора идеи изменить нельзя (поле readonly) - Отображение автора в таблице и детальном просмотре #### 1.3 Редактирование идей - **Полный просмотр**: пользователь может просмотреть ВСЕ поля идеи (включая pain, aiRole, verificationMethod) - **Полное редактирование**: пользователь может отредактировать ВСЕ редактируемые поля идеи - **Inline-редактирование**: возможность редактировать любое поле прямо в таблице двойным кликом - **Детальный просмотр**: модалка с полной информацией об идее - Открывается в **режиме просмотра** (readonly) - Кнопка "Редактировать" переводит в **режим редактирования** - Кнопка "Сохранить" сохраняет изменения - Кнопка "Отмена" отменяет изменения - **Column visibility**: возможность скрыть/показать колонки таблицы - **Быстрое изменение статуса и приоритета** через dropdown - **Автосохранение** изменений (для inline-редактирования) #### 1.4 Drag & Drop - Перемещение идей в списке для ручной сортировки - Визуальная индикация при перетаскивании - Сохранение порядка после перемещения #### 1.5 Цветовая маркировка - Возможность назначить цвет строке для визуального выделения - Предустановленная палитра цветов - Фильтрация по цвету #### 1.6 Экспорт идеи - Экспорт отдельной идеи в формате DOCX - Включает: название, описание, статус, приоритет, модуль, целевую аудиторию, боль, роль AI, способ проверки - Если есть AI-оценка — включается в документ (общее время, сложность, разбивка по ролям, рекомендации) - Если есть ТЗ — включается в документ (markdown рендерится как форматированный текст) - Комментарии к идее включаются в документ (автор, дата, текст) ### 2. Сортировка и фильтрация #### 2.1 Сортировка - По любому полю (клик на заголовок колонки) - Множественная сортировка (Shift + клик) - Сохранение настроек сортировки #### 2.2 Фильтры - Фильтр по статусу - Фильтр по приоритету - Фильтр по модулю - Фильтр по цвету - Текстовый поиск по всем полям - Сохранение пресетов фильтров ### 3. AI-оценка времени #### 3.1 Управление командой - Список членов команды с ролями: - Backend-разработчик - Frontend-разработчик - AI/ML-инженер - Аналитик - Тестировщик (QA) - DevOps - Дизайнер - Project Manager - Количество сотрудников каждой роли #### 3.2 Матрица производительности Для каждого сотрудника/роли указывается время на задачи разной сложности: | Сложность | Описание | Пример времени | |-----------|----------|----------------| | Trivial | Тривиальная задача | 1-2 часа | | Easy | Лёгкая задача | 0.5-1 день | | Medium | Средняя задача | 2-3 дня | | Hard | Сложная задача | 1-2 недели | | Epic | Эпик / большая фича | 2-4 недели | #### 3.3 AI-функционал - Анализ описания идеи - Определение необходимых ролей для реализации - Оценка сложности для каждой роли - Расчёт общего времени с учётом состава команды - Рекомендации по оптимизации #### 3.4 Генерация мини-ТЗ - **Генерация ТЗ**: создание структурированного технического задания на основе описания идеи - **Структура ТЗ**: цель, функциональные требования, технические требования, критерии приёмки, зависимости и риски - **Сохранение**: ТЗ сохраняется в базе данных для повторного использования - **Просмотр**: возможность просмотреть сохранённое ТЗ по клику на кнопку - **Редактирование**: возможность изменить сгенерированное ТЗ вручную - **Интеграция с оценкой**: AI-оценка времени учитывает ТЗ для более точного расчёта ### 4. Комментарии - Добавление комментариев к идее - Ответы на комментарии (треды) - Упоминание участников (@mention) - История комментариев ### 5. Система прав доступа #### 5.1 Роли пользователей - **Администратор** — единственный пользователь с полными правами, логин задаётся в секретах кластера (K8s Secret) - **Обычный пользователь** — новый пользователь после первого входа получает только права на просмотр - Администратор может изменять права любого пользователя (кроме себя) #### 5.2 Гранулярные права доступа Каждое право настраивается отдельно: | Право | Описание | |-------|----------| | `view_ideas` | Просмотр списка идей (по умолчанию: ✅) | | `create_ideas` | Создание новых идей | | `edit_own_ideas` | Редактирование своих идей | | `edit_any_ideas` | Редактирование чужих идей | | `delete_own_ideas` | Удаление своих идей | | `delete_any_ideas` | Удаление чужих идей | | `reorder_ideas` | Изменение порядка идей (drag & drop) | | `add_comments` | Добавление комментариев | | `delete_own_comments` | Удаление своих комментариев | | `delete_any_comments` | Удаление чужих комментариев | | `request_ai_estimate` | Запрос AI-оценки трудозатрат | | `request_ai_specification` | Запрос AI-генерации ТЗ | | `edit_specification` | Редактирование ТЗ | | `delete_ai_generations` | Удаление AI-генераций (оценки, ТЗ) | | `manage_team` | Управление командой (добавление/удаление участников) | | `manage_roles` | Управление ролями команды | | `export_ideas` | Экспорт идей в документы | | `view_audit_log` | Просмотр истории действий | #### 5.3 Панель администратора - Доступна только администратору - Таблица пользователей с их правами - Чекбоксы для включения/выключения каждого права - Применение изменений сохраняется немедленно ### 6. История действий (Аудит) #### 6.1 Логирование действий - Любые манипуляции с данными фиксируются: создание, редактирование, удаление идей, генерации AI, комментарии - Сохраняется: кто сделал, что сделал, когда, старое значение, новое значение #### 6.2 Формат записи аудита | Поле | Описание | |------|----------| | id | Уникальный идентификатор записи | | userId | ID пользователя | | userName | Имя пользователя | | action | Тип действия (create, update, delete, generate, restore) | | entityType | Тип сущности (idea, comment, specification, estimate, team_member) | | entityId | ID сущности | | oldValue | Значение до изменения (JSON) | | newValue | Значение после изменения (JSON) | | timestamp | Дата и время действия | #### 6.3 Просмотр истории - Страница истории действий (только для админа или пользователей с правом `view_audit_log`) - Фильтрация по пользователю, типу действия, типу сущности, дате - Возможность просмотра diff (что изменилось) - Восстановление удалённых данных из аудита #### 6.4 Настройки хранения - Срок хранения истории настраивается администратором - По умолчанию: 30 дней - Автоматическая очистка старых записей по cron job ### 7. Многопользовательская работа #### 7.1 Real-time обновления (WebSocket) - Автоматическое обновление данных у всех пользователей при изменениях - События: создание/редактирование/удаление идей, новые комментарии, изменение порядка - Визуальная индикация изменений другими пользователями #### 7.2 Конкурентное редактирование - При попытке редактировать идею, которую редактирует другой пользователь — предупреждение - Показ кто сейчас редактирует запись - Оптимистичная блокировка с version/updatedAt #### 7.3 Присутствие пользователей - Показ онлайн пользователей - Аватары/иконки пользователей, работающих с приложением ### 8. Темная тема #### 8.1 Переключение темы - Переключатель светлая/тёмная тема в header - Автоопределение системной темы (prefers-color-scheme) - Сохранение выбора в localStorage #### 8.2 Цветовая схема - Все компоненты поддерживают обе темы - Цвета статусов, приоритетов и маркировки адаптированы для тёмной темы - MUI theme provider с dark mode --- ## Технические требования ### Backend (NestJS) #### Стек технологий - **Framework**: NestJS - **Language**: TypeScript - **Database**: PostgreSQL - **ORM**: TypeORM - **API**: REST + WebSocket (для real-time обновлений) - **WebSocket**: @nestjs/websockets + Socket.io - **AI Integration**: ai-proxy service тут лежит гайд по интеграции /Users/vigdorov/dev/gptunnel-service/INTEGRATION.md - **Document Generation**: docx (для экспорта) - **Cron Jobs**: @nestjs/schedule (для очистки аудита) ### Frontend (React + TypeScript) #### Стек технологий - **Framework**: React 18+ - **Language**: TypeScript - **State Management**: Zustand - **UI Library**: MUI - **Table**: TanStack Table (react-table) - **Drag & Drop**: dnd-kit / react-beautiful-dnd - **HTTP Client**: Axios / React Query - **Styling**: Tailwind CSS / CSS Modules ## Нефункциональные требования ### Производительность - Виртуализация списка при большом количестве идей (1000+) - Оптимистичные обновления UI - Кэширование данных ### UX - Отзывчивый интерфейс (< 100ms на действие) - Keyboard shortcuts для частых операций - Responsive design (desktop-first) ### Безопасность - Валидация входных данных - Rate limiting для AI-запросов - Проверка прав доступа на каждом endpoint - Защита от конкурентных изменений (оптимистичная блокировка) ### Авторизация и авторизация - **Keycloak** (auth.vigdorov.ru) — внешний Identity Provider - Авторизация через редиректы на стандартную форму Keycloak - Authorization Code Flow + PKCE - JWT токены с валидацией через JWKS - Автоматическое обновление токенов - Защита всех API endpoints (кроме /health) - **Гранулярные права доступа** — см. раздел 5 - **Администратор** определяется через K8s Secret `ADMIN_EMAIL` --- ## Решённые вопросы 1. Нужна ли многопользовательская работа и разграничение прав? **ДА** — см. разделы 5 (Права доступа) и 7 (Многопользовательская работа) 2. Требуется ли история изменений (audit log)? **ДА** — см. раздел 6 (История действий) 3. Нужен ли экспорт данных? **ДА** — экспорт отдельной идеи в DOCX (см. раздел 1.6) 4. Интеграция с внешними системами (Jira, Trello)? **НЕТ** — не требуется