diff --git a/docs/tz-fregat.typ b/docs/tz-fregat.typ index f4dde80..2282850 100644 --- a/docs/tz-fregat.typ +++ b/docs/tz-fregat.typ @@ -87,7 +87,7 @@ Продукт должен объединять клиентский, менеджерский, административный и интеграционный контуры в единой веб-системе. Подробный состав функций, ролей, данных, интерфейсов и интеграций установлен в последующих разделах настоящего технического задания. -Объектом автоматизации являются процессы клиентского обслуживания и внутренней обработки заявок, выполняемые менеджерами ООО Фрегат Групп при работе с готовой и индивидуальной продукцией. +Объектом автоматизации являются процессы предоставления B2B-клиентам доступа к актуальным учетным данным по заказам, статусам, составу заказов, условиям, балансу и задолженности. == Границы продукта @@ -111,6 +111,7 @@ - выполнения функций публичного B2C-магазина - прямого редактирования клиентом внутренних бизнес-правил компании - замены учетной системы 1С как первичного источника учетных данных +- предоставления клиенту каталога продукции, складских остатков, корзины или самостоятельного оформления заказа через личный кабинет == Пользовательские контуры @@ -121,19 +122,20 @@ - менеджерский контур - административный контур суперменеджера -Клиентский контур предназначен для работы клиента с каталогом, заявками, заказами, уведомлениями и бонусным кабинетом. +Клиентский контур предназначен для просмотра клиентом своих заказов, состава заказов, статусов, условий, баланса, задолженности, уведомлений и бонусного кабинета. -Менеджерский контур предназначен для обработки клиентских заявок, публикации коммерческих условий, сопровождения заказов, работы с клиентскими карточками и бонусными операциями. +Менеджерский контур предназначен для создания и подтверждения клиентских кабинетов, отправки приглашений, сопровождения клиентов, просмотра данных клиента и работы с бонусными операциями. -Административный контур предназначен для управления настройками каталога, уведомлений, интеграционных параметров и отдельных сервисных настроек системы. +Административный контур предназначен для управления пользователями, уведомлениями, интеграционными параметрами и отдельными сервисными настройками системы. == Основные принципы работы - доступ к функциям и данным определяется ролью пользователя - клиент работает только в пределах собственных данных и данных своего контрагента -- стоимость товара и условия поставки публикуются только после обработки менеджером -- история изменений по заявкам, заказам и бонусным операциям фиксируется в системе -- сведения о товарах, остатках, заказах и статусах могут обновляться из внешней учетной системы +- клиентский кабинет создается менеджером на основании ИНН и ОГРН/ОГРНИП +- данные из 1С загружаются только для клиентов, уже созданных и подтвержденных в личном кабинете +- история изменений по заказам и бонусным операциям фиксируется в системе +- сведения о заказах, составе заказов, статусах, условиях, балансе и задолженности обновляются из 1С = Функциональные требования @@ -143,128 +145,35 @@ Система должна поддерживать подключение клиента только по инициативе менеджера: -- менеджер создает или выбирает карточку клиента и привязывает ее к контрагенту +- менеджер создает карточку клиента и указывает ИНН и ОГРН/ОГРНИП - менеджер направляет клиенту персональное приглашение на электронную почту - клиент завершает подключение по персональной ссылке из письма +- данные из 1С сопоставляются с клиентской карточкой по ИНН и ОГРН/ОГРНИП при очередной загрузке файла обмена Функциональные требования: + Менеджер должен иметь возможность направить клиенту приглашение на подключение по электронной почте. -+ Менеджер должен иметь возможность связать приглашение с контрагентом, полученным из 1С либо заведенным для клиентской работы. ++ Менеджер должен иметь возможность создать и подтвердить клиентскую карточку с ИНН и ОГРН/ОГРНИП. + Клиент должен иметь возможность завершить подключение по персональной ссылке. + После завершения подключения клиент должен получить доступ к личному кабинету. + Публичная страница входа не должна содержать самостоятельную регистрацию или самостоятельную заявку на подключение. ++ Система не должна создавать клиентский кабинет автоматически на основании данных, полученных из 1С. + Система должна поддерживать подключение доступных каналов уведомлений для клиентской учетной записи. -== Требования к каталогу готовой продукции +== Требования к главной странице клиента -Система должна предоставлять клиенту каталог готовой продукции без отображения цены до обработки менеджером. +После входа клиент должен видеть сводку по своей компании без каталога продукции и без сценария оформления заказа. Функциональные требования: -+ Система должна отображать список товарных направлений. -+ Для каждого товарного направления система должна предоставлять отдельную карточку товара. -+ В карточке товара система должна отображать параметры выбора, применимые к данному типу продукции. -+ В карточке товара система должна отображать доступные стандартные варианты. -+ Для каждой доступной позиции система должна отображать складские остатки. -+ Система должна позволять клиенту выбрать параметры и добавить позицию в корзину. -+ Система должна исключать отображение стоимости до момента публикации условий менеджером. -+ Для параметров товара система должна отображать пояснения, помогающие клиенту понять назначение параметра и ограничения выбора. - -== Требования к параметрам каталога и кастомизации - - -Система должна поддерживать настройку параметров по каждому товарному направлению. - -Функциональные требования: - -+ Для каждого типа продукции должен задаваться перечень стандартных параметров выбора. -+ Для параметров длины должна поддерживаться настройка доступных стандартных значений. -+ Для параметров длины должна поддерживаться возможность индивидуального значения при наличии соответствующего разрешения. -+ Для параметров втулки должна поддерживаться возможность заказа втулки с логотипом при наличии соответствующего разрешения. -+ Для параметров надписи должна поддерживаться возможность заказа индивидуального нанесения при наличии соответствующего разрешения. -+ Наборы стандартных параметров должны редактироваться в административном контуре. -+ Изменение набора стандартных параметров не должно приводить к потере уже сохраненных заказных данных. - -== Требования к корзине и заявке на заказ - - -Система должна позволять клиенту собрать корзину и направить заявку на заказ. - -Функциональные требования: - -+ Клиент должен видеть перечень выбранных позиций. -+ Для каждой позиции клиент должен иметь возможность изменить количество. -+ Клиент должен иметь возможность удалить позицию из корзины. -+ Клиент должен иметь возможность направить заявку менеджеру. -+ После отправки заявки система должна зафиксировать состав, параметры и количество позиций. -+ Для заявки должны сохраняться дата создания, инициатор и закрепленный менеджер. -+ До обработки менеджером стоимость в заявке не должна отображаться клиенту. - -== Требования к обработке заявки менеджером - - -Менеджер должен иметь возможность обработать клиентскую заявку вручную. - -Функциональные требования: - -+ Менеджер должен видеть состав заявки и параметры заказанных позиций. -+ Менеджер должен видеть карточку клиента и сведения о контрагенте. -+ Менеджер должен иметь возможность указать стоимость. -+ Менеджер должен иметь возможность указать условия поставки и доставки. -+ Менеджер должен иметь возможность оставить комментарий к заявке. -+ Менеджер должен иметь возможность опубликовать согласованные условия клиенту. -+ До перевода заявки в работу менеджер должен иметь возможность скорректировать опубликованные условия. -+ Менеджер должен иметь возможность перевести заявку в работу. -+ Менеджер должен иметь возможность отменить заявку с фиксацией основания отмены. - -== Требования к заявке на расчет индивидуальной продукции - - -Система должна поддерживать отдельный сценарий расчета продукции с индивидуальными параметрами. - -Функциональные требования: - -+ Клиент должен иметь возможность перейти из каталога в сценарий расчета индивидуальной продукции. -+ Клиент должен иметь возможность указать параметры изделия. -+ Клиент должен иметь возможность приложить комментарий к заявке. -+ Клиент должен иметь возможность направить заявку менеджеру. -+ Менеджер должен иметь возможность обработать такую заявку по правилам, аналогичным заявке на заказ. -+ Стоимость и условия поставки должны публиковаться клиенту только после ручной обработки менеджером. - -Минимальный состав параметров расчетной заявки должен поддерживать: - -- тип продукции -- ширину -- длину -- толщину -- цвет -- надпись или маркировку -- иные параметры в зависимости от вида продукции -- текстовый комментарий клиента - -== Требования к статусам заявок - - -Система должна обеспечивать сквозное сопровождение заявок по статусам. - -Для заявок на заказ и заявок на расчет должны поддерживаться следующие базовые статусы: - -- создана -- направлена менеджеру -- обработана менеджером -- условия опубликованы -- в работе -- отменена - -Для каждого изменения статуса система должна сохранять: - -- предыдущее состояние -- новое состояние -- дату и время изменения -- пользователя или источник, выполнивший изменение -- комментарий, если он предусмотрен сценарием ++ Система должна отображать краткую информацию о клиентской организации. ++ Система должна отображать текущий баланс или задолженность, если такие сведения получены из 1С. ++ Система должна отображать дату актуальности баланса или задолженности. ++ Система должна отображать последние заказы клиента и их текущие статусы. ++ Система должна предоставлять переход к полному списку заказов и карточке конкретного заказа. ++ Система должна отображать уведомления, связанные с заказами, балансом, задолженностью и бонусными операциями. ++ Система не должна отображать клиенту каталог продукции, складские остатки, корзину или форму создания заказа. == Требования к заказам и их сопровождению @@ -281,6 +190,7 @@ + При наличии обновлений из внешней системы сведения по заказу должны синхронизироваться и отображаться пользователю. + Система должна отображать текущую задолженность клиента, если такие сведения получены из 1С. + Для задолженности должна отображаться дата актуальности данных. ++ Система должна показывать только заказы, сопоставленные с подтвержденной клиентской карточкой по ИНН и ОГРН/ОГРНИП. == Требования к уведомлениям @@ -296,8 +206,9 @@ Система должна поддерживать уведомления по следующим событиям: - приглашение к подключению -- публикация условий по заявке - изменение статуса заказа +- обновление сведений по заказу +- изменение баланса или задолженности - изменение бонусного баланса - обработка заявки на использование либо вывод бонусов @@ -323,8 +234,6 @@ Система должна содержать административные разделы для управления следующими объектами: -- параметрами каталога -- пользовательскими описаниями параметров - шаблонами уведомлений - параметрами синхронизации - отдельными настройками бонусного контура @@ -351,13 +260,10 @@ - завершение подключения по персональному приглашению - просмотр и изменение разрешенных профильных данных - подключение доступных каналов уведомлений -- просмотр каталога готовой продукции -- выбор параметров товара -- добавление позиций в корзину -- отправка заявки на заказ -- отправка заявки на расчет -- просмотр списка заявок и заказов -- просмотр карточки заявки и карточки заказа +- просмотр сводки по компании +- просмотр баланса или задолженности +- просмотр списка заказов +- просмотр карточки заказа, состава заказа, статуса и истории изменений - просмотр истории уведомлений - просмотр бонусного баланса и истории бонусных операций - подача заявки на использование либо вывод бонусов при наличии соответствующих правил @@ -369,16 +275,12 @@ Менеджеру должны быть доступны следующие действия: -- создание или выбор клиентской карточки -- привязка клиента к контрагенту и назначение ответственного сопровождения +- создание и подтверждение клиентской карточки по ИНН и ОГРН/ОГРНИП +- назначение ответственного сопровождения - отправка персонального приглашения клиенту -- просмотр и обработка заявок на заказ -- просмотр и обработка заявок на расчет -- указание стоимости, условий поставки и сопроводительного комментария -- публикация условий клиенту -- перевод заявки в работу -- отмена заявки при наличии оснований -- просмотр карточек клиентов, заявок и заказов +- просмотр карточек клиентов и заказов +- просмотр баланса, задолженности и истории заказов клиента +- контроль сопоставления данных из 1С с подтвержденными клиентскими карточками - выполнение операций в бонусном контуре в пределах полномочий == Роль суперменеджера @@ -388,9 +290,7 @@ Суперменеджеру должны быть доступны следующие действия: -- доступ ко всем клиентам, заявкам и заказам -- управление параметрами каталога -- управление описаниями и наборами параметров товаров +- доступ ко всем клиентам и заказам - управление настройками уведомлений - управление параметрами интеграции и синхронизации - расширенное управление бонусным и реферальным контуром @@ -416,41 +316,25 @@ [Нет], [Да], [Да], - [Просмотр каталога], + [Просмотр баланса и задолженности], [Да], [Да], [Да], - [Выбор параметров и добавление в корзину], + [Просмотр списка и карточки заказов], [Да], - [Нет], - [Нет], - [Отправка заявки на заказ], [Да], - [Нет], - [Нет], - [Отправка заявки на расчет], [Да], - [Нет], - [Нет], - [Назначение стоимости и условий поставки], + [Создание клиентской карточки], [Нет], [Да], [Да], - [Публикация условий клиенту], - [Нет], - [Да], - [Да], - [Перевод заявки в работу], - [Нет], - [Да], - [Да], - [Отмена заявки], - [Нет], - [Да], - [Да], - [Управление параметрами каталога], + [Создание заказа из личного кабинета], [Нет], [Нет], + [Нет], + [Контроль синхронизации с 1С], + [Нет], + [Да], [Да], [Управление уведомлениями], [Нет], @@ -477,7 +361,7 @@ - доступ клиента только к данным собственного контрагента - ограничение административных функций в соответствии с ролью - журналирование значимых пользовательских действий -- хранение истории изменения статусов, условий заявок и бонусных операций +- хранение истории изменения статусов заказов и бонусных операций = Требования к данным и сущностям @@ -492,9 +376,8 @@ - пользователей и ролей - компаний и профилей контрагентов - адресов доставки -- каталога и складских остатков -- корзины и ее позиций -- заказов и расчетных заявок +- заказов, полученных из 1С +- состава заказов - событий изменения статусов - подключений мессенджеров - бонусных и реферальных сущностей @@ -531,27 +414,9 @@ [MessengerConnection], [Подключение мессенджера], [Связка пользователя с Telegram или MAX], - [Product], - [Товар], - [Карточка товарной позиции каталога], - [CatalogProductTypeSetting], - [Настройки типа товара], - [Правила параметров и кастомизации по товарному направлению], - [Cart], - [Корзина], - [Корзина клиента], - [CartItem], - [Позиция корзины], - [Конкретный выбранный товар в корзине], - [Warehouse], - [Склад], - [Справочник складов], - [ProductStock], - [Складской остаток], - [Остаток товара на складе], [Order], - [Заказ / заявка], - [Единая заказная сущность для готовой продукции и расчета], + [Заказ], + [Заказ клиента, полученный из 1С], [OrderItem], [Позиция заказа], [Состав заказа], @@ -579,7 +444,6 @@ - UserRole: CLIENT, MANAGER, SUPER_MANAGER - RegistrationStatus: PENDING, APPROVED, REJECTED - MessengerType: TELEGRAM, MAX -- OrderKind: READY, CALCULATION - OrderStatus: NEW, MANAGER_PROCESSING, WAITING_DOUBLE_CONFIRM, CLIENT_REJECTED, MANAGER_REJECTED, MANAGER_BLOCKED, CONFIRMED, IN_PROGRESS, COMPLETED - WithdrawalStatus: PENDING, APPROVED, REJECTED @@ -616,7 +480,7 @@ Назначение: - хранение клиентской, менеджерской или административной учетной записи -- связывание пользователя с заказами, корзиной, бонусами и адресами +- связывание пользователя с компанией, заказами, бонусами и адресами Основные поля: @@ -634,7 +498,6 @@ - пользователь может быть связан с компанией - пользователь может иметь профиль контрагента - пользователь может иметь адреса доставки -- пользователь может иметь корзину - пользователь может выступать клиентом или менеджером в заказах - пользователь может иметь бонусные операции и заявки на вывод @@ -646,7 +509,7 @@ Назначение: - хранение адресов доставки клиента -- выбор адреса по умолчанию для корзины и заказов +- выбор адреса по умолчанию для заказов, если адрес используется в данных клиента Основные поля: @@ -731,178 +594,40 @@ - isActive - createdAt -== Каталог и складской контур - - -=== Product - - -Русское наименование: Товар - -Назначение: - -- хранение карточки товарной позиции каталога -- хранение параметров товара и признаков кастомизации - -Основные поля: - -- id -- sku -- name -- productType -- widthMm -- lengthM -- thicknessMicron -- sleeveBrand -- quantityPerBox -- tags -- description -- isCustomizable -- isActive -- createdAt -- updatedAt - -=== CatalogProductTypeSetting - - -Русское наименование: Настройки типа товара - -Назначение: - -- хранение правил параметров по товарному направлению -- хранение разрешений на кастомизацию - -Основные поля: - -- id -- productType -- showQuantityPerBox -- allowCustomLength -- customLengthMinM -- customLengthMaxM -- customLengthStepM -- allowCustomSleeveBrand -- allowCustomLabel -- widthOptionsMm -- lengthOptionsM -- thicknessOptionsMicron -- sleeveOptions -- colorOptions -- labelOptions -- createdAt -- updatedAt - -=== Warehouse - - -Русское наименование: Склад - -Назначение: - -- хранение справочника складов - -Основные поля: - -- id -- code -- name -- createdAt -- updatedAt - -=== ProductStock - - -Русское наименование: Складской остаток - -Назначение: - -- хранение остатка товара на конкретном складе - -Основные поля: - -- id -- productId -- warehouseId -- availableQty -- updatedAt - -== Корзина, заявки и заказы - - -=== Cart - - -Русское наименование: Корзина - -Назначение: - -- хранение текущего набора выбранных клиентом позиций - -Основные поля: - -- id -- userId -- deliveryAddressId -- createdAt -- updatedAt - -=== CartItem - - -Русское наименование: Позиция корзины - -Назначение: - -- хранение одной выбранной клиентом позиции с параметрами и количеством - -Основные поля: - -- id -- cartId -- productId -- productName -- sku -- isCustomizable -- quantity -- parameters -- createdAt -- updatedAt +== Заказы и данные из 1С === Order -Русское наименование: Заказ / заявка +Русское наименование: Заказ Назначение: -- хранение готовой заказной заявки и расчетной заявки в единой сущности -- хранение согласованных менеджером условий и статуса работы +- хранение заказа клиента, полученного из 1С +- хранение текущего статуса, стоимости, условий, состава и служебных данных синхронизации Основные поля: - id - code -- kind - customerId - deliveryAddressId - deliveryAddress - managerId - status -- clientApproved -- managerApproved -- blockReason - deliveryTerms - deliveryFee - totalPrice -- calculationPayload +- externalId +- sourceUpdatedAt +- lastSyncAt - createdAt - updatedAt Комментарий к модели: -- kind = READY означает сценарий заказа готовой продукции -- kind = CALCULATION означает сценарий расчета индивидуальной продукции -- поле calculationPayload хранит параметры расчетной заявки +- заказ создается или обновляется на основании данных, полученных из 1С +- клиент не создает заказ через личный кабинет === OrderItem @@ -930,7 +655,7 @@ Назначение: -- хранение истории изменения статусов заказа или заявки +- хранение истории изменения статусов заказа Основные поля: @@ -1007,11 +732,8 @@ Укрупненная структура связей определяется следующими правилами: - Company объединяет пользователей одной клиентской организации -- User связан с CounterpartyProfile, DeliveryAddress, MessengerConnection, Cart, Order, BonusTransaction и RewardWithdrawalRequest -- Cart содержит набор CartItem, привязанных к конкретным Product +- User связан с CounterpartyProfile, DeliveryAddress, MessengerConnection, Order, BonusTransaction и RewardWithdrawalRequest - Order содержит набор OrderItem и историю OrderStatusEvent -- Product связан с остатками ProductStock, распределенными по сущностям Warehouse -- настройки параметров по товарному направлению хранятся в CatalogProductTypeSetting - реферальные связи реализуются через ReferralLink, связывающий одного пользователя с другим пользователем = Требования к интерфейсу, прототипам и дизайну @@ -1035,23 +757,11 @@ [Главная страница], [/], [клиент], - [стартовый экран каталога], - [Каталог], - [/products], - [клиент], - [выбор товарного направления], - [Карточка товара], - [/products/\[slug\]], - [клиент], - [выбор параметров, просмотр вариантов, добавление в корзину], - [Корзина], - [/cart], - [клиент], - [формирование и отправка заявки], + [сводка по заказам, балансу и задолженности], [Список заказов клиента], [/client-orders], [клиент], - [просмотр истории заявок и заказов], + [просмотр истории заказов], [Карточка заказа клиента], [/client-orders/\[id\]], [клиент], @@ -1091,15 +801,11 @@ [Список заказов], [/orders], [менеджер], - [обработка заказного контура], + [просмотр заказов по клиентам], [Карточка заказа], [/orders/\[id\]], [менеджер], - [обработка условий, статуса и доставки], - [Настройки каталога], - [/catalog-settings], - [суперменеджер], - [параметры товарных направлений], + [просмотр состава, статуса и данных из 1С], [Настройки синхронизации], [/settings-sync], [суперменеджер], @@ -1135,18 +841,9 @@ [/login], [Вход], [Вход и первичный сценарий доступа], - [/products], - [Каталог продукции], - [Список товарных направлений], - [/products/\[slug\]], - [Карточка товара], - [Выбор параметров, просмотр вариантов, добавление в корзину], - [/cart], - [Корзина], - [Состав выбранных позиций и отправка заявки], [/client-orders], [Список заказов клиента], - [История заявок и заказов клиента], + [История заказов клиента], [/client-orders/\[id\]], [Карточка заказа клиента], [Детали конкретного заказа клиента], @@ -1217,13 +914,10 @@ [Создание приглашения на подключение], [/orders], [Список заказов], - [Очередь заказов и заявок для менеджера], + [Заказы клиентов, полученные из 1С], [/orders/\[id\]], [Карточка заказа], - [Обработка стоимости, условий поставки и статуса], - [/catalog-settings], - [Настройки каталога], - [Параметры товарных направлений и кастомизации], + [Состав, статус, баланс и служебные данные синхронизации], [/settings-sync], [1С / синхронизация], [Управление и мониторинг синхронизации], @@ -1274,13 +968,13 @@ - явное отображение статуса объекта - соответствие доступных действий роли пользователя - единый визуальный подход для клиентского и менеджерского контуров -- понятное отображение параметров товара, условий заказа и бонусных операций +- понятное отображение состава заказа, условий, баланса, задолженности и бонусных операций -Для экранов, связанных с товарами, заявками и заказами, должны выполняться дополнительные требования: +Для экранов, связанных с заказами и задолженностью, должны выполняться дополнительные требования: -- цена не отображается клиенту до публикации условий менеджером -- остатки и доступные варианты отображаются в наглядном виде -- пользователь понимает ограничения выбора и возможность кастомизации +- клиент видит только данные своей подтвержденной компании +- сумма, условия и статусы отображаются по данным, полученным из 1С +- дата актуальности данных должна быть видна в ключевых местах интерфейса Ниже приведены низкодетализированные wireframe-прототипы. Они используются как визуальная фиксация состава страниц, ключевых блоков и пользовательских действий. @@ -1301,16 +995,19 @@ Назначение страницы: -- отображение каталога товарных направлений -- переход к карточке выбранного типа товара +- отображение сводки по клиентской компании +- просмотр текущего баланса или задолженности +- просмотр последних заказов и статусов Состав страницы: - верхняя навигация -- заголовок раздела -- поиск по типу товара -- сетка карточек товарных направлений -- переход в карточку выбранного товарного направления +- карточка компании +- блок баланса или задолженности +- дата актуальности данных +- список последних заказов +- переход к полному списку заказов +- блок последних уведомлений Wireframe-прототип: @@ -1320,121 +1017,22 @@ Wireframe-прототип: ) -=== Каталог продукции - - -Назначение страницы: - -- отображение товарных направлений -- переход к карточке выбранного типа товара - -Состав страницы: - -- заголовок раздела -- поиск при необходимости -- сетка карточек товарных направлений -- карточка каждого товарного направления с изображением и наименованием -- переход в карточку выбранного товарного направления - -Wireframe-прототип: - -#figure( - image("public/prototypes/catalog-grid.svg", width: 100%), - caption: [Прототип каталога продукции], -) - - -=== Карточка товара - - -Назначение страницы: - -- выбор параметров товара -- просмотр стандартных вариантов -- просмотр складских остатков -- добавление выбранной позиции в корзину - -Состав страницы: - -- заголовок товара -- изображение товара -- блок выбора параметров -- блок пояснений по параметрам -- блок индивидуальных возможностей, если они разрешены -- блок добавления в корзину -- таблица доступных вариантов - -Маршрут страницы: - -- /products/[slug] - -Wireframe-прототип: - -#figure( - image("public/prototypes/product-card.svg", width: 100%), - caption: [Прототип карточки товара], -) - - -Состав блока выбора параметров: - -- ширина -- длина -- толщина -- тип втулки -- цвет -- надпись -- индивидуальные опции при наличии разрешения - -Состав блока пояснений: - -- описание каждого параметра простым деловым языком -- ограничения по индивидуальной длине -- правила по втулке с логотипом -- правила по нанесению индивидуальной надписи - -=== Корзина - - -Назначение страницы: - -- просмотр выбранных позиций -- изменение количества -- удаление позиции -- отправка заявки на заказ - -Состав страницы: - -- список позиций -- параметры и количество -- комментарий клиента -- действие отправки заявки -- выбранный адрес доставки -- итоговая сводка по количеству позиций - -Wireframe-прототип: - -#figure( - image("public/prototypes/cart.svg", width: 100%), - caption: [Прототип корзины], -) - - -=== Карточка заявки или заказа +=== Карточка заказа Назначение страницы: - просмотр состава - просмотр статуса -- просмотр стоимости и условий поставки после публикации +- просмотр стоимости и условий поставки - просмотр истории изменений +- просмотр даты актуальности данных Wireframe-прототип: #figure( image("public/prototypes/client-order.svg", width: 100%), - caption: [Прототип карточки заявки или заказа], + caption: [Прототип карточки заказа], ) @@ -1443,9 +1041,10 @@ Wireframe-прототип: - номер документа - статус - состав позиций -- стоимость после публикации менеджером +- стоимость - условия поставки и доставки - история статусов +- дата актуальности данных - системные комментарии === Страница входа и завершения приглашения @@ -1479,6 +1078,7 @@ Wireframe-прототип: - просмотр текущих и архивных заказов - фильтрация по периоду и статусу +- просмотр даты актуальности списка Состав страницы: @@ -1491,7 +1091,7 @@ Wireframe-прототип: Назначение страницы: -- просмотр истории уведомлений по заказам, заявкам и бонусным операциям +- просмотр истории уведомлений по заказам, задолженности и бонусным операциям === Бонусный кабинет @@ -1549,12 +1149,16 @@ Wireframe-прототип: Назначение страницы: - просмотр сведений о компании -- просмотр истории заявок и заказов +- просмотр истории заказов +- просмотр баланса и задолженности Состав страницы: - карточка компании и контактных данных - реквизиты контрагента +- ИНН и ОГРН/ОГРНИП +- статус подтверждения клиента +- баланс или задолженность - список заказов клиента Wireframe-прототип: @@ -1565,33 +1169,34 @@ Wireframe-прототип: ) -=== Карточка обработки заявки +=== Карточка заказа менеджера Назначение страницы: -- просмотр состава заявки -- ввод коммерческих условий -- публикация условий клиенту -- перевод заявки в работу либо отмена +- просмотр состава заказа +- просмотр статуса, стоимости и условий +- просмотр служебных данных синхронизации +- проверка связи заказа с клиентской карточкой Wireframe-прототип: #figure( image("public/prototypes/manager-order.svg", width: 100%), - caption: [Прототип карточки обработки заявки], + caption: [Прототип карточки заказа менеджера], ) Состав страницы: - клиент и контрагент -- состав позиции или расчетный payload +- ИНН и ОГРН/ОГРНИП +- состав заказа - стоимость - доставка -- комментарий менеджера +- дата актуальности данных - история изменений -- блок действий со статусом +- служебные сведения о последней синхронизации === Список заказов менеджера @@ -1600,7 +1205,7 @@ Wireframe-прототип: - просмотр заказов по клиентам - фильтрация по статусам -- переход к обработке конкретного заказа +- переход к карточке конкретного заказа Wireframe-прототип: @@ -1610,31 +1215,6 @@ Wireframe-прототип: ) -=== Настройки каталога - - -Назначение страницы: - -- управление параметрами товарных направлений -- управление стандартными значениями параметров -- управление возможностями кастомизации - -Состав страницы: - -- список товарных направлений -- карточка настроек конкретного направления -- чекбоксы разрешений кастомизации -- списки стандартных параметров -- единое действие сохранения настроек - -Wireframe-прототип: - -#figure( - image("public/prototypes/catalog-settings.svg", width: 100%), - caption: [Прототип настроек каталога], -) - - === Настройки синхронизации @@ -1711,42 +1291,42 @@ Wireframe-прототип: == Интеграция с 1С -Интеграция с 1С должна обеспечивать обмен данными, необходимыми для сопровождения каталога, заказов, статусов, остатков и сведений о задолженности клиента. +Интеграция с 1С должна обеспечивать обмен данными, необходимыми для сопровождения подтвержденных клиентов, заказов, состава заказов, статусов, условий и сведений о задолженности клиента. Система должна обеспечивать получение из 1С следующих данных: - сведения о контрагентах -- каталог товаров -- характеристики товаров -- складские остатки - сведения о заказах +- состав заказов - статусы заказов - изменения состава, стоимости, доставки и иных существенных параметров заказа - текущая задолженность клиента - дата актуальности сведений, полученных из 1С -1С рассматривается как первичный источник учетных данных по контрагентам, заказам, складам, статусам, стоимости, доставке и задолженности. Личный кабинет отображает эти сведения, связывает их с созданными менеджером кабинетами клиентов и фиксирует дату их актуальности. +1С рассматривается как первичный источник учетных данных по заказам, статусам, стоимости, доставке и задолженности. Личный кабинет отображает эти сведения только для клиентских карточек, заранее созданных и подтвержденных менеджером по ИНН и ОГРН/ОГРНИП, и фиксирует дату актуальности данных. == Основной способ обмена с 1С -Основным способом интеграции является файловый обмен по согласованным структурам. 1С формирует регламентные snapshot-выгрузки с согласованным составом учетных данных, а личный кабинет принимает эти выгрузки, обновляет локальное представление данных и показывает клиентам только сведения, доступные их контрагенту. +Основным способом интеграции является файловый обмен по FTP по согласованным структурам. 1С формирует регламентные snapshot-выгрузки с согласованным составом учетных данных, а личный кабинет принимает эти выгрузки, обновляет локальное представление данных и показывает клиентам только сведения, относящиеся к их подтвержденной клиентской карточке. В качестве базового формата обмена используется JSON. Если на стороне 1С по техническим причинам удобнее использовать XML или CSV, стороны могут согласовать эквивалентную структуру без изменения состава передаваемых данных. Файлы обмена могут передаваться одним из согласованных способов: - загрузка файла в согласованное файловое хранилище +- загрузка файла на согласованный FTP/SFTP-ресурс - передача файла через HTTP endpoint личного кабинета - передача через иной согласованный защищенный канал, доступный заказчику и 1С Базовая логика обмена: -+ 1С формирует выгрузку контрагентов, балансов, заказов, статусов, каталога и остатков в согласованном объеме. -+ Личный кабинет принимает snapshot, сопоставляет данные по внешним идентификаторам 1С, ИНН и иным согласованным ключам. -+ Менеджер при создании доступа выбирает или связывает кабинет клиента с контрагентом, полученным из 1С. -+ Каталог и остатки передаются как актуальный общий snapshot. -+ Балансы и задолженность передаются как состояние по контрагентам на дату формирования выгрузки. ++ Менеджер создает и подтверждает клиентскую карточку в личном кабинете с ИНН и ОГРН/ОГРНИП. ++ 1С формирует выгрузку контрагентов, балансов, заказов, статусов и состава заказов в согласованном объеме. ++ Личный кабинет принимает snapshot и сопоставляет данные только с клиентскими карточками, которые уже существуют в системе и подтверждены менеджером. ++ Основными ключами сопоставления являются ИНН и ОГРН/ОГРНИП; внешний идентификатор 1С используется как дополнительный технический ключ после успешного сопоставления. ++ Если в выгрузке присутствуют данные по контрагенту, который не создан и не подтвержден в личном кабинете, такие данные не загружаются в клиентский контур и не создают новый кабинет автоматически. ++ Балансы и задолженность передаются как состояние по подтвержденным клиентам на дату формирования выгрузки. + Заказы и статусы передаются по контрагентам за согласованный период, по умолчанию за последние 60 календарных дней, а также по активным заказам вне этого периода при необходимости отображения клиенту. == Состав файлов обмена @@ -1754,12 +1334,11 @@ Wireframe-прототип: Минимальный состав файлов обмена: -- `counterparties_snapshot` — контрагенты, реквизиты и признаки доступности для клиентского кабинета +- `counterparties_snapshot` — контрагенты, ИНН, ОГРН/ОГРНИП и реквизиты для сопоставления с подтвержденными клиентами личного кабинета - `balance_snapshot` — баланс, задолженность и дата актуальности по контрагентам -- `catalog_snapshot` — актуальная продукция, характеристики и складские остатки - `orders_snapshot` — заказы, статусы, состав, стоимость, доставка и существенные изменения по заказам за согласованный период -Файлы `counterparties_snapshot`, `balance_snapshot`, `catalog_snapshot` и `orders_snapshot` передаются из 1С в личный кабинет. Обратная передача файлов из личного кабинета в 1С выполняется только для согласованных клиентских заявок или иных событий, если такой контур отдельно согласован сторонами. +Файлы `counterparties_snapshot`, `balance_snapshot` и `orders_snapshot` передаются из 1С в личный кабинет. Обратная передача файлов из личного кабинета в 1С не входит в базовый объем, если такой контур отдельно не согласован сторонами. Состав файлов может быть расширен по согласованию сторон, если в ходе интеграции появится отдельный тип данных, который нецелесообразно включать в существующие файлы обмена. @@ -1778,7 +1357,7 @@ Wireframe-прототип: Личный кабинет должен хранить журнал обработанных файлов обмена и не обрабатывать повторно файл с тем же `document_type`, `snapshot_id` и `checksum`. -Если 1С может формировать только полную выгрузку, личный кабинет должен принимать полный snapshot и обновлять данные идемпотентно по внешним идентификаторам 1С и дате изменения объекта. +Если 1С может формировать только полную выгрузку, личный кабинет должен принимать полный snapshot, но применять его только к подтвержденным клиентским карточкам, найденным по ИНН и ОГРН/ОГРНИП. Для заказов регулярная синхронизация ограничивается согласованным периодом. По умолчанию передаются заказы за последние 60 календарных дней, а также активные заказы, если они не попадают в этот период, но должны отображаться клиенту. @@ -1796,9 +1375,9 @@ Wireframe-прототип: { "counterparty_external_id": "1c-counterparty-77", "inn": "7700000000", + "ogrn": "1027700000000", "name": "ООО Клиент", "kpp": "770001001", - "cabinet_allowed": true, "manager_external_id": "1c-manager-12" } ] @@ -1819,6 +1398,8 @@ Wireframe-прототип: "balances": [ { "counterparty_external_id": "1c-counterparty-77", + "inn": "7700000000", + "ogrn": "1027700000000", "debt_amount": 125000, "currency": "RUB" } @@ -1826,34 +1407,6 @@ Wireframe-прототип: } ``` -== Пример catalog_snapshot - - -```json -{ - "document_type": "catalog_snapshot", - "schema_version": "1.0", - "snapshot_id": "1c-catalog-2026-05-04T10:00:00", - "generated_at": "2026-05-04T10:00:00+03:00", - "source": "1c", - "products": [ - { - "product_external_id": "1c-product-0001", - "article": "FRG-101", - "name": "Упаковочный скотч", - "is_active": true, - "stocks": [ - { - "warehouse_external_id": "1c-warehouse-main", - "warehouse_name": "Основной склад", - "quantity": 120 - } - ] - } - ] -} -``` - == Пример orders_snapshot @@ -1871,12 +1424,22 @@ Wireframe-прототип: "order_external_id": "1c-order-10025", "cabinet_order_id": "FRG-2030", "counterparty_external_id": "1c-counterparty-77", + "inn": "7700000000", + "ogrn": "1027700000000", "status": "in_production", "status_name": "В производстве", "total_amount": 145000, "currency": "RUB", "delivery_date": "2026-05-12", - "updated_at": "2026-05-04T09:45:00+03:00" + "updated_at": "2026-05-04T09:45:00+03:00", + "items": [ + { + "name": "Позиция заказа", + "quantity": 10, + "unit": "шт", + "amount": 45000 + } + ] } ] } @@ -1928,10 +1491,11 @@ Wireframe-прототип: Интеграция с 1С считается готовой в согласованном объеме, если: -- контрагенты из 1С принимаются и доступны менеджеру для привязки клиентского кабинета -- каталог и характеристики товаров получаются и отображаются в личном кабинете -- остатки по складам отображаются в карточках товаров +- данные из 1С сопоставляются только с клиентами, заранее созданными и подтвержденными менеджером +- сопоставление выполняется по ИНН и ОГРН/ОГРНИП +- данные по отсутствующим в личном кабинете клиентам не создают новый кабинет автоматически - заказы клиента получаются и отображаются с актуальными статусами +- состав заказов отображается в карточке заказа - изменения заказа из 1С отображаются в карточке заказа - текущая задолженность клиента и дата актуальности данных отображаются в предусмотренных интерфейсах - повторная передача одного и того же файла обмена не приводит к дублированию данных @@ -2006,13 +1570,12 @@ Wireframe-прототип: Ключевые экранные маршруты текущей реализации: -- /products и /products/[slug] — каталог и карточка товара -- /cart — корзина -- /client-orders и /client-orders/[id] — клиентские заявки и заказы -- /clients и /clients/[id] — менеджерский контур клиентов -- /orders и /orders/[id] — менеджерский контур заказов -- /catalog-settings — административные настройки каталога -- /bonus-program, /bonus-system/\* — бонусный контур +- `/` — клиентская сводка по заказам, балансу и задолженности +- `/client-orders` и `/client-orders/[id]` — клиентские заказы +- `/clients` и `/clients/[id]` — менеджерский контур клиентов +- `/orders` и `/orders/[id]` — менеджерский контур заказов +- `/settings-sync` — настройки и мониторинг синхронизации +- `/bonus-program`, `/bonus-system/*` — бонусный контур == Карта слоев и компонентов @@ -2197,13 +1760,13 @@ Wireframe-прототип: - загружает project secrets - экспортирует секреты в runtime environment процесса -== Структура сервисных каталогов +== Структура сервисных директорий Текущая сервисная структура репозитория: - web-frontend — Nuxt-приложение, GraphQL operations, VitePress-документация -- apollo-backend — Apollo Server, Prisma schema, миграции, импорт каталога +- apollo-backend — Apollo Server, Prisma schema, миграции, интеграционная обработка данных - tg-bot — Telegram-сервис - max-bot — MAX-сервис - bonus-bot — бонусный сервис @@ -2425,8 +1988,8 @@ Wireframe-прототип: При штатной эксплуатации система должна обеспечивать: - приемлемое время открытия основных экранов -- приемлемое время отправки заявок и выполнения пользовательских действий -- отображение каталогов, карточек и заказов без заметных задержек при типовом объеме данных +- приемлемое время выполнения пользовательских действий +- отображение клиентской сводки, карточек заказов и истории заказов без заметных задержек при типовом объеме данных Точные количественные показатели производительности подлежат фиксации в рабочей документации по инфраструктуре и тестированию. @@ -2447,7 +2010,7 @@ Wireframe-прототип: Система должна обеспечивать: - сохранность пользовательских данных -- сохранность истории изменений по заявкам, заказам и бонусным операциям +- сохранность истории изменений по заказам и бонусным операциям - фиксацию ошибок интеграционного обмена - фиксацию значимых системных и пользовательских событий @@ -2458,7 +2021,7 @@ Wireframe-прототип: - сопровождения и развития клиентского контура - сопровождения и развития менеджерского контура -- изменения параметров каталога и уведомлений без переработки базовой структуры системы +- изменения параметров уведомлений без переработки базовой структуры системы - расширения интеграционного обмена с 1С и иными внешними системами == Требования к данным и актуальности сведений @@ -2468,7 +2031,7 @@ Wireframe-прототип: - хранение актуального состояния пользовательских данных - отображение даты актуальности сведений, полученных из внешних систем, когда это применимо -- защиту от потери данных при обновлении параметров каталога и заказных сущностей +- защиту от потери данных при обновлении заказов и балансов из файлов обмена == Требования к документации @@ -2514,12 +2077,11 @@ Wireframe-прототип: - вход в личный кабинет и завершение подключения по приглашению - работу с профилем и каналами уведомлений -- просмотр каталога готовой продукции -- добавление товаров в корзину и отправку заявки -- создание заявки на расчет индивидуальной продукции +- просмотр клиентской сводки +- просмотр баланса и задолженности - просмотр заказов, статусов, условий и истории изменений - работу с бонусным кабинетом, бонусным балансом и заявками на вывод -- действия менеджера по обработке клиентов, заявок, заказов и бонусных операций +- действия менеджера по созданию клиентов, приглашению клиентов, контролю заказов и бонусным операциям - действия суперменеджера в административных разделах, если они отличаются от действий менеджера Документация должна быть написана прикладным языком и ориентирована на выполнение пользовательских сценариев, а не на описание внутренней реализации. @@ -2600,11 +2162,10 @@ Wireframe-прототип: В состав этапа входят: - подключение клиентов по приглашению менеджера +- создание и подтверждение клиентских карточек по ИНН и ОГРН/ОГРНИП - роли и разграничение доступа -- каталог готовой продукции -- корзина и заявки на заказ -- заявки на расчет индивидуальной продукции -- обработка заявок менеджером +- клиентская сводка по заказам, балансу и задолженности +- просмотр списка и карточек заказов - статусы и история изменений - уведомления в согласованном объеме - бонусный и реферальный контур @@ -2625,10 +2186,10 @@ Wireframe-прототип: В состав этапа входят: -- сопоставление внутренних идентификаторов и идентификаторов 1С -- настройка приема файлов обмена от 1С -- настройка передачи файлов обмена из личного кабинета в 1С -- проверка получения каталога, остатков, заказов, статусов и задолженности +- сопоставление клиентских карточек с данными 1С по ИНН и ОГРН/ОГРНИП +- настройка приема файлов обмена от 1С через согласованный FTP/SFTP-ресурс или иной согласованный канал +- проверка получения заказов, состава заказов, статусов, баланса и задолженности +- проверка игнорирования данных по клиентам, не созданным и не подтвержденным в личном кабинете - проверка обработки дублей и ошибок обмена - проверка отображения даты актуальности данных - итоговая проверка программного продукта в согласованном эксплуатационном контуре @@ -2660,10 +2221,10 @@ Wireframe-прототип: - клиентский контур - менеджерский контур -- каталог готовой продукции -- сценарии заявок на заказ -- сценарии заявок на расчет +- создание и приглашение клиентов менеджером +- сопоставление клиентов по ИНН и ОГРН/ОГРНИП - сопровождение заказов +- отображение баланса и задолженности - уведомления - бонусный и реферальный контур - интеграционный обмен с 1С в согласованном объеме @@ -2689,10 +2250,9 @@ Wireframe-прототип: - обязательные пользовательские сценарии выполняются корректно - разграничение ролей и прав доступа реализовано корректно -- заявкам, заказам и бонусным операциям присваиваются и отображаются корректные статусы -- каталог и остатки отображаются корректно -- цена не отображается клиенту до публикации условий менеджером -- менеджер имеет возможность обработать заявку и опубликовать условия +- заказам и бонусным операциям присваиваются и отображаются корректные статусы +- клиент видит только данные своей подтвержденной компании +- данные по неподтвержденным клиентам из 1С не создают кабинеты и не отображаются клиентам - история изменений сохраняется и доступна в предусмотренных сценариях - сведения из 1С отображаются в согласованном объеме - текущая задолженность клиента и дата актуальности данных отображаются при наличии этих сведений из 1С