Перейти к содержанию

СБИС

В процессе реализации системы обмена документами ключевым этапом является получение документов из системы электронного документооборота СБИС. Это включает в себя сохранение входящих файлов в файловое хранилище, что позволяет хранить исходные документы, их печатные версии и ФНС-архив, включая подписанные обеими сторонами документы в формате PDF. Также предусмотрено автоматизированное извлечение атрибутов формализованных документов, таких как дата, номер, тип документа, номер и дата договора, сумма и комментарий, а также основание. В дополнение к этому система способна обрабатывать данные неформализованных документов и извлекать атрибуты входящих пакетов, включая юридическое лицо, ИНН и КПП контрагента.

В системе СБИС

У пользователя, под которым идет работа, должна быть зарегистрирована электронная подпись в системе СБИС.

На рабочем месте пользователя

Чтобы подписывать и отправлять электронные документы в системе СБИС, необходимо использовать квалифицированную электронную подпись (КЭП). В СБИС можно работать с различными СКЗИ, например с КриптоПро CSP.

Технические требования к рабочему месту

В "Первой Форме"

Действия для настройки интеграции:

1. Добавьте сервис с типом Sbis.

2. Выберите его в качестве значения Sbis service в общих настройках приложения.

3. Убедитесь, что задание SyncEdocumentsFromSbisJob работает.

4.  Добавьте пользовательский ключ SbisLastEventsId.

5. Автоматизируйте действия, которые могут потребоваться при интеграции со СБИС.

Доступные смарт-действия при создании пакета действий:

  • СБИС - Отправить отказ от аннулирования

  • СБИС - Отправить подписание

  • СБИС - Отправить подписанное извещение о получении

  • СБИС - Отправить подписанные соглашения об аннулировании

  • СБИС - Отправить подписанный отказ от подписи

  • СБИС - Отправить соглашение об аннулировании

  • СБИС - Отправить электронный документ

  • СБИС - Получить архив МЧД (возвращает System.Int32)

  • СБИС - Получить сертификаты (возвращает System.Int32)

  • СБИС - Получить статус МЧД (возвращает System.Int32)

  • СБИС - Получить тэги документа (возвращает System.Int32)

  • СБИС - Синхронизировать статусы документов в сообщении (возвращает System.Int32)

  • СБИС - Создать файл аннулирования подписи (возвращает TCClassLib.Orm.FileStorageFileInfo)

  • СБИС - Создать файл извещения о получении (возвращает TCClassLib.Orm.FileStorageFileInfo)

  • СБИС - Создать файлы отказа от аннулирования (возвращает TCClassLib.Orm.FileStorageFileInfo)

  • СБИС - Создать файлы отказа от подписи (возвращает TCClassLib.Orm.FileStorageFileInfo)

  • СБИС - Создать файлы подтверждения подписи (возвращает TCClassLib.Orm.FileStorageFileInfo)

Доступные смарт-действия при создании смарт-скрипта (LUA):

  • GenerateRejectionSbisSignature — Создать файл отказа от подписи

  • GenerateRevocationRejectionSbisSignature — Создать файл отказа от аннулирования

  • SbisAttachRejectSignature — Отправить подписанный отказ от подписи в СБИС

  • SbisAttachRevocationRequestedSignature — Отправить соглашение об аннулировании в СБИС

  • SbisAttachRevocationSignature — Отправить соглашение об аннулировании в СБИС

  • SbisAttachSignature — Отправить подписание в СБИС

  • SbisGenerateRevocationTitle — Создать файл аннулирования подписи

  • SyncMessageStatusSbis — Синхронизировать статусы документов в сообщении СБИС

Отклонение документа

Для отклонения сперва создается файл отказа от подписи с помощью смарт-действия GenerateRejectionSbisSignature.

