The Revenue Recognition tool calculates each contract's earned revenue and over/under billing position and posts the adjusting journals automatically — no manual math or journal entries required. For the underlying concepts, see Revenue Recognition and WIP.
Navigation: BlueCollar → Project Control Center → Revenue Recognition
The Accounting Period Start and Accounting Period End dropdowns fill within seconds even on very large accounts, and you can click Update before the initial load finishes; your results stay on screen when that load completes.
When a single run needs more than 20 journals, BlueCollar batches them automatically to stay within NetSuite processing limits.
Results respect NetSuite role-level segment restrictions: a role limited to specific Location, Class, or Department values sees only the contracts within those segments (see Global Permissions).
Save your preferred column layout as a custom View so the grid opens the way you like it every time. A view can be set as your default, kept private to you, or shared publicly with the team — so a controller and a project manager can each work from the columns that matter to them without reconfiguring the grid each visit.
When the Enable Period-Locked Revenue Recognition Workflow preference is turned on (see Prerequisites and Setup), the tool keeps revenue recognition tied to your accounting periods so journals always post to an explicit, controlled period rather than only by date:
This is an optional, opt-in workflow. With the preference off, the Through Date defaults to today, the period filter is independent, and the tool posts by Through Date exactly as before.
| Field | Meaning |
|---|---|
| Contract # / Project / Project Manager / Customer | Identifying details |
| Subsidiary / Department / Class / Location | Accounting segment values for the contract |
| Projected Contract | Total projected contract value at completion (drives earned revenue) |
| Projected Estimate | Total projected cost at completion |
| Current Contract | Current Contract value (Original + Change Orders) |
| Current Estimate | Current cost estimate |
| Actual Cost to Date | Costs incurred through the Through Date |
| Projected % Complete | Actual Cost to Date ÷ Projected Estimate (capped at 100%) |
| Revenue to Date | Cumulative revenue recognized in prior periods |
| Earned Revenue | Projected % Complete × Projected Contract |
| Revenue to Recognize | Earned Revenue − Revenue to Date |
| Billed to Date | Total invoiced to date |
| Unbilled Retentions | Retention withheld and not yet billed |
| (Over) Billing Balance | Billings in excess of earned revenue (contract liability) |
| Under Billing Balance | Earned revenue in excess of billings (contract asset) |
| (Over)/Under Billing | The net over/under billing position: Earned Revenue − (Billed to Date − Unbilled Retentions). Billings count net of unbilled retainage, so the position matches the ASC 606 contract asset/liability view. |
| Projected GP / Projected GP % | Projected Contract − Projected Estimate, and as a percentage of Projected Contract |
| Current GP / Current GP % | Current Contract − Current Estimate, and as a percentage of Current Contract |
| Actual GP / Actual GP % | Revenue to Date − Actual Cost to Date, and as a percentage of Revenue to Date |
| Grand Total | A summary row totaling the numeric columns |
A credit memo created from a contract invoice with the Credit button reduces Billed to Date and Unbilled Retentions in either mode. A credit memo entered directly against the project (no Created From) follows the Enable Standalone Credit Memo Contract and Billings preference: off (the default), the tool ignores it even though the memo has already reduced GL revenue; on, it lowers Current Contract, Projected Contract, Billed to Date and Unbilled Retentions, so Earned Revenue and (Over)/Under Billing recalculate. Turning the preference on is retroactive: journals already posted are not redone, and the next run posts the cumulative catch-up in the current period, so plan the switch at a period boundary. Credit memos linked to in-range invoices but posted after the Through Date or period no longer count, so the tool's Unbilled Retentions, Billed to Date and (Over)/Under Billing match the WIP Report. See Correcting Invoices with Credit Memos.
Each run uses a clearing mechanism so the balance sheet always reflects the correct net position without stale entries piling up:
| Account (example) | Type | Purpose |
|---|---|---|
| Trade AR | Asset | Receivable from invoices |
| Sales | Income | Billed revenue (from invoices) |
| Over/Under Adjustment | Income | The revenue recognition adjustment |
| Direct Costs | Expense | Job cost (bills, JEs, card transactions) |
| Accounts Payable | Liability | Payable for cost transactions |
| Costs in Excess of Billings | Asset | Under billings (contract asset) |
| Billings in Excess of Costs | Liability | Over billings (contract liability) |
| Entry type | How it's created |
|---|---|
| Invoices (AR / revenue) | The BlueCollar Billing tab — posts directly to the GL |
| Cost entries (job cost / AP) | Bills, credit-card transactions, or journal entries tagged to the project |
| Revenue adjustments (over/under) | The Revenue Recognition tool — never enter these manually |
| Retainage invoices | Created inside the BlueCollar billing tool — never manually |
To see all of this play out period by period with real numbers, see the Full Lifecycle Example.
The Revenue Recognition tool is available in English and French, following your NetSuite language preference.