Направление работ: WebLk Код раздела: 5.5 Раздел: Заказы > Абонементы Статус: черновик Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 10.08.26


1. Назначение

Данный раздел обеспечивает партнёру поиск и просмотр абонементов в календаре и отдельном списке WebLk, настройку отображения списка и экспорт данных.

Создание абонемента описано в WebLk 5.5.1 «Создание абонемента», работа с экраном управления — в WebLk 5.5.2 «Карточка абонемента», оплата — в WebLk 5.5.3 «Оплата абонемента». Состав и статусы заказов определяются в Back: 3.1 «Состав заказа» и 3.2 «Процессинг заказов», обработка групп — в Back: 3.3.1 «Процессинговые группы заказов».

2. Ключевые понятия

Абонемент — объединённая в WebLk группа заказов одного клиента, для которой отображаются общий период, состав, стоимость и состояние оплаты.

Группа заказов — совокупность связанных заказов, обрабатываемых в рамках общего пользовательского сценария.

Партнерская зона — сущность для хранения всей связанной информации по площадкам и услугам представленных в интерфейсах платформы.

3. Scope

Входит

S1: Поиск и просмотр абонементов

S2: Фильтрация, настройка и экспорт списка

S3: Ограничение экспорта по правам пользователя

S4: Адаптивы раздела и его подразделов

Не входит

4. BR

Указаны в пункте 4 разделов Back: 3.1 «Состав заказа», 3.2 «Процессинг заказов», 3.3.1 «Процессинговые группы заказов» и 4.2.1 «Расчёт в группах заказов».

5. Функциональные требования (UC + FR)

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR5.5-1Партнёр просматривает абонементы в календареВ календаре интерфейс показывает отдельный блок «Абонементы» со строкой поиска и карточками доступных абонементов.1Частично \ OQ5.5-2
S1: FR5.5-2Партнёр ищет абонемент в календареПоле «Найти абонемент» фильтрует карточки абонементов по ФИО или номеру телефона клиента.1Частично \ OQ5.5-12, OQ5.5-18
S1: FR5.5-3Партнёр просматривает карточку абонемента в календареКарточка показывает имя, телефон, Email, количество заказов, общую стоимость и оплаченную сумму, а также признак подписки клиента при наличии (на будущую реализацию).1Реализовано \ OQ5.5-14
S1: FR5.5-4Партнёр открывает список абонементовСтраница «Абонементы» показывает список с данными клиента, датами начала и окончания, объектами, наличием комментария, количеством заказов, общей стоимостью, оплаченной суммой и суммой к оплате.1Реализовано \ OQ5.5-15, OQ5.5-10, OQ5.5-11
S1: FR5.5-5Партнёр просматривает итоги спискаВ нижней строке таблицы интерфейс показывает итоговые значения по количеству заказов, общей стоимости, оплаченной сумме и сумме к оплате для текущей выборки.2Не реализовано \ OQ5.5-3
S1: FR5.5-6Партнёр открывает абонементКлик по карточке абонемента в календаре или по строке списка, кроме данных клиента, открывает страницу «Управление абонементом».1Частично \ OQ5.5-1, OQ5.5-4, OQ5.5-16
S1: FR5.5-7Партнёр открывает карточку клиента из спискаКлик по данным клиента открывает WebLk 6.4.1 «Карточка клиента».1Не реализовано \ OQ5.5-4
S1: FR5.5-8Партнёр наводит указатель на строкуИнтерфейс показывает доступные действия со строкой только при наведении.2Не реализовано \ OQ5.5-7
S2: FR5.5-9Партнёр ищет абонемент в спискеПоле «Найти» фильтрует список абонементов по ФИО или номеру телефона клиента.1Частично \ OQ5.5-8, OQ5.5-12
S2: FR5.5-10Партнёр ограничивает периодПоля «С» и «До» фильтруют абонементы по выбранному диапазону дат.1Частично \ OQ5.5-8, OQ5.5-17
S2: FR5.5-11Партнёр фильтрует абонементы по оплатеФильтр «Оплачено» позволяет выбрать значения «Все», «Не оплачено», «Частично» или «Полностью».1Частично \ OQ5.5-8, OQ5.5-9
S2: FR5.5-12Партнёр настраивает отображение таблицыМеню «Настройки отображения» позволяет показать или скрыть доступные столбцы и восстановить набор по умолчанию.2Реализовано \ OQ5.5-17, OQ5.5-8
S2: FR5.5-13Партнёр экспортирует списокДействие экспорта позволяет скачать текущий список в формате CSV или XLS, если пользователю доступно право экспорта.2Частично \ OQ5.5-5, OQ5.5-6
S3: FR5.5-14Пользователь не имеет права экспортировать данныеИнтерфейс не показывает действие экспорта в списке абонементов и на странице управления абонементом.1Не реализовано \ OQ5.5-5
S4: FR5.5-15Пользователь работает на поддерживаемом устройствеИнтерфейс адаптирует список абонементов, страницу управления абонементом, таблицы, фильтры, панели создания, редактирования, групповых действий и оплаты для desktop, laptop и tablet и mobile (на будущую реализацию).2— \ OQ5.5-13