Входящие параметры:

  • File* — ID файла

  • Reason* — Причина отказа

  • Thumbprint* — Отпечаток сертификата, находится в системе СБИС в информации о сертификатах для подписи

  • ServiceId* — ID сервиса

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой JSON вида:

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса. Если в СБИС указана одна МЧД или установлена МЧД "по умолчанию", то при UseDefault = true будут проигнорированы документы, которые нельзя подписать с помощью этой МЧД. Необязательный параметр. В качестве значения указывается true или false без кавычек.

Смарт возвращает объект с параметрами: {FileId, VersionId, AttachmentId, DocumentId}. Сохраните AttachmentId, DocumentId и сам файл.

Файл необходимо подписать ЭЦП, отпечаток которой был передан в параметре Thumbprint.

Затем отправляется подписанный отказ от подписи в СБИС с помощью смарт-действия SbisAttachRejectSignature.

Входящие параметры:

  • File* — ID файла

  • RejectionFile* — ID файла отказа, который был получен из смарт-действия GenerateRejectionSbisSignature и затем подписан.

  • ServiceId* — ID сервиса

  • Signature* — Подпись

  • Reason* — Комментарий

  • AttachmentId* — Идентификатор титула

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

Пример:

SMART:execute_action('SbisAttachRejectSignature', TASKID, 'task', { 
 File = file, 
 RejectionFile = rejFile, 
   AttachmentId = '73e5ea53-3133-4954-9254-ca2b825abfc8', 
   Reason = 'test' 
}) 
Аннулирование документа со стороны "Первой Формы"

Предварительно создается файл аннулирования подписи с помощью смарт-действия SbisGenerateRevocationTitle.

Входящие параметры:

  • File* — ID файла. Может описывать любое вложение из документа, поскольку аннулируется весь документ, а не только отдельные вложения в нем.

  • Reason* — Причина аннулирования

  • Thumbprint* — Отпечаток сертификата, находится в системе СБИС в информации о сертификатах для подписи

  • ServiceId* — ID сервиса

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

Смарт возвращает массив объектов {FileId, VersionId, AttachmentId, DocumentId} для каждого вложения, которое есть в документе.

Пример:

return SMART:execute_action('SbisGenerateRevocationTitle', userId, 'user', { 
     File = file, 
       Reason = "test", 
       Thumbprint = "5C8D1DCDAAB1E199009ECA8CCD2383494BA57453" 
   }) 
Полученные файлы необходимо подписать, а также сохранить связь между FileId и AttacmentId.

После создания файла требуется отправить соглашение об аннулировании в СБИС с помощью смарт-действия SbisAttachRevocationSignature.

Входящие параметры:

  • Files* — ID файла. В параметр передается массив объектов { FileId, VersionId, AttachmentId, DocumentId }

  • ServiceId* — ID сервиса

  • Signature* — Подпись

  • Reason* — Комментарий

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

Пример:

local files = { 
   { FileId = 1928371, VersionId = 1, AttachmentId = '15e1cc2e-2697-42ba-b0ea-4d4c90da475e', DocumentId = '6702d6d9-0e84-4458-9de2-b94c8ba946e1'}, 
   { FileId = 1928372, VersionId = 1, AttachmentId = '4db8c1aa-ce9b-4ec6-b07d-f5a8a12874cf', DocumentId = '6702d6d9-0e84-4458-9de2-b94c8ba946e1'} 
} 

SMART:execute_action('SbisAttachRevocationSignature', TASKID, 'task', { 
 Files = files, 
   Reason = "test" 
}) 
Принять аннулирование входящего документа

При запросе на аннулирование в EdocumentSbisLink придет N количество вложений со статусом 27 — в ожидании аннулирования.

Они связаны с аннулируемыми вложениями только по DocumentId.

Для аннулирования документа с тем же DocumentId необходимо отправить соглашение об аннулировании в СБИС с помощью смарт-действия SbisAttachRevocationRequestedSignature.

