Перейти к содержанию

Деталка субагента#

Интерфейс#

Макет

Ссылка возврата на список субагентов#

Аналогично ссылке возврата в деталке клиента

Мэппинг полей#

subagent.schema.json

Статус
Атрибут объекта subagent.status
  • Недоступно для редактирования.
Название
Атрибут объекта subagent.fullNameEnglish
  • Обязательно к заполнению.
  • Максимальная длина 500 символов
  • Разрешены для ввода любые символы кроме кириллицы
Агенты
Атрибут объекта subagent.agents
  • Мультиселект
  • выбор из списка активных агентов
  • В выпадашке отображаются agent.fullName
  • Обязательно к заполнению, должен быть выбран хотя бы один агент

Предельное значение ставки#

Поле таблицы Атрибут объекта
Валюта subagent.costs[].currency
Сумма от subagent.costs[].minAmount
Сумма до subagent.costs[].maxAmount
Ставка subagent.costs[].percent

Если нет строк таблицы и у пользователя нет права на добавление, вся группа Предельное значение ставки вместе с заголовком скрывается

Сортировка по полям Валюта (по алфавиту) , потом по Сумма от (по возрастанию)

Добавление предельного значения ставки#

  • Кнопка + Добавить
  • При нажатии на кнопку + Добавить, открывается модальное окно с полями для ввода
  • модалка не закрывается по клику на фон (только крестиком или кнопками Отменить, Добавить)
Валюта
Атрибут объекта: subagent.costs[].currency
  • обязательное
  • выбор из локального справочника валют:
    • первыми в списке отображаются EUR,USD,CNY,CHF,GBP,AED,CAD,HKD, потом все остальные в алфавитном порядке
    • пользователь вводит код валюты или его часть
    • система показывает список валют у которых введенное значение входит в код валюты
    • пользователь выбирает из предложенного списка нужную
    • система отображает в поле код выбранной валюты (3 символа)
  • если значение указано, очистить его нельзя
Сумма от
Атрибут объекта: subagent.costs[].minAmount
  • обязательное
  • инпут
  • число
  • минимальное значение - 0,01
  • максимальное значение - 99 999 999 999,99

  • разделитель групп разрядов - пробел

  • десятичный разделитель - запятая
  • 2 знака дробной части отображаются всегда:
    • если пользователь вводит целое число, система добавляет в поле ,00. Например: введено 123456, отображается 123 456,00
    • если пользователь вводит число одним заком поле запятой, система добавляет 0. Например: введено 123456,3, отображается 123 456,30
    • если пользователь вводит точку для разделения дробной части, система заменяет точку на запятую. Например: введено 123456.3, отображается 123 456,30
    • Ссылка на пример (в примере нет добавления ,00 )
  • при вставке в поле значения из буфера, значение вставляется только если его формат соответствует требованиям
  • не может быть больше "Суммы до"
Сумма до
Атрибут объекта: subagent.costs[].maxAmount
  • обязательное
  • инпут
  • число
  • минимальное значение - 0,01
  • максимальное значение - 99 999 999 999,99
  • разделитель групп разрядов - пробел
  • десятичный разделитель - запятая
  • 2 знака дробной части отображаются всегда:
    • если пользователь вводит целое число, система добавляет в поле ,00. Например: введено 123456, отображается 123 456,00
    • если пользователь вводит число одним заком поле запятой, система добавляет 0. Например: введено 123456,3, отображается 123 456,30
    • если пользователь вводит точку для разделения дробной части, система заменяет точку на запятую. Например: введено 123456.3, отображается 123 456,30
    • Ссылка на пример (в примере нет добавления ,00 )
  • при вставке в поле значения из буфера, значение вставляется только если его формат соответствует требованиям
