From dfc053b7233c70c933b02c1695505f8d1f742754 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Thu, 14 May 2026 08:30:46 +0700 Subject: [PATCH] Clarify invite-only client onboarding --- docs/public/prototypes/sync-settings.svg | 2 +- docs/scripts/generate-prototypes.mjs | 4 +- docs/tz-fregat.typ | 111 +++++++++-------------- 3 files changed, 48 insertions(+), 69 deletions(-) diff --git a/docs/public/prototypes/sync-settings.svg b/docs/public/prototypes/sync-settings.svg index 367da89..aae9ed0 100644 --- a/docs/public/prototypes/sync-settings.svg +++ b/docs/public/prototypes/sync-settings.svg @@ -1 +1 @@ -Настройки синхронизацииЗаказыБонусыНастройкиСтатус загрузки файлов обменаcatalog_snapshotКаталог и остаткиbalances_snapshotЗадолженность клиентовorders_snapshotЗаказы клиентовПоследние загрузкиКаталог и остаткиЗагружено 2 418 записей · последний run сегодняРаботаетЗадолженность клиентовБаланс по клиентам с личным кабинетомРаботаетЗаказы клиентовСтатусы заказов за рабочий периодРаботает +Настройки синхронизацииЗаказыБонусыНастройкиСтатус загрузки файлов обменаcounterparties_snapshotКонтрагентыcatalog_snapshotКаталог и остаткиbalances_snapshotЗадолженность клиентовorders_snapshotЗаказы клиентовПоследние загрузкиКонтрагентыЗагружены реквизиты и признаки доступаРаботаетКаталог и остаткиЗагружено 2 418 записей · последний run сегодняРаботаетЗадолженность клиентовБаланс по клиентам с личным кабинетомРаботаетЗаказы клиентовСтатусы заказов за рабочий периодРаботает diff --git a/docs/scripts/generate-prototypes.mjs b/docs/scripts/generate-prototypes.mjs index 0bb8ef8..7dfee8e 100644 --- a/docs/scripts/generate-prototypes.mjs +++ b/docs/scripts/generate-prototypes.mjs @@ -444,13 +444,15 @@ const pages = { titleBlock('1С'), text(72, 168, 'Статус загрузки файлов обмена', { size: 16, weight: 500, fill: C.mid }), cardGrid(72, 230, [ + ['counterparties_snapshot', 'Контрагенты'], ['catalog_snapshot', 'Каталог и остатки'], ['balances_snapshot', 'Задолженность клиентов'], ['orders_snapshot', 'Заказы клиентов'], - ], 3), + ], 4), rect(72, 450, 1296, 250, { rx: 28 }), text(104, 494, 'Последние загрузки', { size: 24, weight: 800 }), orderRows(104, 530, 1232, [ + ['Контрагенты', 'Загружены реквизиты и признаки доступа', 'Работает'], ['Каталог и остатки', 'Загружено 2 418 записей · последний run сегодня', 'Работает'], ['Задолженность клиентов', 'Баланс по клиентам с личным кабинетом', 'Работает'], ['Заказы клиентов', 'Статусы заказов за рабочий период', 'Работает'], diff --git a/docs/tz-fregat.typ b/docs/tz-fregat.typ index 4c8a8cb..f4dde80 100644 --- a/docs/tz-fregat.typ +++ b/docs/tz-fregat.typ @@ -138,23 +138,22 @@ = Функциональные требования -== Требования к регистрации и подключению клиентов +== Требования к подключению клиентов -Система должна поддерживать два базовых сценария подключения клиента: +Система должна поддерживать подключение клиента только по инициативе менеджера: -- регистрация по персональному приглашению -- самостоятельная заявка на подключение +- менеджер создает или выбирает карточку клиента и привязывает ее к контрагенту +- менеджер направляет клиенту персональное приглашение на электронную почту +- клиент завершает подключение по персональной ссылке из письма Функциональные требования: -+ Менеджер должен иметь возможность направить клиенту приглашение на регистрацию по электронной почте. -+ Клиент должен иметь возможность завершить регистрацию по персональной ссылке. -+ Клиент должен иметь возможность подать заявку на подключение через публичную форму. -+ Самостоятельная заявка должна поступать в менеджерский контур на рассмотрение. -+ Менеджер должен иметь возможность подтвердить либо отклонить заявку на подключение. -+ При подтверждении заявки система должна предоставить клиенту возможность завершить регистрацию. -+ После завершения регистрации клиент должен получить доступ к личному кабинету. ++ Менеджер должен иметь возможность направить клиенту приглашение на подключение по электронной почте. ++ Менеджер должен иметь возможность связать приглашение с контрагентом, полученным из 1С либо заведенным для клиентской работы. ++ Клиент должен иметь возможность завершить подключение по персональной ссылке. ++ После завершения подключения клиент должен получить доступ к личному кабинету. ++ Публичная страница входа не должна содержать самостоятельную регистрацию или самостоятельную заявку на подключение. + Система должна поддерживать подключение доступных каналов уведомлений для клиентской учетной записи. == Требования к каталогу готовой продукции @@ -296,8 +295,7 @@ Система должна поддерживать уведомления по следующим событиям: -- приглашение к регистрации -- подтверждение либо отклонение заявки на подключение +- приглашение к подключению - публикация условий по заявке - изменение статуса заказа - изменение бонусного баланса @@ -350,8 +348,7 @@ Клиенту должны быть доступны следующие действия: -- завершение регистрации по персональному приглашению -- подача заявки на подключение +- завершение подключения по персональному приглашению - просмотр и изменение разрешенных профильных данных - подключение доступных каналов уведомлений - просмотр каталога готовой продукции @@ -372,9 +369,9 @@ Менеджеру должны быть доступны следующие действия: -- рассмотрение заявок на подключение клиентов -- подтверждение либо отклонение заявок на подключение +- создание или выбор клиентской карточки - привязка клиента к контрагенту и назначение ответственного сопровождения +- отправка персонального приглашения клиенту - просмотр и обработка заявок на заказ - просмотр и обработка заявок на расчет - указание стоимости, условий поставки и сопроводительного комментария @@ -411,14 +408,14 @@ [*Клиент*], [*Менеджер*], [*Суперменеджер*], - [Завершение регистрации], + [Завершение подключения], [Да], [Нет], [Нет], - [Подача заявки на подключение], + [Отправка приглашения клиенту], + [Нет], + [Да], [Да], - [Нет], - [Нет], [Просмотр каталога], [Да], [Да], @@ -528,12 +525,9 @@ [CounterpartyProfile], [Профиль контрагента], [Юридические и банковские реквизиты клиента], - [RegistrationRequest], - [Заявка на подключение], - [Самостоятельная заявка клиента на подключение], [Invitation], [Приглашение], - [Менеджерское приглашение на регистрацию], + [Менеджерское приглашение на подключение], [MessengerConnection], [Подключение мессенджера], [Связка пользователя с Telegram или MAX], @@ -694,29 +688,6 @@ - createdAt - updatedAt -=== RegistrationRequest - - -Русское наименование: Заявка на подключение - -Назначение: - -- хранение самостоятельной заявки клиента на подключение - -Основные поля: - -- id -- companyName -- inn -- contactName -- email -- status -- rejectionReason -- requesterId -- reviewedById -- createdAt -- updatedAt - === Invitation @@ -724,7 +695,7 @@ Назначение: -- хранение менеджерского приглашения клиента на регистрацию +- хранение менеджерского приглашения клиента на подключение к личному кабинету Основные поля: @@ -1116,7 +1087,7 @@ [Приглашение клиента], [/clients/invite], [менеджер], - [выдача приглашения на регистрацию], + [выдача приглашения на подключение], [Список заказов], [/orders], [менеджер], @@ -1243,7 +1214,7 @@ [Детали клиента, его заказы и бонусные данные], [/clients/invite], [Пригласить клиента], - [Создание приглашения на регистрацию], + [Создание приглашения на подключение], [/orders], [Список заказов], [Очередь заказов и заявок для менеджера], @@ -1477,12 +1448,13 @@ Wireframe-прототип: - история статусов - системные комментарии -=== Страница логина и регистрации +=== Страница входа и завершения приглашения Назначение страницы: - запуск входа в систему +- завершение подключения по персональной ссылке из приглашения - запуск сценариев входа через мессенджеры Состав страницы: @@ -1743,6 +1715,7 @@ Wireframe-прототип: Система должна обеспечивать получение из 1С следующих данных: +- сведения о контрагентах - каталог товаров - характеристики товаров - складские остатки @@ -1752,12 +1725,12 @@ Wireframe-прототип: - текущая задолженность клиента - дата актуальности сведений, полученных из 1С -1С рассматривается как первичный источник учетных данных по заказам, складам, статусам, стоимости, доставке и задолженности. Личный кабинет отображает эти сведения и фиксирует дату их актуальности. +1С рассматривается как первичный источник учетных данных по контрагентам, заказам, складам, статусам, стоимости, доставке и задолженности. Личный кабинет отображает эти сведения, связывает их с созданными менеджером кабинетами клиентов и фиксирует дату их актуальности. == Основной способ обмена с 1С -Основным способом интеграции является файловый обмен по согласованным структурам. Личный кабинет формирует список контрагентов, по которым требуется синхронизация, а 1С на основании этого списка формирует ответные выгрузки только по таким контрагентам и только в согласованном объеме. +Основным способом интеграции является файловый обмен по согласованным структурам. 1С формирует регламентные snapshot-выгрузки с согласованным составом учетных данных, а личный кабинет принимает эти выгрузки, обновляет локальное представление данных и показывает клиентам только сведения, доступные их контрагенту. В качестве базового формата обмена используется JSON. Если на стороне 1С по техническим причинам удобнее использовать XML или CSV, стороны могут согласовать эквивалентную структуру без изменения состава передаваемых данных. @@ -1769,23 +1742,24 @@ Wireframe-прототип: Базовая логика обмена: -+ Личный кабинет передает в 1С список контрагентов, у которых есть личный кабинет либо которые заведены в системе для клиентской работы. -+ 1С формирует выгрузки только по указанным контрагентам. ++ 1С формирует выгрузку контрагентов, балансов, заказов, статусов, каталога и остатков в согласованном объеме. ++ Личный кабинет принимает snapshot, сопоставляет данные по внешним идентификаторам 1С, ИНН и иным согласованным ключам. ++ Менеджер при создании доступа выбирает или связывает кабинет клиента с контрагентом, полученным из 1С. + Каталог и остатки передаются как актуальный общий snapshot. + Балансы и задолженность передаются как состояние по контрагентам на дату формирования выгрузки. -+ Заказы и статусы передаются по указанным контрагентам за согласованный период, по умолчанию за последние 60 календарных дней. ++ Заказы и статусы передаются по контрагентам за согласованный период, по умолчанию за последние 60 календарных дней, а также по активным заказам вне этого периода при необходимости отображения клиенту. == Состав файлов обмена Минимальный состав файлов обмена: -- `cabinet_counterparties` — список контрагентов из личного кабинета, по которым требуется синхронизация -- `balance_snapshot` — баланс, задолженность и дата актуальности по контрагентам из списка +- `counterparties_snapshot` — контрагенты, реквизиты и признаки доступности для клиентского кабинета +- `balance_snapshot` — баланс, задолженность и дата актуальности по контрагентам - `catalog_snapshot` — актуальная продукция, характеристики и складские остатки - `orders_snapshot` — заказы, статусы, состав, стоимость, доставка и существенные изменения по заказам за согласованный период -Файл `cabinet_counterparties` передается из личного кабинета в 1С. Файлы `balance_snapshot`, `catalog_snapshot` и `orders_snapshot` передаются из 1С в личный кабинет. +Файлы `counterparties_snapshot`, `balance_snapshot`, `catalog_snapshot` и `orders_snapshot` передаются из 1С в личный кабинет. Обратная передача файлов из личного кабинета в 1С выполняется только для согласованных клиентских заявок или иных событий, если такой контур отдельно согласован сторонами. Состав файлов может быть расширен по согласованию сторон, если в ходе интеграции появится отдельный тип данных, который нецелесообразно включать в существующие файлы обмена. @@ -1808,22 +1782,24 @@ Wireframe-прототип: Для заказов регулярная синхронизация ограничивается согласованным периодом. По умолчанию передаются заказы за последние 60 календарных дней, а также активные заказы, если они не попадают в этот период, но должны отображаться клиенту. -== Пример cabinet_counterparties +== Пример counterparties_snapshot ```json { - "document_type": "cabinet_counterparties", + "document_type": "counterparties_snapshot", "schema_version": "1.0", - "snapshot_id": "cabinet-counterparties-2026-05-04T10:00:00", + "snapshot_id": "1c-counterparties-2026-05-04T10:00:00", "generated_at": "2026-05-04T10:00:00+03:00", - "source": "cabinet", + "source": "1c", "counterparties": [ { "counterparty_external_id": "1c-counterparty-77", "inn": "7700000000", "name": "ООО Клиент", - "cabinet_enabled": true + "kpp": "770001001", + "cabinet_allowed": true, + "manager_external_id": "1c-manager-12" } ] } @@ -1952,6 +1928,7 @@ Wireframe-прототип: Интеграция с 1С считается готовой в согласованном объеме, если: +- контрагенты из 1С принимаются и доступны менеджеру для привязки клиентского кабинета - каталог и характеристики товаров получаются и отображаются в личном кабинете - остатки по складам отображаются в карточках товаров - заказы клиента получаются и отображаются с актуальными статусами @@ -2535,7 +2512,7 @@ Wireframe-прототип: Пользовательская документация должна описывать: -- вход в личный кабинет и завершение регистрации +- вход в личный кабинет и завершение подключения по приглашению - работу с профилем и каналами уведомлений - просмотр каталога готовой продукции - добавление товаров в корзину и отправку заявки @@ -2622,7 +2599,7 @@ Wireframe-прототип: В состав этапа входят: -- регистрация и подключение клиентов +- подключение клиентов по приглашению менеджера - роли и разграничение доступа - каталог готовой продукции - корзина и заявки на заказ