|  |  | @ -0,0 +1,94 @@ | 
			
		
	
		
			
				
					|  |  |  | 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) | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | } |