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

Заполнение ставки в заявке системой#

Процесс заполнения ставки в заявке#

# Шаг
1. Пользователь выбрал договор
2 Система ищет подходящий по параметрам запрос индивидуальных ставок с действием "на Одну заявку"
2.1 Если система нашла подходящий запрос, заполняет в заявке комиссию и ссылку на запрос. Конец сценария.
3. Система ищет подходящий по параметрам запрос индивидуальных ставок с действием "на Все заявки"
3.1 Если система нашла подходящий запрос, заполняет в заявке комиссию и ссылку на запрос. Конец сценария.
4. Система ищет подходящий по параметрам набор базовых ставок
4.1 Если система нашла подходящий набор, заполняет в заявке комиссию и ссылку на набор. Конец сценария.
5 Очищает ссылки на запрос и набор (если они были заполнены ранее и изменились параметры заявки и после этого нет подходящих запросов)

Поиск и заполнение из запроса индивидуальных ставок#

Поиск запроса "на Одну заявку"#

  • Система ищет Запрос базовых ставок у которых:
    • individualRateSet.scope = ONE_ORDER
    • individualRateSet.agent = order.contract.document.agent
    • individualRateSet.status = APPROVED
    • 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
    • для приведения суммы к валюте, система находит в курсах ЦБР:
      • курс Валюты заявки (где 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_ORDER
    • individualRateSet.agent = order.contract.document.agent
    • individualRateSet.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

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

Заполнение из запроса индивидуальных ставок#

Если запрос базовых ставок найден, система:

  • выполняет проверку соответствия минимальному значению из найденной подходящей строки запроса индивидуальных ставок:
    • если (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

Если набор или подходящая строка в нем не найдены, система выполняет аналогичный поиск, но для

Если набор или подходящая строка в нем не найдены, Комиссия % и Накладные расходы в заявке остаются незаполненные.

Заполнение из набора Базовых ставок#

Если строка найдена, система:

  • выполняет проверку соответствия минимальному значению из набора базовы ставок:
    • если (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