package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
const (
|
|
goodScore = 450
|
|
lowScoreRation = 10
|
|
goodScoreRatio = 20
|
|
)
|
|
|
|
var (
|
|
ErrCreditScore = errors.New("invalid credit score")
|
|
ErrIncome = errors.New("income invalid")
|
|
ErrLoanAmount = errors.New("loan amount invalid")
|
|
ErrLoanTerm = errors.New("loan term not a multiple of 12")
|
|
)
|
|
|
|
func checkLoan(creditScore int, income float64,
|
|
loanAmount float64, loanTerm float64) error {
|
|
|
|
interest := 20.0
|
|
|
|
if creditScore >= goodScore {
|
|
interest = 15
|
|
}
|
|
|
|
if creditScore < 1 {
|
|
return ErrCreditScore
|
|
}
|
|
|
|
if income < 1 {
|
|
return ErrIncome
|
|
}
|
|
|
|
if loanAmount < 1 {
|
|
return ErrLoanAmount
|
|
}
|
|
|
|
if loanTerm < 1 || int(loanTerm)%12 != 0 {
|
|
return ErrLoanTerm
|
|
}
|
|
|
|
rate := interest / 100
|
|
|
|
payment := ((loanAmount * rate) / loanTerm) + (loanAmount / loanTerm)
|
|
totalInterest := (payment * loanTerm) - loanAmount
|
|
|
|
approved := false
|
|
|
|
if income > payment {
|
|
ratio := (payment / income) * 100
|
|
if creditScore >= goodScore && ratio < goodScoreRatio {
|
|
approved = true
|
|
} else if ratio < lowScoreRation {
|
|
approved = true
|
|
}
|
|
}
|
|
|
|
fmt.Println("Credit Score :", creditScore)
|
|
fmt.Println("Income :", income)
|
|
fmt.Println("Loan Amount :", loanAmount)
|
|
fmt.Println("Loan Term :", loanTerm)
|
|
fmt.Println("Monthly Payment :", payment)
|
|
fmt.Println("Rate :", interest)
|
|
fmt.Println("Total Cost :", totalInterest)
|
|
fmt.Println("Approved :", approved)
|
|
fmt.Println("")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func main() {
|
|
|
|
// Approved
|
|
fmt.Println("Applicant 1")
|
|
fmt.Println("-----------")
|
|
err := checkLoan(500, 1000, 1000, 24)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
}
|
|
|
|
// Denied
|
|
fmt.Println("Applicant 2")
|
|
fmt.Println("-----------")
|
|
err = checkLoan(350, 1000, 10000, 12)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
}
|
|
|
|
}
|