Retainage is a percentage of each progress payment — commonly ten per cent — that the owner withholds until the job is complete. It is revenue you have earned and cannot collect, and it is the reason a construction business can be profitable on paper and short of cash in the same month.

Retainage as its own receivable

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;
}

Held in the general receivables balance, retainage distorts ageing, distorts collections, and makes the cash forecast wrong. In its own account it answers the question the business actually has: how much have we earned that is being held, on which jobs, and when is it releasable.

The same applies on the payable side. Retainage withheld from subcontractors is an obligation with a release condition, and it should be as visible to you as yours is to the owner.

Progress billing

The G702 is the application and certificate; the G703 is the continuation sheet behind it, line by line against the schedule of values. Each application restates everything to date: scheduled value, previously billed, billed this period, stored materials, retainage, balance to finish.

Built from the job ledger, that document is a report. Built by hand, it is a monthly reconstruction that is wrong often enough to delay payment — which in this industry is the expensive failure, because the payment funds the next month of work.

Lien waivers

ControlEnforced howRisk if it is not
Conditional waiver before paymentSystem hold on the payment runPaying a sub whose own suppliers can still lien the property.
Unconditional waiver after clearingDocument logged against the paymentNo evidence the claim was released.
Insurance certificate currencyExpiry date checked at paymentAn uninsured sub on site, discovered after an incident.
Every one of these is enforceable by the system at the moment of payment. Enforced by a person with a checklist, they hold until the week the schedule is tight.

Percentage-of-completion

Revenue is recognised as cost incurred divided by estimated total cost. The estimate is a judgement made by people who are also responsible for the job's result, and revising it upward restates revenue already recognised.

Two disciplines keep this honest: estimates are updated on a schedule and not when convenient, and the revision history is retained. A cost-to-complete that only moves at quarter end is a number being managed, not measured.

Job cost, live

Committed cost — issued purchase orders and subcontracts — belongs in the job view alongside actuals. A project manager looking only at posted costs sees a position that is weeks stale and consistently better than reality.