Работа с ролями участников обмена ТрН - Synerdocs/synerdocs-sdk GitHub Wiki

При работе с ТрН можно выделить важную особенность - участие нескольких сторон, которые могут обладать различными правами и обязанностями. В общем случае можно выделить следующий набор участников:

  • Грузоотправитель - отвечает за подготовку ТрН и формально владеет грузом до момента его приемки Грузополучателем, кроме это имеет право на изменение места доставки груза;
  • Грузополучатель - принимает груз от Водителя, который осуществляет доставку, при этом может отказать в приемке груза, если тот не устраивает его по тем или иным критериям;
  • Водитель - осуществляет доставку груза, с точки зрения документального оформления принимает у Грузоотправителя груз для доставки и подтверждает сдачу груза Грузополучателю;
  • Перевозчик (ТЛК) - организует перевозку груза и заверяет корректность всех отраженных в ТрН данных, так как на основании ТрН получает вознаграждение за оказанные услуги.

Для отражения прав и обязанностей того или иного участника обмена ТрН было введено понятие роль. Для обозначения того, какую роль играет участник необходимо при отправке сообщения заполнить для документа массив Document.DocumentFlowParticipants[]. Может быть указано 5 типов ролей:

public enum DocumentFlowParticipantRole
    {
        /// <summary>
        /// Роль не указана.
        /// </summary>
        [EnumMember]
        [Description("Роль не указана")]
        None = 0,

        /// <summary>
        /// Грузоотправитель.
        /// </summary>
        [EnumMember]
        [Description("Грузоотправитель")]
        Consignor = 1,

        /// <summary>
        /// Грузополучатель.
        /// </summary>
        [EnumMember]
        [Description("Грузополучатель")]
        Consignee = 2,

        /// <summary>
        /// Водитель.
        /// </summary>
        [EnumMember]
        [Description("Водитель")]
        Driver = 3,

        /// <summary>
        /// Перевозчик.
        /// </summary>
        [EnumMember]
        [Description("Перевозчик")]
        Carrier = 4,

        /// <summary>
        /// Наблюдатель.
        /// </summary>
        [EnumMember]
        [Description("Наблюдатель")]
        Observer = 5
    }

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

  1. Один и тот же участник обмена (абонент) может играть одну или несколько ролей.
  2. Всегда должны быть указаны исполнители роли Грузоотправителя и Грузополучателя.
  3. Участник (абонент), который играет ту или иную роль должен быть указан в качестве отправителя или получателя сообщения.
  4. Роли указываются при отправке титула Грузоотправителя ТрН и более не изменяются.

В зависимости от роли участника и текущего статуса ТрН ему доступны те или иные операции с документом (FullDocumentInfo.AvailableOperations).

Ожидается подпись Водителя Запрошено уточнение Ожидается приемка груза ГП Отказано в приеме груза Грузополучателем Ожидается подтверждение Водителя о сдаче груза Ожидается подтверждение перевозки ТЛК Перевозка завершена Перевозчик(ТЛК) отказал в подтверждении
Грузоотправитель Изменить место доставки - Изменить место доставки - - - - -
Грузополучатель Отправить УОУ - 1. Отправить титул ГП
2. Отправить УОУ
- - - - -
Водитель Отправить титул Водителя при приеме груза - - - Отправить титул Водителя при сдаче груза - - -
Перевозчик (ТЛК) Отправить УОУ - - - - 1. Отправить титул Перевозчика (ТЛК)
2. Отправить УОУ
- -
Наблюдатель - - - - - - - -

В одном сообщении может быть отправлено неограниченное количество документов. Учитывая такие сценарии обмена ТрН, где:

  • Водитель забирает груз от нескольких Грузоотправителей и доставляет его одному Грузополучателю (так называемый MultiPick);
  • Водитель забирает груза у одного Грузоотравителя и доставляет его нескольким Грузополучателям (MultiDrop).

Для документа был добавлен флаг Document.SendOnlyToDocumentFlowParticipants. Данный признак позволяет отправлять в одном сообщении ТрН, которые имеют пересекающийся набор получателей:

  • если данный флаг имеет значение True, то вне заивисмости от состава получателей сообщения, ТрН будет доступна только тем участникам обмена, который играет ту или иную роль, т.е. указан в массиве Document.DocumentFlowParticipants[];
  • если флаг имеет значение False, то документ будет доступен всем получателям сообщения, при этом если тот или иной участник обмена не указан в массиве Document.DocumentFlowParticipants[], ему будет автоматически назначена роль "Наблюдатель".

Пример работы с ролями см. SendMessage_ConsignorTitleWithSignature

⚠️ **GitHub.com Fallback** ⚠️