Работа с протоколом разногласий
Получатель может подписать неформализованный договор с разногласиями, приложив к нему протокол разногласий.
В веб-интерфейсе получатель делает это с помощью действия «Подписать с разногласиями». Через API отправить протокол разногласий нельзя. Получить можно протокол, договор, связь между ними и статус.
К договору можно приложить только один протокол разногласий. Прикрепить протокол может получатель договора — если у него есть право подписать этот договор. Прикрепление недоступно для договора с промежуточным получателем, для участника в роуминге и для договора в закрытом пакете, в котором есть другие документы.
Примечание
Подробнее о работе в веб-интерфейсе — в статье о протоколе разногласий.
На формализованный договор этот механизм не распространяется.
Свойства протокола разногласий
Протокол разногласий представляет собой отдельный документ со следующими свойствами:
TypeNamedId = ContractDisagreements;Function = default;Version = nonformalizedcontractdisagreements_01_01.
Эти значения можно получить с помощью метода GetDocumentTypes (V3).
Вид документооборота протокола — двусторонний с ответной подписью, WorkflowId = 2.
Протокол можно прикрепить только к неформализованному договору с типом Contract. Связь устанавливается по номеру и дате договора: метаданные протокола OriginalDocumentNumber и OriginalDocumentDate совпадают с номером и датой договора.
Обязательные метаданные протокола:
FileName— имя, с которым документ загружен в Диадок;DocumentDate— дата протокола;OriginalDocumentNumber— номер договора;OriginalDocumentDate— дата договора.
Номер протокола в метаданных DocumentNumber необязателен.
Отправка протокола
Протокол ContractDisagreements создается только при подписании договора в веб-интерфейсе.
Нельзя отправить протокол методами PostMessage (V3) и PostTemplate: в ответ вернется ошибка 400 (Bad Request). Связать протокол с существующим договором через API также нельзя.
Получение договора и протокола
Получить договор и протокол можно стандартными методами API: подробнее — в разделе Получение документов.
Зная один документ из пары договор-протокол, можно получить второй. Для этого:
Получите договор или протокол методами GetDocument (V3), GetDocuments (V3) или GetMessage (V6).
Получите связь со вторым документом из структуры Document:
для договора — идентификатор протокола хранится в
SubordinateDocumentIds;для протокола — идентификатор договора хранится в
InitialDocumentIds.
Зная идентификатор второго документа в паре, получите его методом GetDocument (V3): передайте MessageId и EntityId из структуры DocumentId.
Статусы договора
Определить, что к договору прикреплен протокол разногласий, можно по следующим признакам в структуре Document:
RecipientResponseStatus = WithRecipientPartiallySignature;DocflowStatus.PrimaryStatus.StatusText— зависит от роли участника и от того, внутренний это документооборот или между контрагентами:у отправителя — «Подписан с протоколом разногласий контрагентом»;
у получателя — «Подписан с протоколом разногласий»;
для внутреннего документа (между подразделениями одной организации) — «Подписан с протоколом разногласий получателем».
Если получатель подписал договор вместе с протоколом, основной статус договора принимает один из этих текстов. Статус самого протокола на текст статуса договора не влияет: если вторая сторона подпишет протокол или откажется от подписи, текст статуса договора не изменится.
Статус «Подписан» (WithRecipientSignature) для такого договора не используется. Текст «Подписан с разногласиями» при том же WithRecipientPartiallySignature означает подписи без протокола — например, к ответному титулу.
В методах GetDocuments (V3) и GetDocuments (V4) нет отдельного фильтра для протокола разногласий. Договор с протоколом можно получить по статусу WithRecipientPartiallySignature.
После прикрепления протокола договор повторно подписать нельзя: подпись получателя останется частичной.
Подпись под договором доставляется после доставки протокола. Если протокол так и не был доставлен, договор остается неподписанным. Подписать договор как полностью согласованный в этом состоянии нельзя: для договора будет доступен только отказ в подписи.
Метод GetDocumentHistory в истории договора возвращает событие PartiallySigned — «документ подписан частично». Протокол разногласий в событии не указан.
Статусы протокола
Состояние протокола, прикрепленного к договору, можно получить во внешнем документообороте договора с идентификатором DocflowNamedId = DisagreementProtocol и DocflowFriendlyName — «Протокол разногласий». У самого протокола эти статусы получить нельзя.
Статус можно получить с помощью методов для работы с событиями, документами и сообщениями или с помощью методов для работы с документооборотом. При вызове метода указывайте данные договора.
Получение через методы для работы с событиями, документами и сообщениями
Методы работы с сообщениями и событиями возвращают все полученные статусы:
Информация о статусах возвращается в структуре OuterDocflowInfo.
Методы работы с документами возвращают последний полученный статус в поле
Document.LastOuterDocflows:
Поле LastOuterDocflows — список структур LastOuterDocflow. Статус хранится в поле OuterDocflow и представлен структурой OuterDocflowInfo.
Пример поля LastOuterDocflows:
"LastOuterDocflows": [
{
"ParentEntityId": "7c1e9a20-4b55-4d31-8f6a-2e0b91c4d8a1",
"OuterDocflow": {
"DocflowNamedId": "DisagreementProtocol",
"DocflowFriendlyName": "Протокол разногласий",
"Status": {
"NamedId": "ResponseDelivered",
"FriendlyName": "Протокол разногласий подписан",
"Type": "Success",
"Description": "Договор, подписанный с протоколом разногласий, вступил в силу",
"Details": []
}
}
}
]
Получение через методы для работы с документооборотом
Методы для работы с документооборотом для одно-, двух- и трехтитульных документов:
Информация о статусах возвращается в структурах:
OuterDocflow — содержит информацию о последнем полученном статусе,
OuterDocflowEntities — содержит информацию обо всех полученных статусах; в зависимости от сущности она хранится внутри других структур:
для документа — в структуре DocflowV4,
для запроса на аннулирование — в структуре RevocationDocflowV4.
Пример структуры OuterDocflows:
"OuterDocflows": [ { "DocflowNamedId": "DisagreementProtocol", "ParentEntityId": "7c1e9a20-4b55-4d31-8f6a-2e0b91c4d8a1", "OuterDocflowEntityId": "9e4b70d2-15a8-4c63-8d19-0f6a2b5c7e84" } ]
Пример структуры OuterDocflowEntities:
"OuterDocflowEntities": [ { "DocflowNamedId": "DisagreementProtocol", "DocflowFriendlyName": "Протокол разногласий", "StatusEntities": [ { "Attachment": { "Attachment": { "Entity": { "EntityId": "3f8a12c6-91d4-4e70-b2a5-6c0d47e9f1b3", "CreationTimestamp": { "Ticks": 638901234567890000 } }, "DisplayFilename": "" }, "ContentTypeId": "" }, "Status": { "NamedId": "Delivered", "FriendlyName": "Протокол разногласий доставлен получателю", "Type": "Normal", "Description": "Ожидается подпись протокола разногласий получателем", "Details": [] } }, { "Attachment": { "Attachment": { "Entity": { "EntityId": "9e4b70d2-15a8-4c63-8d19-0f6a2b5c7e84", "CreationTimestamp": { "Ticks": 638901298765430000 } }, "DisplayFilename": "" }, "ContentTypeId": "" }, "Status": { "NamedId": "ResponseDelivered", "FriendlyName": "Протокол разногласий подписан", "Type": "Success", "Description": "Договор, подписанный с протоколом разногласий, вступил в силу", "Details": [] } } ] } ]
Методы для работы с документооборотом для любых, в том числе многотитульных документов:
Информация о статусах возвращается в поле
OuterDocflowsв виде списка структур OuterDocflowV5. ПолеLatestStatusEntityIdсодержит идентификатор последнего полученного состояния, полеStatusEntities— список всех полученных статусов.Поле
OuterDocflowsвозвращается:для документа — в структуре DocflowV5,
для запроса на аннулирование — в структуре RevocationDocflowV5.
Пример структуры OuterDocflows:
"OuterDocflows": [ { "DocflowNamedId": "DisagreementProtocol", "ParentEntityId": "7c1e9a20-4b55-4d31-8f6a-2e0b91c4d8a1", "LatestStatusEntityId": "9e4b70d2-15a8-4c63-8d19-0f6a2b5c7e84", "DocflowFriendlyName": "Протокол разногласий", "StatusEntities": [ { "Attachment": { "Attachment": { "Entity": { "EntityId": "3f8a12c6-91d4-4e70-b2a5-6c0d47e9f1b3", "CreationTimestamp": { "Ticks": 638901234567890000 } }, "DisplayFilename": "" }, "ContentTypeId": "" }, "Status": { "NamedId": "Delivered", "FriendlyName": "Протокол разногласий доставлен получателю", "Type": "Normal", "Description": "Ожидается подпись протокола разногласий получателем", "Details": [] } }, { "Attachment": { "Attachment": { "Entity": { "EntityId": "9e4b70d2-15a8-4c63-8d19-0f6a2b5c7e84", "CreationTimestamp": { "Ticks": 638901298765430000 } }, "DisplayFilename": "" }, "ContentTypeId": "" }, "Status": { "NamedId": "ResponseDelivered", "FriendlyName": "Протокол разногласий подписан", "Type": "Success", "Description": "Договор, подписанный с протоколом разногласий, вступил в силу", "Details": [] } } ] } ]
Информация о статусе обработки
Обратите внимание, что структуры OuterDocflowInfo, OuterDocflow, OuterDocflowEntities и OuterDocflowV5 могут содержать информацию не только о протоколе разногласий, но и о других внешних документооборотах. Отличить статусы протокола разногласий можно по идентификатору DocflowNamedId = DisagreementProtocol. Значения статусов описаны в таблице ниже.
NamedId |
Тип |
Текст |
Описание |
|---|---|---|---|
|
|
Протокол разногласий доставлен получателю |
Ожидается подпись протокола разногласий получателем |
|
|
Протокол разногласий подписан |
Договор, подписанный с протоколом разногласий, вступил в силу |
|
|
Отказано в подписании протокола разногласий |
Протокол разногласий к договору не подписан, договор не вступил в силу. Согласуйте необходимые изменения с контрагентом и инициируйте документооборот повторно |
|
|
Протокол разногласий аннулирован |
Протокол разногласий аннулирован. Договор, подписанный с протоколом разногласий, аннулируется автоматически |
Получение архива с документооборотом
Получить протокол разногласий можно с помощью метода GenerateDocumentZip.
Метод GenerateDocumentZip для договора и для протокола включает в архив универсальное сообщение с кодом статуса 4002. Сообщение фиксирует связь этих документов и приложено и к договору, и к протоколу. В нем указаны:
СведУС— дата и время формирования и имя файла договора, на которое сформировано сообщение;СвСобытДок— идентификаторы файлов, номер и дата договора, номер и дата протокола разногласий, если они заполнены;ОтпрУСиПолучУС— идентификатор участника ЭДО и сведения о лице: должность, ФИО и контактные данные.
Архив одного документа не содержит второй документ пары. Чтобы получить документооборот обоих документов, запросите архив для каждого. Инструкция по скачиванию архива приведена в разделе Генерация архива документооборота.
Аннулирование договора или протокола
Предложение об аннулировании можно направить и на договор, и на протокол. Пока вторая сторона не приняла аннулирование, у документа, на который направили предложение, основным статусом становится «Ожидается аннулирование» (у инициатора) или «Требуется аннулирование» (у второй стороны). Второй документ пары сохраняет свой статус: у протокола это «Подписан», у договора — «Подписан с протоколом разногласий», «Подписан с протоколом разногласий контрагентом» или «Подписан с протоколом разногласий получателем».
Когда аннулирование принято, Диадок аннулирует оба документа. На договоре внешний статус DisagreementProtocol принимает значение Revoked.
Если в аннулировании отказали, статус примет значение RevocationStatus = RevocationRejected.