Работа со служебными документами

Генерация и отправка служебных документов

Диадок позволяет сгенерировать следующие ответные служебные документы:

  • универсальное сообщение,

  • извещение о получении,

  • предложение об аннулировании,

  • отказ от подписи,

  • отказ от предложения об аннулировании,

  • уведомление об уточнении,

  • документ для отмены сведений об отгрузке маркированных товаров.

Эти документы можно отправить (добавить к сообщению) с помощью метода PostMessagePatch (V3) или PostMessagePatch (V4), передав ему структуру MessagePatchToPost или MessagePatchToPostV2 с соответствующим заполненным полем.

Генерация и отправка универсального сообщения

Универсальное сообщение — служебный документ, который может заменить собой извещение о получении (ИоП), уведомление об уточнении (УоУ) и отказ в подписи. Подробная информация об использовании универсального сообщения приведена на странице Переход на универсальные сообщения.

Сгенерировать универсальное сообщение можно с помощью метода GenerateUniversalMessage. В запросе нужно передать идентификатор ящика получателя (boxId), идентификатор отправленного сообщения (messageId) и идентификатор родительской сущности, на которую нужно сформировать универсальное сообщение (attachmentId). Эти значения можно получить из структуры Message.

В теле запроса нужно передать XML-файл с данными для формирования универсального сообщения, соответствующий упрощенной XSD-схеме.

Пример HTTP-запроса метода GenerateUniversalMessage:

