
Канбан доска
Назначение
Канбан-доска — это представление набора объектов, распределённых по колонкам, каждая из которых соответствует этапу процесса. Объект отображается карточкой и перемещается между колонками по мере прохождения этапов. Доска решает две задачи одновременно: даёт обзор распределения объектов по этапам «одним взглядом» и позволяет менять этап объекта прямым действием — перетаскиванием карточки.
Канбан-доска — элемент, характерный именно для процессных приложений. В отличие от учётных систем, где основной задачей является хранение единой версии данных, процессные приложения управляют последовательностью действий, ролями и статусами. Доска визуализирует движение «от действия к результату» и потому не входит в базовый стандарт учётных систем.
Типовые сценарии применения — воронки продаж в CRM, доски задач в трекерах, отслеживание статусов документов в системах документооборота.

Критерии использования
Применимость канбан-доски проверяется в три шага. Порядок обязателен: каждый следующий шаг имеет смысл только при пройденном предыдущем.
Шаг 1. Обязательные условия
Канбан-доска применяется, только если все условия выполняются.
- Объект движется по конечному набору дискретных этапов.
- Этап — это изменяемый в ходе работы атрибут объекта, а не неизменная категория.
- Смена этапа — частое и значимое действие пользователя.
Если условия не выполняются, применяется таблица или реестр.
Шаг 2. Усиливающие признаки
Достаточно выполнения одного признака, чтобы канбан-доска стала основным представлением раздела.
- Важно видеть распределение объектов по этапам «одним взглядом» — где скопление, где затор.
- По колонкам осмысленны агрегаты — счётчик объектов и сумма по числовому атрибуту.
- Количество объектов в каждом этапе умеренное (десятки, не тысячи).
- Работа коллективная, и важно видеть ответственного по каждому объекту.
Если не выполняется ни один признак, канбан-доска допустима, но как парный режим к таблице, а не как основное представление раздела.
Шаг 3. Стоп-факторы
Любой из перечисленных факторов перевешивает результаты шагов 1 и 2.
- Нужны массовые операции, сортировка по многим полям, точные построчные сравнения.
- Объект не имеет статусной модели либо этапов слишком много и они плоские.
- Главная задача экрана — детальный просмотр и редактирование одного объекта со связанными данными.
Стандарты проектирования
Обязательные правила
- Заголовок раздела используется вместо баннера для экономии полезного пространства.
- Шапка содержит минимально необходимый набор фильтров и поле поиска.
- Действия доски размещаются в правой части шапки в фиксированном порядке: обновление, настройка и расширенная фильтрация, переключение представления, основное действие добавления.
- Кнопка быстрого добавления карточки не дублируется в каждой колонке: добавление вызывается по наведению на колонку или кнопкой добавления в шапке.
- Цвет этапа выбирается из преднабора палитры и несёт статусную семантику.
- Карточка строится на доработанном компоненте Q.Palette; по умолчанию выводится только основная информация.
- Число колонок ограничивается читаемостью доски; при большом числе этапов процесс декомпозируется, а не растягивается по горизонтали.
- Канбан-доска сопровождается парным табличным представлением того же набора данных.
- По нажатию на карточку открывается новая вкладка с полным сценарием по объекту.
- Заголовки колонок остаются закреплёнными при вертикальном скролле.
Настраиваемые параметры
Задаются в настройках доски
Параметры делятся на два уровня хранения. Разделение принципиально: то, что отражает командную договорённость, задаётся на уровне доски и действует на всех; то, что отражает удобство конкретного человека, сохраняется локально и никому больше не видно.
- Счётчик карточек в колонке. Включается, когда количество объектов на этапе имеет смысл для команды. На этапах, где счётчик заведомо неинформативен, отключается, чтобы не засорять заголовок.
- Агрегат по числовому атрибуту. Сумма или иное числовое значение по колонке. Настраивается вместе с выбором атрибута, по которому считается. Включается только там, где агрегат осмыслен — например, сумма сделок в воронке продаж.
- WIP-лимит этапа. Ограничение количества карточек на этапе. Хранится на уровне доски именно потому, что это договорённость команды о пропускной способности, а не персональное предпочтение: если бы каждый задавал лимит себе, метрика потеряла бы смысл.
- Состав слотов карточки, доступных для вывода. Определяет, какие атрибуты пользователь вправе вынести на карточку. Задаёт границу, внутри которой действует персональная настройка.
Сохраняются локально у пользователя
- Состав и порядок атрибутов карточки. Пользователь выбирает, что видеть на карточке, в пределах набора, разрешённого настройками доски. По умолчанию выводится только основная информация.
- Группировка по атрибуту. Выбранный атрибут группировки и структура групп. Поведение наследуется от стандарта группировки в таблицах, включая локальное хранение.
- Состав расширенных фильтров. Какие фильтры пользователь вывел в расширенную панель, отмечая их галочками в списке доступных.
- Сворачивание колонок и групп. Состояние сворачивания восстанавливается при следующем открытии доски.
- Избранные группы. Группы, поднятые пользователем наверх списка.
Ограничения
- Произвольные значения цвета этапа не допускаются — только преднабор палитры.
- Превышение WIP-лимита не окрашивает колонку целиком: цвет колонки занят статусной семантикой этапа.
- WIP-лимит не блокирует перенос карточки.
- Мультивыбор карточек и массовые операции на доске не поддерживаются — это сценарий парного табличного представления.
- Группировка по атрибуту на доске допускается только одноуровневая.
- Карточка не раскрывается поверх доски модальным окном.
Состав и компоненты
Канбан-доску образуют вложенные уровни. Их состав зависит от режима: при включённой группировке появляются два дополнительных уровня, и контейнером карточек становится не колонка, а ячейка.
В режиме группировки колонка сохраняется как закреплённый заголовок столбца, но перестаёт быть контейнером карточек и зоной сброса.
Доска
Корневой контейнер. Занимает основную рабочую область.
Состав
Обязательно:
- Шапка
- Область колонок
Опционально:
- Фильтр группировки
Поведение. Область колонок скроллируется по горизонтали. При подведении перетаскиваемой карточки к краю области выполняется автоскролл.
Состояния. Загрузка, пустая доска, нет результатов после фильтрации, ошибка загрузки.

