Заполнение ставки в заявке системой#
Процесс заполнения ставки в заявке#
| # | Шаг |
|---|---|
| 1. | Пользователь выбрал договор |
| 2 | Система ищет подходящий по параметрам запрос индивидуальных ставок с действием "на Одну заявку" |
| 2.1 | Если система нашла подходящий запрос, заполняет в заявке комиссию и ссылку на запрос. Конец сценария. |
| 3. | Система ищет подходящий по параметрам запрос индивидуальных ставок с действием "на Все заявки" |
| 3.1 | Если система нашла подходящий запрос, заполняет в заявке комиссию и ссылку на запрос. Конец сценария. |
| 4. | Система ищет подходящий по параметрам набор базовых ставок |
| 4.1 | Если система нашла подходящий набор, заполняет в заявке комиссию и ссылку на набор. Конец сценария. |
| 5 | Очищает ссылки на запрос и набор (если они были заполнены ранее и изменились параметры заявки и после этого нет подходящих запросов) |
Поиск и заполнение из запроса индивидуальных ставок#
Поиск запроса "на Одну заявку"#
- Система ищет Запрос базовых ставок у которых:
individualRateSet.scope = ONE_ORDERindividualRateSet.agent = order.contract.document.agentindividualRateSet.status= APPROVEDindividualRateSet.customer- такой же, как клиент оформивший заявку- в наборе есть строка подходящая по параметрам:
- валюта отправителя:
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
order.payment.currencyCustomer, то ищет среди строк, у которыхindividualRateSet.rates[].currencyCustomer=order.payment.currencyCustomer - если нет ни одной строки с валютой отправителя из заявки, ищет среди строк у которых
baseRateSet.rates[].currencyCustomer- пустая.
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
- валюта получателя (смотрим среди строк, которые уже выбраны по Валюте отправителя):
- если есть в запрсое хотя бы одна строка в валюте заявки
order.payment.currencyCounterparty, то ищет среди строк у которыхindividualRateSet.rates[].currency=order.payment.currencyCounterparty - если нет ни одной строки с валютой из заявки, ищет среди строк у которых
individualRateSet.rates[].currency- пустая.
- если есть в запрсое хотя бы одна строка в валюте заявки
- страна (смотрим среди строк которые уже выбраны по Валюте получателя):
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
order.payment.bank.country, то ищет среди строк у которыхindividualRateSet.rates[].country=order.payment.bank.country - если нет ни одной такой строки, ищет среди строк у которых
individualRateSet.rates[].country- пустая
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
- сумма заявки в диапазоне
individualRateSet.rates[].minAmount<=order.payment.amountCounterparty<=individualRateSet.rates[].maxAmount
- валюта отправителя:
Если система находит больше одного запроса подходящего по параметрам, использует первый найденный.
Если запрос с указанными параметрами не найден, система выполняет аналогичный поиск, но для:
- валюты отправителя и страны банка получателя - из заявки
- валюты получателя равной CURRENCY_CODE_FOR_RATE_SEARCH
- суммы приведенной к CURRENCY_CODE_FOR_RATE_SEARCH
- для приведения суммы к валюте, система находит в курсах ЦБР:
- курс Валюты заявки (где
rubConversionRate.currency==order.payment.currencyCounterparty) - курс Валюты CURRENCY_CODE_FOR_RATE_SEARCH (где
rubConversionRate.currency== CURRENCY_CODE_FOR_RATE_SEARCH) - делит курс Валюты заявки на курс Валюты CURRENCY_CODE_FOR_RATE_SEARCH
Пример: в заявке 1000000000 IRR (Иранских реалов) - 1 IRR = 0.000141123 RUB - 1 USD = 80.3289 RUB - 1 IRR = 0.000141123 / 80.3289 = 0.0000017569 USD Система выполняет поиск строки запроса для: - валюта отправителя = из заявки - валюта получателя = USD - страна банка получателя = из заявки - диапазон включает сумму 1756,9 (1000000000 * 0.0000017569).
- курс Валюты заявки (где
- для приведения суммы к валюте, система находит в курсах ЦБР:
Поиск запроса "на все заявки"#
- Система ищет Запрос базовых ставок у которых:
individualRateSet.scope = ONE_ORDERindividualRateSet.agent = order.contract.document.agentindividualRateSet.status- ACTIVE (согласован и текущая дата попадает в интервал периода, указанного в запросе)individualRateSet.customer- такой же, как клиент оформивший заявку- в наборе есть строка подходящая по параметрам:
- валюта отправителя:
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
order.payment.currencyCustomer, то ищет среди строк, у которыхindividualRateSet.rates[].currencyCustomer=order.payment.currencyCustomer - если нет ни одной строки с валютой отправителя из заявки, ищет среди строк у которых
baseRateSet.rates[].currencyCustomer- пустая.
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
- валюта получателя (смотрим среди строк, которые уже выбраны по Валюте отправителя):
- если есть в запрсое хотя бы одна строка в валюте заявки
order.payment.currencyCounterparty, то ищет среди строк у которыхindividualRateSet.rates[].currency=order.payment.currencyCounterparty - если нет ни одной строки с валютой из заявки, ищет среди строк у которых
individualRateSet.rates[].currency- пустая.
- если есть в запрсое хотя бы одна строка в валюте заявки
- страна (смотрим среди строк которые уже выбраны по Валюте получателя):
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
order.payment.bank.country, то ищет среди строк у которыхindividualRateSet.rates[].country=order.payment.bank.country - если нет ни одной такой строки, ищет среди строк у которых
individualRateSet.rates[].country- пустая
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
- сумма заявки в диапазоне
individualRateSet.rates[].minAmount<=order.payment.amountCounterparty<=individualRateSet.rates[].maxAmount
- валюта отправителя:
Если запрос с указанными параметрами не найден, система выполняет аналогичный поиск, но для
- валюты отправителя и страны банка получателя - из заявки
- валюты получателя равной CURRENCY_CODE_FOR_RATE_SEARCH
- суммы приведенной к CURRENCY_CODE_FOR_RATE_SEARCH
- алгоритм пересчета суммы аналогичен алгоритму при поиске запроса "на Одну заявку"
Заполнение из запроса индивидуальных ставок#
Если запрос базовых ставок найден, система:
- выполняет проверку соответствия минимальному значению из найденной подходящей строки запроса индивидуальных ставок:
- если (
order.payment.amountCounterparty*individualRateSet.rates[].percent/100<individualRateSet.rates[].minimumRateThreshold, тогда:Комиссия %,order.commission.percent= 0Накладные расходы,order.commission.amountOperatingCostCounterpartyCurrency=individualRateSet.rates[].minimumRateThreshold
- иначе
Комиссия %,order.commission.percent=individualRateSet.rates[].percentНакладные расходы,order.commission.amountOperatingCostCounterpartyCurrency= 0.
- если (
- записывает в заявку информацию об использованном запросе индивидуальных ставок
order.individualRateSet=individualRateSet.id - записывает в заявку информацию об использованном наборе базовых ставок
order.baseRateSet=null
Поиск и заполнение из Базовой ставки#
Поиск набора базовых ставок "на все заявки"#
- Система ищет набор базовых ставок у которых:
- агент из договора по заявке
baseRateSet.agent = order.contract.document.agent - статус Активен
- агент из договора по заявке
- Если набор найден, ищет в нем строку, в которой:
- валюта отправителя:
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
order.payment.currencyCustomer, то ищет среди строк, у которыхbaseRateSet.rates[].currencyCustomer=order.payment.currencyCustomer - если нет ни одной строки с валютой отправителя из заявки, ищет среди строк у которых
baseRateSet.rates[].currencyCustomer- пустая.
- если есть в наборе хотя бы одна строка в валюте отправителя заявки
- валюта получателя (смотрим среди строк, которые уже выбраны по Валюте отправителя):
- если есть в наборе хотя бы одна строка в валюте получателя заявки
order.payment.currencyCounterparty, то ищет среди строк у которыхbaseRateSet.rates[].currency=order.payment.currencyCounterparty - если нет ни одной строки с валютой получателя из заявки, ищет среди строк у которых
baseRateSet.rates[].currency- пустая.
- если есть в наборе хотя бы одна строка в валюте получателя заявки
- страна (смотрим среди строк которые уже выбраны по Валюте получателя):
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
order.payment.bank.country, то ищет среди строк у которыхbaseRateSet.rates[].country=order.payment.bank.country - если нет ни одной такой строки, ищет среди строк у которых
baseRateSet.rates[].country- пустая
- если в наборе есть хотя бы одна строка, в которой страна совпадает со страной банка получателя из заявки
- сумма заявки в диапазоне
baseRateSet.rates[].minAmount<=order.payment.amountCounterparty<=baseRateSet.rates[].maxAmount
- валюта отправителя:
Если набор или подходящая строка в нем не найдены, система выполняет аналогичный поиск, но для
- валюты отправителя и страны банка получателя - из заявки
- валюты получателя равной CURRENCY_CODE_FOR_RATE_SEARCH
- суммы приведенной к CURRENCY_CODE_FOR_RATE_SEARCH
- алгоритм пересчета суммы аналогичен алгоритму при поиске запроса "на Одну заявку"
Если набор или подходящая строка в нем не найдены, Комиссия % и Накладные расходы в заявке остаются незаполненные.
Заполнение из набора Базовых ставок#
Если строка найдена, система:
- выполняет проверку соответствия минимальному значению из набора базовы ставок:
- если (
order.payment.amountCounterparty*baseRateSet.rates[].percent/100<baseRateSet.rates[].minimumRateThreshold, тогда:Комиссия %,order.commission.percent= 0Накладные расходы,order.commission.amountOperatingCostCounterpartyCurrency=baseRateSet.rates[].minimumRateThreshold
- иначе
Комиссия %,order.commission.percent=baseRateSet.rates[].percentНакладные расходы,order.commission.amountOperatingCostCounterpartyCurrency= 0.
- если (
- записывает в заявку информацию об использованном наборе базовых ставок
order.baseRateSet=baseRateSet.id - очищает в заявке информацию об использованном запросе индивидуальных ставок
order.individualRateSet=null