scoringRuleStepSchemaALL

Примеры выражений в СПР

 

Выражение

Описание

1

lead.getAge() >= 18 && lead.getAge() <= 65

Проверка по дате рождения: Возраст от 18 до 65 лет 

2

clientManager.isInArrears(lead.clientId, true)

Выражение для проверки отсутствия текущей задолженности

3

clientManager.getLastCreditDurationInDays(lead.clientId) >= 15

Выражение для срока предыдущего займа больше либо равно 15 дней

4

clientManager.getMaxDelinqDaysQty(lead.clientId) <= 15

Выражение для проверки максимального срока просрочки по предыдущим займам клиента

5

lead.getAddress().getRegionName().contains("Москва") || lead.getAddress().getRegionName().contains("Московская") || lead.getAddress().getRegionName().contains("Севастополь")

Проверка региона

6

client.workPlaceData.workAge >= 6

Проверка на стаж работы

7

client.meanIncome >= 15000

Провера на уровень дохода

8

additional.trustRating45.trustRating.result > 349

проверка балла благонадежности

9

decision.decisionBinnar == 1

Статус Одобрено по Кредитному решению

10

if (additional.decisionMessage < loanApplication.loanAmount) { loanApplication.loanAmount = double:parseDouble(additional.decisionMessage) }

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

11

loanApplication.loanAmount + 1 > 0

создание заявки

12

nbkinohistory == 0 || nbkinohistory == 1

проверка на технический сбой

13

nbkinpl30 == 0

просрочка более 30 дней в НБКИ

14

if (loanApplication.loanStage == 1) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013346L) }
if (loanApplication.loanStage == 2) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013347L) }
if (loanApplication.loanStage >= 3) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013348L) }

Проверка ступени займа (1 ступень = КП "Ступень1" id 1013346
2 ступень = КП "Ступень2" id 1013347
3 ступень = КП "Ступень3" id 1013348)
Присвоение кредитного продукта в зависимости, от ступени займа

15

client.averageMonthlyCost + client.alimony + client.loanPaymentExpense > 0 && (client.meanIncome + client.additionalIncome + client.bonusIncome + client.rentIncome) / (client.averageMonthlyCost + client.alimony + client.loanPaymentExpense) >= 2

проверка уровня доходов клиента
Формула расчета: (Среднемесячный доход +Дополнительный доход +Премии +Доход от аренды)/(Среднемесячные расходы +Алименты +Прочие расходы +Выплаты по кредитам)

16

scoringPoint < 30

Скоринговый бал менее 30 (скоринговый бал более 30, то знак >)

17

lead.findExtraField("fullAmount") <= client.creditLimit

 

18

if (loanApplication.gettingMoneyMethod.id == 102391) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013358L) }
if (loanApplication.gettingMoneyMethod.id == 102395) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013357L) }

назначение продукта в зависимости от способа выдачи

19

!clientManager.approvedLoanAppsExistence(lead.clientId)

проверяем первый ли займ у клиента (отсутствие наличия ранее одобренных или выданных заявок)

20

if (loanApplication.loanAmount >= 4000 && loanApplication.loanAmount <= 9000 && loanApplication.gettingMoneyMethod.id == 1023910) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013358L) }
if (loanApplication.loanAmount >= 9001 && loanApplication.loanAmount <= 11000 && loanApplication.gettingMoneyMethod.id == 1023910) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013359L) }
if (loanApplication.loanAmount >= 11001 && loanApplication.loanAmount <= 13000 && loanApplication.gettingMoneyMethod.id == 1023910) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013360L) }
if (loanApplication.loanAmount >= 13001 && loanApplication.loanAmount <= 14000 && loanApplication.gettingMoneyMethod.id == 1023910) { loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 1013362L) }

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

21

additional.trustRating45.trustRating.result > 450

баллы благонадежности по отчету Скористы

22

bkinpl30 == 0

проверяется наличие просрочки (Эквифакс)

23

loanApplication.getCreditProduct().getName().equals("Экспресс")

проверка по названию кредитного продукта

24

lead.getSex().getId()==101252 (id женщина)

проверка пола

25

loanApplication.loanStage == 1

проверка на ступень займа в заявке

26

clientManager.getIssuedCreditsQty(lead.clientId, 1500d) <= 0

если не было выданных кредитов больше либо равно 1500 - проходим дальше по СПР, если были - отказ или переход на ветку

27

if (clientHasActiveCredits) { loanApplicationManager.putProcessingStatus(loanApplication.id, 1025017L, '', false) }

изменение кредитного продукта в зависимости от ступени займа.

28

{ loanApplicationManager.putProcessingStatus(loanApplication.id, 1025017L, '', false) }

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

29

loanApplication.bureauScoringPoint = double:valueOf(nbkiscoring)

