Configuring the Business Formulas

Business Formulas processes different inputs from your digital journey in order to generate desired outputs. The formulas developed for this journey are to filter the customers that do not meet the minimum standards, to determine the scoring of each applicant and the maximum debt-to-value to increase the mortgage offer. The formulas can be modified and extended to fit business requirements for any financial institution, even the trigger for them can be modified.

HINT  
To edit a formula that is in Active status, clone it.

The formulas used are:

Order of execution Name Start date Business Status Version Digital Asset
1 MORTGAGE_KO_DIP 08/04/2022 13:48 Active 1 RWM-SDK
2 Mortgage_DIP_WeightIncome 06/04/2022 15:46 Active 1 RWM-SDK
3 MORTGAGE_SCORING_DIP 08/04/2022 13:48 Active 1 RWM-SDK
4 RWM_MAXDTI_DIP 11/04/2022 14:18 Active 1 RWM-SDK

The system triggers the calculations in the form driven flow FTOS_BARET_MortgageDIPAnalysis > step MortgageDIPAnalysis > Advanced > After Events > script FTOS_BNKAP_FinancialAnalysis:

  1. executes the formula MORTGAGE_KO_DIP. Two eligibility criteria are defined in MORTGAGE_KO_DIP:
    • If the time employed in the current job is less than 6 months for any applicant, the applicant is rejected
    • If the citizenship is not British, then the loan application is rejected.

    Both criteria must be met for the application to be accepted.

  2. Then, the system determines how incomes and spending are weight in and compounded after tax in United Kingdom (calculates all the incomes: yearly income before tax including secondary sources of income for each applicant, then calculates the income after tax, then merges the income with the co-applicant to result the total income before tax in a year). Weight in every income using the following proportions:

    For employed persons:

    • Income type
    • Weight in
    • salary 100%
    • Overtime 100%
    • Allowances 90%
    • Commission 90%
    • Bonuses 80%
    • Pension 100%
    • Investments 50%
    • Maintenance 50%
    • Trust Funds 50%.

    For self-employed persons, to determine the income on a monthly basis:

    • Net profit in most recent complete tax year/12
    • Net profit in previous complete tax year/12.
  3. calculates monthly net income for each applicant:

    Then, the system calculates the average between the two indicators. This determines our monthly eligible profit (before applying tax). Then, the system adds the secondary sources of income using the same weight in as for employed persons. After, the system applies the weigh in for every income source, the system adds them all together for each applicant. Finally, the total income before taxes per month for each applicant is saved in the database. The system calculates the income after tax by apply tax brackets by applying the tax brackets to calculate the monthly income after tax and insurance.

    UK Income Tax (excluding Scotland)
    Tax BandTax RateTaxable Income
    Personal Allowance0%Up to £12,570
    Basic Rate20%£12,571 to £50,270
    Higher Rate40%£50,271 to £150,000
    Additional Rate45%£150,001 or more
    National Insurance (Class 1 — for Employees Only)
    How much you earnHow much you are going to pay 
    Less than £9,5680% 
    £9,569 to £50,27012% 
    More than £50,2702% 

    The result is the monthly total income after tax and insurance.

  4. calculates the value of the spendings on a monthly bases and calculates the spendings on dependents. Then, the system aggregates expenses and calculate the existing DTI. Based on the expenses:
    • For credit card and overdraft that the applicants have declared, the system takes into account a monthly cost/instalment equal to 3% of the declared credit limit.
    • Council tax, Ground rent, Service charge: the system determines the monthly spending amount for them
    • Number of dependants: for every dependent that the user has declared, the system calculates an expense of 300 GBP per month.
  5. using the simulation Credit Bureau integration to get all the existing credit(s) the applicant has and adds all the monthly instalments to expenses for both applicants. The result is the monthly expenses.
    IMPORTANT!  
    The integration is mocked. It is subject to internal implementation.
  6. calculates the scoring for each applicant using MORTGAGE_SCORING_DIP to get the current DTI, if it is bigger than 50% the application fails. If the current DTI is smaller than 50%, the system calculates the maximum DTI. The applicants fall into a risk level category used in RWM_MAXDTI_DIP to determine the maximum offer. Finally, the monthly available amount for loan is determined, i.e., the maximum monthly instalment.
