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 )