Ставка
Атрибут объекта: subagent.costs[].percent
  • значение

    • обязательное
    • инпут
    • число
    • минимальное значение - 0,0000
    • максимальное значение - 100
      # Обработка исполнителем новой заявки

    ## Пользователи процесса - CONTRACTOR - CUSTOMER - OBSERVER - COMPLIANCE - PARTNER

    ## Предусловия - Заявка отправлена исполнителю на рассмотрение (Статус заявки = NEW) - У пользователя роли CONTRACTOR есть право VIEW_ORDER_ALL - У пользователя ролей CUSTOMER есть право VIEW_ORDER - У пользователя ролей OBSERVER, COMPLIANCE есть право VIEW_ORDER_ALL - У пользователя ролей PARTNER есть право VIEW_ORDER

    ## Точки входа - По ссылке из письма - Выбрал заявку в статусе NEW из списка заявок

    ## Варианты завершения - Заявка возвращена клиенту на доработку (Статус заявки = CUSTOMER_ADJUSTMENT) - Заявка привязана к договору (заполнен агент, присвоен номер), заявка отправлена на согласование агенту
    статус заявки = AGENT_APPROVAL)

    ## Процесс { id="process" }

    ### Общий вид { id="process_bpmn" }

    Верхнеуровневый процесс обработки новой заявки исполнителем

    Процесс

    # Шаг
    1. Исполнитель открывает заявку, проверяет её
    1.1 Если к заявке есть замечания, Исполнитель пишет их и отправляет на доработку клиенту. Конец сценария.
    2. Исполнитель привязывает заявку к договору
    3. Исполнитель отправляет заявку на согласование агенту

    ## Особенности процесса { id="process_specificity" }

    • Пользователь с правом VIEW_ORDER видят только "свои" заявки, у которых order.document.userEmployee или order.document.userCustomer совпадает с user.id
      • с ролью PARTNER видит только заявки "своих" клиентов (у которых в карточке указан тот же партнёр, с которым связан пользователь-партнёр)
    • Пользователь с правом VIEW_ORDER_ALL видят все заявки
    • Внешний вид формы аналогичен форме процесса создания заявки, отличия описаны в разделе Особенности статуса NEW
    • В зависимости от роли у пользователя отличаются доступные действия в заявке. Описаны в разделе Особенности статуса NEW
    • При открытии заявки пользователем, заявка открывается в режиме просмотра.
    • Для перехода в режим редактирования пользователь нажимает кнопку Редактировать. Кнопка отображается Исполнителю.
    • В режиме редактирования система позволяет редактировать исполнителя только поле Договор. Все остальные поля исполнитель редактировать не может.
    • Работа с вложениями (просмотреть, скачать) доступна без перехода в режим редактирования.

    !!! info "Особенности сабмита формы" - пользователь может сохранить заявку, даже если он не заполнил все обязательные поля - при сохранении (и, опосредованно, при отправке, так как отправка тригерит сохранение) валидируются заполненные поля на соответстиве типам и паттернам. - при отрпавке заявки проверяется заполнены ли все обязательные поля --- - нельзя сохранить заявку, если в ней есть заполненные поля, чьё содержимое не отвечает требованиям - можно сохранить заявку, если в ней не заполнены обязательные поля - нельзя отправить заявку, если в ней не заполнены обязательные поля

    ## Интерфейс { id="ui" }

    ### Особенности статуса NEW { id="difference" }

    в хинте статуса заявки отображается подсказка Агент заполняет заявку и отправляет клиенту на согласование

    В зависимости от роли отличаются доступные действия и кнопки в заявке:

    Видимость кнопок описана в import_order.json:

    • Кнопка Редактировать - отображается исполнителю
    • Кнопка Закрыть заявку- отображается исполнителю, клиенту
    • Кнопка Отправить агенту - отображается исполнителю
    • Кнопка Вернуть клиенту на доработку - отображается исполнителю

    ### Заголовок и номер заявки { id="header" }

     В зависимости от типа заявки заголовок:
    
     - `Импортная заявка`
     - `Экспортная заявка`
    

    Если заявке уже присвоен номер, то к заголовку добавляется №{order.document.number}

    Номер присваивается при сохранении если указан договор.

    ### Поля заявки { id="fields" }

    Отображаются все поля заявки, которые описаны в процессе создания заявки. Поля заполненные клиентом недоступны для редактирования.

    Поля для заполнения Исполнителем:

    #### Группа полей Маршрут { id="fields_route" }

    Договор
    Атрибут объекта order.contract
    • обязательное
    • текст ошибки, если выбран не подписанный договор: Договр должен быть подписан
    • выбор из списка договоров:
      • в списке первой строкой отображается ссылка Создать новый договор.
        • При нажатии инициализируется процесс создания нового договора
        • В процессе создания нового договора (до перехода к его деталке), на кнопке крутится лоадер, кнопка Создать новый договор и форма заявки блокируются.
      • в списке отображаются только активные договора с клиентом, от которого поступила заявка и имеющие такой же document.direction как и у заявки:
        • contract.status not in (CLOSED, CANCELLED),
        • contract.doocument.customer == order.doocument.customer
        • contract.document.direction == order.document.direction
      • если есть связанные с договором неподписанные доп. соглашения (не в статусах SIGNED, CANCELLED), отображается красная надпись Есть неподписанные доп. соглашения. Наличие неподписанных доп. соглашений в договоре не блокирует процессы заявки.
      • пользователь вводит номер договора или его часть
      • система показывает список договоров у которых введенное значение входит в номер договора
      • для каждого договора отображается:
        • Номер договора и Агент если они заданы в договоре
        • Если номер и агент не заданы (возможно в статусе договора Draft), то вместо номера отображается название статуса Черновик и прочерк вместо агента.
        • текущий статус договора
      • пользователь выбирает из предложенного списка нужный договор
        • Если выбран договор с номером и агентом, система отображает в поле номер договора, под полем название Агента из договора
        • Если выбран договор без номера и агента, система отображает в поле название статуса "Черновик", под полем - пусто.
    • При изменении значения поля пользователем, система:
    • При очистке значения поля Договор, система очищает поля:
    • см. набор макетов работы поля

    Другие поля группы: см. описание полей в Обработка агентом новой заявки: - отображаются исполнителю в заявке, но недоступны для изменения в статусе NEW, - не отображаются клиенту

    #### Группа полей Агентское вознаграждение { id="commission" }

    Поля группы: см. описание полей в Обработка агентом новой заявки:

    • отображаются в заявке всем пользователям, кроме COSTOMER , недоступны для изменения

    ### Итоговая информация по заявке { id="summary" }

    См. описание работы блока итоговой информации

    ## Скачивание заявки в "Excel" { id="export_to_excel" } - Кнопка Скачать файл (макет) отображается пользователю с правом EXPORT_ORDER во всех статусах заявки - при нажатии на кнопку - во время формирования файла на кнопке отображается лоадер, кнопка недоступна - если возникает техническая ошибка, над заявкой отображается баннер с технической ошибкой - после завершения формирования файла, файл сохраняется на устройство пользователя - шаблон формируемого файла - название сформированного файла: Order {amountCounterparty} {currencyCounterparty}.xlsx - amountCounterparty - сумма в формате NNN NNN,NN (разделители разрядов пробелы, отделитель десятичной части - запятая) - currencyCounterparty - код валюты alfa-3

    ## Просмотр и редактирование заявки { id="view_edit_mode" }

    ### Режим просмотра заявки { id="view_mode" }

    • В режиме просмотра все поля недоступны для редактирования.
    • кнопка Редактировать отображается только Исполнителю
    • При нажатии на кнопку Редактировать заявка переходит в режим редактирования

    ### Режим редактирования заявки { id="edit_mode"}

    • Доступны для редактирования только поле Договор (см. в разделе Поля заявки)
    • Отображаются кнопки Отменить и Сохранить
      • Сохранить становится доступна только после изменения значения полей заявки.
      • при нажатии Сохранить система сохраняет заявку, возвращает форму в режим просмотра
      • при нажатии Отменить, система сбрасывает изменения и возвращает форму в режим просмотра.
    • При изменении значений полей от которых зависит блок итоговой информации (в т.ч. при автоматическом заполнении при изменении договора), блок пересчитывается и обновляется.

    ### Сохранение заявки { id="save_order" }

    Сохранение заявки выполняется:

    • при нажатии пользователем кнопки Сохранить
    • перед отправкой заявки исполнителем агенту

    При сохранении заявки, система:

    • не выполняет проверку обязательности полей и наличия обязательных вложений
    • выполняет проверку на соответствие типам и паттернам.

    Соответствие полей формы схемам document и document-order описаны в разделе поля заявки

    Кроме полей, введённых пользователем и заполненных системой при изменении договора, система сохраняет:

    • order.document.userEmployee - пользователь, изменивший заявку
    • order.document.changedAt - текущие дата время
    • order.document.exchangeRate:
      • если в заявке валюты order.currencyCounterparty и order.amountCounterparty равны, то значение всегда 1
      • если валюты не равные, то значение не заполняется системой
    • order.document.number:
      • обновляется только если был изменен договор
      • имеет формат {номер договора}_{номер заявки}
      • найти максимальный номер заявки из всех привязанных к этому же договору, увеличить номер на 1.
      • при перевыборе одного и того же договора повторно несколько раз подряд, номер заявки не увеличивается
      • если указанный договор имеет статус SIGNED, номер присваивается. При других статусах договора - номер заявки очищается.

    После сохранения заявки система:

    • обновляет заголовок (добавляет номер)
    • переводит заявку в режим просмотра
    • показывает сообщение:

    img_27.png

    ## Документы { id="documents" }

    ### Доступные функции при работе с документами в статусе NEW { id="documents_status_role" }

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

    ## Отправка заявки на согласование агенту { id="send_to_signing" }

    # Шаг
    1. Исполнитель нажимает кнопку отправки заявки
    2. Система делает недоступными все поля, кнопки и ссылки на форме, на всех закладках. Показывает лоадер на кнопке
    3. Система проверят формат полей
    2а. Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса.
    3. Система сохраняет заявку в БД
    4. Система проверят заполнение обязательных полей
    4а. Если есть ошибки, система подсвечивает поля с ошибками. Конец процесса.
    5. Система обновляет поля заявки и статус на AGENT_APPROVAL
    6. Система отправляет сообщение на почту агенту
    7. Система закрывает заявку, показывает список заявок и сообщение об успешной отправке

    ### Проверка перед отправкой { id="validate_send" }

    Перед отправкой система выполняет проверку:

    • формата и обязательность значений соответствуют описанию полей в разделе поля заявки
    • Договор в Статусе SIGNED

    Если обнаружены ошибки:

    • система показывает тултип на кнопке отправки: Подпишите и заполните договор
    • форма переходит в режим редактирования (если она еще не в нем), подсвечиваются незаполненные поля. Пользователя перекидывает на вкладку «Параметры»
    • Если договор не в статусе SIGNED, поле так же подсвечивается красным, как для незаполненных обязательных полей

    ### Обновление полей заявки при отправке { id="send_update" }

    При отправке заявки исполнителю система записывает в заявку значения:

    • order.status - AGENT_APPROVAL
    • order.verifiedAt - текущие дата и время
    • document.changedAt - текущие дата и время

    ### Отправка сообщения на E-mail исполнителя { id="send_mail" }

    Система отправляет сообщение всем активным пользователям с ролью AGENT агента, указанного в договоре contract.document.agent:,

    !!! note "Полный набор макетов" Все макеты и состояния по ссылке Макеты Figma: Заявка у исполнителя

