Модуль для длинных работ с этапами: ремонт квартиры, монтаж подстанции, юридическое оформление участка. Главное отличие от сделки — у проекта есть этапы и подрядчики, а не стадии воронки.
Структура
Проект
├─ Этап
│ ├─ Подэтап
│ │ ├─ Задача
│ │ └─ Задача (с признаком «веха» — ⭐)
│ ├─ Подэтап
│ └─ Задача (прямо на этапе)
└─ Этап
Этап — настоящая запись, а задача ссылается на неё ключом. Глубина ровно один уровень: этап → подэтап. Глубже вкладывать нельзя, как у подзадач и подпроектов.
Раньше этап был просто текстом в задаче, и два экрана расходились: список этапов читал таблицу, а дерево задач группировало по тексту. Поэтому созданный вручную этап не появлялся в дереве, пока в него не положат задачу, а импортированный не появлялся в списке. Сейчас источник один.
Что с этим можно делать
На вкладке «Задачи», блок «Этапы проекта»:
- «Добавить» — завести этап. Он сразу виден в дереве ниже, даже пустой: «0 из 0».
- карандаш — переименовать. Задачи этапа переедут вместе с ним.
- корзина — удалить. Задачи останутся, но без этапа. Подэтапы вернутся на верхний уровень.
- ⠿ — перетащить. Этапы верхнего уровня меняются местами между собой, подэтапы — внутри своего этапа.
- галочки + «Свернуть в один этап» — выбрать несколько этапов и убрать их под один новый. Задачи при этом не двигаются вовсе.
- кнопка разворота на свёрнутом этапе — поднять подэтапы обратно. Порядок восстанавливается.
Этап задачи выбирается в её карточке, полем «Этап». Если этапов у проекта ещё нет, поле подскажет, где их завести.
Зачем сворачивать
Объект закрыли, через время актуализировали, добавилась новая работа. Прежние этапы (1, 2, 3, 4) убираются под один — «1-я очередь», — а рядом заводится новый этап со своими подэтапами и задачами. Ничего не теряется: названия прежних этапов остаются подэтапами, и развернуть обратно можно одним действием.
У закрытого объекта этапы правятся. Это отличается от сметы и факта, которые у закрытого объекта менять нельзя: там числа, о которых уже отчитались и по которым посчитана премия, а этапы — разбивка работ, и ни закрытие, ни премиальный фонд из них ничего не берут. Актуализация закрытого объекта и есть тот случай, ради которого сворачивание сделано.
У проекта с утверждённым паспортом этапы паспорта — базовая линия. Их переименование, удаление и сворачивание оформляются заявкой на изменение базовой линии, вкладка «Паспорт». А свой этап добавить можно: он заводится рядом с паспортными и базовую линию не трогает. Черновик паспорта не мешает ничему.
Создание проекта
Sidebar → Проекты → «Создать проект».
Минимум: название, клиент (опционально), менеджер (опционально). Дальше — описание, бюджет, даты, со-исполнители (co_assignees: string[]).
Дашборд проекта (overview)
Открой проект → таб «Обзор» (default). Там:
- AI Insights (gradient-карточка сверху) — резюме / риски / рекомендации, обновляется при изменении задач
- KPI: % выполнения, дни до дедлайна, бюджет, число задач
- Риски — задачи без исполнителя, просроченные milestones
- Нагрузка — диаграмма распределения задач по исполнителям
- Вехи — список milestones с прогрессом
- Прогресс по этапам — то же дерево, что на вкладке «Задачи»: этап, под ним подэтапы с отступом. Числа считаются иначе, чем в дереве: там счётчик показывает строки списка, а здесь — работу, поэтому подзадачи идут к этапу своей задачи, а у этапа-зонтика учтены задачи его подэтапов.
URL state: ?tab=overview сохраняет выбранный таб (для bookmarks).
Задачи
Создание
- В DealSheet → таб «Задачи»
- В карточке проекта → таб «Задачи» (дерево по этапам и подэтапам)
- На странице «Задачи» в Sidebar (общий список всех задач компании)
Поля задачи:
- title, description, status (todo / in_progress / completed / hold / cancelled), priority (low / medium / high / urgent)
- assigned_to + co_assignees
- start_date, due_date (с временем опционально)
- is_milestone (показывается со звёздочкой ⭐)
- этап проекта (
stage_id; пусто = «Без этапа»). Название и порядок этапа у задачи подставляет система — присылать их нельзя. «Без этапа» — не этап, а группа задач без него: переименовать её нельзя, а разложить задачи по этапам можно кнопкой «Перенести в этап» в её заголовке - dependencies (массив task_id, для Gantt)
- progress (0–100%)
- comment (свободный текст из не-маппленных колонок CSV-импорта)
Гибридный TaskDialog
Один диалог в трёх режимах:
- View — просто просмотр
- Inline-edit — клик на поле → редактируется (popover для дат, popover для assignee)
- Form — кнопка «Редактировать» → полная форма
Статусы проекта
В отличие от сделок, у проекта всего четыре статуса: запланирован, в работе, завершён, на паузе. Свои стадии здесь не заводятся.
Если нужны свои стадии для длинных работ — это этапы внутри проекта, а не статус проекта.
Диаграмма Ганта
Открой проект → таб «Диаграмма». Используется gantt-task-react с кастомизированной шапкой (3 яруса: год / месяц / дни недели).
- Drag-сдвиг задачи влево/вправо (изменение start_date / due_date)
- Drag-resize для изменения длительности
- Зависимости — линии между связанными задачами
- Week mode — для длинных проектов (year/month/week toggle)
- Scrollbar всегда видим (фикс к Gantt 1.x)
Изменения сохраняются автоматически через PATCH /api/tasks/[id].
CSV-импорт задач
Sidebar → Проекты → «Импорт» → загружаешь .csv → выбираешь режим:
Режим «projects» (массовый)
Каждая строка = отдельный проект. Используется когда у тебя список из 50 проектов в Excel.
Режим «project_with_tasks» (один проект + задачи)
Одна строка = одна задача в указанном проекте. Это типичный кейс: «Электрификация села N» как проект, а строки CSV — конкретные задачи с этапами.
Особенность: carry-over этапов. Если в CSV есть колонка task_stage — её значение «прилипает» к последующим строкам пока не появится новое. Это позволяет вместо повторения этапа в каждой строке указать его один раз в начале каждого блока.
Альтернатива: legacy-режим, когда строка вида «I. Земельно-правовые процедуры» (без даты, без исполнителя) распознаётся как заголовок этапа автоматически.
AI suggest mapping
Кнопка ✨ «Подсказать» — система смотрит на заголовки вашего файла и сама сопоставляет их с полями проекта и задачи, а для незнакомых колонок предлагает завести ваше собственное поле.
Inline-create клиент / менеджер
Если в CSV указан исполнитель/клиент, которого нет в системе — диалог создания на лету. См. Команда про hybrid-flow.
Auto-derive дат проекта
После импорта задач:
project.start_date = min(task.start_date)(если в meta не указано явно)project.end_date = max(task.due_date)project.progressпересчитывается по проценту completed задачproject.status—doneесли 100%,in_progressесли есть completed/in_progress, иначеplanned
Архивирование
Soft-delete: кнопка в ProjectDetails → проект уезжает в /archive с deleted_at. Восстановление и hard-delete — как у сделок.
Связи с объектами
Project → таб «Объекты» → ObjectLinksTab. Используется для подрядчиков: один проект может включать монтаж на 5 точках (5 объектов).
См. Объекты — там детально про M:M связи.
Уведомления
При создании задачи с assigned_to — assignee получает in-app notification (тип task_assigned). При смене стадии сделки — stage_changed. Email-уведомления на эти события пока не отправляются (планируется в Phase 2).
Просмотр и фильтры
Sidebar → Проекты:
- Nested-table 3 уровня — Project → Stage → Tasks (раскрывающаяся структура)
- Фильтры: статус, ответственный, ваши собственные поля
- Просрочки видны цветом (overdue tasks подсвечиваются)
Заполненность проектов
Отчёт Работа → Заполненность проектов показывает, насколько полно заведена база, и пофамильно — у кого что не заполнено. Виден тем, у кого есть право «Проекты: видит все»: картина охватывает всю компанию, включая чужие проекты и фамилии. Выгружается в XLSX (для работы) и в PDF (для показа руководителю).
Из чего складывается процент
Десять пунктов, все равнозначные. Семь по карточке проекта:
- Ответственный назначен.
- Заказчик указан.
- Дата начала заполнена.
- Дата окончания заполнена.
- Бюджет указан. Засчитывается либо бюджет проекта, либо сумма бюджетов материалов и работ — дублировать в карточке то, что уже введено сметой, не нужно. Ноль бюджетом не считается.
- Описание — не короче 20 символов. Порог нужен, чтобы «ок» и «-» не проходили за описание.
- Поля компании — заполнены все обязательные пользовательские поля. Критерий тот же, что при сохранении карточки: что система приняла, то и считается заполненным. Если обязательных полей в компании нет, пункт не спрашивается вовсе и процент считается из девяти.
И три по плану работ:
- Этапы заведены (хотя бы один этап верхнего уровня).
- Задачи заведены. Считаются только задачи верхнего уровня; подзадачи и отменённые не в счёт.
- Сроки и исполнители задач — у всех открытых задач верхнего уровня есть и срок, и исполнитель. Правило «у всех», а не доля: «90 % задач с исполнителем» нельзя поручить исправить, а «две задачи без срока» — можно. У завершённых и отменённых задач срок не требуется.
Что в процент НЕ входит
Паспорт проекта, смета, документы и статус-отчёт показываются отдельными колонками «есть/нет». Если смешать их с карточкой, 60 % у проекта с отличной карточкой без паспорта и 60 % у обратного случая стали бы неразличимы, и было бы непонятно, с кем разговаривать. Колонки «Паспорт» и «Смета» не показываются компаниям, которым соответствующие модули не подключены.
Какие проекты попадают в отчёт
По умолчанию — активные: запланированные, в работе и на паузе. Переключателем можно добавить завершённые — для разбора прошлых проектов; включать их постоянно не стоит, иначе средний процент обрушится и начнётся «починка» закрытых карточек.
Не попадают никогда: черновики проектов (они незаполнены по определению и живут на своей странице), удалённые и служебный проект-склад. Сколько осталось за бортом, написано строкой под шапкой.
Подпроект идёт отдельной строкой, с указанием основного проекта. У подпроекта свои сроки, свои деньги и может быть другой ответственный — спрятать его внутри полного родителя значило бы потерять и пустоту, и ответственного.
Напомнить сотруднику
Кнопка «Напомнить» в строке сотрудника отправляет ему уведомление в колокольчик: что именно не заполнено (пункты — от самого частого) и в каких проектах (не больше трёх названий, остальные числом). Процента в уведомлении нет намеренно: «у вас 64 %» нельзя пойти и исправить, а «в трёх проектах нет бюджета» — можно. Текст составляет система, отправитель его не редактирует.
Ссылка в уведомлении ведёт в Проекты, а не в сам отчёт: отчёт закрыт правом «Проекты: видит все», и сотрудник в него не попадёт.
Кнопки нет и напоминание не уйдёт, если:
- у проектов нет ответственного — напоминать некому, сначала назначьте;
- сотрудник деактивирован — он в систему не войдёт, проекты надо переназначить;
- это ваши собственные проекты;
- у сотрудника всё заполнено.
Одному человеку напоминание уходит не чаще раза в 20 часов: повторять одно и то же в тот же день — значит приучить смахивать колокольчик не читая. Сотрудник может отключить такие уведомления у себя в Настройках → Уведомления.
Чего отчёт не показывает
- Соисполнители в пофамильный свод не идут — только ответственный за проект. Иначе один проект попал бы в долг сразу нескольким людям, и числа перестали бы сходиться с количеством проектов.
- Уволенный сотрудник в своде остаётся с пометкой «деактивирован»: пункт «Ответственный» у его проектов считается заполненным, но проекты надо переназначить. Это долг не уволенного.
- Внутренние проекты без заказчика по пункту «Заказчик» всегда будут красными. Заводить ради отчёта выдуманных клиентов не нужно — лучше считать этот пункт неприменимым к таким проектам и смотреть на остальные девять.
- У сотрудника с одним проектом процент прыгает с 0 до 100, поэтому рядом всегда стоит число проектов, а сортировка при равном проценте идёт по размеру долга.
Частые вопросы
Можно ли копировать проект как шаблон? — Пока нет встроенной фичи «дублировать». Workaround: экспорт задач в CSV → импорт в новый проект.
Что считается «дедлайном проекта»? — project.end_date (если задан явно), либо max(task.due_date). Если нет ни того ни другого — проект «без дедлайна».
Ganttт показывает не те даты. — Проверь, что у задач заполнены start_date и due_date. Без них задача не показывается на диаграмме.
Можно ли иметь задачи без проекта? — Да. Sidebar → Задачи → создать без project_id. Будет «standalone task», можно привязать к сделке.
Как изменить порядок задач внутри этапа? — Перетаскивания задач нет (только в диаграмме, по датам). Порядок — по сроку, затем по времени создания. Переставлять можно сами этапы и подэтапы, в блоке «Этапы проекта».
Создал этап, а в дереве его нет. — Так было до октября 2026: дерево строилось по задачам и о пустом этапе не знало. Сейчас он виден сразу, с «0 из 0». Если всё же не видно — обновите страницу.
Переименовал этап, а задачи остались под старым названием. — Тоже из прошлого: переименование искало задачи по совпадению старого названия, а у импортированных задач названия с таблицей не совпадали. Сейчас задача держится за этап ключом и едет вместе с ним.