/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.examples.computegrid.montecarlo;
import java.io.Serializable;
/**
* This class provides a simple model for a credit contract (or a loan). It is basically
* defines as remaining crediting amount to date, credit remaining term, APR and annual
* probability on default. Although this model is simplified for the purpose
* of this example, it is close enough to emulate the real-life credit
* risk assessment application.
*/
public class Credit implements Serializable {
/** Remaining crediting amount. */
private final double remAmnt;
/** Remaining crediting remTerm. */
private final int remTerm;
/** Annual percentage rate (APR). */
private final double apr;
/** Expected annual probability of default (EaDF). */
private final double edf;
/**
* Creates new credit instance with given information.
*
* @param remAmnt Remained crediting amount.
* @param remTerm Remained crediting remTerm.
* @param apr Annual percentage rate (APR).
* @param edf Expected annual probability of default (EaDF).
*/
public Credit(double remAmnt, int remTerm, double apr, double edf) {
this.remAmnt = remAmnt;
this.remTerm = remTerm;
this.apr = apr;
this.edf = edf;
}
/**
* Gets remained crediting amount.
*
* @return Remained amount of credit.
*/
double getRemainingAmount() {
return remAmnt;
}
/**
* Gets remained crediting remTerm.
*
* @return Remained crediting remTerm in days.
*/
int getRemainingTerm() {
return remTerm;
}
/**
* Gets annual percentage rate.
*
* @return Annual percentage rate in relative percents (percentage / 100).
*/
double getAnnualRate() {
return apr;
}
/**
* Gets either credit probability of default for the given period of time
* if remaining term is less than crediting time or probability of default
* for whole remained crediting time.
*
* @param term Default term.
* @return Credit probability of default in relative percents
* (percentage / 100).
*/
double getDefaultProbability(int term) {
return 1 - Math.exp(Math.log(1 - edf) * Math.min(remTerm, term) / 365.0);
}
/** {@inheritDoc} */
@Override public String toString() {
StringBuilder buf = new StringBuilder();
buf.append(getClass().getName());
buf.append(" [remAmnt=").append(remAmnt);
buf.append(", remTerm=").append(remTerm);
buf.append(", apr=").append(apr);
buf.append(", edf=").append(edf);
buf.append(']');
return buf.toString();
}
}