Files
team-planner/REQUIREMENTS.md
vigdorov 684e416588
All checks were successful
continuous-integration/drone/push Build is passing
add view any columns and view mode for ideas
2026-01-15 11:41:01 +03:00

294 lines
17 KiB
Markdown
Raw Permalink 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.

# 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)?
**НЕТ** не требуется