Configuring the Formulas
Business Formulas processes different inputs from your digital journey in order to generate desired outputs. By inserting arguments and using them in steps, the system creates complex calculations to be triggered in a flow. The formulas take data either from what the SME representative has declared in Company Details or from a third-party connector. FintechOS has developed several connectors with access to platforms that hold financial information. For this solution, FintechOS recommends installing Company House and Experian to collect additional data that is accurate. The list with all the connectors developed by the company is found here. Choose the most suitable for your needs.
Business Formulas
For this solution, five formulas were developed to determine whether or not the potential customer is eigible of not for the amount requested and for even a bigger amount and a credit limit as well.
Access Fintech OS Studio > Automation Blocks > Business Formulas > Formulas.
- Knockout_CML
- Scoring_CML
- OfferCalculation_CML
- FinancialAnalysis_CML
- CrossSell_CML.
The first formula executed is Knockout_CML triggered after the step Disclosures. Then, the system calculate the scoring Credit scoring is a statistical analysis performed by lenders and financial institutions to determine the creditworthiness of a person or a small, owner-operated business. of the cutomer. If the score of the customer matches the minimum value needed, the system calculates the offers for the requested offer and the maximum offer. Then, the DTI The Debt-to-Income ratio (DTI) is a personal indicator of a good balance between debt and income. Monthly debt payment amount / Monthly gross amount (before taxes and other deductions). is calculated within the FinancialAnalysis_CML and a decision is made. Lastly, depending on the maximum debt the customer can take on a credit limit is approved or denied.
Rejection Criteria
Based on the answers from the step Disclosures, for the questions:
- Have you or your business partners had any County Court Judgements You may get a county court judgment ( CCJ ) or high court judgment if someone takes court action against you (saying you owe them money). registered against you in the past 3 years?
- Have you, your business or your partners been declared bankruptcy in the past 6 years?
If the borrower selected Yes for both, the system rejects the application.
County Court Judgment has two statuses:
- Settled
- Not settled (the loan is denied).
If it is settled, then the system needs to record the number of County Court Judgment in the past 12 months.
If there are two more County Court Judgments, then the system registers the total value. If the total value is bigger than 1000, the loan is denied.
The date and the amount to be paid are recorded as well from a connector. For this solution, a series of connectors are possible to be integrated: KeysFin Connector/ Dun and Bradstreet Connector/ Experian or even other third-party platforms.
Knockout_CML
Execution Order | Name | Source of Data | Master Type | Subtype | Calculation Type | Formula |
---|---|---|---|---|---|---|
1 | KNOCKOUT_HaveCourtJudgements | It is taken from a third-party connector. FintechOS suggests using Experian. | Simple Type | Text | Normal | result = DataSet("KNOCKOUT_CML_HaveCourtJudgements", ("haveCourtJudgements", haveCourtJudgements)); |
2 | KNOCKOUT_HaveDeclaredBankrupcy | It is taken from a third-party connector. FintechOS suggests using Company House. | Simple Type | Text | Normal | result = DataSet("KNOCKOUT_CML_HaveDeclaredBankrupcy", ("haveDeclaredBankrupcy", haveDeclaredBankrupcy)); |
3 | KNOCKOUT_Decision | It is calculated by Business Formulas. | Simple Type | Text | Normal |
if (KNOCKOUT_HaveCourtJudgements == "Approved" && KNOCKOUT_HaveDeclaredBankrupcy == "Approved") result = "Approved"; else result = "Rejected"; |
Eligibility Criteria
The result of whether or not an SME may take on a loan is comprised of the FICO 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. score and the application score. The FICO score must be equal or over 700 to be approved, and the application score must be equal or over 160, otherwise the SME is not eligible for the sum.
Scoring criteria
Based on the values for the following information, an SME may be eligible for a loan:
These values can be changed using the Fintech OS Studio to fit the bank's requirements.
- Social capital
- Number of employees
- Turnover in the past 12 months
- Business legal status
- Company establishment
- Trading on credit
- Expected annual debt repayments over the last 12 months
- Type of industry.
Scoring_CML
Execution Order | Name | Source of Data | Master Type | Subtype | Calculation Type | Formula |
---|---|---|---|---|---|---|
1 | SCORE_SocialCapital |
Input from the customer from the Company Details page. Verified with the third-party connector of your choice (FintechOS used Company House). Additionally, a bank employee can check using the balance sheet. |
Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_SocialCapital", ("socialCapital", socialCapital)); |
2 | SCORE_EmployeesNo |
Input from the customer from the Company Details page. Verified with the third-party connector of your choice (FintechOS used Company House). |
Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_EmployeesNo", ("numberOfEmployees", employeesNo)); |
3 | SCORE_Turnover |
Input from the customer from the Company Details page. |
Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_Turnover", ("turnover", turnover)); |
4 | SCORE_LegalStatus | Verified with the third-party connector of your choice (FintechOS used Company House). | Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_LegalStatus", ("legalStatusId", legalStatus)); |
5 | SCORE_CompanyEstablishment | Verified from the Profit and Loss Statement. | Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_CompanyEstablishment", ("companyEstablishmentId", companyEstablishment)); |
6 | SCORE_TradeCreditCustomer |
Input from the customer from the Company Details page. Verified from the Balance Sheet. |
Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_TradeCreditCustomers", ("tradeCreditCustomersId", tradeCreditCustomer)); |
7 | SCORE_ExpectedAnnualDebt |
Input from the customer from the Company Details page. Verified from the Profit and Loss Statement. |
Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_ExpectedAnnualDebt", ("expectedAnnualDebt", expectedAnnualDebt/netProfit)); |
8 | SCORE_SicCodes | Data set imported in Business Formula. | Simple Type | Text | Normal | result = DataSet("SCORING_CML_SICCodes", ("sicCodes", sicCodes)); |
9 | SCORE_Industry | Data set imported in Business Formula. | Simple Type | Whole Number | Normal | result = DataSet("SCORING_CML_Industry", ("industry", SCORE_SicCodes)); |
10 | ApplicationScore | It is calculated by Business Formulas. | Simple Type | Whole Number | Normal |
result = SCORE_SocialCapital + SCORE_EmployeesNo + SCORE_Turnover + SCORE_LegalStatus + SCORE_CompanyEstablishment + SCORE_TradeCreditCustomer + SCORE_ExpectedAnnualDebt + SCORE_Industry; |
11 | SCORE_FICOScore | For this solution, it is hardcoded, but it should be taken from FICO or a third-party connector such as Experian. | Simple Type | Text | Normal |
if (FICOScore != 0) result = DataSet("FICOScoreDecision", ("FICOScore", FICOScore)); else result = "Approved"; |
12 | ApplicationScoreDecision | It is calculated by Business Formulas. | Simple Type | Text | Normal | result = DataSet("SCORING_CML_ApplicationScore", ("ApplicationScore", ApplicationScore)); |
13 | Decision | It is calculated by Business Formulas. | Simple Type | Text | Normal |
if (SCORE_FICOScore == "Rejected" || ApplicationScoreDecision == "Rejected") result = "Rejected"; else if (SCORE_FICOScore == "Derogation" || ApplicationScoreDecision == "Derogation") result = "Derogation"; else result = "Approved"; |
The SME Matrix Calculations
Steps for the scoring matrix
- The system calculates the applicant score by adding the attributes that the customer declared and matching them to the values in the matrix.
- The system fetches the FICO from the data set, but it should be taken from FICO or a third-party connector such as Experian score.
- The formula is triggered to see if the scoring value is valid for approval of the loan.
- Fit the applicant score into the scoring category (from A to D).
- Using the scoring result, the system determines the maximum DTI for the customer by reading the DTI matrix.
DTI Calculations and Offers
Two calculations are done for the offers:
- Requested offer: the amount and period inserted by the user in the Simulation step.
- Maximum offer: the maximum amount that the DTI allows by the system and the maximum period for the loan.
The income for the SME used in the calculations is the monthly net profit.
The calculations are:
- Determine the current DTI using the expected annual debt repayments over the last 12 months. This info is given on the disclosures screen. The system divides that value by 12 (since it's annualized) and compares it to the monthly net profit, i.e.
monthly profit/ monthly repayments
. - Check if the current DTI is above the maximum DTI permitted by the matrix.
- If it is bigger, then the application is rejected.
- If it is smaller, the system calculates the offer's eligibility.
The maxDTI has as input:
- client category (performance)
- currency amount
- interest type
- loan maturity.
FinancialAnalysis_CML
Execution Order | Name | Master Type | Subtype | Calculation Type | Formula |
---|---|---|---|---|---|
1 | ClientCategory | Simple Type | Text | Normal | result = DataSet("FINCALC_CML_ClientCategory", ("ApplicationScore", applicationScore)); |
2 | MaxDTI | Simple Type | Decimal | Normal | result = DataSet("FINCALC_CML_MaxDTI", ("InterestType", interestType), ("Currency", currency), ("ClientCategory", ClientCategory)); |
3 | DTI | Simple Type | Decimal | Normal | result = loansMonthlyPayment / income; |
4 | Decision | Simple Type | Text | Normal |
if (MaxDTI < DTI) result = "Rejected"; else if (scoringDecision == "Rejected" || scoringDecision == "Derogation") { result = "Rejected"; } else result = "Approved"; |
Calculating offers
Requested offer
It represents the exact amount over the requested period of time. The system calculates:
- the new proposed DTI that includes the monthly instalment determined by the requested offer. The new DTI is calculated by adding all the monthly repayments of the user (calculated in Disclosures). The system adds the new repayment for the current offer, then, it divides this number to the monthly net profit.
- If the NewDTI is smaller than MaxDTI, then the offer is eligible, and it is displayed to the customer.
Maximum offer
It represents the maximum amount the bank can offer over the maximum period of time. The maximum monthly instalment available for the customer is calculated using the formula:
MaxInstallment = Income * maxDTI – (Other installments+ Monthly payments for Credit limits)
Afterward, the loan amount is determined. The period is set at the maximum value available for the product. The loan amount is calculated using the formula:
PV(interest rate / 12 , tenor, -maxInstallment)
The result is the maximum amount the SME is eligible over the max tenure.
OfferCalculation_CML
Revolving Credit Limit
For this product, the system calculates the maximum offer using the DTI The Debt-to-Income ratio (DTI) is a personal indicator of a good balance between debt and income. Monthly debt payment amount / Monthly gross amount (before taxes and other deductions). limitations from the scoring matrix. When the maximum offer amount is bigger than 5000 EURO, then the revolving credit limit is displayed in the journey.
CrossSell_CML
It determines if the customer is eligible (Approved or Rejected) to get the associated product of the main banking product based on the available DTI, the system calculates the max amount they can get, based on min and max defined at product level and return Approved
if the calculated financed amount is at least equal to the minimum defined at product level.
Input
{
"income": 50000,
"maxProductAmount": 100000,
"maxDTI": 0.2,
"minProductAmount": 1000,
"DTI": 0.1,
"interestRate": 0.12
}
Execution Order | Name | Master Type | Subtype | Calculation Type | Formula |
---|---|---|---|---|---|
1 | availableDTI | Simple Type | Decimal | Normal | result = maxDTI - DTI; |
2 | maxInstallment | Simple Type | Decimal | Normal | result = income * availableDTI; |
3 | offer | Simple Type | Whole Number | Normal | var value = maxInstallment * ((1 - (1 / (POWER(1 + interestRate / 12, 12)))) / (interestRate / 12)); if (value < maxProductAmount) result = value; else result = maxProductAmount; |
4 | decision | Simple Type | Text | Normal | if (offer >= minProductAmount) { result = "Approved"; } else result = "Rejected"; |
For more details, see Business Formulas.