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 @@
-
+
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-прототип:
В состав этапа входят:
-- регистрация и подключение клиентов
+- подключение клиентов по приглашению менеджера
- роли и разграничение доступа
- каталог готовой продукции
- корзина и заявки на заказ