Finance-Loan-Private
view release on metacpan or search on metacpan
script/privateloan.pl view on Meta::CPAN
$Principal = $Advances[0]->{amount};
$Today = DateTime::Format::ISO8601->parse_datetime($Advances[0]->{date});
$InterestRate = $Advances[0]->{rate};
$Premium = int premium($Principal, $InterestRate, $Period);
$Premium = $Advances[0]->{premium} if exists $Advances[0]->{premium};
shift @Advances;
if (@Advances) {
$nextLoanDate = DateTime::Format::ISO8601->parse_datetime($Advances[0]->{date});
}
# Get the tax details
$TaxRate = $TaxRates[0]->{rate};
shift @TaxRates;
if (@TaxRates) {
$nextTaxDate = DateTime::Format::ISO8601->parse_datetime($TaxRates[0]->{date});
}
while ($Today > $YearEnd) {
$YearEnd += $Year;
}
printf("Loan amount\t\t%d\n", $Principal);
printf("Gross interest rate\t%.2f%%\n", $InterestRate);
printf("Tax rate\t\t%.2f%%\n", $TaxRate);
printf("Period\t\t\t%d years\n", $Period);
print "\n";
print "Date\t\tPrincipal\tGross interest due\tTax due\tAmount paid\tPrincipal repaid\n";
while (1) {
printf("%s\t%8.2f\t", $Today->ymd(), $Principal);
my $interest = $Principal*$InterestRate/1200.0;
my $tax = $interest*$TaxRate/100.0;
$totalTax += $tax;
$totalInterest += $interest;
my $repayment = $Premium -$interest + $tax;
if ($repayment >= $Principal) {
$Premium = $Principal + $interest - $tax;
$repayment = $Principal;
printf("%8.2f\t\t%6.2f\t%6.2f\t\t%8.2f\n", $interest, $tax, $Premium, $repayment);
last;
}
printf("%8.2f\t\t%6.2f\t%6.2f\t\t%8.2f\n", $interest, $tax, $Premium, $repayment);
$Principal -= $repayment;
$Today += $Month;
yearEndSummary() if ($Today >= $YearEnd);
updateLoan() if ($nextLoanDate && $Today >= $nextLoanDate);
updateTax() if ($nextTaxDate && $Today >= $nextTaxDate);
}
yearEndSummary();
}
sub yearEndSummary {
printf ("Gross interest paid in the past year\t%8.2f\n", $totalInterest);
printf("Total tax deducted in the past year\t%8.2f\n", $totalTax);
print "\n";
$totalTax = 0;
$totalInterest =0;
$YearEnd += $Year;
print "Date\t\tPrincipal\tGross interest due\tTax due\tAmount paid\tPrincipal repaid\n";
}
sub updateLoan {
$InterestRate = $Advances[0]->{rate} if exists($Advances[0]->{rate});
$Principal += $Advances[0]->{amount} if exists($Advances[0]->{amount});
$Premium = $Advances[0]->{premium} if exists($Advances[0]->{premium});
shift @Advances;
}
sub updateTax {
$TaxRate = $TaxRates[0]->{rate} if exists($TaxRates[0]->{rate});
shift @TaxRates;
}
=head1 AUTHOR
Raphael Mankin <rapmankin@cpan.org>
( run in 0.551 second using v1.01-cache-2.11-cpan-4ef0a570458 )