выражения по скорр баллу: Сохраняет нбки скорр. балл (nbkiscoring) в заявку в поле bureauScoringPoint.

30

leadManager.addExtraField(lead, 'nbkiscoring', nbkiscoring)​

Это выражение добавляет из нбки скорр. балла (nbkiscoring)​ в коллекцию лида extraFields​ новое поле 'nbkiscoring'​.

31

var modCondition1 = client.maritalStatus.name eq "MARRIED" && client.childrenCount > 0 ?: false; var baseCreditLimit = client.rating.name() eq "GOOD" ? 120000 : 80000; client.creditLimit = baseCreditLimit + (modCondition1 ? 0 : 0); client.creditMaxLimit = client.creditLimit;

составной параметр проверки на макслимит

32

clientManager.getIssuedCreditsQty(lead.clientId, null) <= 0 || clientManager.getPaymentsQty(lead.clientId) > 0

имеется у клиента открытый договор.

33

if (loanApplication.bureauScoringPoint >= 600 && loanApplication.bureauScoringPoint <= 699 ) { client.creditLimit = 80000 }

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

34

loanApplication.loanAmount + 1 > 0

выражение для создания заявки.

35

client.getAge() > 0

создание клиента по лиду (актуальна для СПР ЛК (канал Site)

36

clientManager.getActiveCreditsQty(lead.clientId) <= 0

проверка на активные контракты

37

client.passport.closeDate != null && client.passport.closeDate.compareTo(new Date('java.util.Date')) > 0

срок действия паспорта.

38

clientManager.getIssuedCreditsQty(lead.clientId) <= 2

у клиента 2 открытых договора.

39

clientManager.getLastDenialDate(lead.clientId) == null || dateUtil:getDaysDiff(clientManager.getLastDenialDate(lead.clientId), new('java.util.Date')) >= 30

текст выражения для проверки того что с момента последнего отклонения заявки клиента прошло не меньше 30 дней (или по клиенту нету отклонённых заявок

40

clientManager.prevCreditsDelinqStatusAbsence(lead.clientId, 6)

в результате выполнения выражения если последние 6 займов были без просрочки - идём дальше по СПР, иначе отказ или переходим на ветвь (вместо 6 можно ставить нужное кол-во последних займов без просрочки.)

41

clientManager.getClosedCreditsQty(lead.clientId) >= 3

3 и более закрытых займов

42

clientManager.prevCreditsDelinqStatusAbsence(lead.clientId, 3)

проверка на просрочку в последних 3 займах

43

if (loanApplication.loanAmount > 15000) { loanApplication.loanAmount = 15000 }

изменение суммы до 15000 рублей в заявке

44

decision.decisionBinnar == 1

статус Одобрено по Кредитному решению

45

nager.prevCreditsDelinqStatusAbsence(lead.clientId, 6)

последние 6 займов без просрочки

46

loanApplication = loanApplicationManager.applyCreditProduct(loanApplication, 101340L)

изменение Кредитного продукта

47

bkimaxoverdue <= 30

просрочка более 30 дней по действующим займам

48

clientManager.getClosedCreditsQty(lead.clientId) >= 6

6 и более закрытых займов

49

clientManager.getLastDenialDate(lead.clientId) == null || dateUtil:getDaysDiff(clientManager.getLastDenialDate(lead.clientId), new('java.util.Date')) >= 30

запрет подачи заявки 30 дней от последней отказанной

50

loanApplication.loanStage == 1 && loanApplication.loanAmount <= 10000

первый ли займ у клиента, если да - то сумма займа не должна превышать 10 000

51

nbkinpl30 == 0

проверяется наличие просрочки (НБКИ)

52

nbkinpl30 == 0d

проверяется наличие просрочки (НБКИ с учетом долевых)

53

nbkinohistory == 1

нет кредитной истории

54

loanApplication.getCreditProduct().getName().equals("название тарифа")

проверка кредитного продукта из заявки, если КП совпадает идет дальше (если нет, то на вложенную)

55

jexlHelper.getContractDelinqDaysQty(contract.id, false) >= 10

(просрочка более 10 дней) – выражение на проверку количества дней просрочки

56

contract.msfoReserveRate = 5

команда присваивающая ставку резерва.

57

contract.restructedContract != null

проверка на реструктурированный контракт

58

!empty(contract.loanApplication.collaterals)

если надо проверить что по заявке из контракта есть залоги и пройти дальше по СПР (если наоборот надо убедиться что залогов нету и пройти дальше по СПР то выражение такое же, только без знака ! в начале)

59

if (loanApplication.gettingMoneyMethod.id == xxxxxx) { clientMonitorManager.create(client, xxxxxxL) }

Создать новый мониторинг клиента, в зависимости от способа выдачи

60

client.passport.closeDate != null && client.passport.closeDate.compareTo(new('java.util.Date')) > 0

Проверка на срок действия паспорта

61

client.livingDocument.complementaryDocType != null && client.livingDocument.complementaryDocType.id =~ [ххххххL, ххххххL]

Проверка на тип дополнительного документа

62

client.passport.complementaryDocType.id == ХХХХХХ

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

63

clientManager.getActiveCreditsQty(lead.clientId) <= 0

Проверка на параллельные займы

64

clientManager.getLastDenialDate(lead.clientId) == null || dateUtil:getDaysDiff(clientManager.getLastDenialDate(lead.clientId), new('java.util.Date')) >= 30

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

65

if (loanApplication.creditField.trancheDuration > 21) { loanApplication.creditField.trancheDuration = 21 }

Изменение срока займа на 21 день, если срок займа больше 21 дня

66

lead.isNaturalPerson()==true

Проверка на тип клиента. (тип клиента - юр. лицо)

67

innerScoringAdvice == 'UNDEFINED'

Проверка внутреннего скоринга (статус - "Не определен")

68

jexlHelper.isPersonAccountByBikExists(lead.clientId, 'ХХХХХХХ')

Проверка для определения есть ли у клиента счет в банке с указанным БИКом (где ХХХХХХХ - должен быть указан БИК банка)

69

clientMonitorManager.create(loanApplication)

Команда по созданию мониторинга по заявке (Начиная с релиза 1.2.0-125: clientMonitorManager.create(client, loanApplication.mainManager.id))

70

clientManager.getIssuedCreditsQty(lead.clientId, null) > 0 && dateUtil:getDaysDiff(jexlHelper.getLastCredit(lead.clientId, false).issueDate, new('java.util.Date')) < 15

Выражение проверяет что по клиенту ранее были выданные контракты и с даты выдачи последнего выданного контракта до текущей даты прошло меньше 15 дней (строго меньше). Если эти условия выполняются - идём дальше по СПР, иначе отказ или переход на ветку.

71

dateUtil:datePartEquals(jexlHelper.getLastCredit(lead.clientId, true).closeDate, new('java.util.Date'))

Выражение проверяет что дата закрытия последнего закрытого контракта по клиенту совпадает с текущей датой (если закрытых контрактов нет или если даты не совпадают - то отказ)

72

clientManager.getClosedCreditsQty(lead.clientId) > 0 && dateUtil:getDaysDiff(jexlHelper.getLastCredit(lead.clientId, true).closeDate, new('java.util.Date')) <= 3

Выражение проверяет что по клиенту есть закрытые контракты и с даты закрытия последнего закрытого контракта до текущей даты прошло 3 дня или меньше.

73

clientManager.getClosedCreditsQty(lead.clientId) > 0 && dateUtil:getDaysDiff(jexlHelper.getLastCredit(lead.clientId, true).issueDate, jexlHelper.getLastCredit(lead.clientId, true).closeDate) <= 15

Выражение проверяет что по клиенту есть закрытые контракты и фактический срок действия последнего закрытого контракта меньше либо равен 15 дням

74

clientManager.getClosedCreditsQty(lead.clientId) > 0 && jexlHelper.getLastCredit(lead.clientId, true).loanAmount <= 5000

Выражение проверяет что по клиенту есть закрытые контракты и сумма последнего закрытого контракта меньше либо равна 5000

75

clientManager.getClosedCreditsQty(lead.clientId) > 0 && jexlHelper.getDelinqDaysQty(jexlHelper.getLastCredit(lead.clientId, true)) > 15

Выражение проверяет что по клиенту есть закрытые контракты и общее кол-во дней просрочки по последнему закрытому контракту строго больше 15 дней. Если эти условия выполняются - идём дальше по СПР, иначе отказ или переход на ветку. Общее кол-во дней просрочки считается по статусам контракта (если было несколько просрочек - то дни этих просрочек суммируются)

76

jexlHelper.isUnderCourt(lead.clientId)

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

77

client.inRedList

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

78

client.inBlackList

красный список - это поля в клиенте, соответственно их можно использовать напрямую в выражениях

79

jexlHelper.isCessionOutgoingTransferAbsent(lead.clientId)

Метод для проверки отсутствия по клиенту проданных по цессии контрактов, в результате если проданных по цессии контрактов нет - идём дальше по СПР или переход на ветку.

80

jexlHelper.isCessionIncomingTransferAbsent(lead.clientId)

Аналогичный метод для проверки отсутствия по клиенту выкупленных по цессии контрактов, Оба метода определяют отсутствие по коллекции переводов по цессии (cessionTransfer)

81

loanApplication.issueSteps.0.date != null || !empty(loanApplication.issueSteps.0.date)

Проверка заполнения даты подписания

82

loanApplication.loanDeniedRejection != null && loanApplication.loanDeniedRejection.id != {id}

Проверка на то, что статус предыдущей проверки "Проверка ПОД/ФТ не пройдена"

83

client.naturalperson

Проверка на тип клиента ИП

84

client.businessman

проверка на признак ИП

85

jexlHelper.getPrincipalBalanceAmount(lead.clientId) + loanApplication.loanAmount <= 1500000d

Общая сумма менее или равна 1500000

86

!empty(client.personAccounts) && !empty(client.personAccounts[0].accountNo)

Проверка наличия р/с

87

loanApplication.contractName = loanApplicationManager.getNextContractName()

Имя контракта

88

loanApplication.conclusionDate = new('java.util.Date')

Дата соглашения равна сегодняшней дате

89

loanApplication.decisionExpDate != null && dateUtil:getDaysDiff(loanApplication.decisionExpDate, new('java.util.Date')) <= 0

Проверка срока действия решения

90

jexlHelper.prevCreditsSpecifiedCustomStatusesAbsence(lead.clientId, arrays:asList('UNDER_COURT', 'BANKRUPTCY', 'BAD_LOAN', 'WRITTEN_OFF'))

В результате выполнения выражения если нету указанных статусов по выданным кредитам клиента - идём дальше по СПР, иначе - отказ или переход на ветку

91

clientManager.getLoanAppsInSomeStatus(lead.clientId, '{id}') == 0 && clientManager.getLoanAppsInSomeStatus(lead.clientId, '{id}') == 0

Все заявки клиента по id, если имеются заявки в статусе {id}

92

loanApplication.manager = jexlHelper.findManagerByLastConsideringUser(lead.loanApplicationId)

Команда которая смотрит id пользователя по последней ручной проверке, после этого ищет id специалиста по займам пользователя из ручной проверк, и записывает id специалиста по займам в managerId заявки. Без создания мониторинга

93

jexlHelper.findRuleTaskOption(lead.id, 'nbkinohistory') != null && (nbkinohistory == 0 || nbkinohistory == 1)

Проверяется присутствует ли опция nbkinohistory и если да, то затем проверяется что её значение равно 0 или 1 - если всё это выполняется то идём дальше по СПР, иначе отказ или переход на ветку.

94

lead.registrationAddress.regionName !~ ["Чеченская Респ.", "Респ. Чеченская", "Кабардино-Балкарская Респ.", "Респ. Кабардино-Балкарская", "Респ. Ингушетия", "Карачаево-Черкесская Респ.", "Респ. Карачаево-Черкесская", "Респ. Дагестан", "Респ. Северная Осетия - Алания", "Респ. Крым", "Севастополь", "г. Севастополь"]

Регистрация в республиках "черного списка"

95

fio_match == 1 && birth_date_match == 1 && fio_record_id == birth_date_record_id

ФИО + Дата рождения (ЧС)

96

if (loanApplication.loanStage >= 11) { loanApplication.creditField.trancheDuration = 31 }

Изменение срока займа, в зависимости от ступени займа

97

loanApplication.loanStage <= 1 && loanApplication.loanAmount >= 10000

Проверка первый ли займ у клиента, если да - то сумма займа не должна превышать 10 000 руб. (возможны другие условия (ступень займа, сумма из заявки))

98

loanApplication.bureauScoringPoint = double:valueOf(nbkiscoring)

Балл КИ в поле интерфейса (extraFields​ созданный в xml) . Выражение подходит и для вывода других данных извне

99

lead.registrationAddress.regionName.contains("Москва") || lead.registrationAddress.regionName.contains("Московская")

Проверка региона нахождения клиента (Москва и МО)

100

dateUtil:getYearsDiff(client.birthDate, dateUtil:addDay(loanApplication.creationDate, loanApplication.creditField.getDurationInDays())) < 65

Проверка возраста на окончание срока кредита. не более 65 лет

101

client.workPlaceData.workStartDate != null && dateUtil:getMonthsDiff(client.workPlaceData.workStartDate, loanApplication.creationDate) >= 6

Проверка стажа работы на последнем месте работы, более 6 месяцев

102

leadManager.addExtraField(lead, 'delay_last_180_days', delay_last_180_days)

Указание просрочки по активным займам за последние 180дней

103

leadManager.addExtraField(lead, 'nbki_current_debt', nbki_current_debt)

Запись суммарной задолженности

104

leadManager.addExtraField(lead, 'nbki_monthly_repayments', nbki_monthly_repayments)

Запись ежемесячного платежа по всем кредитам

105

nbki_overdue_debt == 0

Текущая просроченная задолженность по кредитам

106

nbki_2year == 0

Исторические просрочки по кредитам в течении последних 2 лет

107

loanApplication.creditProduct.id != {id}

Проверка на кредитный продукт

108 !empty(loanApplication.collaterals) Проверка наличия залога в заявке. Если есть залог идем дальше, если нет, то отказ.