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

Автозаполнение полей маршрута в заявке#

Общий процесс#

Шаг Описание
1. Пользователь выбирает договор в заявке
2. Система подбирает субагента и плательщика по белому списку
2.1 Если по белому списку субагент и плательщика подобраны, система поверяет их по чёрному списку. Если в чёрном списке субагент найден, переход к шагу 3
2.2 Записывает субагента и плательщика из белого списка в заявку. Конец процесса.
3. Система в порядке приоритета проверяет на соответствие заявке активные маршруты из справочника маршрутов
3.1 Если ни один маршрут не подходит: оставляет поля субагент, плательщик, счет плательщика пустыми. Показывает в заявке сообщение что субагент не найден. Конец процесса.
3.2 Если заявке подошел маршрут для которого субагент указан как Ручной выбор: оставляет поля субагент, плательщик, счет плательщика пустыми. Показывает сообщение о том, что необходимо выбрать субагента вручную. Конец процесса.
4. Система проверяет субагента из маршрута по чёрному списку.
4.1 Если субагент найден в чёрном списке, возврат к шагу 3 (подбирает следующий маршрут)
5. Система заполняет в заявке найденного субагента из маршрута
6. Система подбирает подходящиго плательщика
6.1 Если ни один плательщик не подобран, оставляет поля плательщик и счет плательщика пустыми. Показывает в заявке сообщение что плательщик не найден. Конец процесса.
7 Система проверяет плательщика по чёрному списку.
7.1 Если плательщик найден в чёрном списке, возврат к шагу 5 (подбирает следующего плательщика)
8 Система заполняет плательщика в заявке
9 Система подбирает счет плательщика
9.1 Если счет не найден. Конец процесса.
10 Система заполняет счет плательщика в заявке

Если заявка является заявкой на переисполнение (есть рекламация, которая ссылается на текущую заявку в complaint.reExecutionOrder)
и подобранный субагент совпадает с субагентом в первоначальной заявке (в которой оформлена такая рекламация), то система не подставляет такого субагента, подбирает по алгоритму следующего подходящего субагента.

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

Система выбирает заявки, у которых:

  • название получателя order.counterpart.name, такое же как в текущей заявке
  • валюта платежа order.payment.currencyCounterparty, такая же как в текущей заявке
  • банк получателя order.payment.bank, такой же как в текущей заявке
  • указан активный субагент order.subagent.staus = ACTIVE и он связан с агентом, указанным в договоре заявки.
  • субагент не в черном списке
  • дата отправки заявки клиентом order.submittedAt >= Сегодняшняя дата - ROUTE_WHITE_LIST_ORDER_DAYS дней
  • есть подписанный отчет, и дата файла этого подписанного отчета < Сегодняшняя дата - ROUTE_WHITE_LIST_REPORT_DAYS дней
  • статус заявки = <orderState:DONE>

Считает количество, группируя по:

  • название получателя order.counterpart.name
  • валюта платежа order.payment.currencyCounterparty
  • банк получателя order.payment.bank
  • субагент order.subagent

Если количество >= ROUTE_WHITE_LIST_ORDER_COUNT, подставляет субагент из выбранных заявок в текущую

Если субагентов, подходящих под эти условия больше 1, то система берет первого найденного

Проверка маршрута на соответствие заявке#

Маршрут считается подходящим, если

Проверка валюты платежа#

Если значения route.currencyCounterparty.values[] не указаны, система не выполняет проверку по валюте платежа.

Проверка по валюте платежа считается успешной, если выполняется одна из пар условий:

  • (route.currencyCounterparty.isNegate = false И order.payment.currencyCounterparty есть в списке route.currencyCounterparty.values[])

или

  • (route.currencyCounterparty.isNegate = true И order.payment.currencyCounterparty отсутствует в списке route.currencyCounterparty.values[])

Проверка банка получателя#

Если значения route.bankCounterparty.values[] не указаны, система не выполняет проверку по банку получателя.

Проверка по банку получателя считается успешной, если выполняется одно из пар условий:

  • (route.bankCounterparty.isNegate = false И order.payment.bank.SWIFT есть в списке route.bankCounterparty.values[])

или

  • (route.bankCounterparty.isNegate = true И order.payment.bank.SWIFT отсутствует в списке route.bankCounterparty.values[])

При этом, если в route.bankCounterparty.values[] указаны значения с маской {начало-кода-SWIFT}*, то все значения order.payment.bank.SWIFT считаются соответствующими этой маске, если они начинаются с указанного {начало-кода-SWIFT}. без учета регистра.