Входящие параметры:

  • Files* — Файлы. В параметр передается массив объектов {FileId, VersionId, AttachmentId, DocumentId} для уже подписанных ЭЦП вложений на стороне "Первой Формы" со статусом 27 (в ожидании аннулирования).

  • ServiceId* — ID сервиса

  • Signature* — Подпись

  • Reason* — Комментарий

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

В данном смарт-действии первостепенно необходимо заполнить FileId и VersionId, т.к. они сохраняются в таблице EdocumentSbisLink и вы получаете его контент, когда он придет как "новый документ". Стоит понимать, что это не полноценный "новый документ", а только соглашение на аннулирование.

Отклонение аннулирования входящего документа

Предварительно создается файл отказа от аннулирования с помощью смарт-действия GenerateRevocationRejectionSbisSignature.

Входящие параметры:

  • File* — ID файла. Может описывать любое вложение из документа, поскольку аннулируется весь документ, а не только отдельные вложения в нем.

  • Reason* — Причина отказа

  • Thumbprint* — Отпечаток сертификата, находится в системе СБИС в информации о сертификатах для подписи

  • ServiceId* — ID сервиса

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

Смарт возвращает массив объектов {FileId, VersionId, AttachmentId, DocumentId} для каждого вложения, которое есть в документе. Эти документы должны быть подписаны

После создания файла требуется отправить отказ от аннулирования в СБИС с помощью смарт-действия SbisAttachRevocationRejectionSignature.

Входящие параметры:

  • Files* — ID файла. В параметр передается массив объектов { FileId, VersionId, AttachmentId, DocumentId } из файлов, которые были получены в действии GenerateRevocationRejectionSbisSignature и затем подписаны.

  • ServiceId* — ID сервиса

  • Signature* — Подпись

  • Reason* — Комментарий

  • PowerOfAttorney* — МЧД. PowerOfAttorney должен представлять собой Json такого вида -

{

"registerNumber":string, //Номер МЧД

"issuerInn": string,     //ИНН доверителя

"useDefault": string   //

}

где: RegisterNumber — номер МЧД, IssuerInn — ИНН доверителя, useDefault — используется, если необходимо применять по умолчанию МЧД, которая указана в СБИС для пользователя/сервиса.

Логирование ответов

В "Первой Форме" есть возможность логировать ответы при интеграции с сервисом СБИС. По умолчанию логирование отключено.\ Для его включения необходимо добавить пользовательский ключ SbisLastEventsId и установить его в значении true.

ℹ️ SbisLastEventsId хранит ID последнего обработанного события (числовое значение), а не флаг. Для включения расширенного логирования уточните актуальный ключ в документации СБИС.

После включения в системе будут логироваться все события, в том числе определяется новый ли это документ или происходит изменение уже существующего.

Записи в журнале не появляются, если при итерации заданий не было событий на обработку.

Полезные ссылки

Сервисы

Использование JINT/SmartScript для кастомизации ЭДО

Начиная с версии 2.267 часть бизнес-логики интеграции со СБИС может быть реализована не только через встроенные C# смарт-действия, но и через системные библиотеки SmartScript на JavaScript (JINT).

Базовая библиотека eds-common подключается первой и предоставляет общие функции: HTTP-вызовы, SQL-хелперы, логирование, кэш токенов, загрузку файлов и работу с JSON. Для интеграции со СБИС дополнительно подключается библиотека sbis-api.

Это позволяет вынести клиентскую бизнес-логику, маршрутизацию, обработку ответов API и сценарии обмена документами в SmartScript без доработки ядра и без новой сборки приложения.

Рекомендуемый шаблон подключения:

include("[edo] eds-common");
include("[edo] sbis-api");

Новые сценарии рекомендуется писать на JavaScript. При этом прежние C#-смарт-действия сохраняют работоспособность и могут использоваться параллельно.

Для отладки JINT-сценариев следует использовать инфраструктуру логирования SmartScript.

В JINT-реализации основные операции выполняются синхронно и возвращают результат сразу в момент вызова скрипта, тогда как очередь сообщений используется главным образом для сценариев синхронизации статусов и входящих документов.