GenerateTitleXml¶
Метод GenerateTitleXml
генерирует XML-файл любого титула для любого типа документа.
- POST /GenerateTitleXml¶
- Query Parameters:
boxId – идентификатор ящика организации.
documentTypeNamedId – уникальный строковый идентификатор типа документа.
documentFunction – строковый идентификатор функции, уникальный в рамках типа документа.
documentVersion – строковый идентификатор версии, уникальный в рамках функции типа документа.
titleIndex – числовой идентификатор титула документа.
disableValidation – отключение валидации полученного XML-документа по XSD-схеме данного типа документа. Необязательный параметр.
editingSettingId – идентификатор настройки редактирования содержимого документа. Необязательный параметр.
letterId – идентификатор сообщения, содержащего соответствующий титул отправителя; параметр обязателен при генерации титула получателя (
titleIndex > 0
), необязательный в остальных случаях.documentId – идентификатор документа, содержащего соответствующий титул отправителя; параметр обязателен при генерации титула получателя (
titleIndex > 0
), необязательный в остальных случаях.
- Request Headers:
Authorization – данные, необходимые для авторизации.
- Request Body:
Тело запроса должно содержать упрощенный XML-файл
UserDataXsd
, соответствующий XSD-схеме контракта для генерации титула. XSD-схему контракта можно получить с помощью ссылки из поляUserDataXsdUrl
контракта DocumentTitle, полученного методом GetDocumentTypes.- Status Codes:
200 OK – операция успешно завершена.
400 Bad Request – данные в запросе имеют неверный формат или отсутствуют обязательные параметры.
401 Unauthorized – в запросе отсутствует HTTP-заголовок
Authorization
или в этом заголовке содержатся некорректные авторизационные данные.402 Payment Required – у организации с указанным идентификатором
boxId
закончилась подписка на API.403 Forbidden – у пользователя нет права для работы с указанным типом документа.
405 Method Not Allowed – используется неподходящий HTTP-метод.
500 Internal Server Error – при обработке запроса возникла непредвиденная ошибка.
- Response Headers:
Content-Disposition – имя файла сгенерированного титула.
- Response Body:
Тело ответа содержит сгенерированный XML-файл титула, построенный на основании данных из запроса в соответствии с XSD-схемой.
Генерация титула отправителя¶
Пример генерации счета-фактуры формата приказа ФНС №820.
Найдем нужный тип и версию документа с помощью метода GetDocumentTypes.
Ниже приведено тело ответа метода
GetDocumentTypes
. Для упрощения из него удалены другие типы, функции, версии и информация о метаданных.
"DocumentTypes": [
{
"Name": "Invoice",
"Title": "Счет-фактура",
"SupportedDocflows": [
0
],
"RequiresFnsRegistration": true,
"Functions": [
{
"Name": "default",
"Versions": [
{
"Version": "utd820_05_01_02_hyphen",
"SupportsContentPatching": true,
"SupportsEncrypting": true,
"SupportsPredefinedRecipientTitle": false,
"SupportsAmendmentRequest": true,
"Titles": [
{
"Index": 0,
"IsFormal": true,
"XsdUrl": "/GetContent?typeNamedId=Invoice&function=default&version=utd820_05_01_02_hyphen&titleIndex=0&contentType=TitleXsd",
"UserDataXsdUrl": "/GetContent?typeNamedId=Invoice&function=default&version=utd820_05_01_02_hyphen&titleIndex=0&contentType=UserContractXsd",
"SignerInfo": {
"SignerType": 2,
"ExtendedDocumentTitleType": 0
},
"MetadataItems": [...],
"EncryptedMetadataItems": [...]
}
],
"IsActual": true,
"Workflows": [
{
"Id": 17,
"IsDefault": true
},
{
"Id": 10,
"IsDefault": false
}
]
}
]
}
]
}
]
Из полученной информации важны следующие значения:
documentTypeNamedId
=Invoice
— имя типа документа
documentFunction
=default
— функция документа, у счета-фактуры она единственная
documentVersion
=utd820_05_01_02_hyphen
— версия формата, в примере указана для приказа №820
titleIndex
=0
— номер титула, для счета-фактуры указан 0, потому что счет-фактура — однотитульный документ, и вторая сторона (получатель) свой титул не отправляет
Подготовим контент для титула.
Титул — это XML-файл, соответствующий XSD-схеме.
Некоторые данные в титуле может заполнить только пользователь — это информация о товарах, услугах и т.д. Остальные данные могут быть заполнены автоматически на основании формата документа и информации в Диадоке, например, реквизиты организации продавца и покупателя по идентификатору ящика, значения КНД, версии формата, версии программы и т.д.
Чтобы упростить процесс генерации для пользователя, Диадок позволяет заполнить только «пользовательский» XML-файл, он же
UserDataXml
. На его основе метод генерации сформирует основной титул, автоматически дополнив его всеми необходимыми данными согласно XSD-схеме.Схема работы:
Как формировать
UserDataXml
— решает разработчик интеграционного решения. Один из вариантов — это кодогенерация из XSD-схемы упрощенного титула. Ссылка на схему находится в полеUserDataXsdUrl
в теле ответа методаGetDocumentTypes
, приведенного выше.В C# SDK для всех версий формата приказа №820 есть пример кодогенерации. Кодогенерация осуществлена инструментом xsd.exe. Чтобы воспользоваться ей в C#-клиенте, нужно заполнить объект
UniversalTransferDocument
для титула отправителя илиUniversalTransferDocumentBuyerTitle
для титула получателя и сериализовать его в XML.
Получим титул счета-фактуры.
Имея идентификаторы типа, функции, версии, порядкового номера титула и пользовательский контент, мы можем получить сам титул счета-фактуры.
Пример HTTP-запроса:
POST /GenerateTitleXml?boxId=a96be310-0982-461a-8b2a-91d198b7861c&documentTypeNamedId=Invoice&documentFunction=default&documentVersion=utd820_05_01_02_hyphen&titleIndex=0 HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: DiadocAuth ddauth_api_client_id={{ключ разработчика}}, ddauth_token={{авторизационный токен}}
Content-Type: application/xml; charset=utf-8
Пример тела запроса (UserDataXml):
<?xml version="1.0" encoding="utf-8"?>
<UniversalTransferDocumentWithHyphens Function="СЧФ"
DocumentDate="01.08.2019"
DocumentNumber="140"
DocumentCreator="1"
DocumentCreatorBase="1"
CircumFormatInvoice="1"
Currency="643" >
<Sellers>
<Seller>
<OrganizationDetails OrgType="2"
Inn="114500647890"
FnsParticipantId="2BM-participantId1"
OrgName="ИП Продавец Иван Иванович">
<Address>
<RussianAddress Region="02"/>
</Address>
</OrganizationDetails>
</Seller>
</Sellers>
<Buyers>
<Buyer>
<OrganizationReference OrgType="1"
BoxId="53d55d52-9317-4ad4-a7d9-5e9dd3cd6367"/>
</Buyer>
</Buyers>
<Table TotalWithVatExcluded="0" Vat="0" Total="0">
<Item Product="Товарная позиция"
Unit="796"
Quantity="0"
Price="0"
TaxRate="без НДС"
SubtotalWithVatExcluded="0"
Vat="0"
Subtotal="0"
Excise="10"/>
</Table>
<TransferInfo OperationInfo="Товары переданы"/>
<Signers>
<SignerDetails Inn="123456789047"
LastName="Подписантов"
FirstName="Иван"
MiddleName="Иванович"
RegistrationCertificate="1"
SignerPowers="0"
SignerType="3"
SignerStatus="1"
SignerPowersBase="Должностные обязанности"/>
</Signers>
</UniversalTransferDocumentWithHyphens>
Пример тела ответа:
HTTP/1.1 200 OK
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="ON_NSCHFDOPPR_2BM-9670670494-967001000-202201240241297341956_2BM-participantId1_20220303_c1ffd60b-0925-4e08-a133-cc55e9fc5b3b" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0">
<СвУчДокОбор ИдОтпр="2BM-participantId1" ИдПол="2BM-9670670494-967001000-202201240241297341956">
<СвОЭДОтпр ИННЮЛ="6663003127" ИдЭДО="2BM" НаимОрг="АО "ПФ "СКБ Контур"" />
</СвУчДокОбор>
<Документ КНД="1115131" ВремИнфПр="09.16.16" ДатаИнфПр="03.03.2022" НаимЭконСубСост="1" Функция="СЧФ" ОснДоверОргСост="1">
<СвСчФакт НомерСчФ="140" ДатаСчФ="01.08.2019" КодОКВ="643">
<СвПрод>
<ИдСв>
<СвИП ИННФЛ="114500647890">
<ФИО Фамилия="Продавец" Имя="Иван" Отчество="Иванович" />
</СвИП>
</ИдСв>
<Адрес>
<АдрРФ КодРегион="02" />
</Адрес>
</СвПрод>
<СвПокуп>
<ИдСв>
<СвЮЛУч НаимОрг="Документация-получатель" ИННЮЛ="9670670494" КПП="967001000" />
</ИдСв>
<Адрес>
<АдрРФ Индекс="777777" КодРегион="50" Город="г. Москва" />
</Адрес>
</СвПокуп>
<ДопСвФХЖ1 НаимОКВ="Российский рубль" ОбстФормСЧФ="1" />
</СвСчФакт>
<ТаблСчФакт>
<СведТов НомСтр="1" НаимТов="Товарная позиция" ОКЕИ_Тов="796" КолТов="0" ЦенаТов="0.00" СтТовБезНДС="0.00" НалСт="без НДС" СтТовУчНал="0.00">
<Акциз>
<СумАкциз>10.00</СумАкциз>
</Акциз>
<СумНал>
<СумНал>0.00</СумНал>
</СумНал>
<ДопСведТов НаимЕдИзм="шт" />
</СведТов>
<ВсегоОпл СтТовБезНДСВсего="0.00" СтТовУчНалВсего="0.00">
<СумНалВсего>
<СумНал>0.00</СумНал>
</СумНалВсего>
</ВсегоОпл>
</ТаблСчФакт>
<СвПродПер>
<СвПер СодОпер="Товары переданы">
<ОснПер НаимОсн="Без документа-основания" />
</СвПер>
</СвПродПер>
<Подписант ОснПолн="Должностные обязанности" ОблПолн="0" Статус="1">
<ФЛ ИННФЛ="123456789047">
<ФИО Фамилия="Подписантов" Имя="Иван" Отчество="Иванович" />
</ФЛ>
</Подписант>
</Документ>
</Файл>
Полученное тело ответа содержит XML-файл первого титула документа.
Генерация последующих титулов¶
Если тип документа содержит более одного титула и нужно сгенерировать титулы для последующих участников (т.е. когда titleIndex
> 0), то сценарий аналогичен примеру выше, за исключением дополнительных параметров в запросе.
В большинстве случаев в контенте последующих титулов нужна информация из предыдущих, поэтому в запрос нужно передать идентификаторы уже существующего в Диадоке документа (letterId
+ documentId
).
Генерация титула с настройкой редактирования¶
Если при создании документа заданы настройки редактирования, то валидация сгенерированного файла будет выполняться по XSD-схеме, соответствующей указанной настройке редактирования. То есть если настройка редактирования позволяет не указывать какой-либо атрибут, то с помощью метода GenerateTitleXml
можно сгенерировать XML-файл, в котором этот атрибут будет отсутствовать. Валидация такого файла будет осуществлятся так, как будто неуказанный атрибут является опциональным по XSD-схеме.
Генерация титула при подписании сертификатом физического лица¶
Большинство формализованных документов должны содержать в себе информацию о подписанте документа. При подписании документа юридического лица сертификатом, выданным на физическое лицо, в блоке Подписант невозможно заполнить поля, которых нет в сертификате, например, наименование организации, ИНН ЮЛ. Чтобы заполнить эти поля, укажите в UserDataXml
информацию о МЧД:
если детали подписанта генерируются по сертификату
SignerReference
, то заполните структуру PowerOfAttorney: укажите регистрационный номер МЧД и ИНН доверителя или используйте МЧД по умолчанию;если при генерации детали подписанта задаются в явном виде с помощью структуры
SignerDetails
, то в случае формирования подписанта по МЧД самостоятельно определите необходимость использования ИНН подписанта и название организации для ЮЛ из МЧД.
Структура PowerOfAttorney в XSD-схеме
<xs:complexType name="PowerOfAttorney">
<xs:sequence>
<xs:element name="FullId" minOccurs="0">
<xs:complexType>
<xs:attribute name="RegistrationNumber" use="required" type="guid"/>
<xs:attribute name="IssuerInn" use="required" type="inn"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="UseDefault" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
Пример тела запроса для документа с МЧД:
<?xml version="1.0" encoding="utf-8"?>
<UniversalTransferDocumentWithHyphens Function="СЧФ"
DocumentDate="01.08.2019"
DocumentNumber="140"
DocumentCreator="1"
DocumentCreatorBase="1"
CircumFormatInvoice="1"
Currency="643" >
<Sellers>
<Seller>
<OrganizationDetails OrgType="2"
Inn="114500647890"
FnsParticipantId="2BM-participantId1"
OrgName="ИП Продавец Иван Иванович">
<Address>
<RussianAddress Region="02"/>
</Address>
</OrganizationDetails>
</Seller>
</Sellers>
<Buyers>
<Buyer>
<OrganizationReference OrgType="1"
BoxId="53d55d52-9317-4ad4-a7d9-5e9dd3cd6367"/>
</Buyer>
</Buyers>
<Table TotalWithVatExcluded="0" Vat="0" Total="0">
<Item Product="Товарная позиция"
Unit="796"
Quantity="0"
Price="0"
TaxRate="без НДС"
SubtotalWithVatExcluded="0"
Vat="0"
Subtotal="0"
Excise="10"/>
</Table>
<TransferInfo OperationInfo="Товары переданы"/>
<Signers>
<SignerReference BoxId="74ef3a00-c625-3ef0-9b50-65bf7f96b9ae" CertificateThumbprint="8A80C2723DBC4F0A94F8CEE21C0A15A68A80C272">
<PowerOfAttorney UseDefault="false">
<FullId RegistrationNumber="4F73C574-CF7C-4664-91B9-48185BC66A27" IssuerInn="114500647890" />
</PowerOfAttorney>
</SignerReference>
</Signers>
</UniversalTransferDocumentWithHyphens>
Пример тела ответа:
HTTP/1.1 200 OK
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="ON_NSCHFDOPPR_2BM-9670670494-967001000-202201240241297341956_2BM-participantId1_20220303_c1ffd60b-0925-4e08-a133-cc55e9fc5b3b" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0">
<СвУчДокОбор ИдОтпр="2BM-participantId1" ИдПол="2BM-9670670494-967001000-202201240241297341956">
<СвОЭДОтпр ИННЮЛ="6663003127" ИдЭДО="2BM" НаимОрг="АО "ПФ "СКБ Контур"" />
</СвУчДокОбор>
<Документ КНД="1115131" ВремИнфПр="09.16.16" ДатаИнфПр="03.03.2022" НаимЭконСубСост="1" Функция="СЧФ" ОснДоверОргСост="1">
<СвСчФакт НомерСчФ="140" ДатаСчФ="01.08.2019" КодОКВ="643">
<СвПрод>
<ИдСв>
<СвИП ИННФЛ="114500647890">
<ФИО Фамилия="Продавец" Имя="Иван" Отчество="Иванович" />
</СвИП>
</ИдСв>
<Адрес>
<АдрРФ КодРегион="02" />
</Адрес>
</СвПрод>
<СвПокуп>
<ИдСв>
<СвЮЛУч НаимОрг="Документация-получатель" ИННЮЛ="9670670494" КПП="967001000" />
</ИдСв>
<Адрес>
<АдрРФ Индекс="777777" КодРегион="50" Город="г. Москва" />
</Адрес>
</СвПокуп>
<ДопСвФХЖ1 НаимОКВ="Российский рубль" ОбстФормСЧФ="1" />
</СвСчФакт>
<ТаблСчФакт>
<СведТов НомСтр="1" НаимТов="Товарная позиция" ОКЕИ_Тов="796" КолТов="0" ЦенаТов="0.00" СтТовБезНДС="0.00" НалСт="без НДС" СтТовУчНал="0.00">
<Акциз>
<СумАкциз>10.00</СумАкциз>
</Акциз>
<СумНал>
<СумНал>0.00</СумНал>
</СумНал>
<ДопСведТов НаимЕдИзм="шт" />
</СведТов>
<ВсегоОпл СтТовБезНДСВсего="0.00" СтТовУчНалВсего="0.00">
<СумНалВсего>
<СумНал>0.00</СумНал>
</СумНалВсего>
</ВсегоОпл>
</ТаблСчФакт>
<СвПродПер>
<СвПер СодОпер="Товары переданы">
<ОснПер НаимОсн="Без документа-основания" />
</СвПер>
</СвПродПер>
<Подписант ОснПолн="Должностные обязанности" ОблПолн="0" Статус="1">
<ЮЛ ИННЮЛ="114500647890" Должн="Сотрудник" НаимОрг="Тестовая организация">
<ФИО Фамилия="Тестовый" Имя="Сертификат" Отчество="Сертификатович" />
</ЮЛ>
</Подписант>
</Документ>
</Файл>
Генерация титула с информацией о МЧД в содержимом документа¶
В новых форматах документов можно передавать информацию об МЧД в содержимом документа. Сейчас сгенерировать документ с МЧД в содержимом можно только для акта сверки формата, утвержденного приказом № ЕД-7-26/405@.
Для генерации документа с МДЧ в содержимом заполните структуру PowerOfAttorney
в XSD Универсального подписанта конкретного формата документа. В структуре можно указать сведения об электронной (элемент Electronic
) или бумажной доверенности (элемент Paper
). Электронную доверенность можно выбрать из хранилища Диадока (заполнение элемента Storage
) или указать данные вручную (заполнение элемента Manual
). Если вы выбираете доверенность из хранилища, можно использовать МЧД сотрудника по умолчанию (атрибут UseDefault = 1
) или указать другую, заполнив регистрационный номер и ИНН доверителя внутри структуры FullId при одновременном значении атрибута UseDefault = 0
.
Пример структуры PowerOfAttorney для универсального подписанта Акта сверки 405 формата:
<xs:complexType name="PowerOfAttorney">
<xs:sequence>
<xs:element name="Electronic" type="Electronic" minOccurs="0">
<xs:annotation>
<xs:documentation>Электронная доверенность</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Paper" type="Paper" minOccurs="0">
<xs:annotation>
<xs:documentation>Бумажная доверенности</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Electronic">
<xs:sequence>
<xs:choice>
<xs:element name="Storage" type="Storage">
<xs:annotation>
<xs:documentation>Автоматическое заполнение информации по доверенности на основе номера и ИНН</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Manual" type="Manual">
<xs:annotation>
<xs:documentation>Ручное заполнение данных доверенности</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Storage">
<xs:sequence>
<xs:element name="FullId" minOccurs="0">
<xs:complexType>
<xs:attribute name="RegistrationNumber" type="guid" use="required">
<xs:annotation>
<xs:documentation>Номер доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IssuerInn" type="inn" use="required">
<xs:annotation>
<xs:documentation>ИНН организации, выдавшей доверенность</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="UseDefault" use="required">
<xs:annotation>
<xs:documentation>Автоматическое заполнение информации на основе доверенности, используемой сотрудником по умолчанию</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="Manual">
<xs:attribute name="RegistrationNumber" type="guid">
<xs:annotation>
<xs:documentation>Номер доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RegistrationDate" type="date">
<xs:annotation>
<xs:documentation>Дата совершения (выдачи) доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="InternalNumber" type="string50">
<xs:annotation>
<xs:documentation>Внутренний регистрационный номер доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="InternalDate" type="date">
<xs:annotation>
<xs:documentation>Дата внутренней регистрации доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SystemId" type="string500">
<xs:annotation>
<xs:documentation>Идентифицирующая информация об информационной системе, в которой осуществляется хранение доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="Paper">
<xs:annotation>
<xs:documentation>Сведения о доверенности, используемой для подтверждения полномочий на бумажном носителе</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Person" type="Fio" minOccurs="0">
<xs:annotation>
<xs:documentation>Фамилия, имя, отчество (при наличии) лица, подписавшего доверенность</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="InternalNumber" type="string50">
<xs:annotation>
<xs:documentation>Внутренний регистрационный номер доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RegistrationDate" type="date">
<xs:annotation>
<xs:documentation>Дата совершения (выдачи) доверенности</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IssuerInfo" type="string1000">
<xs:annotation>
<xs:documentation>Сведения о доверителе</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>