Проверка страны банка получателя#

Если значения route.BankCountryCounterparty.values[] не указаны, система не выполняет проверку по стране банка получателя.

Проверка по стране банка получателя считается успешной, если выполняется одна из пар условий:

  • (route.BankCountryCounterparty.isNegate = false И order.payment.bank.Country есть в списке route.BankCountryCounterparty.values[])

или

  • (route.BankCountryCounterparty.isNegate = true И order.payment.bank.Country отсутствует в списке route.BankCountryCounterparty.values[])

Проверка лимита#

Если значения route.checkSubagentLimit = false, система не выполняет проверку лимита

Проверка по лимиту считается успешной, если лимит субагента из маршрута в валюте заявки не меньше суммы платежа в заявке: - subagent.id = route.subagent - subagent.limits[].currency = order.payment.currencyCounterparty - subagent.limits[].amount >= order.payment.amountCounterparty

Заполнение плательщика и его счета#

Заполнение плательщика#

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

1. Из активных приоритетных плательщиков клиента:

  • subsidiary.id в списке customer.prioritySubsidiaries[] клиента из заявки order.document.customer
  • subsidiary.canUseInImport = true
  • subsidiary.status = ACTIVE
  • subsidiary.subagent = order.subagent
  • плательщик не находится в чёрном списке

Если система находит больше одного подходящего приоритетного плательщика, в заявку подставляет того, у которого выше (1 выше чем 2) приоритет subsidiary.priority

2. Если не найден в приоритетных у клиента (или не подходит в результате проверки по чёрному списку), то выбирает из оставшихся плательщиков (плательщиков того же субагента, не обработанных в п.1), у которых есть счет в валюте заявки:

  • subsidiary.canUseInImport = true
  • subsidiary.status = ACTIVE
  • subsidiary.subagent = order.subagent
  • в списке subsidiary.bankAccounts[] есть счет, у которого:
    • bankAccount.currency = order.payment.currencyCounterparty
    • bankAccount.status = ACTIVE
  • плательщик не находится в чёрном списке

Если система находит больше одного подходящего плательщика, в заявку подставляет того, у которого выше (1 выше чем 2) приоритет subsidiary.priority

Заполнение счета плательщика#

Система подбирает активный счет плательщика в валюте заявки из subsidiary.bankAccounts[], у которого:

- `bankAccount.currency = order.payment.currencyCounterparty`
- `bankAccount.status = ACTIVE`

При этом:

  • Если система находит больше одного подходящего счета:
    • счет с признаком bankAccount.isPriority = true имеют больший приоритет
    • если нет приоритетного, подставляется любой из найденных

Проверка по чёрному списку#

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

Субагент считается занесенным в чёрный список, если:

  • в чёрном списке есть запись с получателем и субагентом из заявки и незаполненным плательщиком:
    • blacklit.counterparty = order.counterparty.name (без учета регистра)
    • blacklit.isNegate = false
    • blacklit.subagent = проверяемому субагенту
    • blacklit.subsidiary - не указан
  • или есть запись с субагентом из заявки, для которого указано, что через него нельзя платить никому, кроме указанного в чёрном списке получателя и этот получатель отличается от получателя в заявке:
    • blacklit.counterparty != order.counterparty.name (без учета регистра)-
    • blacklit.isNegate = true
    • blacklit.subagent = проверяемому субагенту
    • blacklit.subsidiary - не указан

Проверка плательщика по чёрному списку#

Плательщик считается занесенным в чёрный список, если:

  • в чёрном списке есть запись с получателем и плательщиком из заявки:
    • blacklit.counterparty = order.counterparty.name (без учета регистра)
    • blacklit.isNegate = false
    • blacklit.subsidiary = проверяемому плательщику
  • или есть запись с плательщиком из заявки, для которого указано, что через него нельзя платить никому, кроме указанного в чёрном списке получателя и этот получатель отличается от получателя в заявке:
    • blacklit.counterparty != order.counterparty.name (без учета регистра)-
    • blacklit.isNegate = true
    • blacklit.subsidiary = проверяемому плательщику

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

Система подобрала Субагента, плательщика, счет плательщика#

  • Субагент заполнен подобранным значением
  • Плательщик заполнен подобранным значением
  • Счет плательщика заполнен подобранным значением

Система не подобрала субагента#

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

Система подобрала вариант Ручной выбор из настроек маршрута#

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

Система подобрала Субагента, но не подобрала плательщика:#

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

Система не подобрала Счет плательщика#

  • счет плательщика остаётся пустым