alabuga/Подробное ТЗ.md
2025-09-21 18:13:36 +02:00

236 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# Задание для группы разработки
## 0. Назначение документа
Сформулировать состав работ, критерии приёмки и артефакты по разработке мотивационного модуля геймификации для кадровой системы. Документ служит рабочим ТЗ для команды разработки.
---
## 1. Цели и ключевые показатели
**Цель:** связать разрозненные задачи кандидатов и сотрудников в прозрачные «миссии» с прогрессом и целями, повысить вовлечённость.
**KPI пилота:**
- ≥70% пользователей, начавших онбординг, завершают хотя бы 1 миссию.
- ≥50% пользователей, выполнивших 2+ миссии, поднимают ранг хотя бы на 1 уровень.
- Время до «осязаемой награды» (опыт/мана/артефакт) ≤ 3 шага.
---
## 2. Объём работ (Scope)
### 2.1 Пользовательские функции (Mobilefirst)
1) **Ранги**: линейная шкала; авто‑повышение по 3 условиям (опыт, ключевые миссии, уровни компетенций).
2) **Миссии**: каталог по категориям (Квесты, Рекрутинг, Лекторий, Симулятор); карточка миссии; выполнение с возможностью загрузки файла/ссылки.
3) **Ветвление**: миссии объединяются в «ветки»/цепочки; пользователь видит прогресс по ветке.
4) **Бортовой журнал**: хронология действий, прогресса, наград; еженедельные/месячные/годовые топы.
5) **Компетенции**: экран навыков с уровнями; прокачка от миссий.
6) **Хранилище (магазин)**: трата «маны/кредитов» на призы/бонусы; история покупок.
7) **Артефакты**: коллекция с карточками артефактов (изображение, название, описание, редкость).
8) **Онбординг и лор**: короткие сюжетные вставки, объясняющие механику и «космический» контекст.
### 2.2 Функции для HR/Организатора (Desktop)
1) **Конструктор миссий**: поля (название, описание, опыт, мана, доступность по рангу, эффекты на компетенции, артефакт по итогу).
2) **Редактор веток**: визуальная связь миссий; статусы, приоритеты.
3) **Управление рангами**: правила повышения (порог опыта, обязательные миссии, уровни компетенций).
4) **Модерация**: очередь подтверждений с прикреплёнными файлами/ссылками.
5) **Артефакты**: CRUD + атрибуты артефактов.
6) **Статистика**: конверсии по миссиям/веткам/пользователям; выгрузки.
### 2.3 Интеграции и API
- SSO/аутентификация: JWT; интеграция с внешним порталом (на этапе пилота — мок).
- Источники задач (пул миссий из внешних систем) — мок‑адаптер.
- Публичный API: чтение миссий, выполнение, прогресс, лидерборды.
- Webhooks: события выполнения/рангап/покупка.
**Вне scope пилота:** расчёт денежной стоимости призов, платежи, сквозная поставка мерча.
---
## 3. Ограничения и допущения
- Пилот: один сценарий e2e «кандидат получает оффер»; одна ветка (35 миссий), 23 ранга, 57 компетенций, 23 артефакта, 35 товаров.
- Данные и интеграции — замоканы; реальная интеграция после пилота.
- Темизация «космос»: палитра/иконки/фон; переключаемые темы.
---
## 4. Архитектура и стек
**Фронтенд:** React + TypeScript, Router, Zustand/Redux Toolkit; CSSмодули или CSSinJS; Mobilefirst для пользователя, Desktop для HR.
**Бэкенд:** Python (FastAPI либо Django), БД: SQLite (пилот) → PostgreSQL (прод); JWT; миграции.
**Сервис прогресса (Rule Engine):** отдельный модуль, реагирующий на события и проверяющий 3 условия ранга.
**Событийная шина:** минимально — таблица/очередь; в перспективе — брокер.
**Файлы:** объектное хранилище (локально — каталог + антивирус‑сканер), подписанные ссылки.
**Обсервабилити:** логирование (структурированное), метрики (RPS, p95), трассировки.
---
## 5. Доменная модель (черновик)
**User**(id, role, rank_id, xp, mana, created_at)
**Rank**(id, name, order, xp_required, meta)
**RankRule**(rank_id, required_missions[], required_competency_levels{competency_id:level})
**Competency**(id, name, desc)
**UserCompetency**(user_id, competency_id, level, progress)
**Mission**(id, title, description, category, min_rank_id, rewards{x p, mana, artifact_id?}, effects{competency_id:delta})
**Branch**(id, name, desc)
**BranchEdge**(branch_id, mission_id, next_mission_id?)
**MissionSubmission**(id, mission_id, user_id, payload{file/url/text}, status)
**Artifact**(id, image_url, name, description, rarity)
**StoreItem**(id, name, price_mana, stock?, meta)
**Order**(id, user_id, item_id, status)
**JournalEntry**(id, user_id, type, payload, created_at)
— связи: User→Rank (M:1); User↔Competency (M:N); Branch↔Mission (M:N через Edge);
---
## 6. API (MVP)
### Публичное API (пользователь)
- `GET /api/me` — профиль, прогресс, текущий ранг.
- `GET /api/missions?rank=...&branch=...` — список.
- `GET /api/missions/{id}` — карточка миссии.
- `POST /api/missions/{id}/submit` — выполнение (файл/ссылка/форм‑данные).
- `GET /api/journal` — бортовой журнал, топы (?period=week|month|year).
- `GET /api/skills` — компетенции пользователя.
- `GET /api/store/items` — каталог; `POST /api/store/purchase` — покупка.
### Админ API (HR)
- `CRUD /api/admin/missions`, `/api/admin/branches`, `/api/admin/ranks`, `/api/admin/competencies`, `/api/admin/artifacts`.
- `GET /api/admin/moderation` → очередь; `POST /api/admin/submissions/{id}/approve|reject`.
- `GET /api/admin/analytics/*` — агрегаты по конверсиям.
**Контракты:** спецификация OpenAPI 3.1 (в репозитории `/openapi.yaml`).
---
## 7. НФТ (Нефункциональные требования)
- **Производительность:** p95 отклик API ≤ 200мс при 100 RPS (пилот); начальная нагрузка 1k MAU.
- **Доступность:** 99,0% в неделю (пилот).
- **Адаптивность:** мобильные экраны ≥320px; HRпанель ≥1024px.
- **Доступность (a11y):** соответствие WCAG 2.2 AA ключевых пользовательских потоков.
- **Безопасность:** базовый уровень соответствия (OWASP ASVS Level 2): аутентификация, управление сессиями, авторизация по ролям, валидация входных данных, безопасное хранение файлов, защита от XSS/CSRF/SQLi, журнал аудита админ‑действий.
- **Качество продукта:** ориентироваться на характеристики ISO/IEC 25010 (функциональная пригодность, надёжность, производительность, удобство, безопасность, сопровождаемость и др.).
---
## 8. UX/UI
- Космическая тема: палитра, фон, иконки; нейминг рангов.
- Экран пользователя: цель, прогресс‑бар до следующего ранга, доступные ветки и миссии, быстрый старт.
- Экран HR: конструктор миссий (формы), редактор веток, модерация, аналитика.
Артефакты дизайн‑системы: палитра, типографика, кнопки, карточки, формы, тосты, прогресс‑бар, модальные окна.
---
## 9. Приёмка (Definition of Done)
- Реализованы фичи разделов 2.12.2 (MVPобъём).
- Покрытие интеграционными тестами ключевых сценариев; unitтесты Rule Engine.
- Линтеры и форматтеры подключены; CI выполняет тесты и линт.
- Сгенерирован `openapi.yaml`; README с инструкциями; сид‑данные.
- Демонстрация e2e «кандидат получает оффер» на стенде.
---
## 10. Критерии приёмки (Gherkin, выборочно)
**Сценарий: Авто‑повышение ранга по 3 условиям**
```
Given у пользователя ранг R0 и 0 XP
And есть правило повышения до R1: XP≥500, миссии [M1, M2], компетенции {Aналитика≥1, Общение≥1}
When пользователь завершает M1 и M2 и набирает ≥500 XP
And уровни компетенций удовлетворяют порогам
Then система повышает ранг до R1
And в журнал добавляется запись о рангапе
```
**Сценарий: Выполнение миссии с модерацией**
```
Given миссия M3 требует загрузки файла и модерации
When пользователь отправляет отчёт
Then запись попадает в очередь модерации со статусом “На проверке”
When HR одобряет отчёт
Then пользователь получает награды (XP, мана, артефакт?) и эффекты на компетенции
And в журнале фиксируется операция
```
**Сценарий: Покупка в магазине**
```
Given у пользователя 150 маны и товар T ценой 100
When пользователь оформляет покупку T
Then списывается 100 маны
And создаётся заказ в статусе “Ожидает выдачи”
```
**Сценарий: Ветвление миссий**
```
Given ветка B: M1 -> M2 -> M3
When пользователь завершает M1
Then M2 становится доступной
```
---
## 11. Тестирование
- **Unit:** правила рангов, расчёт наград, транзакции маной.
- **Интеграционное:** миссии→журнал, модерация, покупки.
- **E2E:** ключевой пользовательский сценарий.
- **Безопасность:** статический анализ, базовые проверки ASVS L2.
- **Доступность:** линтеры a11y, ручные проверки по чек‑листу AA.
---
## 12. CI/CD и качество
- GitHub Actions: линт, тесты, сборка докер‑образов.
- Превью‑развёртывания для PR (frontend + backend).
- Теги релизов, CHANGELOG, семантическое версионирование.
---
## 13. Сид‑данные (минимум)
- 23 ранга (примерные названия), пороги XP и требования.
- 1 ветка на 35 миссий (микс категорий).
- 57 компетенций с базовыми уровнями.
- 23 артефакта разной редкости.
- 35 товаров магазина.
- 3 тестовых пользователя (Кандидат, HR, Организатор).
---
## 14. План работ (ориентир, 2 спринта по 2 недели)
**Спринт 1:** доменная модель, CRUD миссий/веток/артефактов, подача списка миссий, выполнение без модерации, журнал, магазин (чтение/покупка), сид‑данные, базовый UI.
**Спринт 2:** Rule Engine (3 условия ранга), модерация, топы, аналитика HR (минимум), онбординг/лор, шлифовка UX, а11y, подготовка к демо.
---
## 15. Риски
- Сложность правил рангов → изоляция в Rule Engine + тесты.
- Нагрузочные пики (рейтинги) → кэширование/агрегаты.
- Мошенничество (накрутка) → ratelimit, аудиты, дедупликация событий.
---
## 16. Артефакты, которые нужно предоставить
- Код (frontend/backend), Dockerкомпоз, сид‑данные.
- OpenAPI 3.1 спецификация.
- README: запуск, архитектура, ограничения, ссылки на стенд.
- Демо‑скрипт e2e и видео/скринкаст.
---
## 17. Глоссарий
Пользователь, HR, Организатор, Опыт (XP), Мана, Ранг, Артефакты, Компетенции, Миссии, Ветвление, Бортовой журнал.