Кнопка Отменить

  • Активна всегда
  • При нажатии пользователем на кнопку, система:
    • закрывает окно без дополнительных подтверждений
    • предельное значение ставки не сохраняется в БД

Кнопка Добавить

  • Активна если заполнены вся поля
  • При нажатии пользователем на кнопку, система:
    • выполняет проверку что Сумма от <= Сумма до, если проверка не выполняется:
      • под Сумма от отображается ошибка Первая сумма не может быть больше второй
      • окно не закрывается, предельное значение ставки не сохраняется
    • закрывает окно,
    • сохраняет в БД,
    • показывает обновленную таблицу,

Редактирование и удаление Предельного значения ставки#

Пользователь с правом CREATE_SUBAGENT нажимает на строку в таблице Предельного значения ставки (и в режиме редактирования, и в режиме просмотра), Система показывает модалку редактирования строки:

  • модалка открывается, если субагент не заблокирован
  • поля аналогичны полям при добавлении Предельного значения ставки,
  • заполнены ранее сохраненными значениями,
  • все доступны для редактирования
  • модалка не закрывается по клику на фон (только крестиком или кнопками Отменить, Сохранить)

Кнопка Удалить

  • активна всегда
  • При нажатии пользователем на кнопку, система:
    • закрывает окно без дополнительных подтверждений
    • удаляет строку из БД
    • закрывает модалку
    • показывает обновленную таблицу

