Лента событий для ЭТрН
Эта страница описывает, как по ленте событий узнать стадию перевозки и отличить ошибки. Работа с лентой событий для перевозочных документов описана на странице Работа с событиями.
Стадия перевозки
Стадия перевозки фиксируется в теге kl-status. Диадок.Логистика записывает его в пользовательские данные титула в поле DocumentInfo.CustomData и обновляет при каждом изменении. Подробнее — на странице Теги и статусы ЭТрН.
Ключевые события документооборота
С документом во время документооборота происходит множество событий — обрабатывать их все не нужно. Ниже в разделах перечислены главные события обработки ЭТрН — они указаны в том порядке, в котором приходят при перевозке.
Кроме них на любой стадии документооборота могут произойти следующие события:
Отказ — завершает документооборот по перевозке. Обработайте его, иначе перевозка останется в промежуточном статусе.
Ошибка — сущность с
AttachmentType = OuterDocflowи статусомType = Error. Код и текст ошибки находятся вStatus.Details.
Любое событие хранится в структуре BoxEvent: новое сообщение — в поле Message, дополнение к уже существующему сообщению — в поле Patch.
Для работы с событиями могут потребоваться следующие поля:
MessageId— идентификатор сообщения.EntityId— идентификатор сущности внутри сообщения. У титула это идентификатор документа.ParentEntityId— идентификатор родительской сущности. У подписи это документ, который она подписывает. У второго титула — первый титул цепочки.FromBoxId,ToBoxId— идентификаторы ящиков отправителя и получателя.DocumentNumber,DocumentDate— номер и дата документа.FileName— имя файла, ИдФайл.TypeNamedId— тип документа. Пригодится для отбора, если фильтр не был задан в самом запросе.ContentTypeId— версия и вид титула. По нему титулы различаются между собой.DocumentDirection— направление документа:Inbound— входящий,Outbound— исходящий.RecipientResponseStatus— статус ответа получателя.
Отправлен титул Т1
Событие отправки титула приходит в поле Message со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_trn_ot_t1_mt_05_01_v1.
Подпись титула — соседняя сущность Signature. Ее ParentEntityId совпадает с EntityId титула Т1.
Пример события:
{
"Message": {
"MessageId": "{{messageId}}",
"FromBoxId": "{{fromBoxId}}",
"ToBoxId": "{{toBoxId}}",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "{{entityId_t1}}",
"AttachmentType": "Title",
"DocumentInfo": {
"DocumentDirection": "Outbound",
"TypeNamedId": "LogisticsWaybill",
"Function": "reception",
"Version": "kl_trn_mt_05_01",
"RecipientResponseStatus": "WaitingForRecipientSignature"
},
"ContentTypeId": "kl_trn_ot_t1_mt_05_01_v1"
},
{
"EntityType": "Signature",
"ParentEntityId": "{{entityId_t1}}"
}
]
}
}
Присвоен УИД
Ответ ГИС ЭПД приходит в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = OuterDocflow;DocflowNamedId = KlMt.
Пример события:
{
"Patch": {
"MessageId": "{{messageId}}",
"Entities": [
{
"EntityType": "Attachment",
"ParentEntityId": "{{entityId_t1}}",
"AttachmentType": "OuterDocflow",
"OuterDocflow": {
"DocflowNamedId": "KlMt",
"Status": {
"NamedId": "4000211000",
"Type": "Success",
"Details": [
{
"Code": "mt-id",
"Text": "{{mtId}}"
}
]
}
}
}
]
}
}
* Статус 4000211000 в примере — принят новый документ.
Водитель подтвердил титул Т2
Водитель подтверждает титул Т2 простой электронной подписью. Событие приходит в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = OuterDocflow;DocflowNamedId = KlDriverConfirm.
ParentEntityId сущности совпадает с EntityId титула Т1.
Пример события:
{
"Patch": {
"MessageId": "{{messageId}}",
"Entities": [
{
"EntityType": "Attachment",
"ParentEntityId": "{{entityId_t1}}",
"AttachmentType": "OuterDocflow",
"OuterDocflow": {
"DocflowNamedId": "KlDriverConfirm",
"Status": {
"NamedId": "Confirm",
"Type": "Success"
}
}
}
]
}
}
Грузоотправитель получил титул Т2
Когда грузоотправитель отправляет титул Т1, сведения о титуле Т2 приходят в то же сообщение, в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_trn_ot_t2_mt_05_01_v1.
ParentEntityId титула Т2 совпадает с EntityId титула Т1. В том же дополнении может быть подтверждение оператора о дате доставки с признаками AttachmentType = InvoiceConfirmation и FileName = DP_PDOTPR. Подтверждение приходит получателю титула.
Пример события:
{
"Patch": {
"MessageId": "{{messageId}}",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "{{entityId_t2}}",
"ParentEntityId": "{{entityId_t1}}",
"AttachmentType": "Title",
"Version": "kl_trn_mt_05_01",
"ContentTypeId": "kl_trn_ot_t2_mt_05_01_v1"
},
{
"EntityType": "Signature",
"ParentEntityId": "{{entityId_t2}}"
}
]
}
}
Грузоотправителю переслали титулы Т3 или Т4
В ящике грузоотправителя титулы Т1 и Т2 входят в одно сообщение и имеют один MessageId. Титулы Т3 и Т4 появляются в ящиках других участников перевозки. Чтобы грузоотправитель мог видеть все титулы, Диадок пересылает сведения о них в его ящик. Пересылка — отдельное сообщение с Function = fwd и новым MessageId, поэтому ее не получится связать с титулами Т1 и Т2 по MessageId. Чтобы связать пересылку с титулами Т1 и Т2, группируйте документы по УИД.
У пересылки следующие признаки:
VersionиContentTypeIdравныkl_trn_fwd;Function = fwd;DocumentDirection = Inbound;идентификаторы ящиков
FromBoxIdиToBoxIdпоменялись местами относительно титула Т1;в
CustomDataтегkl-funcимеет значениеdelivery;в
CustomDataуказан тегmt-id— УИД Минтранса: это связь с первыми титулами перевозки;в
InitialDocumentIdsуказан документ-основание.
В пересылке приходят все наблюдаемые титулы.
Пример события:
{
"Message": {
"MessageId": "{{forwardMessageId}}",
"Entities": [
{
"EntityType": "Attachment",
"AttachmentType": "Title",
"DocumentInfo": {
"InitialDocumentIds": [
{
"MessageId": "{{initialMessageId}}",
"EntityId": "{{initialEntityId}}"
}
],
"CustomData": [
{
"Key": "kl-func",
"Value": "delivery"
},
{
"Key": "mt-id",
"Value": "{{mtId}}"
}
],
"DocumentDirection": "Inbound",
"TypeNamedId": "LogisticsWaybill",
"Function": "fwd",
"Version": "kl_trn_fwd"
},
"ContentTypeId": "kl_trn_fwd"
}
]
}
}
Ошибки в ленте событий
Документ не доставлен до контрагента
Проверить статус доставки можно следующими способами:
По технологическому документу. Ориентируйтесь на
DP_PDOTPRв ленте получателя: это подтверждение оператора о дате доставки.По событию. Если документ не доставлен, в ленте появится дополнение
Patchс сущностьюEntityType = AttachmentиAttachmentType = DeliveryFailureNotification.
Пример уведомления о недоставке:
{
"AttachmentType": "DeliveryFailureNotification",
"FileName": "Notification.txt",
"NotDeliveredEventId": "{{notDeliveredEventId}}"
}
NotDeliveredEventId — идентификатор сообщения или дополнения, который не удалось доставить, — чтобы его получить, вызовите метод GetEvent (V3) и укажите NotDeliveredEventId в параметре eventId.
В этом же событии может быть сущность с причиной недоставки: если подпись оказалась невалидной, ее тип вложения будет иметь значение AttachmentType = SignatureVerificationReport.
Пример протокола проверки подписи:
{
"EntityType": "Attachment",
"ParentEntityId": "{{signatureEntityId}}",
"AttachmentType": "SignatureVerificationReport"
}
Машиночитаемая доверенность не прошла проверку
Результат проверки машиночитаемой доверенности хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = PowerOfAttorneyStatus.
Статус проверки хранится в структуре PowerOfAttorneyInfo. При StatusNamedId = ValidationError код ошибки будет храниться в поле OperationError.
Пример события:
{
"AttachmentType": "PowerOfAttorneyStatus",
"PowerOfAttorneyInfo": {
"Status": {
"Severity": "Error",
"StatusNamedId": "ValidationError",
"OperationError": {
"Code": "PowerOfAttorneyNotFound"
}
}
}
}
Ошибки от ГИС ЭПД
Результат проверки титула в ГИС ЭПД хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = OuterDocflow;DocflowNamedId = KlMt;Status.Type = Error.
Статусы обработки описаны в разделе Информация о статусе обработки.
Пример события:
{
"AttachmentType": "OuterDocflow",
"OuterDocflow": {
"DocflowNamedId": "KlMt",
"Status": {
"NamedId": "2000411000",
"Type": "Error",
"Details": [
{
"Code": "mt-id",
"Text": "{{mtId}}"
}
]
}
}
}
Ошибки из роуминга
Отправка перевозочных документов в роуминге — обмен документами между компаниями, которые пользуются услугами разных операторов электронного документооборота.
Если при отправке документа в роуминг возникла ошибка, она хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = RoamingNotification.
Напрямую статус роуминговой ошибки не возвращается. Чтобы узнать об ошибке, проверьте поле Content.Size: если значение равно нулю, ошибок нет, а если больше нуля — при отправке возникла ошибка. Помните, что поле Size — размер содержимого сущности в байтах, а не число ошибок.
Пример ответа без ошибки:
{
"EntityType": "Attachment",
"ParentEntityId": "{{entityId}}",
"Content": {
"Size": 0
},
"AttachmentType": "RoamingNotification"
}
Пример ответа с ошибкой:
{
"EntityType": "Attachment",
"ParentEntityId": "{{entityId}}",
"Content": {
"Size": 48
},
"AttachmentType": "RoamingNotification"
}
Чтобы узнать, какая ошибка произошла, вызовите метод GetDocument (V3). Текст ошибки будет храниться в поле RoamingNotificationStatusDescription. При ошибке доставки в роуминг статус будет иметь значение RoamingNotificationStatusError.
Пример ответа:
{
"RoamingNotificationStatus": "RoamingNotificationStatusError",
"DocumentDirection": "Outbound",
"RoamingNotificationStatusDescription": "{{errorText}}"
}