Работа с ролями участников обмена ТрН - 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
}
Стоит учитывать следующие особенности при работе с ролями:
- Один и тот же участник обмена (абонент) может играть одну или несколько ролей.
- Всегда должны быть указаны исполнители роли Грузоотправителя и Грузополучателя.
- Участник (абонент), который играет ту или иную роль должен быть указан в качестве отправителя или получателя сообщения.
- Роли указываются при отправке титула Грузоотправителя ТрН и более не изменяются.
В зависимости от роли участника и текущего статуса ТрН ему доступны те или иные операции с документом (FullDocumentInfo.AvailableOperations).
Ожидается подпись Водителя | Запрошено уточнение | Ожидается приемка груза ГП | Отказано в приеме груза Грузополучателем | Ожидается подтверждение Водителя о сдаче груза | Ожидается подтверждение перевозки ТЛК | Перевозка завершена | Перевозчик(ТЛК) отказал в подтверждении | |
---|---|---|---|---|---|---|---|---|
Грузоотправитель | Изменить место доставки | - | Изменить место доставки | - | - | - | - | - |
Грузополучатель | Отправить УОУ | - | 1. Отправить титул ГП 2. Отправить УОУ |
- | - | - | - | - |
Водитель | Отправить титул Водителя при приеме груза | - | - | - | Отправить титул Водителя при сдаче груза | - | - | - |
Перевозчик (ТЛК) | Отправить УОУ | - | - | - | - | 1. Отправить титул Перевозчика (ТЛК) 2. Отправить УОУ |
- | - |
Наблюдатель | - | - | - | - | - | - | - | - |
В одном сообщении может быть отправлено неограниченное количество документов. Учитывая такие сценарии обмена ТрН, где:
- Водитель забирает груз от нескольких Грузоотправителей и доставляет его одному Грузополучателю (так называемый MultiPick);
- Водитель забирает груза у одного Грузоотравителя и доставляет его нескольким Грузополучателям (MultiDrop).
Для документа был добавлен флаг Document.SendOnlyToDocumentFlowParticipants. Данный признак позволяет отправлять в одном сообщении ТрН, которые имеют пересекающийся набор получателей:
- если данный флаг имеет значение True, то вне заивисмости от состава получателей сообщения, ТрН будет доступна только тем участникам обмена, который играет ту или иную роль, т.е. указан в массиве Document.DocumentFlowParticipants[];
- если флаг имеет значение False, то документ будет доступен всем получателям сообщения, при этом если тот или иной участник обмена не указан в массиве Document.DocumentFlowParticipants[], ему будет автоматически назначена роль "Наблюдатель".
Пример работы с ролями см. SendMessage_ConsignorTitleWithSignature