Кнопка Отменить

  • аналогична кнопке Отменить при добавлении Предельного значения ставки

Кнопка Сохранить

  • аналогична кнопке Добавить при добавлении Предельного значения ставки

Лимиты#

Поле таблицы Атрибут объекта
Валюта subagent.limits[].currency
Сумма subagent.limits[].amount

Если нет строк таблицы лимитов и у пользователя нет права на добавление, вся группа Лимиты вместе с заголовком скрывается

Сортировка по полю Валюта (по алфавиту)

Добавление лимита#

  • Кнопка + Добавить
  • При нажатии на кнопку + Добавить, открывается модальное окно с полями для ввода:
Валюта
Атрибут объекта: subagent.limits[].currency
  • обязательное
  • выбор из локального справочника валют:
    • первыми в списке отображаются EUR,USD,CNY,CHF,GBP,AED,CAD,HKD, потом все остальные в алфавитном порядке
    • пользователь вводит код валюты или его часть
    • система показывает список валют у которых введенное значение входит в код валюты
    • пользователь выбирает из предложенного списка нужную
    • система отображает в поле код выбранной валюты (3 символа)
  • если значение указано, очистить его нельзя
  • уникальное в рамках субагента
  • валюты, для которых в таблице лимитов у субагента уже есть запись, в выпадашке неактивны и рядом отображается надпись Лимит для валюты уже создан
  • при редактировании лимита поле неактивно (изменить валюту строки лимита нельзя)
