BlueCollar Projects recognizes revenue using the Percent of Cost Complete (POC) method: revenue is earned in proportion to costs incurred relative to the total projected cost. This complies with ASC 606 — the standard governing revenue from contracts with customers — including its requirement to net contract assets and contract liabilities on a per-contract basis.
Revenue recognition is driven by two projection values maintained on each contract:
These are separate from Current Contract values (Original Contract + Change Orders). This is valuable because the contract value is your agreement with the owner, while the projections are your best estimate of where the job will actually land — and POC revenue should follow reality, not the original paperwork.
Under BlueCollar → Preferences → Global Preferences, configure:
| Setting | Purpose |
|---|---|
| Over Billings Account | Liability account for billings in excess of earned revenue. When billed revenue (net of retainage) exceeds earned revenue, the excess posts here. Zero at project completion. |
| Under Billings Account | Asset account for earned revenue in excess of billings. When earned revenue exceeds billings (net of retainage), the excess posts here. Zero at project completion. |
| Revenue Recognition Account | Income account credited when running rev rec journals (often a dedicated "accrued revenue" account). Its balance reflects the over/under position: negative = overbilled, positive = underbilled. |
A project will ever have a balance in the Over Billings account or the Under Billings account — never both. That's a direct consequence of the ASC 606 netting requirement, enforced automatically.
| Setting | Purpose |
|---|---|
| Set 100% Complete at $0 Projected Estimate | Some projects have revenue but no cost. By default a $0 projected estimate means 0% complete; enable this to treat it as 100% complete instead. |
| Exclude Contract Retainage from Actual Cost | For developers submitting bank draw requests — keeps subcontract retainage out of actual cost. |
| Enable Period-Locked Revenue Recognition Workflow | Ties revenue recognition to your accounting periods so journals always post to an explicit, controlled period. When enabled, the Revenue Recognition tool snaps the Through Date to the end of the open period, keeps the period filter in sync, and confirms the journal date — validated against closed accounting periods — before journals are created. See The Revenue Recognition Tool. |
Also: under Setup → Accounting → Accounting Preferences → Items/Transactions, associate a default account with the Contract/SOV record; and any account used as a "Cost Type" must have Available for Budgeting checked (see Chart of Accounts).
Projections drive revenue recognition, so keeping them current is critical. When a Sales Order is saved as a Contract, each line's projected values are populated automatically from the Current Contract — there's no approval step, and revenue recognition can begin immediately. You adjust projections in the Contract UI only when your best estimate of completion diverges from the contract, which keeps the over/under position honest without any manual setup on new contracts. (Older releases required approving initial projections first; that step has been removed — see the legacy note on Contract / Revenue Projections.) For the full picture, see Contracts.
The percent complete is based on cost (see Budget for how Actual Cost is tracked):
Projected % Complete = Actual Cost to Date ÷ Projected Estimate (capped at 100%)
Earned Revenue = Projected % Complete × Projected Contract
Revenue to Recognize = Earned Revenue − Revenue to Date
Over/Under Billing compares what's been earned to what's been billed (see Fixed Fee Billing):
Over/Under Billing = Earned Revenue − (Billed to Date − Unbilled Retentions)
Billings count net of unbilled retainage: retention your customer is withholding isn't yet billable consideration, so it belongs on the contract-asset side rather than in billings. That way the over/under position you see on screen lines up with the ASC 606 contract asset/liability netting described below.
For a step-by-step worked example across a full project lifecycle, see Full Lifecycle Example.
Under ASC 606, contract assets and contract liabilities for a single contract must be presented on a net basis — you cannot show both for the same contract. BlueCollar enforces this automatically (only the Over or Under Billings account carries a balance per project).
The netting treats retainage as a contract-asset component:
This treatment aligns with public-company disclosure practice in the construction industry, where contract assets and liabilities are reported in a net position with retentions included in contract assets.
Definitions:
Access is controlled through NetSuite roles and BlueCollar Global Permissions. Ensure the right users can run the Revenue Recognition tool, view the WIP Report, and approve/modify Contract Projections.
The Revenue Recognition tool and the WIP Report are available in English and French, following each user's NetSuite language preference.