In each tran code, the user has the ability to choose from many different penalty and interest calculation methods.  These letters enable GovCollect to calculate in different methods.

Be sure and watch the Setting up Penalty and Interest videos to learn more.

A user can setup 2 separate penalties and 1 interest method PER tran code.

PENALTY 1 SELECTED METHOD IS USED FOR PENALTY 1 AND THE DESIRED STYLE OF INTEREST.  For example if you want MONTHLY Interest, then you would select M in the penalty 1 type field and that will tell the Interest to be applied monthly.

The most common methods are:
P - Flat one time charged penalty based upon the amount in the NORMAL field on a CHARGE.
B -  Flat one time charged penalty based upon the amount in the GROSS field on a CHARGE. (Balance)
M - Monthly

The list below describes some custom codes that can be used and the calculation behind each code.

 

Penalty Type 2 = "N"

tranctl->pen2_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

Changes to the first of the month therafter

Formula:

Penalty = (((TRAN->DISCOUNT + TRAN->NORMAL) * (Months Count * (TRANCTL->PEN2_P_A) / 12)))

Penalty Maximum = (((TRAN->DISCOUNT + TRAN->NORMAL) * ((TRANCTL->PEN2_MAX))))


Penalty Type 2 = "n"

tranctl->pen2_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

Stays on that date each month therafter

Formula:

Penalty = (((TRAN->DISCOUNT + TRAN->NORMAL) * (Months Count * (TRANCTL->PEN2_P_A) / 12)))

Penalty Maximum = (((TRAN->DISCOUNT + TRAN->NORMAL) * ((TRANCTL->PEN2_MAX))))


Penalty Type 2 = "O"

tranctl->pen2_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

No Day of Month

Formula:

Penalty = (((TRAN->DISCOUNT + TRAN->NORMAL - TRAN->PAYMENT) * (Months Count * (TRANCTL->PEN2_P_A) / 12)))

Penalty  Maximum = (((TRAN->DISCOUNT + TRAN->NORMAL - TRAN->PAYMENT) * ((TRANCTL->PEN2_MAX))))


Penalty Type 2 = "Q"

tranctl->pen2_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

No Day of Month

Formula:

Penalty = ((((TRAN->DISCOUNT + TRAN->NORMAL - TRAN->PAYMENT) / 12) * (Months Count * (TRANCTL->PEN2_P_A) / 12)))

Penalty Maximum = ((((TRAN->DISCOUNT + TRAN->NORMAL - TRAN->PAYMENT) / 12) * ((TRANCTL->PEN2_MAX))))


Penalty Type 1 = "L"

tranctl->int_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

No Day of Month

Formula:

Interest = (((TRAN->USAGE) * (MD_count * (PROPERTY->INTEREST_RATE) / 12)))

If Interest is greater than (TRAN->NORMAL + (TRAN->ADJUSTMENT * -1))

Interest = Interest - (TRAN->NORMAL + (TRAN->ADJUSTMENT * -1))


Penalty Type 1 = "M"

tranctl->int_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

Changes to the first of the month therafter

Formula:

Interest = (((TRAN->DISCOUNT + TRAN->NORMAL) * (MD_count * (TRANCTL->INT_RATE) / 12)))


Penalty Type 1 = "m"

tranctl->int_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

Stays on that date each month therafter

Formula:

Interest = (((TRAN->DISCOUNT + TRAN->NORMAL) * (MD_count * (TRANCTL->INT_RATE) / 12)))


Penalty Type 1 = "H"

tranctl->int_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

Stays on that date each month therafter

Formula:

Interest = (((TRAN->DISCOUNT + TRAN->NORMAL - TRAN->PAYMENT) * (MD_count * (TRANCTL->INT_RATE) / 12)))


Penalty Type 1 = "D" (Double)

tranctl->int_days <= days .and. effdate > tran->date_past

Monthly starting on date becoming past due and days expired

No Day of Month

Formula:

Interest = (((TRAN->DISCOUNT + TRAN->NORMAL + TRAN->PENALTY - TRAN->PAYMENT) * (MD_count * (TRANCTL->INT_RATE) / 12)))


Penalty Type 2 = "T" (Texas)

Montgomery Alabama Discount

On tran code setup in tranctl

LG4 = True

Montgomery Alabama Penalty

On tran code setup in tranctl

LG5 = true and effdate > tran->date_past and tran->pen1_tc = empty


Special V code for Virginia Christiansburg

/////////////////////////////////////////////////////////////////////////////////

//Virginia

/////////////////////////////////////////////////////////////////////////////////

 

   IF TRANCTL->PEN2_TYPE = "V"

   MD_s_month = month(TRAN->DATE_DUE + (TRANCTL->PEN2_DAYS - 1))

   md_s_date = tran->date_due + (tranctl->pen2_days - 1)

 

   md_s_day = day(md_s_date)

   md_s_year = year(md_s_date)

   md_a_date = md_s_date

   md_count = 0

   days_gap = days - tranctl->pen2_days

   //  ?"S Date ",md_s_date,"  A Date ",md_a_date

   //  ?"Gap ",days_gap," ",md_s_date + days_gap

    for md = 0 to days_gap  //calculate gap in months

   md_s_date = md_s_date + 1

  

  if md_s_date >= md_a_date

   md_count++

   md_s_month++

   if md_s_month > 12

    md_s_month = 01

   md_s_year++

   endif

   xDate = ltrim(str(md_s_month))

   xDate += "/"

   //xDate += "01"

   xDate += ltrim(str(md_s_day))

   xDate += "/"

    xDate += ltrim(str(md_s_year))

   md_a_date = ctod(xDate)

   //  ?"S Date ",md_s_date,"  A Date ",md_a_date

   endif

   next

   //  ?"S Date ",md_s_date,"  A Date ",md_a_date

   //  ?"Months "+md_count

 

   vAmount = (TRAN->DISCOUNT + TRAN->NORMAL) * .10

 

   if md_count > 1

  

  md_count--

 

   vAmount += (((TRAN->DISCOUNT + TRAN->NORMAL) * (MD_count * (TRANCTL->PEN2_P_A) / 12)))

 

   endif

 

   replace tran->penalty with vAmount

   

  PEN_MAX = (((TRAN->DISCOUNT + TRAN->NORMAL) * ((TRANCTL->PEN2_MAX))))

  

  if tran->penalty > pen_max

    replace tran->penalty with pen_max

   endif

 

   if tranctl->pen2_min > 0 and tran->penalty < tranctl->pen2_min

   replace tran->penalty with tranctl->pen2_min

   endif

 

   if tran->penalty > tran->normal

   replace tran->penalty with tran->normal

   endif

 

  

  endif

 

/////////////////////////////////////////////////////////////////////////////////////////