Сумма
Атрибут объекта: subagent.limits[].amount
  • обязательное
  • инпут
  • число
  • минимальное значение - 0,01
  • максимальное значение - 99 999 999 999,99

  • разделитель групп разрядов - пробел

  • десятичный разделитель - запятая
  • 2 знака дробной части отображаются всегда:
    • если пользователь вводит целое число, система добавляет в поле ,00. Например: введено 123456, отображается 123 456,00
    • если пользователь вводит число одним заком поле запятой, система добавляет 0. Например: введено 123456,3, отображается 123 456,30
    • если пользователь вводит точку для разделения дробной части, система заменяет точку на запятую. Например: введено 123456.3, отображается 123 456,30
    • Ссылка на пример (в примере нет добавления ,00 )
  • при вставке в поле значения из буфера, значение вставляется только если его формат соответствует требованиям

Кнопка Отменить

  • Активна всегда
  • При нажатии пользователем на кнопку, система:
    • закрывает окно без дополнительных подтверждений
    • лимит не сохраняется в БД

Кнопка Добавить

  • Активна если заполнены вся поля
  • При нажатии пользователем на кнопку, система:
    • закрывает окно,
    • сохраняет в БД,
    • показывает обновленную таблицу,

Редактирование и удаление лимита#

Пользователь с правом CREATE_SUBAGENT нажимает на строку в таблице лимитов (и в режиме редактирования, и в режиме просмотра), Система показывает модалку редактирования строки:

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

