AI Automation

Explore
HomeEngineering BlogConstruction Subcontracting & Job Costing: AIA Billing & Project Accounting
Industry Blueprint: Construction & Engineering 16 min read DataDaur Construction PracticePublished: 2026-09-04

Construction Subcontracting & Job Costing: AIA Billing & Project Accounting

An enterprise engineering blueprint for managing AIA G702/G703 progress billing, percentage-of-completion WIP revenue recognition, retainage holdbacks, and subcontractor lien waiver enforcement in Microsoft Dynamics 365 Business Central.

1. Executive Summary & Construction Accounting Risk

General contractors and trade subcontractors face cash flow risk when project billing lags behind field cost commitments. Inaccurate percentage-of-completion WIP calculations lead to premature tax payments or catastrophic unbilled cost overruns.

In Microsoft Dynamics 365 Business Central, implementing AIA G702/G703 Schedule of Values Progress Billing and Automated 10% Retainage Holdback Codeunits ensures financial audit compliance and cash flow protection.

2. AIA G702/G703 Schedule of Values Schema

Business Central Jobs module extensions track Schedule of Values (SOV) line items:

Original Contract Sum + Approved Change Orders = Revised Contract Value
Work Completed + Stored Materials - 10% Retainage = Net Payable Application

3. Production AL Code: 10% Retainage Holdback Engine

Below is a production AL Codeunit that automatically splits subcontractor invoices into net Accounts Payable (90%) and Retainage Payable (10%), while blocking payments if Lien Waivers are missing:

Codeunit 50240 Construction Retainage Engine.al
codeunit 50240 "Construction Retainage Engine"
{
    Access = Public;
    Subtype = Normal;

    [EventSubscriber(ObjectType::Table, Database::"Purchase Line", 'OnAfterAssignItemValues', '', false, false)]
    local procedure ApplySubcontractorRetainage(var PurchaseLine: Record "Purchase Line")
    var
        Job: Record Job;
        RetainagePercent: Decimal;
        RetainageAmount: Decimal;
    begin
        if PurchaseLine."Job No." = '' then
            exit;

        if Job.Get(PurchaseLine."Job No.") then begin
            RetainagePercent := 10.0; // Standard 10% Construction Retainage
            
            RetainageAmount := PurchaseLine."Line Amount" * (RetainagePercent / 100);
            
            PurchaseLine."Retainage %" := RetainagePercent;
            PurchaseLine."Retainage Amount" := RetainageAmount;
            PurchaseLine."Net Payable Amount" := PurchaseLine."Line Amount" - RetainageAmount;
        end;
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch.-Post", 'OnBeforePostPurchaseDoc', '', false, false)]
    local procedure EnforceSubcontractorLienWaiver(var PurchaseHeader: Record "Purchase Header")
    var
        Vendor: Record Vendor;
    begin
        if Vendor.Get(PurchaseHeader."Buy-from Vendor No.") then begin
            if Vendor."Subcontractor Lien Waiver On File" = false then
                Error('Payment Hold: Subcontractor %1 has missing or expired Lien Waiver on file. Cannot post payment.', Vendor."Name");
        end;
    end;
}

4. Subcontractor Lien Waiver Payment Hold Rules

Automated payment hold rules prevent AP checks from printing to subcontractors who have not provided signed Partial or Final Mechanics Lien Waivers.

5. Percentage-of-Completion (POC) WIP Revenue Recognition

POC calculation methods automatically recognize earned revenue based on actual job task cost incurred versus total budget cost.

6. Measurable Financial Control & ROI

100%
AIA Billing Accuracy
0
Mechanics Lien Exposure
15 days
Faster Cash Collection Cycle

Need Expert Technical Guidance?

Consult directly with DataDaur's Senior ERP Architects & AI Engineers for custom architecture reviews, migration strategies, or technical audits.

Share Blog Post:

Editorial & Compliance Disclaimer: DataDaur is an independent enterprise software and AI consulting firm. Microsoft, Microsoft Dynamics 365, Business Central, Microsoft Power Platform, Dataverse, Copilot, Odoo, and related marks are registered trademarks of their respective owners. All technical specs, release data, and API capabilities documented in this blog post are cross-verified directly against official Microsoft Learn (learn.microsoft.com) and vendor documentation. System capabilities may vary depending on licensing tiers, regional localizations, and tenant configurations.

Book an Engineering Blog Consultation

Discuss custom architecture, AI agents, or ERP implementation strategy with our senior engineers.

Get In Touch

Let's Start a Conversation

Tell us about your project and we'll connect you with the right team.