Полный флоу-тест: от компании до чата
Сценарий полного ведения проекта, каким его видит клиент. Каждый этап — самостоятельный чек-лист: «Шаги» можно выполнять при регрессе буквально по пунктам, «Фактический результат» — состояние на прогоне 16.07.2026.
Роль по умолчанию: admin@seed.rms (этапы 1–6), logist@seed.rms (этап 7), manager@seed.rms (этапы 8–9).
1. Компании
Шаги:
- Меню «Компании» → «Добавить компанию».
- В поле «ИНН компании» ввести ИНН (например,
7707083893) → выбрать подсказку DaData. - Проверить автозаполнение: название, КПП, юр. название, ОГРН, ген. директор, должность, адрес.
- Дозаполнить email/телефон → «Сохранить».
- В карточке компании: вкладка «Реквизиты» → «Добавить счет» → ввести БИК (
044525225) → проверить автозаполнение банка → ввести 20-значный счёт → «Создать счет». - Кнопка «Печать карточки» → должен выгрузиться PDF.
Ожидаемо: компания создана, карточка заполнена, счёт помечен «Основной», PDF карточки содержит реквизиты и банковский счёт.
Фактически: ✅ работает целиком, включая DaData по ИНН и БИК. Замечания:
- Колонка «Тип» в списке компаний всегда пустая («—»), хотя тип (ПАО/ООО) в данных есть — он виден в PDF карточки.
- В PDF карточки тип и юр. название приводятся к «Пао», «Публичное акционерное общество "сбербанк россии"» — кривая нормализация регистра.
- Вторая страница PDF почти пустая (только подпись «Карточка сформирована автоматически»).
- Узкие колонки-лейблы в PDF рвут слова («Руководител / ь»).
2. Контакты
Шаги:
- В карточке компании → вкладка «Контакты» → «Новый контакт».
- Заполнить имя/фамилию/должность/телефон/email → «Создать и привязать».
- Проверить счётчик «Контакты» в карточке компании (должен стать 1).
- Раздел «Контакты» → найти контакт, открыть карточку → вкладки «Основная информация / Компании / Проекты».
Ожидаемо: контакт создан, привязан к компании, виден в общем списке с названием компании.
Фактически: ✅ работает. Кнопка «Привязать контакт» позволяет привязать существующий.
3. Проект
Шаги:
- «Проекты» → «Добавить проект».
- Заполнить: название, Компания (поиск по названию — клиент), Контактное лицо (список фильтруется по выбранной компании), Моя компания (юрлицо-исполнитель, определяет режим/ставку НДС), режим НДС «Наследовать», Локация (обязательное), статус, менеджер, Отдел (обязательное), плановый бюджет, даты.
- «Сохранить» → проект появляется в списке; открыть карточку.
Ожидаемо: карточка проекта с клиентом, контактом, локацией, датами, бюджетом; вкладки Задачи / Файлы / Оборудование / Логистика / Команда / Бюджет-Смета / Документы.
Фактически: ✅ работает. Замечания:
- «Локация» до первого сабмита не помечена как обязательная — узнаёшь только по красной подсветке после «Сохранить».
- Селект «Менеджер проекта» не фильтруется по вводу с клавиатуры (в отличие от компании/контакта/локации) — при 25+ сотрудниках неудобно.
- У свежесозданного проекта без задач в шапке сразу «Выполнено 8% задач» — число из ниоткуда.
- «Плановый бюджет» проекта не связан с «Плановым бюджетом» в настройках сметы (см. этап 5).
- В справочнике локаций есть дубли («Москва, ул. Тверская, 7» дважды).
4. Команда проекта
Шаги:
- Карточка проекта → вкладка «Команда» → «Добавить участника».
- Выбрать сотрудника, ставку ₽/час, отметить роли в проекте (Менеджер проекта / Логист / Инженер / Бухгалтер / Исполнитель / …) → «Сохранить».
- Повторить для всех членов команды.
- Проверить статусы участников.
Ожидаемо: участники добавлены с ролями, ждут подтверждения («Ожидает»).
Фактически: ✅ в целом работает, но диалог ведёт себя коварно:
- После «Сохранить» диалог не закрывается и не сбрасывает чекбоксы ролей — при добавлении следующего участника роли предыдущего остаются отмеченными. На прогоне инженер получил лишнюю роль «Логист» незаметно для оператора.
- Менеджер, назначенный «Ответственным» при создании проекта, автоматически в команду не добавляется — его нужно добавлять руками.
- Empty-state пустой команды: «По вашему запросу участники не найдены» вместо нейтрального «В команде пока нет участников».
- Повторное добавление того же сотрудника бэкенд обрабатывает как upsert (дублей не создаёт) — хорошо.
5. Бюджет и смета
Шаги:
- Вкладка «Бюджет/Смета» → «Добавить статью»: название, категория, плановая/фактическая сумма → «Сохранить».
- Проверить KPI (план/факт/отклонение/маржинальность), блок «Итоги» (базовая сумма, наценка, НДС, итоговая).
- Блок «Настройки сметы»: плановый бюджет, сумма сметы → «Сохранить».
- «Сгенерировать смету» → должен появиться документ.
Ожидаемо: статьи добавляются, итоги пересчитываются, настройки сохраняются, смета генерируется.
Фактически: ⚠️ два блокера контракта фронт↔бэк:
- «Добавить статью» всегда падает с 400
{"field":"name","message":"unknown field"}. Фронт (src/api/finance/index.ts) шлётname, бэкенд (createCostItemRequest) принимает толькоproject_id, category, planned_amount, actual_amount, notesсо строгой валидацией. Человекочитаемое название статьи бэкенд хранит вnotes. - «Настройки сметы» всегда падают с 400
{"field":"planned_budget","message":"unknown field"}. Бэкенд (updateSettingsRequestмодуля budget) ждётmarkup_percent, usn_percent, usn_display_mode, vat_display_mode, notes— фронт шлёт другую модель (плановый бюджет + сумма сметы).GET /projects/:id/budget/settingsпри этом отдаёт 404, т.е. фронт даже не читает актуальные настройки.
При статьях, созданных напрямую через API (POST /api/v1/finance/cost-items с notes), всё остальное работает: ✅ статьи отображаются (название берётся из notes), категории группируются, «Итоги» при режиме «НДС включён 22%» считают правильно: база 770 000,00 → НДС в т.ч. 138 852,46 (= 770 000 × 22/122), итог 770 000,00.
- «Сгенерировать смету» ✅ создаёт документ, но тост говорит просто «Смета создана» без ID/ссылки: бэкенд отвечает Go-полями
ID/ProjectID/..., а фронт ждётid— идентификатор теряется.
6. Документы
Подробный разбор — на отдельной странице Генерация документов.
Кратко: генерация сметы/счёта/акта/договора работает через POST /api/v1/projects/:id/documents/{estimate|invoice|act|contract}, файлы уходят в S3 и видны во вкладке «Файлы» проекта. Но:
- вкладка «Документы» проекта показывает захардкоженный мок («Счет #661, Иван Иванов…» ×9) — реальных документов там нет, и API списка документов по проекту не существует;
- PDF счёта нечитаем (битая кириллица);
- типа «доп. соглашение» нет;
- заголовок вкладки «Файлы» — «Список заявок» (копипаст).
7. Логистика (за логиста)
Шаги:
- За менеджера/админа: вкладка «Оборудование» проекта → «Добавить» → выбрать позицию из каталога (цена подтягивается) → при дефиците появляется «Создать заявку» → подтвердить.
- Проверить: вкладка «Логистика» проекта — заявка «На рассмотрении»; блок итогов оборудования — «НДС включён», сумма НДС.
- Перелогиниться логистом → «Логистика» → вкладка «Заявки от менеджеров» → открыть заявку.
- «Создать операции» → мастер: 1) выбор оборудования, 2) проверка наличия + тип обеспечения (Перемещение/Аренда/Покупка), 3) параметры маршрута, 4) preview → «Сохранить».
Ожидаемо: операция создаётся, заявка переходит «В работе», операция видна в «Списке операций».
Фактически: ⚠️ создание заявки и её видимость логисту — ✅; создать операцию не удалось ни одним способом:
- Перемещение: шаг 2 показывает «1 шт. Обеспечено» (источник — склад Бутово), но preview автоплана (
POST /equipment-requests/:id/auto-plan/preview) возвращаетavailable_main_warehouse_qty: 0, uncovered_qty: 1, has_errors: true— бэкенд считает только основной склад и не получает выбранные в мастере источники. «Сохранить» заблокирована навсегда. - Покупка: на шаге 3 «Откуда = Закупка» — это не локация из справочника, а валидатор фронта (
canSubmitRoutesвsrc/pages/logistics.vue) требует резолваfrom_location_id. «Далее» заблокирована навсегда. - Дашборд логистики (Всего операций / В пути / Доставлено) показывает нули, «Список операций» пуст, при этом в списке заявок есть сид-заявка со статусом «В пути» — операции в списки не попадают.
- В списках заявок часть проектов отображается как «Проект #3» вместо названия.
Дополнительно ✅: при создании заявки на оборудование автоматически создаётся задача «Новая заявка на оборудование» в канбане проекта — связка логистики и задач работает.
8. Задачи
Шаги:
- Вкладка «Задачи» проекта → «Добавить задачу»: заголовок, ответственный, дедлайн, описание (обязательно!) → «Сохранить».
- В карточке задачи: «Начать выполнение» → статус «В работе», пошёл учёт времени.
- «Завершить» → статус «Готово», зафиксировано время.
- Написать комментарий в чате задачи.
Ожидаемо: канбан Планируется / В работе / Завершено / Отложено, статусы двигаются, чат работает.
Фактически: ✅ работает. Замечания:
- «Описание» обязательно для сохранения, но не помечено — кнопка «Сохранить» просто серая без объяснений (валидация:
title + assignee + deadline + description). - Поле «Примечание», заполненное в форме создания, в карточке не появилось («Без примечаний»).
- Пока задача «В работе», «Учтено времени» показывает время старта (13:55:08), а не длительность; после завершения — корректную длительность (00:00:29).
- Список «Ответственный» не ограничен командой проекта — можно назначить любого сотрудника компании.
- Enter в чате не отправляет сообщение — только кнопка.
9. Чаты
Шаги:
- Плавающая кнопка «Открыть чаты» (внизу справа на любой странице).
- Вкладки: Личные / Задачи / Группы. Чат проекта создаётся автоматически при создании проекта.
- Отправить сообщение в чат проекта и в личный чат.
Ожидаемо/Фактически: ✅ работает: сообщения доставляются, диалог поднимается в списке, у чатов задач отдельная вкладка. Раздел «Чаты» в главном меню отсутствует (страница /chats существует) — вход только через плавающую кнопку.