Автозаполнение полей маршрута в заявке#
Общий процесс#
| Шаг | Описание |
|---|---|
| 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.status = ACTIVE
- субагент в маршруте:
- связан с агентом из договора, указанного в заявке:
order.contract.аgentв спискеroute.subagent.agents[] - И этот субагент
route.subagent.status = ACTIVE
- связан с агентом из договора, указанного в заявке:
- выполняется проверка по каждому указанному в маршруте атрибуту:
- валюта платежа из маршрута
- банк получателя из маршрута
- страна банка получателя из маршрута
- лимита субагента
- или в маршруте не указан ни один из этих атрибутов (маршрут "по умолчанию" который срабатывает всегда, если он настроен)
Проверка валюты платежа#
Если значения 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.customersubsidiary.canUseInImport = truesubsidiary.status = ACTIVEsubsidiary.subagent = order.subagent- плательщик не находится в чёрном списке
Если система находит больше одного подходящего приоритетного плательщика, в заявку подставляет того, у которого выше (1 выше чем 2) приоритет subsidiary.priority
2. Если не найден в приоритетных у клиента (или не подходит в результате проверки по чёрному списку), то выбирает из оставшихся плательщиков (плательщиков того же субагента, не обработанных в п.1), у которых есть счет в валюте заявки:
subsidiary.canUseInImport = truesubsidiary.status = ACTIVEsubsidiary.subagent = order.subagent- в списке
subsidiary.bankAccounts[]есть счет, у которого:bankAccount.currency = order.payment.currencyCounterpartybankAccount.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 = falseblacklit.subagent = проверяемому субагентуblacklit.subsidiary - не указан
- или есть запись с субагентом из заявки, для которого указано, что через него нельзя платить никому, кроме указанного в чёрном списке получателя
и этот получатель отличается от получателя в заявке:
blacklit.counterparty != order.counterparty.name(без учета регистра)-blacklit.isNegate = trueblacklit.subagent = проверяемому субагентуblacklit.subsidiary - не указан
Проверка плательщика по чёрному списку#
Плательщик считается занесенным в чёрный список, если:
- в чёрном списке есть запись с получателем и плательщиком из заявки:
blacklit.counterparty = order.counterparty.name(без учета регистра)blacklit.isNegate = falseblacklit.subsidiary = проверяемому плательщику
- или есть запись с плательщиком из заявки, для которого указано, что через него нельзя платить никому, кроме указанного в чёрном списке получателя
и этот получатель отличается от получателя в заявке:
blacklit.counterparty != order.counterparty.name(без учета регистра)-blacklit.isNegate = trueblacklit.subsidiary = проверяемому плательщику
Поведение системы в зависимости от результата подбора субагента, плательщика, счета плательщика#
Система подобрала Субагента, плательщика, счет плательщика#
Субагентзаполнен подобранным значениемПлательщикзаполнен подобранным значениемСчет плательщиказаполнен подобранным значением
Система не подобрала субагента#
субагент,плательщикисчет плательщикав заявке остаются пустыми.- под полем
субагентотображается сообщениеСубагент не найден. Выберите значение вручную. - при попытке отправить заявку на следующий этап, сообщение подсвечивается красным
- сообщение убирается:
- после выбора
Субагентапользователем вручную - или после перевыбора договора пользователем и заполнением системой поля
Субагент
- после выбора
- после переоткрытия (и обновления страницы) заявки, сообщение не сохраняется
Система подобрала вариант Ручной выбор из настроек маршрута#
субагент,плательщикисчет плательщикаостаются пустыми.- под полем
субагентотображается сообщениеВыберите значение вручную - при попытке отправить заявку на следующий этап, сообщение подсвечивается красным
- сообщение убирается:
- после выбора
Субагентапользователем вручную - или после перевыбора договора пользователем и заполнением системой поля
Субагент
- после выбора
- после переоткрытия (и обновления страницы) заявки, сообщение не сохраняется
Система подобрала Субагента, но не подобрала плательщика:#
плательщикисчет плательщикаостаются пустыми.- под полем
плательщикотображается сообщениеПлательщик не найден. Выберите значение вручную. - при попытке отправить заявку на следующий этап, сообщение подсвечивается красным
- сообщение убирается:
- после выбора
плательщикпользователем вручную - или после перевыбора договора пользователем и заполнением системой поля
плательщик
- после выбора
- после переоткрытия (и обновления страницы) заявки, сообщение не сохраняется
Система не подобрала Счет плательщика#
счет плательщикаостаётся пустым