loan_mgmt:calculate_accruals

Interest Accrual Calculation

%InlineCode{StartDate}%:

%InlineCode{EndDate}%:

  • Date the user enters as the Accrual Apply date
  • Last day of the month by convention

#CodeBlock[NumDaysToAccrue = EndDate - StartDate + 1]#

IF Feb 29 falls between %InlineCode{StartDate}% and %InlineCode{EndDate}% THEN subtract 1 from %InlineCode{NumDaysToAccrue}% (Actual/365 calculation treats every year as though it had 365 days)

%InlineCode{OriginalValue}%: Face value of the bond

%InlineCode{Interest}%: Coupon rate as displayed on Loan Form (ie, 4.25% is 4.25, not 0.0425 or 1.0425)

#CodeBlock[Accrued Interest = Round(OriginalValue * Interest * NumDaysToAccrue / 36500, 2)]#

The accrued interest is calculated a month at a time to allow for proper handling of uncollectible interest.

Starting with the %InlineCode{StartDate}% calculated previously, repeat the following steps for each month until %InlineCode{EndDate}% is reached.

%InlineCode{CurrDate}%: Current date

  • Use last day of current month as the current date
  • Use Feb 28 instead of Feb 29 (ie, ignore leap years)

%InlineCode{EffIntRate}%: Effective interest rate

  • Remains the same for fixed rate loans
  • May change from one month to the next for adjustable rate loans

%InlineCode{NextPmtAmtDue}%: Next payment amount due

  • For adjustable rate loans, users have the ability to enter future payment amounts; if there are entries for the loan being processed, the system will use them
  • This amount is used to predict drawdown of the principal balance

%InlineCode{RemBal}%: Remaining principal balance

  • Add back in any principal payments received between now and %InlineCode{CurrDate}% to get the remaining principal balance for the instrument as of %InlineCode{CurrDate}%

%InlineCode{IntAccrued}%: Interest accrued this month

#CodeBlock[IntAccrued = RemBal * EffIntRate / 1200]#

Draw down balance by assuming timely payments

#CodeBlock[PrinPmtExpected = NextPmtAmtDue – Round(IntAccrued, 2)]#

#CodeBlock[RemBal = RemBal – PrinPmtExpected]#

  • If %InlineCode{PrinPmtExpected}% or %InlineCode{RemBal}% are negative, set them equal to zero

IF we are in the month this instrument was purchased and the overall start date (as calculated above) is after the first of the month then:

%InlineCode{PctOfMonth}%: percentage of month to calculate interest accrual

#CodeBlock[PctOfMonth = (30 – StartDay – 1) / 30]#

#CodeBlock[IntAccrued = IntAccrued * PctOfMonth]#

#CodeBlock[IntAccrued = Round(IntAccrued, 2)]#

%InlineCode{Service}%: Servicing fee rate as displayed on Loan Form (ie, 0.375% is 0.375, not 0.00375 or 1.00375)

%InlineCode{ServiceFees}%: Dollar amount of service fees owed for this month

#CodeBlock[ServiceFees = Round(IntAccrued * Service / EffIntRate, 2)]#

%InlineCode{MonthsTilDlq}%: number of months a loan must be past due before considered delinquent

#CodeBlock[MonthsTilDlq = 3]#

%InlineCode{NextPmtDate}%: date the next payment is due

  • Equal to the Next Due date from the most recent Receipt

%InlineCode{AccInt}%: accrued interest

  • Can have up to four months of interest accrued here
    • 1 month of non-delinquent interest
    • 3 months of delinquent interest

%InlineCode{SvcFee}%: service fees

%InlineCode{UncolInt}%: uncollectible interest

  • Interest accrued once the loan enters non-accrual status (ie, more than 3 months past due)

%InlineCode{SvcFee90}%: service fees unlikely to be owed

  • Service fees accrued once the loan enters non-accrual status

IF the number of months between the current month and the %InlineCode{NextPmtDate}% is greater than or equal to %InlineCode{MonthsTilDlq}% THEN:

  • Loan is in non-accrual status this month

#CodeBlock[UncolInt = UncolInt + IntAccrued]#

#CodeBlock[SvcFee90 = SvcFee90 + ServiceFees]#

OTHERWISE:

  • Loan is accruing interest this month

#CodeBlock[AccInt = AccInt + IntAccrued]#

#CodeBlock[SvcFee = SvcFee + ServiceFees]#

If we have not reached the %InlineCode{EndDate}% return to Determine Current Date to Use

  • loan_mgmt/calculate_accruals.txt
  • Last modified: 2016/01/04 21:29 UTC
  • by mwolfe