Projects, WIP & Revenue Recognition
Raise project invoices in billing runs, recognise revenue, carry unbilled work at cost, and post and repay expense claims.
Billing Runs and Project Invoices
A billing run turns a project's approved work into a draft sales invoice: approved time and rechargeable expenses at their captured bill rates, and any billing events that are due. You can bill one project from its own workspace, or every project in a company in one run from the portfolio.
Where to find it
Architect Panel → ERP - Projects & Time:
- Projects & Time — the console: the portfolio's Billing run panel and each project's Billing section
- Billing Plans — the plans a run bills from
Admin Panel → Projects & Time:
- Projects & Time — the same console for project managers and finance staff
Before you start
- A billing plan on each project (see Time, Expenses & Projects). Projects without one are counted under No billing plan and never billed.
- Approved work. Only approved time and expenses are billed; submitted or draft time is invisible to billing however many hours it holds.
- A sales document type named under Invoice as on the plan.
- The right roles. Raising invoices needs ERP: Projects or ERP: Finance, and post access to the company. Anyone else can preview but not raise.
Billing one project
- Open the project from the Portfolio and go to Billing.
- Under Raise an invoice, set Bill work up to and click Preview the invoice.
- Check the lines under What this invoice will contain. On a capped plan the preview shows the cap, what has been billed so far and the room left.
- Choose the document type under Raise as and click Raise this invoice, then Raise invoice to confirm.
The invoice is created as a draft document. The time, expenses and events on it are marked invoiced so they are never billed twice.
Billing every project at once
- On the Portfolio tab, click Billing run….
- Enter Bill work up to and click Preview. Each project with a plan shows what it would bill, with notes such as a cap being reached.
- Untick any project you do not want to bill. Projects with nothing to bill cannot be ticked.
- Click Raise N invoices… and then Raise the invoices. One invoice is raised per project, each in its plan's currency.
- The result lists every invoice as Raised or Not raised with the reason. Click an invoice number to open it.
The invoices are ready to check and post on the Receivables desk; posting them is covered in the order-to-cash documentation under Transactional Documents.
Correcting a run
Each event in the project's billing list shows its invoice and that invoice's status:
- Undo this run appears while the invoice is still a draft. Confirming with Cancel the draft and release cancels the draft and puts the time, expenses and events back into work in progress, ready to bill again.
- Release the work appears when the invoice was deleted or cancelled but its work is still marked invoiced. It returns that work to work in progress.
For sales document types that existed when the release patch ran, cancelling or voiding the invoice on its own screen releases the work automatically. A sales document type added later needs the same posting row (engine Projects, action releasebilling) on the document type; until it has one, use Release the work.
What goes wrong
- A project shows Nothing to bill: no approved work up to the date, or a capped plan has reached its cap. Approved time above the cap stays unbilled and the preview says how much.
- "You need posting access to this company to raise invoices": ask an ERP administrator for post access on the company.
- A week cannot be reopened for correction: a week with invoiced time cannot be reopened. Credit the invoice first.
- Approved time from over 45 days ago is still unbilled: the project's health check flags it. Run billing more often.
Worked example
At month end the finance controller opens Projects & Time for the UK company, clicks Billing run… and previews work up to 30 September. Eleven of fourteen projects are ready; one capped project has reached its cap and two have no plan. They leave all eleven ticked and raise them. One invoice comes back with the wrong client reference, so the project manager uses Undo this run on that project's Billing section, corrects the plan's Invoice to, and raises it again.
Recommendations
- Preview before every run and read the notes column, not just the totals.
- Clear approvals first, so the run bills everything that was worked.
- Use Undo this run while the invoice is a draft rather than editing the invoice by hand.
- Run billing at least monthly so no approved time ages past the 45-day health warning.
Revenue Recognition
Revenue recognition decides how much of a project's contract has been earned at a date, compares it with what has been billed, and posts the difference to the ledger as accrued revenue (earned, not yet billed) or deferred income (billed ahead of the work). Use it so the profit and loss shows what a project earned in the month, not just what happened to be invoiced.
Where to find it
Architect Panel → ERP - Projects & Time:
- Projects & Time — each project's Revenue section, and the recognition accounts on Rates & settings
- Revenue Recognition Settings — the per-company accounts recognition posts to
- Revenue Recognition Runs — every run per billing plan, with the journal it posted (read-only in practice)
Admin Panel → Projects & Time:
- Projects & Time — the same console for project managers and finance staff
The methods
The method is chosen on the project's billing plan under Revenue recognition:
- As invoiced: revenue equals what has been billed. No accrual or deferral arises.
- As work is performed (time and materials): billed to date, plus approved unbilled time at bill rates, plus rebillable expenses. On a capped plan it stops at the cap.
- Percentage of completion: cost to date divided by the estimated cost (the project's cost budget), times the contract value. Rebillable expenses are left out of both sides, because they are recharged at cost on their own lines.
- On milestone delivery: the value of milestones achieved by the date.
- Straight line over the plan: days elapsed between the plan's start and end, times the contract value.
- On completion: nothing until you mark the contract complete, then the whole contract value.
Setting up the accounts
- Open Projects & Time, choose the company and go to Rates & settings.
- In Project accounting: recognition, WIP and expense claims, choose Revenue (an income account), Accrued income (an asset) and Deferred income (a liability). All three are required.
- Optionally set a Journal type (up to 16 letters or digits, for example RR) so recognition journals can be numbered and filtered.
- Click Save accounts. Saving needs post access to the company.
The card shows Set for this company, Using the group settings or Not set - recognition cannot post. A plan can name its own accounts under Revenue recognition accounts for this plan (optional); empty uses the company setting. Billing-run invoices are credited to the same revenue account, so invoices and recognition meet on one account.
Running recognition for a project
- Open the project and go to Revenue. The card shows the method and the accounts it will use.
- Set As at and click Calculate.
- Read the result: Recognised to date, Billed to date, the accrued or deferred balance, a sentence explaining the basis, and the Journal this run would post.
- Click Post recognition and confirm with Post. If nothing has moved since the last run, the button reads Record this run and no journal is posted.
The History table lists every run with its percentage complete, recognised, billed, the change, the accrued and deferred balances, and the journal. For On completion, the Revenue section also offers Mark contract complete with a completion date, and Reopen to undo it.
Running it every month automatically
The scheduled task Revenue Recognition (month end) recognises every plan that has a method, in every company, as at the last day of the previous month. It ships disabled; the hosting administrator or an architect switches it on in the platform's scheduled tasks (see Scheduling). Because runs only move forward and a repeat with the same date is refused, a daily schedule posts once a month.
What goes wrong
- "Runs must move forward in time": a later run already exists. To correct a run, reverse its journal in the ledger.
- "Percentage of completion needs a cost budget for the project" or "needs a contract value (or a fixed price) on the plan": add the budget or the value.
- "Straight-line recognition needs the plan's start and end dates": set them on the billing plan.
- Cost to date is over budget: a warning says the estimate has been raised to cost to date. Re-forecast the budget, or the percentage complete stays at 100%.
- Post recognition is disabled: an account is missing, or you lack post access or the ERP: Projects or ERP: Finance role.
Worked example
A fixed-price project has a contract value of 120,000, a cost budget of 80,000 and recognition by percentage of completion. At 31 October cost to date is 30,000, so it is 37.5% complete and 45,000 is earned. Two instalments of 30,000 have been billed, so 60,000 is billed and 15,000 is deferred income. The run posts the change in the deferred balance against revenue, and the History row shows the journal number.
Recommendations
- Set the company accounts once and let plans inherit them unless a contract needs its own.
- Calculate before you post and read the basis sentence.
- Keep the cost budget current on percentage-of-completion projects.
- Switch on the month-end task once a month's manual runs agree with your expectations.
Project WIP at Cost
Approved, billable work that has not been invoiced yet is work in progress. For projects whose revenue is recognised as invoiced, at milestones or on completion, its cost can be carried on the balance sheet until it is billed, so the month's profit and loss is not hit by cost whose revenue arrives next month. Value WIP on the Projects & Time console works this out and posts the change.
Where to find it
Architect Panel → ERP - Projects & Time:
- Projects & Time — the console: Value WIP on the Portfolio tab, the WIP accounts on Rates & settings
- Revenue Recognition Settings — the per-company accounts, including Project WIP and WIP absorbed
Admin Panel → Projects & Time:
- Projects & Time — the same console for finance staff and project managers
Which projects are included
- Carried: plans recognised As invoiced, On milestone delivery or On completion. Their unbilled cost would otherwise sit in profit and loss with no matching revenue.
- Not carried: plans recognised as performed, by percentage of completion or on a straight line. Their unbilled work is already accrued income at bill rate (see Projects, WIP & Revenue Recognition), so carrying the cost as well would count it twice.
- Limited: WIP is never carried above what can still be billed: a capped plan's headroom, the unbilled work at bill rates, or a contract's unbilled value. Any excess is shown as written down.
This is project WIP. It is separate from manufacturing work in progress, which the stock settings hold on their own WIP account; keep the two on different accounts.
Setting up the accounts
- Open Projects & Time, choose the company and go to Rates & settings.
- In Project accounting: recognition, WIP and expense claims, choose Project WIP (an asset account carrying the cost of approved, unbilled work) and WIP absorbed (the profit and loss account the cost moves out of while it is WIP).
- Click Save accounts. Give both WIP accounts or neither; with neither, WIP is not valued. WIP absorbed must be a different account from Project WIP.
Valuing and posting WIP
- On the Portfolio tab, click Value WIP….
- Set Value as at (it defaults to the end of last month) and click Preview.
- Read the three figures: WIP at cost (what should be carried), On the WIP account (what the ledger carries now) and To post (the difference).
- Check the table: for each plan it shows the recognition method, Time at cost, Expenses, WIP and whether it is Carried, Limited or Not carried, with the reason.
- Click Post … to the ledger and confirm.
The journal posts only the change since the last valuation, dated at the valuation date: an increase is Dr Project WIP / Cr WIP absorbed, and a decrease releases WIP back to profit and loss. Value WIP at every month end and the WIP account always equals the current WIP.
What goes wrong
- "Set the … accounts for this company in Revenue Recognition Settings before posting WIP": the two WIP accounts are not set.
- No post button: either nothing has changed, or you lack post access to the company ("Posting needs post access to this company").
- A plan you expected is Not carried: check its revenue recognition method on the project's Billing section.
- WIP is written down: the cost of the work is more than can still be billed. That is a loss to look at, not a fault in the valuation.
Worked example
A support retainer is recognised as invoiced. At 30 September, 42 hours of approved, billable time have not been invoiced, costed at 1,890 at the consultants' cost rates. Value WIP as at 30 September shows WIP at cost 1,890, nothing on the WIP account, and 1,890 to post. The finance controller posts it. In October the time is invoiced, and the October valuation shows WIP at cost 0 and releases 1,890 back to profit and loss, in the same month as the revenue.
Recommendations
- Value WIP after the month's billing run, so only genuinely unbilled work is carried.
- Use the same valuation date every month, normally the last day of the month.
- Keep project WIP and manufacturing WIP on separate accounts.
- Investigate every write-down: it means a project is costing more than it can bill.
Expense Claims to the Ledger
An approved expense claim is a project cost straight away, but it only reaches the general ledger when finance posts it. Posting books the cost and any recoverable tax against employee expenses payable in the claimant's name; paying people back then clears that payable from a bank account. Both steps are on the Projects & Time console.
Where to find it
Architect Panel → ERP - Projects & Time:
- Projects & Time — the console: Post expense claims on the Portfolio tab, the accounts and expense categories on Rates & settings
- Expenses — every claim, with the journal that posted it and the journal that paid it back
Architect Panel → ERP - Reference Data:
- Expense Categories — what a claim can be for
Admin Panel → Projects & Time:
- Projects & Time — the same console for finance staff
Setting up
- On Rates & settings, in Project accounting: recognition, WIP and expense claims, choose Employee expenses payable (the liability claims are owed on until people are paid back) and Default expense account (where a claim is charged when its category names no account). Click Save accounts.
- In the Expense categories card on the same tab, give each category its own expense account and click Save on that row. A category left on Company default uses the default expense account.
- Make sure the company has a bank account in the ledger to pay from.
Posting and paying need ERP: Projects or ERP: Finance, and post access to the company.
Posting approved claims
- On the Portfolio tab, click Post expense claims….
- Set Claims up to (it defaults to the end of last month) and click Preview.
- Check the figures: Claims to post, Owed to people and the tax recovered. The table lists each approved claim not yet posted with its date, person, category, account, tax code, tax, gross, receipt and status. A claim that cannot be posted says why.
- Click Post N claims and confirm with Post claims.
One journal per company is posted, dated at the date you chose:
- Dr the expense account (the category's own, else the company default) with the net amount and its tax code.
- Dr the tax code's input tax account with the tax shown on the receipt, where it matches a recoverable tax code.
- Cr employee expenses payable with the gross, in the name of each claimant.
Each claim is stamped with the journal, so it is never posted twice.
Paying people back
- In the Pay people back card below, set Payment date, choose Pay from (the bank account) and click Show what is owed.
- The table lists each person with the number of claims, the oldest claim and the amount owed.
- Click Pay on a person, or Pay everyone, and confirm with Pay.
One journal debits employee expenses payable and credits the bank account, and the claims it covers are marked paid. Each claim is paid once only. Claims not yet posted counts approved claims still waiting; post them first.
What goes wrong
- "Set the … account on Rates & settings before posting claims": the payable or default expense account is missing.
- "No expense account - set the company's default expense account.": a claim's category has no account and there is no default.
- "Choose the bank account the claims are paid from.": pick one under Pay from.
- "Nobody is owed for posted claims up to …": everything posted is already paid, or the claims are not posted yet.
- A receipt shows Missing: the claimant did not attach one. Decide before approving, not at posting.
Worked example
On 3 October the finance controller posts claims up to 30 September. Fifteen approved claims are listed, 1,240.60 gross with 96.40 of VAT on rail and hotel receipts. They post them as one journal. They then open Pay people back, choose the main bank account, see four consultants owed and click Pay everyone. Each consultant's payable is cleared by one journal, and the claims show as paid.
Recommendations
- Give every expense category its own account so travel, subsistence and mileage land where your accountant expects.
- Post claims at each month end so the VAT return includes the input tax.
- Pay from the console, not by a hand journal, so each payment is matched to the claims it settles.
- Insist on receipts at approval; posting does not ask again.