POST GenerateUniversalMessage?boxId={{boxId}}&messageId={{messageId}}&attachmentId={{attachmentId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/xml

Пример тела запроса метода GenerateUniversalMessage:

<UniversalMessage>
    <UniversalMessageInfos>
        <UniversalMessageInfo StatusCode="1999">
            <PlainText>123</PlainText>
        </UniversalMessageInfo>
    </UniversalMessageInfos>
    <Sender Position="Сотрудник" UseDefaultPersonInfo="false">
        <Fio FirstName="Иван" LastName="Иванов" MiddleName="Иванович"/>
        <Contacts OtherContactInfo="OtherContactInfo">
            <Phones>
                <Phone>8-343-123-4567</Phone>
            </Phones>
            <Emails>
                <Email>email@sample.com</Email>
            </Emails>
        </Contacts>
    </Sender>
    <Recipient Position="Сотрудник" UseDefaultPersonInfo="false">
        <Fio FirstName="Петров" LastName="Петр" MiddleName="Петрович"/>
        <Contacts OtherContactInfo="OtherContactInfo">
            <Phones>
                <Phone>8-343-123-4567</Phone>
            </Phones>
            <Emails>
                <Email>email@sample.com</Email>
            </Emails>
        </Contacts>
    </Recipient>
</UniversalMessage>

Пример тела ответа метода GenerateUniversalMessage:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UNISOOBSCH_2BM-6125600340-732644841-202407101103418496883_2BM-9147414342-757645784-202407101104400484330_20250529_3839e349-99d5-4a54-9b5f-546bffbfb44a" ВерсПрог="Diadoc 1.0" ВерсФорм="5.01">
  <Документ КНД="1115144">
    <СведУС ДатаФорм="29.05.2025" ВремФорм="13.53.27" ИмяПолФайл="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-6125600340-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d" />
    <СвСобытДок СтатусУС="1999">
      <ТекстУС>123</ТекстУС>
    </СвСобытДок>
    <ОтпрУС ИдОтпрУС="2BM-9147414342-757645784-202407101104400484330">
      <СвЛицОтпрУС Должн="Сотрудник">
        <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
        <Контакт>
          <Тлф>8-343-123-4567</Тлф>
          <ЭлПочта>email@google.com</ЭлПочта>
          <ИнКонт>OtherContactInfo</ИнКонт>
        </Контакт>
      </СвЛицОтпрУС>
    </ОтпрУС>
    <ПолучУС ИдПолучУС="2BM-6125600340-732644841-202407101103418496883">
      <СвЛицПолучУС Должн="Сотрудник">
        <ФИО Фамилия="Петр" Имя="Петров" Отчество="Петрович" />
        <Контакт>
          <Тлф>8-343-123-4567</Тлф>
          <ЭлПочта>email@google.com</ЭлПочта>
          <ИнКонт>OtherContactInfo</ИнКонт>
        </Контакт>
      </СвЛицПолучУС>
    </ПолучУС>
  </Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл универсального сообщения, соответсвующий XSD-схеме, для сущности attachmentId из сообщения messageId в ящике boxId. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле UniversalMessages структуры MessagePatchToPostV2.

В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:

  • BoxId — идентификатор ящика, в котором находится исходное сообщение;

  • MessageId — идентификатор сообщения, к которому относится дополнение;

  • UniversalMessages — вложенная структура для передачи XML-файлов универсальных сообщений:

    • ParentEntityId — идентификатор документа, к которому относится универсальное сообщение;

    • CodeGroup — группа кода универсального сообщения, которая определяет назначение универсального сообщения: извещение о получении, уведомление об уточнении или отказ в подписи.

    • UniversalMessageContent — содержимое XML-файла универсального сообщения, сконвертированное в Base64-строку;

    • Labelsметки (необязательно).

Примечание

На время переходного периода вместе с универсальным сообщением нужно передать соответствующий служебный документ текущего формата. Это значит, что помимо данных в поле UniversalMessages нужно передать данные в одном из полей — Receipts, CorrectionRequests или XmlSignatureRejections.

Пример тела запроса метода PostMessagePatch:

{
    "BoxId": "{{boxId}}",
    "MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
    "Receipts": [
        {
            "ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
            "SignedContent":
            {
                "Content": "PD94bWwgdmVyc2l...LDQudC7Pg==",      // содержимое XML-файла в кодировке base-64
                "Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz"      // содержимое файла подписи в кодировке base-64
            }
        }
    ],
    "UniversalMessages": [
        {
            "ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
            "CodeGroup": "Receipt",
            "UniversalMessageContent": 
            {
            	"Content": "PD94bWwgdmVyc2l...LDQudC7Pg=="  // содержимое XML-файла в кодировке base-64
            }
        }
    ]
}

Генерация и отправка извещения о получении

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

Сгенерировать извещение о получении можно с помощью метода GenerateReceiptXml (V2). В запросе нужно передать идентификатор ящика получателя (boxId) и структуру ReceiptGenerationRequestV2 со следующими данными:

  • messageId — идентификатор отправленного сообщения,

  • attachmentId — идентификатор сущности титула продавца.

Эти значения можно получить из структуры Message.

Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.

Пример HTTP-запроса метода GenerateReceiptXml:

POST V2/GenerateReceiptXml?boxid={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8

Пример тела запроса метода GenerateReceiptXml:

{
    "MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
    "AttachmentId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
    "SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg=="        // содержимое XML-файла с данными подписанта в кодировке Base-64
}

Пример тела ответа метода GenerateReceiptXml:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_IZVPOL_2BM-9616675014-961601000-201906250926373816603_2BM-7770357771-2012082810454029703720000000000_20230904_54c96f37-a745-4e02-8dda-41404992952f" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
    <Документ КНД="1115110">
        <УчастЭДО ИдУчастЭДО="2BM-7770357771-2012082810454029703720000000000">
            <ЮЛ НаимОрг="ОАО" ИННЮЛ="7770357771" КПП="770101001"/>
        </УчастЭДО>
        <СвИзвПолуч ДатаПол="04.09.2023" ВремяПол="13.32.26">
            <СведПолФайл ИмяПолФайла="ON_NSCHFDOPPR_2BM-7770357771-2012082810454029703720000000000_2BM-9616675014-961601000-201906250926373816603_20200826_6efc7ad3-88ff-485d-86bb-c84c2262caf2">
                <ЭППолФайл>MIINB3RI=...</ЭППолФайл>
            </СведПолФайл>
        </СвИзвПолуч>
        <ОтпрДок ИдУчастЭДО="2BM-9616675014-961601000-201906250926373816603">
            <ЮЛ НаимОрг="ООО" ИННЮЛ="9616675014" КПП="961601000"/>
        </ОтпрДок>
        <Подписант ТипПодпис="1" СтатПодп="2" Должн="Подписант-Должн">
            <ФИО Фамилия="Петров" Имя="Петр" Отчество="Петрович"/>
            <СвДоверЭл СпособПредставл="1" НомДовер="4a743152-e772-4249-9a47-e2e290258e79" ДатаВыдДовер="17.09.2018" ВнНомДовер="123" ДатаВнРегДовер="18.09.2018" ИдСистХран="СвДоверЭл-ИдСистХран"/>
        </Подписант>
    </Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл извещения о получении для сущности attachmentId из сообщения messageId в ящике boxId. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле Receipts структуры MessagePatchToPostV2.

В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:

  • BoxId — идентификатор ящика, в котором находится исходное сообщение;

  • MessageId — идентификатор сообщения, к которому относится дополнение;

  • Receipts — вложенная структура для передачи XML-файлов извещений о получении:

    • ParentEntityId — идентификатор документа, к которому относится извещение;

    • SignedContent.Content — содержимое XML-файла извещения, сконвертированное в Base64-строку;

    • SignedContent.Signature — содержимое файла подписи извещения, сконвертированное в Base64-строку;

    • Labelsметки (необязательно).

Пример тела запроса метода PostMessagePatch:

{
    "BoxId": "{{boxId}}",
    "MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
    "Receipts": [
        {
            "ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
            "SignedContent":
            {
                "Content": "PD94bWwgdmVyc2l...LDQudC7Pg==",      // содержимое XML-файла в кодировке base-64
                "Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz"      // содержимое файла подписи в кодировке base-64
            },
            "Comment": "Подписание извещения о получении счета-фактуры",
            "Label": "label"
        }
    ]
}

Генерация уведомления об уточнении

Чтобы создать запрос на исправление или корректировку счета-фактуры, сгенерируйте и отправьте уведомление об уточнении.

Сгенерировать уведомление об уточнении можно с помощью метода GenerateInvoiceCorrectionRequestXml (V2). Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.

Пример HTTP-запроса метода GenerateInvoiceCorrectionRequestXml:

POST /V2/GenerateInvoiceCorrectionRequestXml?boxId={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json; charset=utf-8
Content-Type: application/json

Пример тела запроса метода GenerateInvoiceCorrectionRequestXml:

{
    "ErrorMessage": "Текстовый комментарий",
    "MessageId": "{{messageId}}",
    "AttachmentId": "{{documentId}}",
    "SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg=="        // содержимое XML-файла с данными подписанта в кодировке Base-64
}

Пример тела ответа метода GenerateInvoiceCorrectionRequestXml:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UVUTOCH_2BM-1839264655-732644841-202407101103418496883_2BM-9147414342-757645784-202407101104400484330_20250207_8bc3aae6-ce88-459e-943a-37094526c16c" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
  <Документ КНД="1115113">
    <УчастЭДО ИдУчастЭДО="2BM-9147414342-757645784-202407101104400484330">
      <ЮЛ НаимОрг="Получатель" ИННЮЛ="8147414342" КПП="857645784" />
    </УчастЭДО>
    <СвУведУточ ДатаПол="07.02.2025" ВремяПол="10.06.17">
      <СведПолФайл ИмяПолФайла="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d">
        <ЭППолФайл>...</ЭППолФайл>
      </СведПолФайл>
      <ТекстУведУточ>Текстовый комментарий</ТекстУведУточ>
    </СвУведУточ>
    <ОтпрДок ИдУчастЭДО="2BM-1839264655-732644841-202407101103418496883">
      <ЮЛ НаимОрг="Отправитель" ИННЮЛ="8125600340" КПП="832644841" />
    </ОтпрДок>
    <Подписант ТипПодпис="1" СтатПодп="2" Должн="Подписант-Должн">
      <ФИО Фамилия="Фамилия" Имя="Имя" Отчество="Отчество" />
      <СвДоверЭл СпособПредставл="1" НомДовер="c8a8949a-4907-4c36-9f48-7efb2fba1987" ДатаВыдДовер="17.09.2024" ВнНомДовер="123" ДатаВнРегДовер="18.09.2024" СвСистХран="СвДоверЭл-ИдСистХран" />
    </Подписант>
  </Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл уведомления. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле CorrectionRequests структуры MessagePatchToPostV2.

Генерация и отправка предложения об аннулировании

Если вы обнаружили ошибки в отправленном документе, его можно аннулировать. Для этого сгенерируйте и отправьте предложение об аннулировании.

Сгенерировать предложение об аннулировании можно с помощью метода GenerateRevocationRequestXml (V2). Можно отправить предложение об аннулировании форматов 1.01 и 1.02.

Пример HTTP-запроса метода GenerateRevocationRequestXml:

POST V2/GenerateRevocationRequestXml?boxId={{boxId}}&messageId={{messageId}}&attachmentId={{attachmentId}}&contentTypeId=revocation_request_02 HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8

Пример тела запроса метода GenerateRevocationRequestXml:

{ 
    "Comment": "Текстовый комментарий", 
    "Signer": { 
        "SignerDetails": { 
            "Surname": "Иванов", 
            "FirstName": "Иван", 
            "Patronymic": "Иванович", 
            "JobTitle": "Сотрудник", 
            "Inn": "7713964071" 
        } 
    } 
}

Пример тела ответа метода GenerateRevocationRequestXml:

<?xml version="1.0" encoding="windows-1251"?><Файл ИдФайл="DP_PRANNUL_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250423_3d2a09bf-748d-4583-b4b3-fd91bf0092b3" ВерсПрог="Diadoc 1.0" ВерсФорм="1.02"><Документ><УчастЭДО ИдУчастЭДО="2BM-1839264655-732644841-202407101103418496883">
<ЮЛ НаимОрг="Отправитель" ИННЮЛ="1839264655" КПП="732644841" />
</УчастЭДО><СвПредАн><СведАнФайл ИмяАнФайла="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d"><ЭЦПАнФайл>MIINLgYLwVeXpzCZ25uwFn
</ЭЦПАнФайл>
</СведАнФайл><ТекстПредАн>Текстовый комментарий
</ТекстПредАн>
</СвПредАн><НапрПредАн ИдУчастЭДО="2BM-9147414342-757645784-202407101104400484330">
<ЮЛ НаимОрг="Получатель" ИННЮЛ="9147414342" КПП="757645784" />
</НапрПредАн><Подписант Должность="Сотрудник">
<ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
</Подписант>
</Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл предложения об аннулировании. Полученный XML-файл можно подписать электронной подписью и отправить с помощью метода PostMessagePatch (V4), передав его в поле RevocationRequests структуры MessagePatchToPostV2.

В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:

  • BoxId — идентификатор ящика, в котором находится исходное сообщение;

  • MessageId — идентификатор сообщения, к которому относится дополнение;

  • RevocationRequests — вложенная структура для передачи XML-файлов предложений об аннулировании:

    • ParentEntityId — идентификатор документа, к которому относится предложение;

    • SignedContent.Content — содержимое XML-файла предложения об аннулировании, сконвертированное в Base64-строку;

    • SignedContent.Signature — содержимое файла подписи предложения об аннулировании, сконвертированное в Base64-строку;

    • Labelsметки (необязательно).

Пример тела запроса метода PostMessagePatch:

{
    "BoxId": "{{boxId}}",
    "MessageId": "e9d6b396-934f-4ab5-801a-212c2bc0e1f8",
    "RevocationRequests": [
        {
            "ParentEntityId": "07946392-8e2c-4df5-9b13-97b8b329befe",
            "SignedContent":
            {
                "Content": "PD94bWwgdmVyc2l...LDQudC7Pg==",      // содержимое XML-файла в кодировке base-64
                "Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz"      // содержимое файла подписи в кодировке base-64
            }
        }
    ]
}

Генерация и отправка отказа от подписи и отказа от предложения об аннулировании

Сгенерировать отказ можно с помощью метода GenerateSignatureRejectionXml (V2). Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.

Пример HTTP-запроса метода GenerateSignatureRejectionXml:

POST V2/GenerateSignatureRejectionXml?boxid={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/json charset=utf-8

Пример тела запроса метода GenerateSignatureRejectionXml:

{
    "ErrorMessage": "Текстовый комментарий",
    "MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
    "AttachmentId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
    "SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg=="        // содержимое XML-файла с данными подписанта в кодировке Base-64
}

Пример тела ответа метода GenerateSignatureRejectionXml:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UVUTOCH_2BM-9017770974-757645784-202407101104400484330_2BM-5242989368-732644841-202407101103418496883_20250416_6a0d86e6-f052-455d-a62b-7e684a3906ad" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
    <Документ КНД="1115113">
        <УчастЭДО ИдУчастЭДО="2BM-5242989368-732644841-202407101103418496883">
            <ЮЛ НаимОрг="Продавец" ИННЮЛ="5242989368" КПП="732644841"/>
        </УчастЭДО>
        <СвУведУточ ДатаПол="16.04.2025" ВремяПол="10.05.46">
            <СведПолФайл ИмяПолФайла="Group12">
                <ЭППолФайл>MIIMiQYJKoZIhv...UNp8A
</ЭППолФайл>
            </СведПолФайл>
            <ТекстУведУточ>Текстовый комментарий
</ТекстУведУточ>
        </СвУведУточ>
        <ОтпрДок ИдУчастЭДО="2BM-9017770974-757645784-202407101104400484330">
            <ЮЛ НаимОрг="Покупатель" ИННЮЛ="9017770974" КПП="757645784"/>
        </ОтпрДок>
        <Подписант ТипПодпис="1" СтатПодп="2" Должн="Не указана">
            <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович"/>
            <СвДоверЭл СпособПредставл="1" НомДовер="4a743152-e772-4249-9a47-e2e290258e79" ДатаВыдДовер="17.09.2018" ВнНомДовер="123" ДатаВнРегДовер="18.09.2018" СвСистХран="СвДоверЭл-ИдСистХран"/>
        </Подписант>
    </Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл отказа. Полученный XML-файл можно подписать электронной подписью и отправить с помощью метода PostMessagePatch (V4), передав его в поле XmlSignatureRejections структуры MessagePatchToPostV2.

В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:

  • BoxId — идентификатор ящика, в котором находится исходное сообщение;

  • MessageId — идентификатор сообщения, к которому относится дополнение;

  • XmlSignatureRejections — вложенная структура для передачи XML-файлов отказов:

    • ParentEntityId — идентификатор предложения об аннулировании или документа, к которому относится отказ;

    • SignedContent.Content — содержимое XML-файла отказа, сконвертированное в Base64-строку;

    • SignedContent.Signature — содержимое файла подписи отказа, сконвертированное в Base64-строку;

    • Labelsметки (необязательно).

Пример тела запроса метода PostMessagePatch:

{
    "BoxId": "{{boxId}}",
    "MessageId": "3815fb36-aabe-4588-8fe7-a1a33154278c",
    "XmlSignatureRejections": [
        {
            "ParentEntityId": "33ba16c68-cc54-4b25-b81c-0e79134e219d",
            "SignedContent":
            {
                "Content": "PD94bWwgdmVyc2l...LDQudC7Pg==",      // содержимое XML-файла в кодировке base-64
                "Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz"      // содержимое файла подписи в кодировке base-64
            }
        }
    ]
}

Генерация и отправка документа для отмены сведений об отгрузке маркированных товаров

Чтобы отменить сведения об отгрузке маркированных товаров, сгенерируйте и отправьте специальный служебный документ.

Сгенерировать документ для отмены сведений об отгрузке можно с помощью метода GenerateTtGisFixationCancellationRequest.

Пример HTTP-запроса метода GenerateTtGisFixationCancellationRequest:

POST /GenerateTtGisFixationCancellationRequest?boxId={{boxId}}&messageId={{messageId}}&documentId={{documentId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json; charset=utf-8

Пример тела ответа метода GenerateTtGisFixationCancellationRequest:

{
    "fixation_document_id": "FIX_ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-3175546205-732644841-202407101103418496883_20250620_fc857ac8-5e25-4cd3-91fd-77f0a8e141d4_0_1_1_0_0_00",
    "inn": "1234567890"
}

В ответе метод вернет сгенерированный JSON-файл документа. Полученный файл нужно подписать электронной подписью и поместить в структуру TtGisFixationCancellationRequestAttachment. Отправить эту структуру можно с помощью метода PostMessagePatch (V3) или PostMessagePatch (V4), передав ее в поле TtGisFixationCancellationRequests структуры MessagePatchToPost или MessagePatchToPostV2 соответственно.

В теле запроса метода PostMessagePatch (V4) передайте структуру MessagePatchToPostV2, заполненную следующими данными:

  • BoxId — идентификатор ящика, в котором находится исходное сообщение;

  • MessageId — идентификатор сообщения, к которому относится дополнение;

  • TtGisFixationCancellationRequests — вложенная структура для передачи документов для отмены сведений об отгрузке маркированных товаров:

    • DocumentId — идентификатор документа, содержащего маркированные товары, сведения об отгрузки которых необходимо отменить;

    • SignedContent.Content — содержимое JSON-файла документа для отмены сведений об отгрузке, сконвертированное в Base64-строку;

    • SignedContent.Signature — содержимое файла подписи документа для отмены сведений об отгрузке, сконвертированное в Base64-строку.

Пример тела запроса метода PostMessagePatch:

{
    "BoxId": "{{boxId}}",
    "MessageId": "d94982e8-7eb9-4993-8c52-41c14e3fc3a8",
    "TtGisFixationCancellationRequests": [
        {
            "DocumentId": "05ea290d-9aa1-4291-a87b-d30be9ccf5b7",
            "SignedContent":
            {
                "Content": "eyJpbm4iOiI2MT...F8wMCJ9",      // содержимое XML-файла в кодировке base-64
                "Signature": "MIIMtAYJKoZIhvc...KW1oPlA=="      // содержимое файла подписи в кодировке base-64
            }
        }
    ]
}

Универсальный формат данных подписанта в служебных документах

При генерации извещения о получении, отказа от подписи и уведомления об уточнении нужно в поле SignerContent передать упрощенный XML-файл с данными подписанта в универсальном бинарном формате (подробнее в разделе Универсальный формат заполнения данных подписанта). Файл необходимо сформировать в соответствии с упрощенной XSD-схемой подписанта для служебных документов.

Пример упрощенного XML-файла подписанта:

<?xml version="1.0" encoding="UTF-8"?>
<Signer SignerStatus="2" SignatureType="1">
    <Certificate CertificateBytes="PD94bWwgdmVy...c2l"/>
    <Fio LastName="Петров" FirstName="Петр" MiddleName="Петрович"/>
    <Position PositionSource="Manual">Подписант-Должн</Position>
    <PowerOfAttorney>
        <Electronic MethodOfProviding="1">
            <Manual RegistrationNumber="4a743152-e772-4249-9a47-e2e290258e79" RegistrationDate="17.09.2018" InternalNumber="123" InternalDate="18.09.2018" SystemId="СвДоверЭл-ИдСистХран"/>
        </Electronic>
    </PowerOfAttorney>
</Signer>
  • SignerStatus — статус подписанта, может принимать значения:

    • 1 — лицо, имеющее полномочия на подписание документа без доверенности,

    • 2 — лицо, имеющее полномочия на подписание документа на основании доверенности в электронной форме,

    • 3 — лицо, имеющее полномочия на подписание документа на основании доверенности на бумажном носителе.

  • SignatureType — тип подписи, может принимать значения:

    • 1 — усиленная квалифицированная электронная подпись,

    • 2 — простая электронная подпись,

    • 3 — усиленная неквалифицированная электронная подпись.

  • Certificate — данные сертификата подписанта. Обязательное поле. Можно передать:

    • CertificateThumbprint — отпечаток сертификата,

    • CertificateBytes — сертификат, сериализованный в массив байтов в DER-кодировке.

  • Fio — фамилия, имя, отчество подписанта.

    • LastName — фамилия подписанта, обязательное поле,

    • FirstName — имя подписанта, обязательное поле,

    • MiddleName — отчество подписанта.

  • Position — должность подписанта.

    • PositionSource — способ заполнения должности сотрудника. Может принимать значения:

      • Employee — заполнение из данных сотрудника в Диадоке,

      • Certificate — заполнение из данных в сертификате,

      • Manual — ручное заполнение данных.

  • PowerOfAttorney — сведения о машиночитаемой доверенности. Доверенность может быть электронной или бумажной.

    • Electronic — электронная доверенность. Данные доверенности можно заполнить автоматически (выбрать из хранилища Диадока) или вручную.

      • MethodOfProviding — способ представления доверенности. Обязательное поле. Может принимать значения:

        • 1 — представление доверенности осуществляется посредством ее включения в пакет электронных документов,

        • 2 — представление доверенности способом, не предусматривающим его включение в пакет электронных документов.

      • Storage — автоматическое заполнение информации по доверенности на основе номера и ИНН:

        • RegistrationNumber — номер доверенности, обязательное поле,

        • IssuerInn — ИНН организации, выдавшей доверенность, обязательное поле,

        • UseDefault — признак того, что нужно автоматически заполнить информацию на основе доверенности, используемой сотрудником по умолчанию. Обязательное поле.

      • Manual — ручное заполнение данных доверенности. Можно указать следующие данные:

        • RegistrationNumber — номер доверенности, обязательное поле,

        • RegistrationDate — дата совершения (выдачи) доверенности, обязательное поле,

        • InternalNumber — внутренний регистрационный номер доверенности,

        • InternalDate — дата внутренней регистрации доверенности,

        • SystemId — идентифицирующая информация об информационной системе, в которой осуществляется хранение доверенности.

    • Paper — бумажная доверенность. Можно указать следующие данные:

      • Fio — фамилия, имя, отчество (при наличии) лица, подписавшего доверенность,

      • InternalNumber — внутренний регистрационный номер доверенности, обязательное поле,

      • RegistrationDate — дата совершения (выдачи) доверенности, обязательное поле,

      • IssuerInfo — сведения о доверителе.

Получение служебных документов

Диадок позволяет получить информацию о служебных документах из сообщения.

Получение универсального сообщения

Чтобы получить универсальное сообщение, можно воспользоваться следующими способами:

  • методы работы с сообщениями, например, GetMessage (V6),

  • методы работы с документооборотом, например, GetDocflows (V4).

Метод GetMessage

Чтобы получить универсальное сообщение методом GetMessage (V6), нужно передать в запросе:

  • boxId — идентификатор ящика отправителя,

  • messageId — идентификатор отправленного сообщения,

  • entityId — идентификатор родительской сущности, на которую сформировано универсальное сообщение.

Эти значения можно получить из структуры Message.

В ответе метод вернет структуру Message с вложенной структурой Entity. Универсальное сообщение будет представлено структурой Entity со следующими полями:

  • EntityType = Attachment,

  • AttachmentType = UniversalMessage.

Информация об универсальном сообщении будет хранится в поле Entity.UniversalMessageInfo в виде структуры UniversalMessageInfo.

Пример HTTP-запроса метода GetMessage:

GET /V6/GetMessage?boxId={{boxId}}&messageId={{messageId}} HTTP/1.1
Host: diadoc-api-test.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json

Пример ответа метода GetMessage:

{
    "CreatedFromDraftId": "",
    "DraftIsLocked": false,
    "DraftIsRecycled": false,
    "DraftIsTransformedToMessageIdList": [
    ],
    "Entities": [
        {
            "AttachmentType": "XmlTorg12",
            <...>
        },
        {
            "AttachmentType": "XmlTorg12BuyerTitle",
            <...>
        },
        {
            "AttachmentType": "InvoiceReceipt",
            "AuthorUserId": "",
            "Content": {
                "Size": 5575
            },
            "ContentTypeId": "receipt_133_01_03",
            "EntityId": "529b4e21-a982-4364-a52b-fff1f1cd8409",
            "EntityType": "Attachment",
            "FileName": "DP_IZVPOL_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_7ce74dc9-0943-4fb9-90cd-327d445e5198.xml",
            "IsApprovementSignature": false,
            "IsEncryptedContent": false,
            "Labels": [
            ],
            "NeedReceipt": false,
            "NeedRecipientSignature": false,
            "ParentEntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882",
            "RawCreationDate": 638840213353178450
        },
        {
            "AttachmentType": "UniversalMessage",
            "AuthorUserId": "",
            "Content": {
                "Size": 856
            },
            "ContentTypeId": "receipt_uni_01",
            "EntityId": "647250f0-c833-4cd2-a6b1-afe2ee812986",
            "EntityType": "Attachment",
            "FileName": "DP_UNISOOBSCH_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_6ca0fdf6-0ab4-461b-9c67-1b5d9c200bbb.xml",
            "IsApprovementSignature": false,
            "IsEncryptedContent": false,
            "Labels": [
            ],
            "NeedReceipt": false,
            "NeedRecipientSignature": false,
            "ParentEntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882",
            "RawCreationDate": 638840213353178450,
            "UniversalMessageInfo": {
                "CodeGroup": "Receipt",
                "Events": [
                    {
                        "PlainText": "",
                        "StatusCode": 1999
                    }
                ]
            }
        }
    ],
    "FromBoxId": "eab6c66b8f644ada8cf04c6a2b7ba915@diadoc.ru",
    "FromTitle": "Отправитель",
    "IsDeleted": false,
    "IsDraft": false,
    "IsInternal": false,
    "IsProxified": false,
    "IsReusable": false,
    "IsTest": false,
    "LastPatchTimestampTicks": 638840428633821944,
    "LockMode": "None",
    "MessageId": "d213fc6e-1c0c-4ced-ae35-9078c895b92b",
    "MessageType": "Letter",
    "PacketIsLocked": false,
    "ProxyBoxId": "",
    "ProxyTitle": "",
    "TimestampTicks": 638840213224709349,
    "ToBoxId": "1234b472842f47baa1a309100064ace4@diadoc.ru",
    "ToTitle": "Получатель"
}

Метод GetMessage (V6) не возвращает содержимое универсального сообщения, а только информацию о нем. Чтобы получить содержимое, используйте метод GetEntityContent (V4).

Метод GetDocflows

Чтобы получить универсальное сообщение методом GetDocflows (V4), нужно передать в запросе идентификатор ящика отправителя boxId, а в теле запроса — идентификатор документа в виде пары MessageId и EntityId.

Эти значения можно получить из структуры Message.

В ответе метод вернет структуру GetDocflowBatchResponseV4 с вложенной структурой Documents.Docflow, в которой универсальное сообщение UniversalMessageAttachmentDocflow вернется в поле UniversalMessage одной из следующих структур:

Пример HTTP-запроса метода GetDocflows:

POST /V4/GetDocflows?boxId={{boxId}} HTTP/1.1
Host: diadoc-api-test.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/json charset=utf-8
Accept: application/json

Пример тела запроса метода GetDocflows:

{
    "Requests": [
        {
            "DocumentId": {
                "MessageId": "d213fc6e-1c0c-4ced-ae35-9078c895b92b",
                "EntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882"
            }
        }
    ]
}

Пример ответа метода GetDocflows:

{
    "Documents": [
        {
            "Docflow": {
                "Confirmation": {...},
                "DocflowStatus": {...},
                "OuterDocflowEntities": [...],
                "OuterDocflows": [...],
                "RecipientReceipt": {
                    "Confirmation": {...},
                    "DeliveredAt": {...},
                    "IsFinished": true,
                    "ReceiptAttachment": {
                        "Attachment": {
                            "AttachmentFilename": "DP_IZVPOL_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_7ce74dc9-0943-4fb9-90cd-327d445e5198.xml",
                            "DisplayFilename": "Извещение о получении исправления",
                            "Entity": {
                                "Content": {
                                    "Size": 5575
                                },
                                "CreationTimestamp": {
                                    "Ticks": 638840213353178450
                                },
                                "EntityId": "529b4e21-a982-4364-a52b-fff1f1cd8409"
                            }
                        },
                        "ContentTypeId": "receipt_133_01_03",
                        "Signature": {
                            "CadesT": {
                                "Content": {
                                    "Size": 7098
                                },
                                "CreationTimestamp": {
                                    "Ticks": 638840213356162462
                                },
                                "EntityId": "5a6cdfb3-973f-47b2-b1cb-19b228d1eb2f"
                            },
                            "Cms": {
                                "Content": {
                                    "Size": 3466
                                },
                                "CreationTimestamp": {
                                    "Ticks": 638840213353178450
                                },
                                "EntityId": "620dcec7-1a09-4525-8ccd-4e6a273201ab"
                            },
                            "DeliveredAt": {
                                "Ticks": 638840213356162462
                            },
                            "IsValid": true,
                            "PowerOfAttorneyAttachmentStatus": {
                                "StatusName": "PowerOfAttorneyNotRequired"
                            },
                            "SignerBoxId": "4926b472842f47baa1a309100064ace4@diadoc.ru",
                            "SignerDepartmentId": "00000000-0000-0000-0000-000000000000"
                        }
                    },
                    "SentAt": {...},
                    "Status": "Finished",
                    "UniversalMessage": {
                        "Attachment": {
                            "AttachmentFilename": "DP_UNISOOBSCH_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_6ca0fdf6-0ab4-461b-9c67-1b5d9c200bbb.xml",
                            "DisplayFilename": "Извещение о получении исправления",
                            "Entity": {
                                "Content": {
                                    "Size": 856
                                },
                                "CreationTimestamp": {
                                    "Ticks": 638840213353178450
                                },
                                "EntityId": "647250f0-c833-4cd2-a6b1-afe2ee812986"
                            }
                        },
                        "ContentTypeId": "receipt_uni_01",
                        "MessageInfo": {
                            "CodeGroup": "Receipt",
                            "Events": [
                                {
                                    "PlainText": "",
                                    "StatusCode": 1999
                                }
                            ]
                        }
                    }
                },
                "RecipientResponse": {...},
                "ResolutionEntities": {...},
                "SenderReceipt": {...},
                "SenderTitle": {...}
            },
            "DocumentId": {...},
            "DocumentInfo": {...},
            "LastEvent": {...}
        }
    ]
}

Получение извещения о получении

После получения титула продавца покупатель формирует извещение о получении титула и отправляет его продавцу. Получить извещение о получении можно с помощью метода GetMessage (V5).

В запросе нужно передать:

  • boxId — идентификатор ящика отправителя,

  • messageId — идентификатор отправленного сообщения с титулом продавца,

  • entityId — идентификатор отправленного титула продавца.

Эти значения можно получить из структуры Message.

В ответе метод вернет структуру Message с вложенной структурой Entity. Извещение о получении будет представлено структурой Entity со следующими полями:

  • EntityType = Attachment,

  • AttachmentType = InvoiceReceipt.

Пример HTTP-запроса метода GetMessage:

GET /V5/GetMessage?boxId={{boxId}}&messageId={{messageId}}&entityId={{entityId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8

Пример тела ответа метода GetMessage:

{
    "EntityType": "Attachment",
    "EntityId": "1d7b2e96-9945-41ab-aeea-2f310382bfad",
    "ParentEntityId": "45d16c54-8700-4882-afaf-97678d6ed135",
    "Content": "lores ipsum",
    "AttachmentType": "InvoiceReceipt",
    "FileName": "DP_IZVPOL_2BM-9610384428-961001000-201510080625090688235_2BM-9653544919-965301000-201508270726013081470_20151008_6bbfab54-4e9f-4ca1-99eb-37f34880a784.xml",
    "NeedRecipientSignature": false,
    "SignerBoxId": "",
    "NotDeliveredEventId": "",
    "RawCreationDate": 635798950114653648,
    "SignerDepartmentId": "",
    "NeedReceipt": false,
    "IsApprovementSignature": false,
    "IsEncryptedContent": false
}

Получение подтверждения оператора

После отправки титула продавца Диадок автоматически формирует подтверждение оператора о дате получения документа. Получить подтверждение оператора можно с помощью метода GetMessage (V5).

В запросе нужно передать:

  • boxId — идентификатор ящика отправителя,

  • messageId — идентификатор отправленного сообщения с титулом продавца,

  • entityId — идентификатор отправленного титула продавца.

Эти значения можно получить из структуры Message.

В ответе метод вернет структуру Message с вложенной структурой Entity. Подтверждение оператора будет представлено структурой Entity со следующими полями:

  • EntityType = Attachment,

  • AttachmentType = InvoiceConfirmation.

Пример HTTP-запроса метода GetMessage:

GET /V5/GetMessage?boxId={{boxId}}&messageId={{messageId}}&entityId={{entityId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8

Пример ответа метода GetMessage:

{
    "EntityType": "Attachment",
    "EntityId": "9955dccd-82fd-4412-b953-7854e102f782",
    "ParentEntityId": "736aa0c4-12f5-4412-bfea-1de59948b904",
    "Content": "lores ipsum",
    "AttachmentType": "InvoiceConfirmation",
    "FileName": "DP_PDPOL_2BM-7750370234-4012052808304878702630000000000_2BM_20150927_324c290e-f049-4906-baac-1ddcd7f3c2ff.xml",
    "NeedRecipientSignature": false,
    "SignerBoxId": "",
    "NotDeliveredEventId": "",
    "RawCreationDate": 635789700936777240,
    "SignerDepartmentId": "",
    "NeedReceipt": false,
    "IsApprovementSignature": false,
    "IsEncryptedContent": false
}

Получение документа для отмены сведений об отгрузке маркированных товаров

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