This worked example follows one project across five periods to show how Percent-of-Cost-Complete revenue recognition, over/under billing, retainage, and projection changes flow through the general ledger — and how everything nets to zero when the job closes. For the concepts behind it, see Revenue Recognition and WIP.
Project setup: $100,000 contract, $80,000 budget, 10% retention, 5 periods of activity.
| Period | Month | Proj. Revenue | Proj. Cost | Progress Billings | AR (Net of Ret.) | Unbilled Retentions | Billed to Date | Cost to Date | Revenue This Period | Earned Revenue (To Date) | (Over)/Under Billed |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | — | $100,000 | $80,000 | $0 | — | $0 | $0 | $0 | $0 | $0 | $0 |
| 1 | July | $100,000 | $80,000 | $10,000 | $9,000 | $1,000 | $10,000 | $2,000 | $2,500 | $2,500 | −$6,500 |
| 2 | August | $100,000 | $80,000 | $5,000 | $4,500 | $500 | $15,000 | $20,000 | $22,500 | $25,000 | $11,500 |
| 3 | September | $100,000 | $80,000 | $75,000 | $67,500 | $7,500 | $90,000 | $50,000 | $37,500 | $62,500 | −$18,500 |
| 4 | October | $100,000 | $75,000 | $10,000 | $9,000 | $1,000 | $100,000 | $70,000 | $30,833 | $93,333 | $3,333 |
| 5 | November | $100,000 | $70,000 | $0 | $10,000 | −$10,000 | $100,000 | $70,000 | $6,667 | $100,000 | $0 |
Note how Projected Cost is revised downward in Period 4 (to $75,000) and Period 5 (to $70,000) — this demonstrates how projection changes move % complete and earned revenue.
There are no GL impacts for creating the BlueCollar Project record.
Activity: $10,000 billed, $1,000 retention withheld, $2,000 costs incurred.
% Complete: $2,000 / $80,000 = 2.5% → Earned Revenue $100,000 × 2.5% = $2,500
| # | Type | GL Account | Debit | Credit |
|---|---|---|---|---|
| 1 | Receivable | Trade AR | $9,000 | |
| 1 | Billed Revenue | Sales | $9,000 | |
| 2 | Job Cost | Direct Costs | $2,000 | |
| 2 | Payable | AP | $2,000 | |
| 3 | Accrued Revenue | Over/Under Adj | $6,500 | |
| 3 | Over Billings | Billings in Excess | $6,500 | |
| 3 | Under Billings | Costs in Excess | $0 |
Revenue recognized this period: $2,500. (Over)/Under: −$6,500 (overbilled — contract liability). Retainage to date: $1,000.
Why: the invoice credited $9,000 to Sales, but only $2,500 has been earned. Entry 3 debits Over/Under Adjustment by $6,500 to bring income statement revenue down to the earned amount, with the offset to the over-billings liability — reflecting the obligation to perform work for money already received.
Activity: $5,000 billed, $500 retention withheld, $18,000 costs incurred.
% Complete: $20,000 / $80,000 = 25% → Earned to Date $25,000 → This Period $25,000 − $2,500 = $22,500
| # | Type | GL Account | Debit | Credit |
|---|---|---|---|---|
| 4 | Receivable | Trade AR | $4,500 | |
| 4 | Billed Revenue | Sales | $4,500 | |
| 5 | Job Cost | Direct Costs | $18,000 | |
| 5 | Payable | AP | $18,000 | |
| 6 | Accrued Revenue | Over/Under Adj | $18,000 | |
| 6 | Over Billings | Billings in Excess | $6,500 | |
| 6 | Under Billings | Costs in Excess | $11,500 |
Revenue recognized this period: $22,500. (Over)/Under: $11,500 (underbilled — contract asset). Retainage to date: $1,500.
Entry 6 does three things at once: posts the revenue pick-up from the higher % complete, removes the prior period's $6,500 over-billings position, and posts the new $11,500 under-billings position — all automatically.
Activity: $75,000 billed, $7,500 retention withheld, $30,000 costs incurred.
% Complete: $50,000 / $80,000 = 62.5% → Earned to Date $62,500 → This Period $37,500
| # | Type | GL Account | Debit | Credit |
|---|---|---|---|---|
| 7 | Receivable | Trade AR | $67,500 | |
| 7 | Billed Revenue | Sales | $67,500 | |
| 8 | Job Cost | Direct Costs | $30,000 | |
| 8 | Payable | AP | $30,000 | |
| 9 | Accrued Revenue | Over/Under Adj | $30,000 | |
| 9 | Over Billings | Billings in Excess | $18,500 | |
| 9 | Under Billings | Costs in Excess | $11,500 |
Revenue recognized this period: $37,500. (Over)/Under: −$18,500 (overbilled). Retainage to date: $9,000.
Entry 9: reverses the prior under-billings of $11,500, posts the new over-billings of $18,500; the $30,000 adjustment nets with the $67,500 invoice to leave the correct $37,500 earned this period.
Activity: $10,000 billed, $1,000 retention withheld, $20,000 costs incurred. Projected Cost revised down to $75,000.
% Complete: $70,000 / $75,000 = 93.33% → Earned to Date $93,333 → This Period $30,833
| # | Type | GL Account | Debit | Credit |
|---|---|---|---|---|
| 10 | Receivable | Trade AR | $9,000 | |
| 10 | Billed Revenue | Sales | $9,000 | |
| 11 | Job Cost | Direct Costs | $20,000 | |
| 11 | Payable | AP | $20,000 | |
| 12 | Accrued Revenue | Over/Under Adj | $21,833 | |
| 12 | Over Billings | Billings in Excess | $18,500 | |
| 12 | Under Billings | Costs in Excess | $3,333 |
Revenue recognized this period: $30,833. (Over)/Under: $3,333 (underbilled). Retainage to date: $10,000.
Entry 12: reverses the prior over-billings of $18,500, posts the new under-billings of $3,333, and credits Over/Under Adjustment by $21,833 to pick up the extra earned revenue from both the cost incurred and the downward projection revision.
Activity: No new billings or costs. Retainage of $10,000 is released and invoiced. Projected Cost revised to $70,000 (final actual).
% Complete: $70,000 / $70,000 = 100% → Earned to Date $100,000 → This Period $6,667
| # | Type | GL Account | Debit | Credit |
|---|---|---|---|---|
| 13 | Receivable | Trade AR | $10,000 | |
| 13 | Billed Revenue | Sales | $10,000 | |
| 14 | Job Cost | Direct Costs | $0 | |
| 14 | Payable | AP | $0 | |
| 15 | Accrued Revenue | Over/Under Adj | $3,333 | |
| 15 | Over Billings | Billings in Excess | $0 | |
| 15 | Under Billings | Costs in Excess | $3,333 |
Revenue recognized this period: $6,667. (Over)/Under: $0 (fully closed). Retainage to date: $0.
Period 5: the retainage invoice debits AR and credits Sales for $10,000 (consideration now unconditional). The credit to Costs in Excess eliminates the remaining under-billings balance, and the debit to Over/Under Adjustment offsets the revenue impact of the retainage invoice plus the final projection adjustment. The retainage invoice is created in the BlueCollar billing tool, and the final adjustment is run with the Revenue Recognition tool — the retainage invoice impacts rev rec once billed, so the rev rec tool must be run to clear it.
| Category | July | August | September | October | November | Total |
|---|---|---|---|---|---|---|
| Receivable | $9,000 | $4,500 | $67,500 | $9,000 | $10,000 | $100,000 |
| Billed Revenue | −$9,000 | −$4,500 | −$67,500 | −$9,000 | −$10,000 | −$100,000 |
| Accrued Revenue | $6,500 | −$18,000 | $30,000 | −$21,833 | $3,333 | $0 |
| Job Cost | $2,000 | $18,000 | $30,000 | $20,000 | $0 | $70,000 |
| Payable | −$2,000 | −$18,000 | −$30,000 | −$20,000 | $0 | −$70,000 |
| Over Billings | −$6,500 | $6,500 | −$18,500 | $18,500 | $0 | $0 |
| Under Billings | $0 | $11,500 | −$11,500 | $3,333 | −$3,333 | $0 |
| Period Total | $0 | $0 | $0 | $0 | $0 | $0 |
The over/under billing accounts net to zero across the lifecycle. Total revenue equals the $100,000 contract; total cost equals $70,000 actual; profit is $30,000.