- Дашборд
- Для клиентов
- с заказанными или взятыми услугами
- Доступна кнопка создания нового заказа
- Для исполнителя
- Список активных, завершенных и отмененных задач
- Для менеджера
- Для отдела расходников
- Для клиентов
- Пользователь
- Виды пользователей: менеджер, сотрудник отдела расходников, клиент, исполнитель
- Заказ
- Форма создания
- Типы услуг заранее предопределены админами
- Срок выполнения заказа
- Автоматическая валидация заказа (?или запрос проверки менеджером в крайнем случае)
- Процесс работы над заказом
- Отметиться
- Отправка запроса на получение расходников в спец отдел
- Ожидание получения расходников
- Работа над заказом
- Составить бумажный отчет
- Уведомить клиента о выполнении, запросить подтверждение выполнения в виде подписи на отчете
- Отправить фотографию отчета с подписью клиента
- Перевести заказ в один из финальных статусов
- Отмена или провал заказа
- Клиенту предлагается создать копию заказа (новый заказ на другую дату). Из системы матчинга исключается прошлый исполнитель
- Заказ отправляется в отдел оценки качества работы (менеджерам) - в виде общего уведомления?
- Форма создания
- Платежная система
- Задача оплачивается, даже в случае отмены или провала исполнителем
- Скидочная система
- Зависит как от разовой суммы, так и от накопившейся
- Формула расчета стоимости (константная на данном этапе)
- Проверка счета (в тч на наличие средств)
- Оплата заказов
- Каждое воскресенье со счета клиента списывается сумма затрат на запрошенные задачи
- Формируется инвойс и отправляется клиенту
- Клиент оплачивает инвойс (любым выбранным им способом)
- Компания получает деньги на счет
- Клиент уведомляется об успешной оплате затрат
- Получение оплаты за заказ (для исполнителя)
- Производится раз в месяц (последний день месяца)
- Штрафы автоматически вычитаются
- Формируется инвойс
- Компания оплачивает инвойс
- Исполнитель получает уведомление об успешной/неуспешной оплате инвойса
- Заказ выполнен - 60% от суммы заказа
- Заказ отменен - 0%
- Заказ провален - штраф в 40 условных кото-единиц
- Производится раз в месяц (последний день месяца)
- Страница с начислениями и списаниями денег
- Для клиента
- Ожидаемая сумма списания в конце недели
- Прошлые инвойсы и их статусы
- Для исполнителя
- Заработанная (за текущий период или месяц) сумма
- Прошлые инвойсы и их статусы
- Штрафы и их статусы
- Для клиента
- Произвольное начисление денег исполнителю от менеджера
- Процесс тот же (через инвойсы), только триггерится вручную
- Нужна форма для менеджера по составлению инвойса (с обязательным указанием причины)
- Матчинг
- На данном этапе - случайный подбор исполнителя
- После успешного создания заказа система сама выбирает исполнителя
- Исполнителю отправляется уведомления с деталями заказа
- Регистрация исполнителей
- Заявка
- Необходимая информация должна включать номер счета (и желательно его проверку, например в виде списания и возврата минимальной условной единицы)
- Менеджер уведомляется о новой заявке
- Менеджер рассматривает заявку
- Менеджер отправляет кандидату в исполнители заранее составленный набор тестов
- Кандидат выполняет тесты или срок выполнения истекает
- Менеджер оценивает работу кандидата
- Менеджер составляет отчет по кандидату
- Менеджер оповещает кандидата о решении
- Менеджер добавляет информацию о новом исполнителе
- Характеристики кота декодируются в строку из 20 символов (ВАЖНО: сейчас проверка на уникальность не предусмотрена, поэтому это поле не может выступать как первичный ключ)
- Кандидат добавляется в пул исполнителей или в список непрошедших (для отсева или ограничения повторной подачи заявки)
- Ожидается 1000 заявок в день, нужно продумать автоматическую фильтрацию или невозможность отправить невалидную/нерелевантную заявку
- Ожидается, что будет не более 15 менеджеров
- Предусмотреть что-то типа
rate limiting
для обхода ddos атаки
- Заявка
- Админка (все для менеджеров)
- Тест
- Дашборд с заявками
- Форма рассмотрения заявки
- Проверка заказа и связь с клиентом
- Заполнение формы с результатами оценки (эти формы должны быть доступны компании, те сотрудникам не менеджерам, либо менеджеры должны иметь возможность выгрузить их)
- Результаты оценки заказа отправляются как клиенту, так и исполнителю
- Отдел расходников
- см 2.2
- ВАЖНО - Отдел расходников не контролируется, он собирает набор для заказа как угодно и имеет неограниченный доступ к кнопке выдано (НУЖНО ДОРАБОТАТЬ)
- Заказать печенье с предсказанием (ВАЖНО - сейчас не оптимально, заказывается печенье в единственном количестве, а не партией)
- 10-минутное ожидание печенья
- Добавление печенья в набор расходников
- Исполнитель уведомляется о готовности набора расходников и приглашается для того, чтобы забрать набор
- Система ставок (для менеджеров)
- Опциональна
- Менеджер делает ставку на выполнение заказа (ставка + условие)
- Нет контроля за выплатами результатов ставок
- Если все ставки не зашли, банк уходит разработчикам
- Система в "серой" зоне и никак не должна фигурировать в проекте (в плане выплат, расчеты производит система)
- Финансовые операции в "серой" зоне, но результаты в системе (условные единицы либо отсутствуют целиком, либо имеются в виде долей/процентов)
- Нотификации
- Практически каждое действие в системе должно иметь уведомление
- Каждое действие с заказом должно иметь уведомление клиенту, исполнителю и менеджерам
- Проект - Монолит
- потому что в проектах по-хорошему не работал с микросервисами и коммуникацией между ними. Монолит больше всего знаком
- проект небольшой, стоит начать с монолита, но по возможности строить архитектуру с учетом возможного перехода на сервисы/микс (низкая связность, атомарность)
- Регистрация
- Дашборд
- Единая точка входа в систему, в эндпойнте будет проверка на тип пользователя и редирект на соответствующий эндпойнт
- Компонент, сильно зависимый от других компонентов
- В основном для чтения
- Включает блок основной информации (различается для типов пользователей)
- Глобальная шапка-виджеты (баланс, последние инвойсы), создание заказа, настройки, перейти к инвойсам и тп
- Пользователь
- Состоит из общей модели (или абстрактной модели), от которой наследуются остальные
- Заказы
- Состоит из нескольких абстрактных моделей и модели, которая наследуется от них. Соответствующая логика в каждой абстрактной модели (изменение статуса, платежная логика и тп)
- По началу имеют высокую связность с другими компонентами на уровне БД
- Платежная система
- Необходимы проверки и валидации до создания/оплаты заказа
- Также стоит проверять корректность введенных пользователями счетов
- Никак не взаимодействует с системой ставок
- Контроль за работой отдела расходников
- Проверка наличия средств для оплаты заказа
- Невозможность задать/увидеть сумму заказа до его создания/взятия в работу
- Регистрация сотрудников отдела расходников, новых менеджеров
- Будет ли форма взятия в работу заказа или подробная страница заказа для исполнителя?
- На данном этапе исполнитель автоматически назначается
- Будет ли у исполнителя возможность вручную выбрать заказ? Или подтвердить решение системы матчинга?
- Блокировать ли возможность взять новый заказ при наличии неоплаченных штрафов? Или при отрицательном балансе?
- Штрафы вычитаются при любом пополнении счета исполнителя? В том числе из инвойса от менеджера?
- Не проще ли отправлять ссылку на страницу заказа вместо копирования этой информации в нотификацию?
- Будет ли рейтинг выполнения заказов (в тч в зависимости от типа заказа)?
- Нужно ли составить пул тестов, чтобы они не повторялись и не хакались при повторной подаче заявки (если такая возможна)?
- Можно ли повторно подать заявку после отказа? Если да, то спустя какое период?
- Менеджеры сами выбирают заказ для проверки или им случайно предлагается заказ?
- Всегда ли доступна возможность связаться с клиентом при проверке заказа менеджером?
- Как должно работать перечисление банка ставок разработчикам?
- Есть ли ограничение на число активных задач исполнителя?
- часть требований дана только для лучшего понимания того, что происходит в системе (например [US-040]). Если кажется, что требование непонятно к чему и куда, стоит его выписать отдельно и пояснить, почему оно кажется лишним.
- Планируемая нагрузка небольшая, не нужны слишком тяжеловесные решения и инструменты
- Части системы должны быть атомарны, чтобы изменения (или ошибки) в одной части не вели по цепочке к изменениям в другой. Это нужно для минимизации Time-to-Market
- Также этот пункт важен, так как бизнес хочет быстро и надежно проверять новые гипотезы
- Не нужно углубляться в детали на этом этапе, достаточно общих сценариев и кейсов
- Механизма регистрации клиентов (пока) нет, для котов-тестировщиков видимо заводятся аккаунты админами