Работа с протоколом разногласий

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

В веб-интерфейсе получатель делает это с помощью действия «Подписать с разногласиями». Через 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: подробнее — в разделе Получение документов.

Зная один документ из пары договор-протокол, можно получить второй. Для этого:

  1. Получите договор или протокол методами GetDocument (V3), GetDocuments (V3) или GetMessage (V6).

  2. Получите связь со вторым документом из структуры 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.

Поле 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

Тип

Текст

Описание

Delivered

Normal

Протокол разногласий доставлен получателю

Ожидается подпись протокола разногласий получателем

ResponseDelivered

Success

Протокол разногласий подписан

Договор, подписанный с протоколом разногласий, вступил в силу

SigningRejected

Error

Отказано в подписании протокола разногласий

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

Revoked

Error

Протокол разногласий аннулирован

Протокол разногласий аннулирован. Договор, подписанный с протоколом разногласий, аннулируется автоматически

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

Получить протокол разногласий можно с помощью метода GenerateDocumentZip.

Метод GenerateDocumentZip для договора и для протокола включает в архив универсальное сообщение с кодом статуса 4002. Сообщение фиксирует связь этих документов и приложено и к договору, и к протоколу. В нем указаны:

  • СведУС — дата и время формирования и имя файла договора, на которое сформировано сообщение;

  • СвСобытДок — идентификаторы файлов, номер и дата договора, номер и дата протокола разногласий, если они заполнены;

  • ОтпрУС и ПолучУС — идентификатор участника ЭДО и сведения о лице: должность, ФИО и контактные данные.

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

Аннулирование договора или протокола

Предложение об аннулировании можно направить и на договор, и на протокол. Пока вторая сторона не приняла аннулирование, у документа, на который направили предложение, основным статусом становится «Ожидается аннулирование» (у инициатора) или «Требуется аннулирование» (у второй стороны). Второй документ пары сохраняет свой статус: у протокола это «Подписан», у договора — «Подписан с протоколом разногласий», «Подписан с протоколом разногласий контрагентом» или «Подписан с протоколом разногласий получателем».

Когда аннулирование принято, Диадок аннулирует оба документа. На договоре внешний статус DisagreementProtocol принимает значение Revoked.

Если в аннулировании отказали, статус примет значение RevocationStatus = RevocationRejected.