top of page

Issuing Tenant Late Fees in Business Central

A Real Estate Management Company needed a program to generate late fees per their lease agreements.

While Business Central has reminder and finance charge functionalities, they don't fit the strict requirements of real estate, where rent is due on the 1st and late fees are enforced strictly after a 5 to 10-day grace period.


Standard reminders and finance charges in Business Central typically operate on a 60-90 day cycle, which doesn't align with our client's need to enforce payments within days. To address this, we adapted the existing "Create Reminder" function to automatically generate a reminder and invoice for late fees if the tenant exceeds the grace period for paying their rent.


The following slides showcase this new functionality we developed for our client.


 

Two new fields were added to the Customer (Tenant) card for Late Fee Details


 

The first field is “Late Fee Days”. Enter the number of days after the 1st of the month that the rent can be paid without assessment of a late fee.


 

The second field is Late Fee Percentage which is the percent of the past due amount that is assessed as a late fee

 

Here you see the Late Fee Details filled in with five days and late fee percentage of 2%

Drill into the Balance and locate a Ledger Entry on which you will be creating a late fee


 

We repurposed the Business Central “Create Reminder” Action to create a late fee invoice which will be applied against the highlighted Ledger line invoice 104092.


 

A Reminder ALONG WITH AN INVOICE FOR 2% of the previously highlighted ledger entry will be created for this tenant.


 

We modified the Create Reminder process to add a 2% late fee to the customer’s (Tenant) account. Now we need to ISSUE the Reminder/Invoice.


 

Issuing a Reminder will bill the Tenant a Late Fee of $210.25


 

The Tenant will receive this Late Fee invoice adding 2% to their July 1, 2024 invoice.


 

The Customer Ledger Entries show the Reminder adding a late fee of $210.25


 

The Balance was increased by the amount of the late fee $210.25


Prior Balance of $11,291.56 + Late Fee of $210.25  = New Balance of $11,501.81


 

Benefits and ROI of Custom Late Fee Functionality in Microsoft Dynamics 365 Business Central


Enhanced Cash Flow and Timely Payments

Implementing our custom late fee functionality in Business Central has provided significant benefits to our client by:

Accelerating Cash Flow: By enforcing strict late fee policies, tenants are incentivized to pay their rent promptly, improving overall cash flow.


Efficiency Gains: Automated late fee invoicing reduces manual effort, allowing the client to focus on core business activities.


Improved Financial Management: Real-time updates and immediate late fee assessments ensure accurate and up-to-date financial records.


Tenant Accountability: Clear and consistent enforcement of lease terms encourages tenants to adhere to payment schedules, reducing late payments and potential disputes.

This modification not only streamlines operations but also ensures financial stability and growth for our client, reflecting a high return on investment for the development work undertaken.


 

And here is the Visual Studio Code for this project

codeunit 80106 "LateFee Sub"
{
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Reminder-Make", 'OnAfterFilterCustLedgEntryReminderLevel', '', true, true)]
    local procedure OnAfterFilterCustLedgEntryReminderLevel(var CustLedgerEntry: Record "Cust. Ledger Entry";
     var ReminderLevel: Record "Reminder Level";
     ReminderTerms: Record "Reminder Terms"; Customer: Record Customer; ReminderHeaderReq: Record "Reminder Header";
      ReminderHeader: Record "Reminder Header")
    begin
        CustLedgerEntry.SetRange("Due Date", (CalcDate('<-CM>', WorkDate())), (CalcDate('<CM>', WorkDate())));
    end;

    [EventSubscriber(ObjectType::Table, database::"Reminder Header", 'OnInsertLinesOnBeforeValidateAmount', '', true, true)]
    local procedure OnInsertLinesOnBeforeValidateAmount(var ReminderHeader: Record "Reminder Header";
     var ReminderLine: Record "Reminder Line";
     var IsHandled: Boolean)
    begin
        ReminderLine.Description := 'Late Fee';
    end;

}
  • Pag-Ext80100.CustomerCardExt.al

pageextension 80100 CustomerCardExt extends "Customer Card"
{

    layout
    {
       addafter(General)
        {
                        group("Late Fee Details")
                        {
                            field("Late Fee Days"; Rec."Due Date Grace Period")
                            {
                                Caption = 'Late Fee Days';
                                ToolTip = 'Specify the Late Fee Days';
                                ApplicationArea = all;
                                ShowMandatory = true;
                            }
                            field("Late Fee Percentage"; Rec."Late Fee %")
                            {
                                Caption = 'Late Fee Percentage';
                                ToolTip = 'Specify the Late Fee Percentage';
                                ApplicationArea = all;
                                ShowMandatory = true;
                            }
                        }

                    

       }

   }
}
  • Tab-Ext80100.CustomerExt.al

tableextension 80000 CustomerExt extends Customer
{
    fields
    {
        field(80000; "Due Date Grace Period"; DateFormula)
        {
            Caption = 'Due Date Grace Period';
        }

        field(80001; "Late Fee %"; Decimal)
        {
            Caption = 'Late Fee %';
            MaxValue = 100;
            MinValue = 0;
            trigger OnValidate()
            begin
                IF rec."Late Fee %" > 0 then begin
                    TestField(rec."Due Date Grace Period");
                end;
            end;
        }
}
 



Comments


Recent Posts
Archive
Search By Tags
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page