mirror of
https://github.com/TronoSfera/Law.git
synced 2026-05-18 18:13:46 +03:00
470 lines
27 KiB
Markdown
470 lines
27 KiB
Markdown
# Матрица User Flow для Тестирования Платформы (CLIENT / LAWYER / ADMIN)
|
||
|
||
## Назначение
|
||
Этот файл описывает полный набор пользовательских сценариев для тестирования платформы через веб-интерфейс.
|
||
Используется как:
|
||
1. чеклист ручной приемки,
|
||
2. источник для e2e/интеграционных сценариев,
|
||
3. карта corner cases по ролям.
|
||
|
||
## Общие правила проверки
|
||
1. Все ключевые сценарии проверять через UI (не только по API).
|
||
2. Для каждого сценария проверять:
|
||
- видимость данных по роли,
|
||
- корректность уведомлений/непрочитанного,
|
||
- записи в истории статусов/чата,
|
||
- отсутствие утечки служебной/финансовой информации клиенту.
|
||
3. Для статусов:
|
||
- `важная дата` видна клиенту, юристу и администратору,
|
||
- для юриста/администратора это дедлайн текущего статуса,
|
||
- смена статуса логируется вместе с `важной датой` и комментарием.
|
||
4. Для файлов:
|
||
- проверять и успешный сценарий, и ошибки (размер, MIME, предпросмотр, поврежденный файл).
|
||
|
||
## Тестовые роли и данные (рекомендуемые)
|
||
1. `ADMIN`: `admin@example.com` / `admin123`
|
||
2. `LAWYER #1`: основной юрист (назначенные заявки)
|
||
3. `LAWYER #2`: другой юрист (для проверок запрета доступа к чужим данным)
|
||
4. `CLIENT #1`: новый клиент (новый номер телефона)
|
||
5. `CLIENT #2`: второй клиент (для проверки изоляции JWT/заявок)
|
||
|
||
## CLIENT (Пользователь / Заказчик)
|
||
|
||
### C01. Просмотр лендинга и создание заявки (happy path)
|
||
1. Открыть лендинг.
|
||
2. Открыть модальную форму создания заявки.
|
||
3. Заполнить:
|
||
- ФИО,
|
||
- телефон,
|
||
- тему,
|
||
- описание.
|
||
4. Пройти OTP-подтверждение телефона.
|
||
5. Создать заявку.
|
||
6. Проверить:
|
||
- выдан уникальный номер заявки,
|
||
- создается запись клиента (`client`) и связь с заявкой,
|
||
- клиент не видит служебные поля (ставка, стоимость, внутренние ID, ответственные ID, финансовые поля).
|
||
|
||
### C02. Повторный вход в клиентский контур по номеру/OTP
|
||
1. На лендинге нажать кнопку перехода к работе с заявкой.
|
||
2. Если нет JWT (новое устройство/браузер), пройти OTP.
|
||
3. Открыть страницу работы с заявкой.
|
||
4. Проверить:
|
||
- доступ только к своим заявкам,
|
||
- после авторизации создается 7-дневный JWT/сессия устройства,
|
||
- повторный вход на том же устройстве не требует OTP до истечения срока.
|
||
|
||
### C03. Переключение между заявками клиента
|
||
1. Создать 2+ заявки на один телефон.
|
||
2. Открыть клиентский кабинет.
|
||
3. Переключаться между заявками в UI.
|
||
4. Проверить:
|
||
- отображаются только заявки этого клиента,
|
||
- корректно обновляются статус, чат, файлы, важная дата, уведомления,
|
||
- переход не ломает состояние JWT/авторизации.
|
||
|
||
### C04. Просмотр карточки заявки (видимость данных)
|
||
1. Открыть заявку в клиентском кабинете.
|
||
2. Проверить, что видны:
|
||
- номер заявки,
|
||
- тема,
|
||
- статус,
|
||
- важная дата (дедлайн),
|
||
- история/маршрут статусов,
|
||
- чат,
|
||
- файлы,
|
||
- запросы дополнительных данных.
|
||
3. Проверить, что НЕ видны:
|
||
- ставка юриста,
|
||
- внутренние финансовые поля,
|
||
- служебные ID,
|
||
- служебные комментарии/системная информация, не предназначенная клиенту.
|
||
|
||
### C05. Чат клиент <-> юрист (happy path)
|
||
1. Клиент отправляет сообщение юристу.
|
||
2. Юрист отвечает.
|
||
3. Клиент обновляет/переоткрывает заявку.
|
||
4. Проверить:
|
||
- сообщения отображаются в стиле чата,
|
||
- метки времени/даты корректны,
|
||
- непрочитанные индикаторы появляются и сбрасываются после открытия заявки,
|
||
- история сообщений сохраняется.
|
||
|
||
### C06. Загрузка файлов клиентом (happy path)
|
||
1. В карточке заявки/чате прикрепить файл.
|
||
2. Отправить сообщение с файлом.
|
||
3. Проверить:
|
||
- файл загружается,
|
||
- появляется в чате и во вкладке файлов,
|
||
- доступен предпросмотр/скачивание,
|
||
- размер учитывается в лимитах заявки.
|
||
|
||
### C07. Запрос дополнительных данных от юриста (частичное заполнение)
|
||
1. Юрист создает `Запрос` с несколькими полями.
|
||
2. Клиент открывает сообщение `Запрос`.
|
||
3. Заполняет часть полей, сохраняет.
|
||
4. Повторно открывает запрос и дозаполняет остальное.
|
||
5. Проверить:
|
||
- заполненные поля отмечаются и зачеркиваются в чате,
|
||
- незаполненные остаются активными,
|
||
- после полного заполнения запрос сворачивается и меняет цвет/состояние.
|
||
|
||
### C08. `file`-поле в запросе дополнительных данных
|
||
1. Юрист создает запрос с полем типа `file`.
|
||
2. Клиент загружает файл в это поле.
|
||
3. Проверить:
|
||
- файл реально загружается как attachment,
|
||
- поле считается заполненным,
|
||
- файл доступен в файлах заявки и в контексте запроса,
|
||
- юрист видит, что запрос выполнен.
|
||
|
||
### C09. Оповещения клиента
|
||
1. Юрист меняет статус.
|
||
2. Юрист отправляет сообщение.
|
||
3. Юрист загружает файл.
|
||
4. Клиент открывает кабинет.
|
||
5. Проверить:
|
||
- есть визуальные индикаторы новых событий,
|
||
- открытие заявки сбрасывает непрочитанное состояние,
|
||
- важная дата обновляется при смене статуса.
|
||
|
||
### C10. Терминальный статус (завершение заявки)
|
||
1. Юрист/админ переводит заявку в терминальный статус.
|
||
2. Клиент открывает заявку.
|
||
3. Проверить:
|
||
- терминальный статус отображается корректно,
|
||
- маршрут/история статусов содержит финальную запись,
|
||
- важная дата по финальному статусу отображается.
|
||
|
||
### C11. Ошибка загрузки файла (корнер-кейсы)
|
||
Проверить UI-реакцию и корректный текст ошибки:
|
||
1. Слишком большой файл (>25MB).
|
||
2. Превышение суммарного лимита по заявке (>250MB).
|
||
3. Обрыв сети/ошибка presigned upload.
|
||
4. Неподдерживаемый или некорректный MIME.
|
||
5. Проверить:
|
||
- пользователь видит понятную ошибку,
|
||
- UI не зависает,
|
||
- частично неуспешная отправка не ломает чат,
|
||
- дубликаты/битые attachments не создаются.
|
||
|
||
### C12. Слишком длинное сообщение / некорректное сообщение
|
||
1. Отправить очень длинный текст (выше backend-лимита, если установлен).
|
||
2. Отправить пустое сообщение.
|
||
3. Отправить сообщение из пробелов.
|
||
4. Проверить:
|
||
- понятная ошибка в UI,
|
||
- ничего лишнего в чат не попадает,
|
||
- состояние формы остается консистентным.
|
||
|
||
### C13. Предпросмотр файлов (валидный / невалидный)
|
||
1. Валидный `pdf`, `jpg`, `mp4`, `txt`.
|
||
2. Невалидный PDF (файл с MIME `application/pdf`, но без `%PDF-`).
|
||
3. `.txt` с кривым MIME (`application/pdf`).
|
||
4. Проверить:
|
||
- валидные файлы открываются,
|
||
- невалидный PDF дает fallback (понятное сообщение / текстовый предпросмотр),
|
||
- `.txt` открывается текстом даже при кривом MIME.
|
||
|
||
### C14. Безопасность доступа клиента (изоляция)
|
||
1. Открыть чужой номер заявки.
|
||
2. Использовать JWT клиента #1 для заявки клиента #2.
|
||
3. Попробовать открыть прямые URL файлов чужой заявки.
|
||
4. Проверить:
|
||
- доступ запрещен,
|
||
- нет утечки метаданных.
|
||
|
||
## LAWYER (Юрист)
|
||
|
||
### L01. Вход и видимость заявок
|
||
1. Войти как юрист.
|
||
2. Открыть список заявок.
|
||
3. Проверить видимость:
|
||
- свои заявки,
|
||
- неназначенные заявки,
|
||
- отсутствие чужих назначенных заявок.
|
||
|
||
### L02. Claim неназначенной заявки
|
||
1. В списке или в канбане выбрать неназначенную заявку.
|
||
2. Нажать `Взять в работу`.
|
||
3. Проверить:
|
||
- заявка назначается текущему юристу,
|
||
- в канбане/таблице обновляется исполнитель,
|
||
- claim логируется (audit),
|
||
- другой юрист больше не может ее claim'ить.
|
||
|
||
### L03. Канбан: просмотр и работа с карточками
|
||
1. Открыть `Канбан`.
|
||
2. Проверить:
|
||
- группировка по группам статусов,
|
||
- карточки содержат ключевые поля (номер, клиент, тема, дедлайн/важная дата, индикаторы новых сообщений/файлов),
|
||
- горизонтальная прокрутка внутри блока, без растягивания страницы.
|
||
|
||
### L04. Канбан: drag&drop смена статуса (однозначная группа)
|
||
1. Перетащить карточку в колонку, где целевая группа сопоставляется с одним статусом.
|
||
2. Проверить:
|
||
- статус меняется,
|
||
- важная дата проставляется по умолчанию (`+3 дня`), если не задана явно,
|
||
- изменение отображается в карточке и в истории статусов.
|
||
|
||
### L05. Канбан: drag&drop в группу с несколькими статусами
|
||
1. Перетащить карточку в колонку, где в группе >1 статуса.
|
||
2. Проверить:
|
||
- открывается карточка заявки / модалка смены статуса,
|
||
- доступны только статусы соответствующей группы,
|
||
- можно выбрать конкретный статус и важную дату.
|
||
|
||
### L06. Смена статуса из карточки заявки (happy path)
|
||
1. Открыть карточку заявки.
|
||
2. Нажать кнопку смены статуса.
|
||
3. Выбрать новый статус, указать важную дату, добавить комментарий и файл.
|
||
4. Отправить.
|
||
5. Проверить:
|
||
- статус заявки обновился,
|
||
- важная дата изменилась,
|
||
- запись появилась в истории статусов,
|
||
- комментарий/файл попали в чат.
|
||
|
||
### L07. Терминальный статус (закрытие заявки юристом)
|
||
1. Юрист переводит заявку в терминальный статус.
|
||
2. Проверить:
|
||
- статус обновлен,
|
||
- заявка считается завершенной в dashboard/метриках,
|
||
- история статусов содержит терминальный этап.
|
||
|
||
### L08. История статусов в модалке смены статуса
|
||
1. Открыть модалку смены статуса для заявки с несколькими сменами статусов.
|
||
2. Проверить:
|
||
- список прокручивается внутри фиксированного блока,
|
||
- новые записи сверху, старые снизу,
|
||
- видны дата назначения, важная дата, длительность нахождения, комментарий (если есть).
|
||
|
||
### L09. Важные даты (дедлайн) у юриста
|
||
1. Сменить статус без указания даты.
|
||
2. Проверить автоподстановку `+3 дня`.
|
||
3. Сменить статус с ручной датой.
|
||
4. Проверить:
|
||
- дедлайн отображается в карточке заявки,
|
||
- дедлайн отображается в канбане,
|
||
- цвет дедлайна в канбане соответствует сроку.
|
||
|
||
### L10. Чат и файлы юриста
|
||
1. Отправка сообщений клиенту.
|
||
2. Отправка файлов.
|
||
3. Отправка файла+сообщения.
|
||
4. Drag&drop файлов в чат.
|
||
5. Проверить:
|
||
- сообщения/файлы видит клиент,
|
||
- непрочитанные индикаторы работают,
|
||
- предпросмотр/скачивание работают.
|
||
|
||
### L11. Запрос дополнительных данных (шаблоны)
|
||
1. Открыть модалку `Запросить`.
|
||
2. Выбрать существующий шаблон.
|
||
3. Проверить автозагрузку полей шаблона в таблицу (без дубликатов).
|
||
4. Добавить поле из справочника.
|
||
5. Создать новое поле через тот же инпут.
|
||
6. Сохранить шаблон:
|
||
- новый,
|
||
- перезапись своего.
|
||
7. Проверить:
|
||
- чужой шаблон нельзя перезаписать (UI + backend),
|
||
- badge/tooltip соответствуют статусу шаблона.
|
||
|
||
### L12. Ограничения редактирования заполненных клиентом доп.данных
|
||
1. После заполнения клиентом открыть запрос в чате.
|
||
2. Проверить, что юрист НЕ может:
|
||
- менять название поля,
|
||
- тип,
|
||
- порядок,
|
||
- удалять заполненное поле.
|
||
3. Проверить backend-защиту (через UI негативный сценарий / при попытке сохранить).
|
||
|
||
### L13. Ограничения по правам (чужая заявка)
|
||
1. Попробовать открыть/изменить чужую назначенную заявку.
|
||
2. Попробовать сменить статус чужой заявки.
|
||
3. Попробовать загрузить файл/написать сообщение в чужую заявку.
|
||
4. Ожидание: запрет доступа/операции.
|
||
|
||
### L14. Финансовые ограничения
|
||
1. Юрист не должен иметь возможность менять запрещенные финансовые поля через CRUD заявки.
|
||
2. Юрист не может подтверждать оплату счета (`PAID`).
|
||
3. Проверить UI/API сообщения об ошибке.
|
||
|
||
## ADMIN (Администратор)
|
||
|
||
### A01. Вход и доступ ко всем разделам
|
||
1. Войти как администратор.
|
||
2. Проверить доступ:
|
||
- Обзор,
|
||
- Канбан,
|
||
- Заявки,
|
||
- Счета,
|
||
- Справочники,
|
||
- `availableTables` по прямой ссылке.
|
||
|
||
### A02. Справочник пользователей (CRUD)
|
||
1. Создать юриста:
|
||
- имя, email, пароль,
|
||
- роль,
|
||
- основная тема,
|
||
- дополнительные темы,
|
||
- ставка по умолчанию,
|
||
- процент,
|
||
- телефон,
|
||
- аватар.
|
||
2. Отредактировать пользователя.
|
||
3. Деактивировать/активировать.
|
||
4. Проверить:
|
||
- данные сохраняются,
|
||
- аватар/инициалы отображаются корректно,
|
||
- роль и RBAC применяются.
|
||
|
||
### A03. Справочники статусов и групп статусов
|
||
1. Создать/редактировать группы статусов.
|
||
2. Создать/редактировать статусы:
|
||
- группа,
|
||
- терминальность,
|
||
- kind (обычный / счет / оплачено).
|
||
3. Проверить:
|
||
- канбан строится по группам,
|
||
- статусы появляются в свободном выборе смены статуса.
|
||
|
||
### A04. Таблицы в справочниках и `availableTables`
|
||
1. Открыть `/admin.html?section=availableTables`.
|
||
2. Включать/выключать таблицы.
|
||
3. Проверить:
|
||
- неактивные таблицы исчезают из списка справочников,
|
||
- активные появляются без фронтовой доработки (универсальное отображение),
|
||
- `clients` видны в справочниках, если таблица активна.
|
||
|
||
### A05. Заявки: полный CRUD и ручное управление
|
||
1. Создать заявку вручную.
|
||
2. Привязать существующего клиента.
|
||
3. Создать нового клиента через форму заявки (если нет в списке).
|
||
4. Изменить тему/описание/исполнителя/стоимость.
|
||
5. Проверить:
|
||
- `client_id` корректно проставляется,
|
||
- стоимость заявки видна админу/юристу, скрыта клиенту.
|
||
|
||
### A06. Смена статуса заявки (с важной датой)
|
||
1. Открыть карточку заявки.
|
||
2. Через модалку смены статуса:
|
||
- выбрать любой статус,
|
||
- указать важную дату,
|
||
- добавить комментарий/файл.
|
||
3. Проверить:
|
||
- изменения видны клиенту/юристу/админу,
|
||
- история статусов содержит важную дату и комментарий.
|
||
|
||
### A07. Администратор может корректировать заполненные доп.данные
|
||
1. После заполнения клиентом доп.данных открыть запрос.
|
||
2. Удалить/изменить заполненную строку (если требуется).
|
||
3. Проверить:
|
||
- операция разрешена админу,
|
||
- изменения консистентны.
|
||
|
||
### A08. Счета и оплаты (happy path)
|
||
1. Создать счет вручную.
|
||
2. Проверить формирование PDF.
|
||
3. Перевести в `Оплачен`.
|
||
4. Проверить:
|
||
- дата оплаты проставляется,
|
||
- данные видны в списке счетов,
|
||
- юрист видит свои счета, админ — все.
|
||
|
||
### A09. Billing через статусы
|
||
1. Перевести заявку в billing-статус (если используется `INVOICE` / `PAID`).
|
||
2. Проверить:
|
||
- срабатывает логика счетов/оплаты,
|
||
- сумма/зарплата отражается в дашборде.
|
||
|
||
### A10. Dashboard администратора
|
||
Проверить плитки и метрики:
|
||
1. Новые / в работе / и др. статусы.
|
||
2. Выручка за месяц.
|
||
3. Расходы (зарплата юристов) за месяц.
|
||
4. Карточки загрузки юристов:
|
||
- активные,
|
||
- новые,
|
||
- закрыто,
|
||
- сумма,
|
||
- зарплата.
|
||
5. Модалка статистики юриста:
|
||
- фиксированные хедеры,
|
||
- таблица активных заявок,
|
||
- сумматоры внизу,
|
||
- корректные переходы в карточки заявок.
|
||
|
||
### A11. Безопасность / аудит / доступы
|
||
1. Проверка доступа к файлам S3 по ролям.
|
||
2. Предпросмотр PDF/файлов через iframe/same-origin.
|
||
3. Проверка аудита действий (security audit / audit log).
|
||
4. Проверка, что ПДн и финансовые данные не уходят в публичный контур.
|
||
|
||
### A12. Corner cases администратора
|
||
1. Ошибки сохранения (невалидные поля, несуществующие ссылки).
|
||
2. Одновременное редактирование (refresh после сохранения).
|
||
3. Попытка удалить сущность, на которую есть ссылки.
|
||
4. Некорректные даты/числа в универсальных формах.
|
||
5. Проверить понятные ошибки и отсутствие “битого” состояния UI.
|
||
|
||
## Межролевые интеграционные сценарии (сквозные)
|
||
|
||
### X01. Полный цикл заявки (client -> lawyer -> terminal)
|
||
1. Клиент создает заявку.
|
||
2. Юрист берет в работу.
|
||
3. Юрист ведет чат, запрашивает данные/файлы.
|
||
4. Клиент заполняет запрос.
|
||
5. Юрист меняет статусы, выставляет важные даты.
|
||
6. Юрист завершает заявку терминальным статусом.
|
||
7. Проверить весь таймлайн и видимость по ролям.
|
||
|
||
### X02. Цикл со счетом и оплатой
|
||
1. Клиент создает заявку.
|
||
2. Юрист/админ переводит в статус выставления счета.
|
||
3. Админ формирует/подтверждает оплату счета.
|
||
4. Проверить:
|
||
- счет виден в заявке и в списке счетов,
|
||
- статус оплаты влияет на финансовые метрики,
|
||
- зарплата юриста считается после `Оплачено`.
|
||
|
||
### X03. Непрочитанные события и уведомления
|
||
1. Создать набор событий: статус, сообщение, файл.
|
||
2. Проверить отображение индикаторов:
|
||
- в списках,
|
||
- в канбане,
|
||
- в карточке заявки.
|
||
3. Проверить сброс после открытия заявки соответствующей ролью.
|
||
|
||
### X04. Ограничения прав и изоляция
|
||
1. CLIENT не видит служебные/финансовые поля.
|
||
2. LAWYER не видит/не меняет чужие заявки.
|
||
3. LAWYER не подтверждает оплату.
|
||
4. LAWYER не редактирует заполненные клиентом доп.данные.
|
||
5. ADMIN имеет доступ ко всем данным и операциям.
|
||
|
||
## Corner Cases (общий список для обязательного покрытия)
|
||
1. Пустые поля / пробельные значения.
|
||
2. Слишком длинные тексты сообщений / комментариев.
|
||
3. Файлы:
|
||
- >25MB,
|
||
- превышение 250MB на заявку,
|
||
- невалидный PDF,
|
||
- `.txt` с кривым MIME.
|
||
4. Повторные клики / double-submit.
|
||
5. Потеря сети во время upload/send/status-change.
|
||
6. Истекший JWT / отсутствие OTP.
|
||
7. Конфликт назначения заявки (claim race).
|
||
8. Удаление/изменение связанной сущности (клиент/статус/пользователь).
|
||
9. Переключение между заявками/разделами при открытых модалках.
|
||
|
||
## Рекомендация по автоматизации (e2e backlog)
|
||
Приоритетно выделить в отдельные Playwright-сценарии:
|
||
1. `public_client_notifications_flow`
|
||
2. `lawyer_status_change_modal_flow` (важная дата + комментарий + файл)
|
||
3. `kanban_multi_status_group_flow` (drag&drop -> выбор статуса)
|
||
4. `admin_finance_billing_dashboard_flow`
|
||
5. `client_file_upload_errors_flow`
|
||
6. `rbac_negative_flows` (client/lawyer/admin)
|
||
|