Define document exchange for 1C integration

This commit is contained in:
Ruslan Bakiev
2026-05-04 14:14:54 +07:00
parent b971444976
commit fb22a6b11d

View File

@@ -1724,8 +1724,8 @@ Wireframe-прототип:
Интеграционный контур должен обеспечивать:
- получение данных из 1С
- прием событий от 1С
- получение документов обмена из 1С
- передачу в 1С документов обмена, сформированных личным кабинетом
- передачу во внешние системы данных, необходимых для сопровождения заказов и клиентов, если такой обмен согласован сторонами
- сопоставление внутренних идентификаторов и идентификаторов внешних систем
- регистрацию входящих и исходящих операций обмена
@@ -1750,63 +1750,168 @@ Wireframe-прототип:
1С рассматривается как первичный источник учетных данных по заказам, складам, статусам, стоимости, доставке и задолженности. Личный кабинет отображает эти сведения и фиксирует дату их актуальности.
== События от 1С
== Основной способ обмена с 1С
Система должна поддерживать прием webhook-событий от 1С в согласованном формате.
Основным способом интеграции является документный обмен по согласованным структурам. 1С формирует документы обмена по расписанию либо по событию при наличии технической возможности, а личный кабинет принимает, валидирует и обрабатывает такие документы.
Минимальный состав событий:
В качестве базового формата обмена используется JSON. Если на стороне 1С по техническим причинам удобнее использовать XML или CSV, стороны могут согласовать эквивалентную структуру без изменения состава передаваемых данных.
- создание нового заказа
- изменение информации по заказу
- изменение статуса заказа
- изменение сроков, условий или параметров доставки
- изменение состава заказа
- изменение сведений о задолженности клиента, если такие данные передаются событийно
Документы обмена могут передаваться одним из согласованных способов:
Для каждого события должны фиксироваться:
- загрузка файла в согласованное файловое хранилище
- передача файла через HTTP endpoint личного кабинета
- передача через иной согласованный защищенный канал, доступный заказчику и 1С
- тип события
- внешний идентификатор объекта 1С
- внутренний идентификатор объекта, если сопоставление выполнено
- дата и время события
- источник события
- статус обработки
- текст ошибки при неуспешной обработке
Периодичность формирования документов обмена определяется возможностями 1С и требованиями к актуальности данных. Базовый режим: не реже одного раза в час для данных, влияющих на отображение каталога, остатков, заказов и задолженности.
Система должна защищаться от повторной обработки дублей webhook-событий.
== Методы получения данных из 1С
== Состав документов обмена
Система должна поддерживать получение данных из 1С через согласованные методы.
Минимальный состав документов обмена:
Минимальный состав методов:
- `catalog_snapshot` — каталог, характеристики товаров, складские остатки и дата актуальности данных
- `counterparty_snapshot` — сведения о контрагентах, доступных клиенту, и задолженность при наличии таких данных
- `order_status_snapshot` — заказы, статусы, состав, стоимость, доставка и существенные изменения по заказам
- `order_export` — заявки и заказы, сформированные в личном кабинете и передаваемые в 1С
- получение заказов клиента
- получение товарного каталога
- получение характеристик товаров
- получение доступных остатков по складам
- получение статусов и изменений по заказам
- получение текущей задолженности клиента и даты актуальности этих сведений
Документы `catalog_snapshot`, `counterparty_snapshot` и `order_status_snapshot` передаются от 1С в личный кабинет. Документ `order_export` передается из личного кабинета в 1С.
Точный набор методов, параметры запросов, формат ответов и ограничения по частоте вызовов фиксируются в интеграционной спецификации.
Состав документов может быть расширен по согласованию сторон, если в ходе интеграции появится отдельный тип данных, который нецелесообразно включать в существующие документы обмена.
== Требования к структурам обмена
== Определение обновлений и идемпотентность
Входные и выходные данные интеграционного слоя должны описываться в структурированном виде и позволять однозначно восстанавливать:
Каждый документ обмена должен содержать служебный блок с метаданными:
- тип объекта обмена
- идентификатор объекта
- дату и время события
- полезную нагрузку объекта
- статус обработки
- источник изменения
- `document_type` — тип документа обмена
- `schema_version` — версия структуры документа
- `snapshot_id` — уникальный идентификатор выгрузки
- `generated_at` — дата и время формирования документа на стороне источника
- `period_from` и `period_to` — период данных, если документ является выгрузкой за период
- `source` — источник документа
- `checksum` — контрольная сумма содержимого, если она формируется источником
Для обмена должны использоваться структурированные payload-форматы, пригодные для сериализации в JSON.
Личный кабинет должен хранить журнал обработанных документов обмена и не обрабатывать повторно документ с тем же `document_type`, `snapshot_id` и `checksum`.
Точная структура payload, схема подписи запросов и набор обязательных полей согласуются сторонами до начала этапа интеграции с 1С.
Если 1С может формировать только полную выгрузку, личный кабинет должен принимать полный snapshot и обновлять данные идемпотентно по внешним идентификаторам 1С и дате изменения объекта.
Если 1С может формировать выгрузку изменений за период, документ должен содержать данные за период с момента последней успешной синхронизации либо за иной согласованный период. Для заказов рекомендуется передавать:
- все открытые и активные заказы
- заказы, измененные за согласованный период
- заказы конкретных контрагентов, доступных пользователям личного кабинета
Для каждого объекта внутри документа обмена рекомендуется передавать `external_id`, `updated_at` и при наличии `deleted` или `is_active`, чтобы личный кабинет мог корректно обновить, скрыть или пометить объект как неактуальный.
== Пример структуры 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",
"period_from": null,
"period_to": "2026-05-04T10:00:00+03:00",
"source": "1c",
"checksum": "sha256:...",
"products": [
{
"external_id": "1c-product-0001",
"article": "FRG-101",
"name": "Упаковочный скотч",
"product_type": "packing_tape",
"is_active": true,
"updated_at": "2026-05-04T09:58:00+03:00",
"attributes": {
"width_mm": 48,
"length_m": 50,
"thickness_mkm": 43,
"color": "прозрачный"
},
"stocks": [
{
"warehouse_external_id": "1c-warehouse-main",
"warehouse_name": "Основной склад",
"quantity": 120
}
]
}
]
}
```
== Пример структуры order_status_snapshot
```json
{
"document_type": "order_status_snapshot",
"schema_version": "1.0",
"snapshot_id": "1c-orders-2026-05-04T10:00:00",
"generated_at": "2026-05-04T10:00:00+03:00",
"period_from": "2026-05-04T09:00:00+03:00",
"period_to": "2026-05-04T10:00:00+03:00",
"source": "1c",
"orders": [
{
"external_id": "1c-order-10025",
"cabinet_order_id": "FRG-2030",
"counterparty_external_id": "1c-counterparty-77",
"status": "in_production",
"status_name": "В производстве",
"total_amount": 145000,
"currency": "RUB",
"delivery_date": "2026-05-12",
"debt_amount": 0,
"updated_at": "2026-05-04T09:45:00+03:00",
"items": [
{
"product_external_id": "1c-product-0001",
"name": "Упаковочный скотч",
"quantity": 100,
"price": 1450
}
]
}
]
}
```
== Пример структуры order_export
```json
{
"document_type": "order_export",
"schema_version": "1.0",
"snapshot_id": "cabinet-orders-2026-05-04T10:05:00",
"generated_at": "2026-05-04T10:05:00+03:00",
"source": "cabinet",
"orders": [
{
"cabinet_order_id": "FRG-2031",
"counterparty_external_id": "1c-counterparty-77",
"contact_name": "Иван Иванов",
"comment": "Нужен расчет по доставке",
"delivery_address": "Москва, склад клиента",
"created_at": "2026-05-04T10:02:00+03:00",
"items": [
{
"product_external_id": "1c-product-0001",
"quantity": 100,
"attributes": {
"width_mm": 48,
"length_m": 50
}
}
]
}
]
}
```
== Интеграционные поля и служебные атрибуты
@@ -1818,7 +1923,7 @@ Wireframe-прототип:
- источник последнего обновления
- признак успешной или неуспешной обработки
- журнал интеграционных ошибок при наличии
- технический идентификатор последнего обработанного события, если он передается 1С
- идентификатор последнего обработанного документа обмена
== Журналирование интеграционных операций
@@ -1833,6 +1938,7 @@ Wireframe-прототип:
- пользователя либо внешний источник, выполнивший изменение
- статус обработки сообщения
- текст ошибки при наличии
- идентификатор документа обмена и контрольную сумму при наличии
== Требования к защите интеграционного обмена
@@ -1843,8 +1949,8 @@ Wireframe-прототип:
- отсутствуют обязательные параметры авторизации
- подпись или токен не прошли проверку
- payload не соответствует согласованной структуре
- невозможно определить тип события или объект обработки
- документ обмена не соответствует согласованной структуре
- невозможно определить тип документа или объект обработки
Секреты, используемые для интеграции с 1С, должны храниться только в Vault и передаваться сервисам через runtime-конфигурацию.
@@ -1858,7 +1964,7 @@ Wireframe-прототип:
- заказы клиента получаются и отображаются с актуальными статусами
- изменения заказа из 1С отображаются в карточке заказа
- текущая задолженность клиента и дата актуальности данных отображаются в предусмотренных интерфейсах
- webhook-события не обрабатываются повторно при дублях
- повторная передача одного и того же документа обмена не приводит к дублированию данных
- ошибки интеграционного обмена фиксируются в журнале
- неуспешные сообщения могут быть проанализированы и повторно обработаны в согласованном порядке
@@ -2473,12 +2579,12 @@ Wireframe-прототип:
Интеграционная документация должна описывать:
- состав событий, передаваемых из 1С
- состав методов получения данных из 1С
- структуру payload для каждого события и метода
- состав документов обмена, передаваемых между 1С и личным кабинетом
- структуру каждого документа обмена
- формат обмена: JSON, XML или CSV
- обязательные и необязательные поля
- правила сопоставления идентификаторов
- требования к авторизации, подписи или иному механизму защиты запросов
- требования к авторизации, подписи или иному механизму защиты обмена
- порядок обработки дублей
- порядок фиксации ошибок и повторной обработки сообщений
- критерии приемки интеграционного обмена
@@ -2550,8 +2656,8 @@ Wireframe-прототип:
В состав этапа входят:
- сопоставление внутренних идентификаторов и идентификаторов 1С
- настройка приема webhook-событий от 1С
- настройка получения данных из 1С через согласованные методы
- настройка приема документов обмена от 1С
- настройка передачи документов обмена из личного кабинета в 1С
- проверка получения каталога, остатков, заказов, статусов и задолженности
- проверка обработки дублей и ошибок обмена
- проверка отображения даты актуальности данных