Шапка доски (селектор доски, фильтры, поиск, блок действий)
Состав
Обязательно:
- Заголовок раздела
- Базовые фильтры
- Поле поиска
- Кнопка «Обновить»
- Кнопка «Добавить»
Опционально:
- Селектор доски или воронки
- Быстрые персональные фильтры-чипы («Мои», «Задачи моей команды»)
Поведение. Изменение любого фильтра перестраивает колонки и пересчитывает счётчики и агрегаты. Поиск выполняется по атрибутам, выведенным на карточку.
Состояния. Количество применённых расширенных фильтров отображается индикатором на кнопке фильтрации.

Колонка (этап)
Соответствует одному этапу процесса.
Состав. Обязательно:
- Заголовок этапа (статуса) с цветовой индикацией.
Опционально:
- Счётчик карточек
- Агрегат по числовому атрибуту (в примере — сумма)
- Контекстное меню колонки
- Элемент быстрого добавления
- WIP-лимит
- Сворачивание
Поведение. Список карточек скроллируется по вертикали. Заголовок остаётся закреплённым. В режиме без группировки колонка является зоной сброса карточки.
Состояния. Пустая, активная зона сброса, сброс запрещён, WIP-лимит достигнут, WIP-лимит превышен, свёрнутая.

Группа (swimlane)
Горизонтальное деление доски по значению выбранного атрибута.
Состав. Обязательно:
- Заголовок группы со значением атрибута и счётчиком
- Кнопка сворачивания, ряд ячеек
Опционально:
- Аватар или иконка
- Уточняющая подпись
- Агрегат по группе
Поведение. Группировка настраивается той же панелью, что и группировка в таблицах. Состояние сворачивания сохраняется локально у пользователя. Избранные группы располагаются вверху списка.
Группа «Без значения» собирает объекты с незаполненным атрибутом группировки, всегда располагается последней и не принимает перетаскивание: очистить атрибут переносом карточки нельзя.
Состояния. Развёрнута, свёрнута, пустая.