6. Открытые вопросы

Сверка с кодом: BRD 5.5 v0.1 · репозиторий musbooking_personal_account · commit 93383777 / main · 12.08.26 · якоря features.fsd/processing-groups-list (блок абонементов в календаре), features.fsd/processing-groups-table (список, фильтры, экспорт), widgets.fsd/processing-groups-table (страница управления абонементом), entities.fsd/processing-group (данные и геттеры группы), pages/orders/index.vue (страница раздела с календарём), pages/orders/processing-group (маршруты абонемента), stores/permissions.ts (права) Сводка: 15 требований — Реализовано 3 · Частично 7 · Не реализовано 4 · без вердикта 1. 13 открытых вопросов (Бизнес 0 · Разработка 9 · Бизнес/Разработка 4) и 5 подтверждённых блоков без расхождений. Маршрутизация без сверки с гайдбуком (гайдбук не передавался).

IDИсточникВопросКомуСтатусРекомендацииИтоговое решение
OQ5.5-1Код FR5.5-6, FR5.5-1Требование говорит: клик по карточке абонемента в календаре открывает страницу «Управление абонементом». В коде карточка на клик не реагирует вообще: обработчик клика в ней объявлен, но в разметке карточки ни к чему не привязан — на корневом элементе нет обработчика, а объявленное событие click не пропускает и нативный клик к родителю. Вдобавок на самой странице обработчик клика по карточке — заглушка с пометкой «TODO: Открыть детали группы / навигация». При этом карточка визуально ведёт себя как кликабельная: курсор-палец и подсветка при наведении, то есть партнёр жмёт и не получает ничего. \ features.fsd/processing-groups-list/ui/ProcessingGroupCard.vue:1-45,68-70,79-81,88-99; features.fsd/processing-groups-list/ui/index.vue:17-26,97-99; pages/orders/index.vue:189-192РазработкаOpenЗавести тикет в Bitrix: навесить обработчик клика на корневой элемент карточки абонемента и реализовать в обработчике страницы переход на /orders/processing-group/{id} вместо заглушки. Это блокер сценария FR5.5-6 в календаре.
OQ5.5-2Код FR5.5-1Требование говорит: в календаре есть отдельный блок «Абонементы» со строкой поиска и карточками. В коде блок смонтирован справа от календаря только на странице раздела «Заказы» (/orders), а на странице «Календарь» (/orders/calendar) — отдельном пункте меню, где работает вся карточка заказа, — блока абонементов нет. То есть у партнёра фактически два разных календарных экрана, и абонементы видны только на одном из них. Заголовка «Абонементы» у блока тоже нет — только поле поиска и кнопка-стрелка на полный список. \ pages/orders/index.vue:8-41; pages/orders/calendar.vue:1-8; widgets.fsd/order-calendar/ui/OrderCalendar.vue:1-14; components/sidebar/Menu.vue:169-192; features.fsd/processing-groups-list/ui/index.vue:1-27Бизнес/РазработкаOpen(А) определить, какая из двух страниц является «календарём» из BRD, и смонтировать блок абонементов именно там, добавив заголовок блока (рекомендуется: сейчас наличие абонементов зависит от того, каким пунктом меню партнёр вошёл); (Б) зафиксировать в BRD, что блок живёт на странице раздела «Заказы» рядом с календарём, а не внутри календаря.
OQ5.5-3Код FR5.5-5Требование говорит: в нижней строке таблицы показываются итоги по количеству заказов, общей стоимости, оплаченной сумме и сумме к оплате для текущей выборки. В коде итоговой строки нет: таблица рендерится с отключённым футером, и слота итогов у компонента таблицы не предусмотрено. При этом сервер уже отдаёт агрегаты по выборке — общую стоимость, оплаченное и неоплаченное, — но форматтер списка их выбрасывает: наверх уходит только массив строк. Итог по количеству заказов сервер не отдаёт, его придётся считать на фронте. \ shared.fsd/api-contracts/processing-groups/processing-groups.schema.ts:87-95; shared.fsd/api/processing-groups/processing-groups.api.ts:51-52; entities.fsd/processing-group/lib/processing-group.getters.ts:353-361; entities.fsd/processing-group/store/processing-group.api.ts:316-331; components/UI/table/DataTable.vue:3-13РазработкаOpenЗавести тикет в Bitrix: пробросить агрегаты из ответа сервера (они уже есть) в таблицу абонементов и добавить итоговую строку; количество заказов суммировать по колонке.
OQ5.5-4Код FR5.5-7, FR5.5-6Требование говорит: клик по данным клиента открывает карточку клиента, а вся остальная строка ведёт в абонемент. В коде обработчик клика висит на всей строке целиком, включая ячейку «Клиент», и всегда ведёт на страницу абонемента; ссылки на карточку клиента в ячейке нет. Страница карточки клиента в приложении при этом существует (/clients/{id}), и идентификатор клиента в строке списка есть — не хватает только ссылки и исключения ячейки из клика по строке. \ features.fsd/processing-groups-table/ui/index.vue:84-89,327-330; components/UI/table/DataTable.vue:45-53,299-301; pages/orders/processing-group/index.vue:38-40; entities.fsd/processing-group/lib/processing-group.getters.ts:14-20РазработкаOpenЗавести тикет в Bitrix: сделать ячейку «Клиент» ссылкой на карточку клиента и остановить всплытие клика, чтобы строка не уводила в абонемент.
OQ5.5-5Код FR5.5-13, FR5.5-14Требование говорит: экспорт доступен только пользователю с правом экспорта, а без права действие не показывается ни в списке абонементов, ни на странице управления абонементом. В коде проверок прав в разделе нет вовсе: хранилище прав используется только в разделе сотрудников (там оно про редактирование ролей, а не про доступ текущего пользователя), пункты меню помечены признаком доступа жёстко значением «истина». Кнопка «Скачать» с вариантами CSV и Excel показывается всем и в списке абонементов, и на странице абонемента. \ stores/permissions.ts:15; components/staff/forms/Permissions.vue:175; components/sidebar/Menu.vue:186-191; features.fsd/processing-groups-table/ui/index.vue:32-48; features.fsd/processing-groups-table/ui/details.vue:161-176РазработкаOpenЗавести тикет в Bitrix: подключить проверку прав текущего пользователя и скрывать действие экспорта при отсутствии права. Корневой вопрос общий с OQ5.3.2-8 и OQ5.3.4-6 — решать один раз для всех разделов.
OQ5.5-6Код FR5.5-13Требование говорит: действие экспорта скачивает текущий список в формате CSV или XLS. В коде экспорт есть (CSV и Excel/XLSX), но файл собирается на клиенте из сырых значений полей, а не из того, что видно в таблице: даты уходят в техническом ISO-формате, «Объект(ы)» — списком идентификаторов баз вместо названий, суммы — без форматирования. Кроме того, в файл попадают только строки, уже загруженные на клиент: список запрашивается пачкой в 500 записей, пагинации в таблице нет — при большем числе абонементов и выгрузка, и сам список молча окажутся неполными. \ features.fsd/processing-groups-table/ui/index.vue:337-380,102-104,92-99; features.fsd/processing-groups-table/model/processing-groups-table.ui.ts:41РазработкаOpenЗавести тикет в Bitrix: выгружать в файл отображаемые значения (те же форматтеры, что в ячейках) и решить вопрос с лимитом 500 записей — либо серверный экспорт, либо пагинация с явным предупреждением о неполной выгрузке.
OQ5.5-7Код FR5.5-8Требование говорит: доступные действия со строкой показываются только при наведении. В коде у строки нет никаких действий — ни при наведении, ни постоянно: таблица рисует только ячейки с данными, при наведении меняется лишь фон строки. Из формулировки FR тоже не следует, какие именно действия предполагаются (открыть, оплатить, архивировать?), поэтому подтвердить требование нечем. \ features.fsd/processing-groups-table/ui/index.vue:76-143; components/UI/table/DataTable.vue:3-13,45-91Бизнес/РазработкаOpen(А) перечислить в BRD конкретный состав действий строки и реализовать hover-панель (рекомендуется: сейчас требование непроверяемо); (Б) убрать FR5.5-8, если действий у строки не предусмотрено и открытие абонемента кликом достаточно.
OQ5.5-8Код FR5.5-9, FR5.5-10, FR5.5-11, FR5.5-12Требование говорит: поля «С» и «До», фильтр «Оплачено» со значениями «Все / Не оплачено / Частично / Полностью», меню «Настройки отображения», поле «Найти». В коде подписи другие: период выбирается одним полем-диапазоном «Дата» с плейсхолдером «Выберите даты» (двух отдельных полей «С» и «До» нет); фильтр называется «Статус оплаты», значения — «Все», «Не оплачено», «Частично оплачено», «Оплачено»; меню столбцов называется «Колонки»; поле поиска в списке — «Найти абонемент». По поведению всё соответствует BRD, расходятся только надписи, но именно по ним раздел будут принимать и описывать в инструкциях. \ features.fsd/processing-groups-table/ui/index.vue:4-13,16-25,54-70,250-255; components/Reports/ReportHeader.vue:31-50; components/UI/fields/CoreDateField.vue:21,121-125Бизнес/РазработкаOpenЗавести тикет в Bitrix: привести подписи фильтров и меню к формулировкам BRD (или, если решение обратное, зафиксировать фактические подписи в BRD одной правкой — но выбрать один вариант).
OQ5.5-9Код FR5.5-11Что нашли: статус оплаты фильтруется дважды — параметр уходит на сервер и повторно применяется на клиенте по собственным правилам: «не оплачено» = есть долг и оплачено ноль, «частично» = есть и оплата, и долг, «оплачено» = долга нет и сумма больше нуля. Абонемент с нулевой стоимостью не попадает ни в одну категорию, кроме «Все». Если серверная трактовка отличается от клиентской, партнёр получит пустой список без каких-либо объяснений, а причину расхождения будет не видно ни в интерфейсе, ни в логах. \ features.fsd/processing-groups-table/model/processing-groups-table.ui.ts:35-42,171-187РазработкаOpenЗавести тикет в Bitrix: оставить один источник правды по фильтру оплаты — либо серверный параметр, либо клиентскую фильтрацию — и зафиксировать трактовку нулевой стоимости.
OQ5.5-10Код FR5.5-4Что нашли: колонки «Дата начала» и «Дата окончания» сервер в списке не отдаёт — фронт на каждый абонемент отдельно запрашивает все его заказы (пачками до 500) и берёт минимальную и максимальную дату. На выборке в сотню абонементов это сотня дополнительных запросов при открытии списка; результат кешируется в памяти и не пересчитывается при смене периода или фильтров, то есть после изменения выборки даты могут остаться от прошлой. Пока заказы не подгрузились, в обеих колонках стоит прочерк. \ features.fsd/processing-groups-table/model/processing-groups-table.ui.ts:91-156; entities.fsd/processing-group/lib/processing-group.getters.ts:326-328РазработкаOpenЗавести тикет в Bitrix: запросить у бэкенда даты начала и окончания абонемента прямо в ответе списка и убрать вычисление на фронте; до тех пор — сбрасывать кеш дат при смене фильтров.
OQ5.5-11Код FR5.5-4Требование говорит: список показывает «данные клиента». В коде это одна колонка «Клиент» с ФИО (или подстановка «Без имени», если ФИО пустое); телефона, e-mail и аватара в таблице нет — они есть только в карточке абонемента в календаре. Что бизнес понимает под «данными клиента» в списке, из формулировки FR не следует, поэтому сверить состав нечем. \ features.fsd/processing-groups-table/ui/index.vue:87-89,258-273; entities.fsd/processing-group/lib/processing-group.getters.ts:14-41Бизнес/РазработкаOpen(А) перечислить в FR5.5-4 точный состав данных клиента в списке (ФИО / телефон / e-mail) и дополнить таблицу (рекомендуется: телефон — основной способ идентификации клиента у администратора); (Б) зафиксировать, что в списке достаточно ФИО, а остальное — в карточке клиента.
OQ5.5-12Код FR5.5-2, FR5.5-9Требование говорит: поиск фильтрует абонементы по ФИО или номеру телефона клиента. В коде и в блоке календаря, и в списке строка поиска целиком уходит на сервер одним параметром — на фронте никакой фильтрации нет, поэтому правило «ФИО или телефон» статической сверкой подтвердить нельзя: это поведение бэкенда. Дополнительно: запрос уходит на каждое нажатие клавиши, без задержки ввода — при быстром наборе это серия лишних запросов. \ features.fsd/processing-groups-list/ui/index.vue:4-9,86-95; features.fsd/processing-groups-table/ui/index.vue:11-12; features.fsd/processing-groups-table/model/processing-groups-table.ui.ts:35-42; shared.fsd/api-contracts/processing-groups/processing-groups.schema.ts:116-123РазработкаOpenЗавести тикет в Bitrix: подтвердить у бэкенда, что поиск действительно ищет и по ФИО, и по телефону (и зафиксировать это в BRD Back), а также добавить задержку ввода перед запросом.
OQ5.5-13Код FR5.5-15Требование говорит: список абонементов, страница управления, таблицы, фильтры и панели адаптируются под desktop, laptop, tablet и mobile. В коде подтверждается только частичная адаптация: панель фильтров списка имеет три раскладки (≥1000 px — одна строка, 520–999 px — две, менее 520 px — стек), страница «Заказы» перестраивает календарь и блок абонементов на 767 и 1280 px, а виджет списка перестаёт сжимать таблицу под панель на ширине менее 768 px. При этом сам блок абонементов в календаре имеет фиксированную ширину 320 px и высоту 78dvh, а таблица — фиксированную высоту 62dvh. Полноту адаптации под четыре класса устройств статическая сверка не подтверждает. \ features.fsd/processing-groups-table/ui/index.vue:82,165-215; widgets.fsd/processing-groups-table/ui/index.vue:28-52; pages/orders/index.vue:233-248; features.fsd/processing-groups-list/ui/index.vue:105-136РазработкаOpenЗавести тикет в Bitrix: проверить список абонементов и блок в календаре на четырёх контрольных ширинах вручную (или e2e) — в первую очередь фиксированные 320 px блока и высоты 62/78dvh на планшете и мобильном.
OQ5.5-14Код FR5.5-3Что подтверждено: карточка абонемента в календаре показывает блок клиента (аватар, имя, телефон, e-mail) и четыре плитки — «Оплачено», «К оплате», «Кол-во заказов», «Общая стоим.». Признак подписки, помеченный в BRD как «на будущую реализацию», по факту уже есть — бейдж «Pro» на аватаре при соответствующем тарифе клиента. Сверх BRD карточка показывает ещё и сумму «К оплате». \ features.fsd/processing-groups-list/ui/ProcessingGroupCard.vue:1-45; entities.fsd/client/ui/Card.vue:10-75—ПодтвержденоРасхождения по составу нет. → правка BRD: снять с признака подписки пометку «на будущую реализацию» и дописать в FR5.5-3 сумму «К оплате».—
OQ5.5-15Код FR5.5-4Что подтверждено: страница «Абонементы» показывает таблицу с колонками «Клиент», «Дата начала», «Дата окончания», «Объект(ы)», «Комментарий», «Заказов», «Стоимость», «К оплате», «Оплачено»; объекты выводятся названиями баз, комментарий — текстом (или «Нет», если его нет), суммы — с разделителями и знаком рубля. Для пустой выборки показывается состояние «Абонементов не найдено», под таблицей — легенда статусов заказов. \ features.fsd/processing-groups-table/ui/index.vue:76-146,258-273,383-403—ПодтвержденоРасхождения по составу колонок нет; открытыми остаются состав «данных клиента» (OQ5.5-11) и способ получения дат (OQ5.5-10).—
OQ5.5-16Код FR5.5-6Что подтверждено: клик по строке списка открывает страницу управления абонементом /orders/processing-group/{id} — с заголовком «Абонементы», возвратом к списку и виджетом управления группой. Переход работает по всей строке. \ features.fsd/processing-groups-table/ui/index.vue:84,327-330; widgets.fsd/processing-groups-table/ui/index.vue:7-12,80-82; pages/orders/processing-group/index.vue:38-40; pages/orders/processing-group/[id]/index.vue:1-7—ПодтвержденоРасхождения нет — кроме оговорки «кроме данных клиента» (OQ5.5-4) и клика по карточке в календаре (OQ5.5-1).—
OQ5.5-17Код FR5.5-10, FR5.5-11, FR5.5-12Что подтверждено: период, строка поиска и статус оплаты уходят в запрос списка и перезапрашивают данные; по умолчанию период — от месяца назад до месяца вперёд. Меню столбцов позволяет скрыть и показать каждый столбец по отдельности, а также «Показать все», «Скрыть все» и «По умолчанию»; порядок столбцов меняется перетаскиванием, выбранный набор сохраняется между сессиями. Перетаскивание и сохранение набора — сверх BRD. \ features.fsd/processing-groups-table/model/processing-groups-table.ui.ts:19-47,210-226; features.fsd/processing-groups-table/ui/index.vue:54-70,275-300; components/UI/filters/ColumnsMenu.vue:24,54,80—ПодтвержденоПоведение соответствует BRD. → правка BRD: дописать в FR5.5-12 сохранение набора столбцов и изменение их порядка; расхождения в подписях — OQ5.5-8.—
OQ5.5-18Код FR5.5-2Что подтверждено: в блоке абонементов в календаре есть поле «Найти абонемент», ввод перезапрашивает список карточек, рядом — кнопка-стрелка, ведущая на полный список абонементов. Карточки перерисовываются по результату запроса. \ features.fsd/processing-groups-list/ui/index.vue:3-26,86-95; features.fsd/processing-groups-list/model/processing-groups-list.ui.ts:63-67,160-163—ПодтвержденоРасхождения по наличию поля нет; семантика поиска (ФИО/телефон) — OQ5.5-12.—

Отрезано в обратном проходе (не бизнес-значимо, 4 находки): в списке абонементов заведено состояние меню создания (createMenu), которое ни к чему не привязано, а в виджете объявлен и нигде не используется обработчик закрытия панели создания (features.fsd/processing-groups-table/ui/index.vue:246,322-325; widgets.fsd/processing-groups-table/ui/index.vue:95-99) — мёртвый код; в карточке клиента рядом с именем безусловно выводится иконка-предупреждение (треугольник), из-за чего в каждой карточке абонемента постоянно висит значок тревоги (entities.fsd/client/ui/Card.vue:33-39) — косметика, относится к карточке клиента, а не к разделу 5.5; при смене партнёрской зоны страница «Заказы» перезаписывает параметры блока абонементов своей пустой строкой поиска, сбрасывая введённый партнёром запрос (pages/orders/index.vue:199-214 против features.fsd/processing-groups-list/ui/index.vue:86-95) — редкий сценарий; README фичи описывает компонент ProcessingGroupsList.vue, которого в фиче нет — файл называется index.vue (features.fsd/processing-groups-list/README.md:13,25,40,104) — устаревшая документация.