IMPORTANT!  
The formulas and matrices are for example purposes only. The are subject to internal modifications for each implementation.

MORTGAGE_KO_DIP

This formula determines whether the applicant can continue the process by meeting the standards needed for citizenship and employment.

Field Example
Name MORTGAGE_KO_DIP
Formula Input MORTGAGE_KO_DIP
Start date 07/04/2022 11:52
 

Formula steps:

NameMaster TypeSub TypeCalculation Type

Formula

MORTGAGE_KO_DIP_EmploymentSimple TypeBooleanNormal
Copy
result = DataSet("MORTGAGE_KO_DIP_Employment", ("MORTGAGE_KO_DIP_Employment", experienceMonths)) == 1;
MORTGAGE_KO_DIP_CitizenshipSimple TypeBooleanNormal
Copy
result = DataSet("MORTGAGE_KO_DIP_Citizenship", ("Citizenship", citizenship)) == 1;
KO_FinalSimple TypeBooleanNormal
Copy
result = MORTGAGE_KO_DIP_Citizenship || MORTGAGE_KO_DIP_Employment;
 

Data set MORTGAGE_KO_DIP_Citizenship

This matrix sets values for each citizenship available.

CitizenshipValues
Romanian1
French1
American1
 

Data set MORTGAGE_KO_DIP_Employment

This matrix discriminates between the users, those who have been working under 6 months fail the application.

EmploymentTime Values
[;6)1
[6;]0

Mortgage_DIP_WeightIncome

This formula determines the weight of the income.

FieldExample
NameMortgage_DIP_WeightIncome
Formula InputMortgage_DIP_WeightIncome
Start date06/04/2022 15:46

Formula steps:

NameMaster TypeSub TypeCalculation Type

Formula

DIP_IncomeTypeSimple TypeDecimalNormal
Copy
result = DataSet("Mortgage_DIP_WeightIncome", ("IncomeType", incomeType));
ResultSimple TypeDecimalNormal
Copy
result = incomeAmount * DIP_IncomeType;

Data set Mortgage_DIP_WeightIncome

Depending on the source of income, the application scores higher with salary, pension and overtime being the highest scoring.

IncomeTypeValues
Salary1
Overtime1
Pension1
Allowances0.9
Commission0.9
Bonuses0.8
Investments0.5
Maintenance0.5
Trust Funds0.5

MORTGAGE_SCORING_DIP

This formula determines the scoring based on the age, marital status, employment status, the number of dependants, the time spent in employment, the days past dueClosed Days Past Due (DPD) indicates your financial history,i.e., whether you have been consistent in your repayments and if you have missed any, how many instalments you have missed and by how many days. It also reflects your credit card repayment history., the number of active loans. If the application has two applicants, the system calculates the scoring for all the applicants.

FieldExample
NameMORTGAGE_SCORING_DIP
Formula InputMORTGAGE_SCORING_DIP
Start date08/04/2022 13:48

Formula steps:

NameMaster TypeSub TypeCalculation Type

Formula

DIP_AgeSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_Age", ("Age", age));
DIP_MaritalStatusSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_MaritalStatus", ("MaritalStatus", maritalStatus));
DIP_EmploymentStatusSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_EmploymentStatus", ("EmploymentStatus", employmentStatus));
DIP_DependantsNoSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_DependantsNo", ("DependantsNo", dependantsNo));
DIP_EmploymentTimeSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_TimeAtCurrentEmployer", ("TimeSpentCurrentEmployer", employmentTime));
DIP_DPDSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_DPD", ("DPD", DPD));
DIP_ActiveLoansNoSimple TypeWhole NumberNormal
Copy
result = DataSet("SCORING_DIP_ActiveLoansNo", ("ActiveLoansNo", activeLoansNo));
ApplicationScoreSimple TypeWhole NumberNormal
Copy
result = DIP_Age + DIP_MaritalStatus + DIP_EmploymentStatus + DIP_DependantsNo + DIP_EmploymentTime + DIP_DPD + DIP_ActiveLoansNo;
FICOScore_DecisionSimple TypeTextNormal
Copy
if (FICOScore != 0)
    result = DataSet("SCORING_DIP_FICOScore", ("FICOScore", FICOScore));