Ячейка
Пересечение колонки и группы. Существует только при включённой группировке. Является реальным контейнером карточек и зоной сброса.
Состояния. Пустая, активная зона сброса, сброс запрещён.

Карточка
Переиспользуемый компонент Q.Palette, доработанный под нужды канбан-доски. Отображает объект в минимальном объёме, достаточном для принятия решения о перемещении.
Состав по слотам, сверху вниз.
- Строка метаданных — иконка типа и метка времени.
- Заголовок — наименование объекта. Обязателен.
- Одна–две строки ключевых атрибутов, например контакт и организация.
- Выделенное числовое значение, например сумма.
- Чипы и теги.
- Нижняя строка — счётчики связанных сущностей, аватар и имя ответственного.
- Меню карточки. Обязательно.
Обязательный минимум — заголовок и меню. Остальные слоты включаются настройками доски.
Поведение. Наведение подсвечивает карточку. Нажатие открывает новую вкладку с полным сценарием по объекту — карточка раскрывается как отдельный сценарий в соответствии со стандартом вкладок технологических платформ.
Состояния. Обычная, наведение, перетаскиваемая, место-заполнитель на исходной позиции, содержит просроченное значение, заблокирована для перемещения.

Сквозные сценарии
Перемещение карточки
Смена этапа выполняется перетаскиванием карточки. При включённой группировке допускается диагональный перенос — в произвольную ячейку, при котором одним жестом меняются два атрибута: этап и значение атрибута группировки.
Изменение обоих атрибутов выполняется как одна операция. Отклонение на стороне сервера откатывает оба изменения и возвращает карточку на исходную позицию.
При перетаскивании отображается обратная связь: подсветка зоны сброса и состояние переносимой карточки. В режиме группировки подсвечивается конкретная ячейка, а не колонка целиком.
Наведение перетаскиваемой карточки на заголовок свёрнутой группы разворачивает её с задержкой, после чего группа принимает сброс.


Валидация перехода
Валидация выполняется в два этапа и в фиксированном порядке.
- Допустимость перехода по этапу согласно логике процесса.
- Допустимость смены атрибута группировки, как правило — по правам пользователя.
Недопустимый переход блокируется. Зона сброса подсвечивается как запрещённая, сообщение называет конкретную причину отказа: пользователь должен понимать, какое из двух изменений отклонено.
При незаполненных обязательных данных система запрашивает их перед сменой этапа.

WIP-лимиты
WIP-лимит ограничивает количество карточек на этапе. Задаётся на уровне колонки в настройках доски и действует на всех пользователей.
Лимит предупреждает, но не блокирует перенос. Это принципиальное разграничение: блокирующая валидация уже используется для нарушений логики процесса, и приравнивать к ней командную договорённость нельзя. Разграничение опирается на стандарт цветовой индикации — красный означает запрет, оранжевый означает предупреждение.
Индикация. Счётчик колонки принимает формат n / лимит и меняет состояние:

| Условие | Состояние чипа |
|---|---|
| n < лимит | Нейтральное |
| n = лимит | Warning |
| n > лимит | Danger |
Состояние warning наступает при достижении лимита, а не при превышении: смысл индикации — предупредить заранее.
Если лимит не задан, чип отображает обычный счётчик карточек. Цвет колонки при любом состоянии лимита не меняется.
Перенос с превышением. Выполняется, сопровождается warning-тостом с указанием этапа и значения лимита. Блокирующий диалог не используется.
Взаимодействие с фильтрами. Счётчик колонки отражает отфильтрованный набор, а лимит относится к полному. При активном фильтре или поиске индикация лимита подавляется: чип возвращается к обычному счётчику, рядом отображается подсказка о причине. Проверка при переносе продолжает выполняться по полному набору.
Где не задаётся. Лимит не предлагается для терминальных этапов и входного этапа-бэклога — они накапливают объекты по своей природе. Настройка помечается подсказкой, но не блокируется: модель процесса у продуктов различается.
Ограничения текущей версии. Лимит на ячейку и лимит на группу целиком не поддерживаются.
Группировка по атрибуту
Доска группируется по значению выбранного атрибута. Настройка выполняется панелью группировки — тем же компонентом, что используется для группировки в таблицах, включая перетаскивание заголовка в панель, удаление уровня и добавление групп в избранное.
Ограничение канбан-доски: допускается только один уровень группировки. Двухуровневая иерархия в сочетании с колонками образует трёхмерную сетку и нечитаема.
Фильтрация
Изначально пользователю доступен ограниченный набор фильтров — только самое необходимое. Набор одинаков для канбан-доски и парного табличного представления.
Кнопка фильтрации в правой части шапки раскрывает расширенную панель со всеми доступными фильтрами. Состав расширенной панели настраивается: внутри неё доступен выбор фильтров, которые будут выводиться в расширенном режиме.

Переключение представления
Доска и табличное представление работают с одним набором данных и переключаются действием в шапке. Применённые фильтры, поиск и группировка сохраняются при переключении.
Табличное представление — парный режим к доске, применяется для массовых операций, сортировки и плотного просмотра данных.
Открытие карточки
По нажатию на карточку открывается новая вкладка с полным сценарием работы по объекту. Карточка раскрывается не поверх доски, а как отдельный сценарий.

Состояния доски
Состояния сгруппированы по уровню, на котором они возникают. Состояния доски занимают всю рабочую область и взаимоисключающи. Состояния контейнеров возникают внутри уже загруженной доски и могут сочетаться друг с другом.
Загрузка
Отображаются скелетоны колонок с заголовками. Каркас доски показывается сразу — пользователь видит структуру этапов до того, как загрузятся карточки.

Пустая доска
Данных нет вообще, фильтры не применены. Иллюстрация, пояснение и основное действие добавления в центре рабочей области. Колонки при этом отображаются: пользователь должен видеть, в какой процесс он попал.

Нет результатов после фильтрации
Данные есть, но не проходят по условиям. Пояснение и действие сброса фильтров. Отличается от пустой доски формулировкой и действием: предлагать добавление объекта здесь неуместно.

Ошибка загрузки
Сообщение с действием повторной загрузки.

Состояния колонки и группы
Пустая колонка
Пустая область, принимающая сброс карточки. Заголовок с цветовой индикацией и счётчиком «0» сохраняется — колонка остаётся видимой, чтобы пользователь понимал полный состав этапов процесса и мог перенести в неё карточку.

Пустая группа
Отображается свёрнутым заголовком со счётчиком «0». В отличие от колонки, разворачивать пустую группу не нужно: перечень групп определяется данными, а не моделью процесса.

Цветовая индикация
Применяется стандарт цветовой индикации Q.Palette со следующими уточнениями для канбан-доски.
- Цвет этапа задаётся из заранее определённого набора цветов палитры. Произвольные значения не допускаются.
- Цвет этапа несёт статусную семантику — обозначает этап, а не служит украшением.
- Цвет этапа не используется для отображения других состояний колонки, включая превышение WIP-лимита.
- Просроченные даты и превышенные значения на карточке выделяются красным — по общему правилу выделения текста цветом.
Чек-лист проверки
- Пройдены все три шага критериев использования, стоп-факторы отсутствуют.
- Число колонок не превышает 7–9.
- Каждой доске соответствует парное табличное представление.
- Заголовок раздела используется вместо баннера.
- Действия в шапке размещены в стандартном порядке.
- Кнопка добавления не продублирована в колонках.
- Цвета этапов взяты из преднабора палитры.
- На карточке по умолчанию выведен только минимально необходимый набор атрибутов.
- Недопустимые переходы блокируются с указанием причины.
- WIP-лимит предупреждает, но не блокирует перенос.
- При активном фильтре индикация WIP-лимита подавлена.
- Определены пустые состояния доски, колонки и результата фильтрации.
- Нажатие на карточку открывает новую вкладку, а не модальное окно.