Кнопка Удалить

  • активна всегда
  • При нажатии пользователем на кнопку, система:
    • закрывает окно без дополнительных подтверждений
    • удаляет строку из БД
    • закрывает модалку
    • показывает обновленную таблицу

Кнопка Отменить

Кнопка Сохранить

Получатели/плательщики#

subsidiary.schema.json

Поле таблицы Атрибут объекта
Приоритет subagent.subsidiaries[].priority
Название subagent.subsidiaries[].fullNameEnglish
Статус subagent.subsidiaries[].status

Если нет строк таблицы Получатели/плательщики и у пользователя нет права на добавление, вся группа Получатели/плательщики вместе с заголовком скрывается

Сортировка по полю Приоритет (по возрастанию)

Добавление Получателя/плательщика#

  • Кнопка + Добавить
  • При нажатии на кнопку + Добавить, открывается модальное окно с полями для ввода:
    • см. Макет
    • см. мэппинг полей Получателя/Плательщика
    • модалка не закрывается по клику на фон (только крестиком или кнопками Отменить, Добавить)

Кнопка Отменить

  • Активна всегда
  • При нажатии пользователем на кнопку:
    • закрывает окно без дополнительных подтверждений
    • сохраняет Получателя/Плательщика в БД

Кнопка Добавить

  • При нажатии пользователем на кнопку, система:
    • проверяет обязательные поля. Если есть незаполненные
      • подсвечивает такие поля
      • окно не закрывает
      • плательщика не сохраняет
    • проверяет чтоб у субагента не было плательщика с таким же приоритетом. Если уже есть:
      • подсвечивает поле Приоритет и показывает под ним сообщение Приоритет уже добавлен
      • окно не закрывает
      • плательщика не сохраняет
    • закрывает окно,
    • сохраняет в БД, При первом сохранении, кроме заполненных пользователем полей, заполняется
      • status - ACTIVE
    • показывает деталку Получателя/плательщика в режиме просмотра

Просмотр Получателя/плательщика#

Пользователь нажимает на строку в таблице Получатели/Плательщики (и в режиме редактирования, и в режиме просмотра), система открывает деталку получателя/плательщика:

  • деталка открывается, если субагент не заблокирован
  • деталка открывается в режиме просмотра

Просмотр и редактирование субагента#

Режим просмотра субагента#

Просмотр деталки субагента доступен пользователю с правом VIEW_SUBAGENT_ALL

Режим редактирования субагента#

Кнопка Редактировать в деталке субагента

  • Отображается:
    • пользователям с правом CREATE_SUBAGENT
    • если статус субагента subagent.status = ACTIVE
    • если форма в режиме просмотра
  • При нажатии на кнопку:
    • становятся доступны для изменения все поля
    • отображаются кнопки Отменить и Сохранить:

Кнопка Отменить

  • Активна всегда
  • При нажатии:
    • сбрасывает внесенные изменения в поля субагента
    • переводит форму в режим просмотра

Кнопка Сохранить

  • Активна если изменено хотя бы одно поле
  • При нажатии пользователем на кнопку, система:
    • в процессе сохранения на кнопке отображает лоадер, все поля и кнопки формы заблокированы
    • проверяет обязательные поля, в случае ошибки подсвечивает незаполненные поля
    • сохраняет субагент в БД
    • переводит форму в режим просмотра

Блокировка и разблокировка субагента#

Кнопка Заблокировать в деталке отображается:

При нажатии на кнопку:

  • в процессе обработки отображается лоадер на кнопке, все поля и кнопки на форме недоступны
  • обновляется статус на subagent.status = INACTIVE
  • отображается новый статус на форме
  • скрывается кнопка Заблокировать
  • показывается оповещение

Кнопка Разблокировать отображается:

При нажатии на кнопку:

  • в процессе обработки отображается лоадер на кнопке, все поля и кнопки на форме недоступны
  • обновляется статус на subagent.status = ACTIVE,
  • отображается новый статус на форме
  • скрывается кнопка Разблокировать
  • показывается оповещение