else result = "Approved";
ApplicationScore_DecisionSimple TypeTextNormal
Copy
result = DataSet("SCORING_DIP_ApplicationScore", ("ApplicationScore", ApplicationScore));
DecisionSimple TypeTextNormal
Copy
if (FICOScore_Decision == "Rejected" || ApplicationScore_Decision == "Rejected")
    result = "Rejected";
else if (FICOScore_Decision == "Derogation" || ApplicationScore_Decision == "Derogation")
    result = "Derogation";
else result = "Approved";
ClientCategorySimple TypeTextNormal
Copy
result = DataSet("SCORING_DIP_ClientCategory", ("UserScore", ApplicationScore));
 

Data set SCORING_DIP_ActiveLoansNo

This matrix determines a value depending on the number of active loans a customer has.

ActiveLoansNoValues
[0;0]25
[1;1]20
[2;2]15
[3;]10
[-2;-2]25
 

Data set SCORING_DIP_Age

This matrix determines a value depending on the age the customer has.

AgeValues
[;26)15
[26;31)20
[31;36)25
[36;46)30
[46;51)40
[51;]30
 

Data set SCORING_DIP_ApplicationScore

This matrix determines a value depending on the application score.

ApplicationScoreValue
[;90)Rejected
[90;120)Derogation
[120;)Approved
 

Data set SCORING_DIP_ClientCategory

This matrix determines a value depending on the user score the customer received.

UserScoreValues
[70;110]D
[111;130]C
[131;159]B
[160;180]A
 

Data set SCORING_DIP_DependantsNo

This matrix determines a value depending on the number of dependents a customer has, the higher the number, the higher the value.

DependantsNoValues
[;2)15
[2;3]10
(3;)5
 

Data set SCORING_DIP_DPD

This matrix determines a value depending on the days-past-due.

DPDValues
[0;29]30
[30;59]25
[60;89]15
[90;]5
[-2;-2]25
[-1;-1]5
 

Data set SCORING_DIP_EmploymentStatus

This matrix determines a value depending on the type of employment declared by the customer.

EmploymentStatusValues
Employed35
SelfEmployed20
 

Data set SCORING_DIP_FICOScore

This matrix determines a value depending on the FICO scoreClosed The FICO score is an algorithm used internationally, mainly by banks, to determine the degree of risk for a person who applies for a loan, and is collected by the Credit Bureau. the customer has.

FICOScoreValue
[;520)Rejected
[520;700)Derogation
[700;]Approved
 

Data set SCORING_DIP_MaritalStatus

This matrix determines a value depending on the marital status declared by the customer.

MaritalStatusValues
Married/Civil partnership25
Single20
Widow/Widower15
Separated20
Divorced20
Living as partners15
 

Data set SCORING_DIP_TimeAtCurrentEmployer

This matrix determines a value depending on the time the customer has been employed at the present job.

TimeSpentCurrentEmployerValues
(10;)25
(5;10]20
(2;5]15
[1;2]10
(;1)5

RWM_MAXDTI_DIP

This formula determines the maximum debt-to-income the applicant can support with their current income-expenses situation.

FieldExample
NameRWM_MAXDTI_DIP
Formula InputRWM_MAXDTI_DIP
Start date11/04/2022 14:18

Formula steps:

NameDescriptionMaster TypeSubTypeCalculation TypeFormula
MAXDTI  Simple Type Decimal Normal
Copy
result = DataSet("RWM_MaxDTI_DIP", ("ClientCategory", clientCategory));
 

Data set RWM_MaxDTI_DIP

This matrix determines a value depending on the client category.

ClientCategoryValues
A0.3998
B0.37
C0.33
D0.3