Accounting in D365, Part 5: Contract to Close (Fixed-Price Projects : Kick-Off to Go-Live)
A fixed-price ERP implementation followed from contract to close in Dynamics 365 Finance & Operations: the business events, the documents in D365 and the vouchers they post.
Introduction
Not every business event becomes an entry in an ERP system, and not every ERP entry becomes a voucher in the general ledger.
Consider an ERP implementation project. A customer signs a contract, the project team runs Fit/Gap workshops, the solution design is approved, and the team eventually deploys the solution into production. These are business events. Some are recorded in Dynamics 365 Finance & Operations as project records, milestones or stage changes. Others trigger transactions that post to the general ledger.
The accounting becomes more interesting when the project is sold at a fixed price. The customer pays an agreed amount in stages, while the implementation team incurs cost every week. The billing schedule, the project cost, the revenue recognised and the customer collections do not happen at the same time, and D365 keeps each of them in its own accounts until the project is closed.
In this fifth part of the Accounting in D365 series, we follow an ERP implementation project from contract signature to project closure. For each business event, we look at the document or data entry in D365 and the accounting entry it generates, with the voucher as posted. The objective, as in the earlier parts, is to understand not only which transactions to post, but why they are posted and how they affect the financial statements.
Understanding the business scenario
ABC Ltd. (customer INMF-000009, Noida, Uttar Pradesh) engages INMF to implement Dynamics 365 Finance & Operations. The project is agreed at a fixed fee of INR 2,50,00,000 excluding GST, and runs from 01-10-2026 to 31-03-2027, including hypercare.
Particulars | Details |
|---|---|
Customer | ABC Ltd. (INMF-000009) |
Legal entity | INMF |
Project contract / project | INMF-000003 / INMF-000026 |
Project type | Fixed-price |
Project duration | 01-10-2026 to 31-03-2027 |
Contract value, excluding GST | 2,50,00,000.00 |
GST | IGST 18% (interstate supply) |
TDS deducted by customer | 10% of the invoice base, section 194J |
Billing arrangement | Advance and milestone-based |
Revenue recognition | Completed percentage, cost-to-cost |
Cost budget (hour forecast) | 1,77,74,000.00 |
This part is standalone. It does not carry forward the closing balances of Parts 1 to 4, so the trial balance and statements at the end show only the postings of this project.
Contractual payment terms
Milestone | Percentage | Amount excluding GST | Invoice date |
|---|---|---|---|
Advance at project kick-off | 25% | 62,50,000.00 | 11-10-2026 |
Activate (Fit/Gap Workshops sign-off) | 20% | 50,00,000.00 | 31-10-2026 |
Fit-Gap Design sign-off | 20% | 50,00,000.00 | 30-11-2026 |
UAT sign-off | 20% | 50,00,000.00 | 28-02-2027 |
Go-Live | 15% | 37,50,000.00 | 03-03-2027 |
Total | 100% | 2,50,00,000.00 |
These milestones decide when INMF can bill the customer. They do not, by themselves, decide how much revenue belongs to a period. That distinction is central to fixed-price project accounting.
Understanding the project lifecycle
The project cost is driven by the implementation activities. The work breakdown structure has one task for each activity:
WBS | Activity | Dates | Linked milestone |
|---|---|---|---|
1 | Project Plan & Kick Off | 01-10-2026 to 09-10-2026 | Advance |
2 | Environment Readiness | 05-10-2026 to 16-10-2026 | |
3 | Business Understanding Sessions | 12-10-2026 to 23-10-2026 | |
4 | Fit/Gap Workshops | 19-10-2026 to 30-10-2026 | Activate |
5 | Design | 02-11-2026 to 11-12-2026 | Fit-Gap Design sign-off |
6 | Development | 16-11-2026 to 22-01-2027 | |
7 | Master Data preparation (for UAT) | 04-01-2027 to 22-01-2027 | |
8 | UAT Server preparation | 18-01-2027 to 29-01-2027 | |
9 | UAT / CRP | 01-02-2027 to 26-02-2027 | UAT sign-off |
10 | Go Live preparation & Deployment | 22-02-2027 to 26-02-2027 | |
11 | Go Live | 01-03-2027 | Go-Live |
12 | Hyper Care | 02-03-2027 to 31-03-2027 |
The project team includes a project director, program and project managers, architects, functional and technical consultants and infrastructure specialists. Their time is recorded against these tasks and their role categories. A shadow consultant who joins for training records time on a separate internal project, INMF-000027, so that training effort is kept out of the revenue recognition of the contract.
How project accounting works in D365 F&O
In D365, a project groups transactions that record costs, and then posts those costs to the general ledger. For a fixed-price project, invoices consist of on-account transactions billed according to a billing schedule, and revenue can be calculated and posted throughout the project using the completed percentage method, or at completion using the completed contract method (Project management and accounting overview).
The transaction types used in this cycle are:
- Hour: consultants' time, recorded through timesheets or hour journals.
- On account: the scheduled milestone billings of the fixed-price project.
- Revenue recognition (estimate): the monthly calculation of revenue earned. In recent versions, estimates are labelled revenue recognition (Fixed price revenue estimate projects).
Customer payments are recorded in the accounts receivable payment journal, outside the project.
What decides the accounting
The ledger result of a project transaction is decided by the combination of transaction type, project category and category group, project group, line property and ledger posting setup (How project groups, categories and line properties determine project posting). The settings that matter for this project are:
Setting | Value in this build | Effect on accounting |
|---|---|---|
Project group | FP-IMPL (Fixed-price); INT-TRAIN (Internal) | Fixed-price revenue comes from the contract value, not from hours billed |
On-account invoicing | Balance | Milestone invoices credit WIP - invoiced on account, not revenue |
Post costs - hour | Profit and loss | Hour cost posts to Cost - hour |
Line property FP-IMPL | Chargeable; Accrue revenue No; Capitalize cost No | Hour cost is not held in WIP |
Revenue recognition rule | Completed percentage, matching principal Sales value | Revenue is recognized monthly in proportion to work done |
Cost template | FP-POC: completion based on cost amount; cost to complete = total forecast − actual | Completion % = actual cost to date ÷ forecast cost |
Forecast model | FP-BUDGET: 1,77,74,000.00 | The denominator of completion % |
Period code | PT (monthly) | One revenue recognition per month end |
The ledger posting setup maps each posting type to a main account:
Posting type | Main account | Used in this cycle |
|---|---|---|
Cost (category group HOUR-FP / INT-TRAIN) | 501001 Cost - hour / 501002 Cost - hour (internal project) | Yes |
Payroll allocation | 201121 Payroll allocation | Yes |
WIP - cost value | 160201 WIP - cost value - hour | No |
WIP - sales value | 160202 WIP - sales value | Yes |
Accrued revenue - sales value | 420200 Accrued revenue - sales value | Yes |
WIP - invoiced on-account | 160203 WIP - invoiced on-account | Yes |
Invoiced revenue - on-account | 420300 Invoiced revenue - on-account | No |
Business Event 1 — Project contract signed
ABC Ltd. signs the implementation agreement for 2,50,00,000.00 excluding GST.
In D365: project contract INMF-000003 is created with ABC Ltd. as the funding source (100%).
Does signing the contract generate a voucher? No. A project contract records the commercial terms and the funding source; it is not a general ledger transaction.
Accounting impact: none.
Business Event 2 — Project created and planned
INMF creates the project and prepares the work breakdown structure, the cost budget and the billing schedule.
In D365:
- Fixed-price project INMF-000026 in project group FP-IMPL, linked to contract INMF-000003, and internal project INMF-000027 in project group INT-TRAIN.
- Work breakdown structure with the 12 tasks listed in the project lifecycle above, published.
- Hour forecast for the model FP-BUDGET: the planned hours of each role at its cost price, 1,77,74,000.00 in total. The shadow consultant is not included.
- Five on-account transactions, one for each billing milestone, together equal to 2,50,00,000.00.
- Project stage changed from Created to “In process” at kick-off on 01-10-2026.
Does creating a project or entering a forecast generate a voucher? No. The forecast is a plan; it becomes important at each month end, when it is the denominator of the completion percentage.
Accounting impact: none.
Business Event 3 — Advance invoice raised
At kick-off, INMF becomes entitled to invoice 25% of the contract value.
Particulars | Amount (INR) |
|---|---|
Contract value | 2,50,00,000.00 |
Advance percentage | 25% |
Taxable invoice amount | 62,50,000.00 |
IGST at 18% | 11,25,000.00 |
Total customer invoice | 73,75,000.00 |
In D365: a project invoice proposal is created for the advance on-account transaction of project INMF-000026 and posted on 11-10-2026 (Project > Manage > Project invoice proposals). IGST is calculated from tax information on the on-account line.
Accounting entry (voucher INMF-180000000, 11-10-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
130100 Trade Receivables - Domestic | 73,75,000.00 | |
160203 WIP - invoiced on-account | 62,50,000.00 | |
223130 IGST payable | 11,25,000.00 | |
Total | 73,75,000.00 | 73,75,000.00 |
The credit goes to WIP - invoiced on-account, a balance sheet account, because on-account invoicing is set to Balance. The invoice records what has been billed; it does not recognise revenue. Revenue is left to the month-end revenue recognition.
Business Event 4 — Advance received from the customer
ABC Ltd. pays the advance invoice on 25-10-2026, deducting TDS at 10% of the taxable amount.
Particulars | Amount (INR) |
|---|---|
Gross invoice | 73,75,000.00 |
TDS deducted (10% of 62,50,000.00) | 6,25,000.00 |
Net bank receipt | 67,50,000.00 |
In D365: customer payment journal (Accounts receivable > Payments > Customer payment journal), settled against the advance invoice, with the TDS group on the line calculating the amount withheld.
Accounting entry (voucher INMF-CU000052, 25-10-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
110125 Bank Account - INR | 67,50,000.00 | |
132250 TDS Recoverable | 6,25,000.00 | |
130100 Trade Receivables - Domestic | 73,75,000.00 | |
Total | 73,75,000.00 | 73,75,000.00 |
The receipt settles the receivable. It does not create another 62,50,000.00 of revenue: the invoice and the collection are two separate transactions with different purposes.
Business Event 5 — Project team records its time
As the implementation progresses, consultants record their weekly hours against the project, the WBS activity and their role category: Business Understanding Sessions and Fit/Gap Workshops in October, design and development from November, master data and UAT in January and February, go-live and hypercare in March.
In D365: timesheets are entered for each resource, approved and posted (Project management and accounting > Timesheets > All timesheets); hours can also be posted through a project hour journal. Each hour is valued at the cost price of its category of, for example 5,000.00 an hour for the Project Director and 750.00 an hour for a Functional Consultant. The shadow consultant's hours are posted to internal project INMF-000027 at 437.50 an hour.
Accounting entry (each posted hour transaction)
Account | Debit | Credit |
|---|---|---|
501001 Cost - hour (or 501002 Cost - hour (internal project)) | Hour cost | |
201121 Payroll allocation | Hour cost |
Fixed-price project INMF-000026: timesheet line of Jean Grey (Functional Consultant - Trade & Logistics, 750.00 an hour) for the week of 11-01-2027. Each day's 13 hours post their own pair of lines: Dr Cost - hour 9,750.00, Cr Payroll allocation 9,750.00 (voucher INMF-01549).

Internal project INMF-000027: timesheet line of the shadow consultant, 5 hours at 437.50 = 2,187.50, posted to Cost - hour (internal project) against Payroll allocation.

Payroll allocation is the offset to salaries, which are booked separately through payroll. Posting hours therefore moves employee costs into project cost; it does not create a new expense.
Month | FP project INMF-000026 (INR) | Internal project INMF-000027 (INR) | Payroll allocation, credit (INR) |
|---|---|---|---|
October 2026 | 37,23,000.00 | 52,500.00 | 37,75,500.00 |
November 2026 | 32,94,500.00 | 52,500.00 | 33,47,000.00 |
December 2026 | 27,09,750.00 | 52,500.00 | 27,62,250.00 |
January 2027 | 23,44,250.00 | 52,500.00 | 23,96,750.00 |
February 2027 | 37,53,250.00 | 52,500.00 | 38,05,750.00 |
March 2027 | 22,88,000.00 | 52,500.00 | 23,40,500.00 |
Total | 1,81,12,750.00 | 3,15,000.00 | 1,84,27,750.00 |
The project team posted 11,594 hours to the contract and the shadow consultant 720 hours to the internal project.
Business Event 6 — Fit/Gap Workshops completed and Activate milestone invoiced
The team completes the Business Understanding Sessions and the Fit/Gap Workshops, and the customer signs off. The requirements and the gaps identified in the workshops are documented, and INMF raises the Activate milestone invoice for 20% of the contract value on 31-10-2026.
In D365: project invoice proposal for the Activate on-account transaction, posted.
Accounting entry (voucher INMF-180000001, 31-10-2026)
Account | Debit (INR) | Credit (INR) |
|---|---|---|
130100 Trade Receivables - Domestic | 59,00,000.00 | |
160203 WIP - invoiced on-account | 50,00,000.00 | |
223130 IGST payable | 9,00,000.00 | |
Total | 59,00,000.00 | 59,00,000.00 |

Business Event 7 — Customer pays the Activate milestone
ABC Ltd. pays the Activate invoice on 31-10-2026, deducting TDS of 5,00,000.00.
In D365: customer payment journal, settled against the Activate invoice.
Accounting entry (voucher INMF-CU000053, 31-10-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
110125 Bank Account - INR | 54,00,000.00 | |
132250 TDS Recoverable | 5,00,000.00 | |
130100 Trade Receivables - Domestic | 59,00,000.00 | |
Total | 59,00,000.00 | 59,00,000.00 |
Month-end close, October — revenue recognition
This is the most important accounting step of the cycle. By 31-10-2026, INMF has invoiced 1,12,50,000.00 (45% of the fee) but has completed only a fifth of the work. If revenue followed the invoices, October would report almost half the contract as earned. Revenue must instead follow the work performed.
In D365: Project > Manage > Revenue recognition. A revenue recognition is created for period code PT with date 31-10-2026 and forecast model FP-BUDGET, calculated, reviewed and posted.
The cost template FP-POC measures completion on cost amount. Its cost to complete method takes the forecast and deducts the actual cost to date, which corresponds to the Total budget – actual method described by Microsoft: actual costs are compared with the selected forecast model (Project management and accounting overview).
- Cost to complete = Forecast cost − Actual cost to date (never below zero)
- Completion % = Actual cost to date ÷ (Actual cost to date + Cost to complete)
- Cumulative revenue = Contract value × Completion %
- Revenue for the month = Cumulative revenue − Revenue recognised in earlier months
Step | Amount (INR) |
|---|---|
Actual cost to date (October hours) | 37,23,000.00 |
Forecast cost (FP-BUDGET) | 1,77,74,000.00 |
Cost to complete (1,77,74,000.00 − 37,23,000.00) | 1,40,51,000.00 |
Completion % (37,23,000.00 ÷ 1,77,74,000.00) | 20.95% |
Cumulative revenue (2,50,00,000.00 × 20.95%) | 52,36,581.52 |
Revenue recognised earlier | – |
Revenue for October | 52,36,581.52 |
Accounting entry (voucher INMF-170000000, 31-10-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 52,36,581.52 | |
420200 Accrued revenue - sales value | 52,36,581.52 | |
Total | 52,36,581.52 | 52,36,581.52 |
There is no cost line in the revenue recognition voucher. Hour cost posts straight to profit and loss, so October's cost of 37,23,000.00 already sits in Cost - hour, so October earns 52,36,581.52 against 37,23,000.00 of cost: a gross margin of 28.90%, the planned margin.
Contract position at 31-10-2026: WIP - sales value 52,36,581.52 (debit) against WIP - invoiced on-account 1,12,50,000.00 (credit) leaves a net credit of 60,13,418.48. Billing is ahead of the work, so the project carries a contract liability — an advance from the customer.
Business Event 8 — Fit-Gap Design sign-off and November close
The team turns the Fit/Gap results into detailed solution design, and the customer approves the Fit-Gap Design on 30-11-2026. INMF raises the third invoice for 20% of the contract value.
Accounting entry (voucher INMF-180000002, 30-11-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
130100 Trade Receivables - Domestic | 59,00,000.00 | |
160203 WIP - invoiced on-account | 50,00,000.00 | |
223130 IGST payable | 9,00,000.00 |
At the November month end, cumulative cost is 70,17,500.00, completion is 39.48% and cumulative revenue is 98,70,456.85. November's revenue is the increase over October: 98,70,456.85 − 52,36,581.52 = 46,33,875.33.
Accounting entry (voucher INMF-170000001, 30-11-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 46,33,875.33 | |
420200 Accrued revenue - sales value | 46,33,875.33 |
The monthly revenue cannot be calculated by multiplying the month's cost by the contract value; it is always the change in cumulative revenue. The contract liability rises to 63,79,543.15, because the third milestone was billed while the design was still in progress.
Business Event 9 — Fit-Gap Design payment and December close
ABC Ltd. pays the Fit-Gap Design invoice on 18-12-2026, net of TDS.
Accounting entry (voucher INMF-CU000056, 18-12-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
110125 Bank Account - INR | 54,00,000.00 | |
132250 TDS Recoverable | 5,00,000.00 | |
130100 Trade Receivables - Domestic | 59,00,000.00 |
Development runs through December with no milestone due. At 31-12-2026, cumulative cost is 97,27,250.00, completion is 54.73% and December's revenue is 38,11,395.86.
Accounting entry (voucher INMF-170000002, 31-12-2026)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 38,11,395.86 | |
420200 Accrued revenue - sales value | 38,11,395.86 |
With revenue growing and no new billing, the contract liability falls to 25,68,147.29.
Month-end close, January — work overtakes billing
In January, the team completes development, loads master data for UAT and prepares the UAT environment. There is no milestone, invoice or receipt this month — only hours and the month-end revenue recognition. Cumulative cost reaches 1,20,71,500.00, completion 67.92%, and January's revenue is 32,97,302.24.
Accounting entry (voucher INMF-170000003, 31-01-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 32,97,302.24 | |
420200 Accrued revenue - sales value | 32,97,302.24 |
Cumulative revenue of 1,69,79,154.95 now exceeds cumulative billing of 1,62,50,000.00. For the first time, the project shows a contract asset (unbilled revenue) of 7,29,154.95: INMF has done work that it is not yet entitled to bill.
Business Event 10 — UAT sign-off and February close
The project enters UAT and CRP. The team prepares test scenarios, fixes defects and collects user sign-off, and the UAT milestone is invoiced on 28-02-2027.
Accounting entry (voucher INMF-180000003, 28-02-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
130100 Trade Receivables - Domestic | 59,00,000.00 | |
160203 WIP - invoiced on-account | 50,00,000.00 | |
223130 IGST payable | 9,00,000.00 |
UAT defect fixing makes February the costliest month after October. At 28-02-2027, cumulative cost is 1,58,24,750.00, completion is 89.03% and February's revenue is 52,79,129.62.
Accounting entry (voucher INMF-170000004, 28-02-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 52,79,129.62 | |
420200 Accrued revenue - sales value | 52,79,129.62 |
The milestone invoice and the revenue recognition happen in the same month but for different amounts: 50,00,000.00 billed, 52,79,129.62 earned. The contract asset grows to 10,08,284.57.
Business Event 11 — Go-Live and final collections
The team completes cutover and production deployment, and the system goes live on 01-03-2027. INMF raises the final milestone invoice for 15% of the contract value on 03-03-2027.
Accounting entry (voucher INMF-180000004, 03-03-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
130100 Trade Receivables - Domestic | 44,25,000.00 | |
160203 WIP - invoiced on-account | 37,50,000.00 | |
223130 IGST payable | 6,75,000.00 |
ABC Ltd. settles the UAT invoice on 12-03-2027 and the Go-Live invoice on 30-03-2027, each net of TDS.
Accounting entry (voucher INMF-CU000060, 12-03-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
110125 Bank Account - INR | 54,00,000.00 | |
132250 TDS Recoverable | 5,00,000.00 | |
130100 Trade Receivables - Domestic | 59,00,000.00 |
Accounting entry (voucher INMF-CU000064, 30-03-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
110125 Bank Account - INR | 40,50,000.00 | |
132250 TDS Recoverable | 3,75,000.00 | |
130100 Trade Receivables - Domestic | 44,25,000.00 |
Month-end close, March — the project reaches 100%
Hypercare runs through March. By 31-03-2027, cumulative cost is 1,81,12,750.00 — above the forecast of 1,77,74,000.00. The cost to complete can never be negative, so it becomes nil, completion jumps to 100%, and the March revenue recognition takes the remaining contract value: 2,50,00,000.00 − 2,22,58,284.57 = 27,41,715.43.
Accounting entry (voucher INMF-170000005, 31-03-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160202 WIP - sales value | 27,41,715.43 | |
420200 Accrued revenue - sales value | 27,41,715.43 |
March earns 27,41,715.43 against 22,88,000.00 of cost, a margin of 16.55% for the month against 28.90% in every earlier month. The forecast was never revised, so the whole cost overrun of the project falls into the last period (see Plan vs actual).
Business Event 12 — Hypercare ends: elimination and project closure
Hypercare ends on 31-03-2027. Revenue recognized (2,50,00,000.00) now equals the amount invoiced (2,50,00,000.00), and the two WIP balances are no longer needed.
In D365: on the Revenue recognition page, the posted 31-03-2027 line is eliminated (Eliminate) with posting date 31-03-2027 and Set stage to Finished, which moves the project to stage Completed. The internal project INMF-000027 is set to Completed separately; it has no revenue recognition to eliminate.
Accounting entry (voucher INMF-170000006, 31-03-2027)

Account | Debit (INR) | Credit (INR) |
|---|---|---|
160203 WIP - invoiced on-account | 2,50,00,000.00 | |
160202 WIP - sales value | 2,50,00,000.00 | |
Total | 2,50,00,000.00 | 2,50,00,000.00 |
In D365 the elimination voucher posts one line for each invoice and each revenue recognition; the table shows the totals. Elimination clears the two WIP accounts against each other, and the contract revenue of 2,50,00,000.00 stays in Accrued revenue - sales value. Invoiced revenue - on-account (420300) is not used in this building. Microsoft also notes that once a fixed-price project is eliminated, any new postings to it go directly to profit and loss (How project groups, categories and line properties determine project posting).
Revenue recognition across the project
Month end | Voucher | Cost in month | Cumulative cost | Completion % | Revenue in month | Cumulative revenue | Margin in month |
|---|---|---|---|---|---|---|---|
31-10-2026 | INMF-170000000 | 37,23,000.00 | 37,23,000.00 | 20.95% | 52,36,581.52 | 52,36,581.52 | 28.90% |
30-11-2026 | INMF-170000001 | 32,94,500.00 | 70,17,500.00 | 39.48% | 46,33,875.33 | 98,70,456.85 | 28.90% |
31-12-2026 | INMF-170000002 | 27,09,750.00 | 97,27,250.00 | 54.73% | 38,11,395.86 | 1,36,81,852.71 | 28.90% |
31-01-2027 | INMF-170000003 | 23,44,250.00 | 1,20,71,500.00 | 67.92% | 32,97,302.24 | 1,69,79,154.95 | 28.90% |
28-02-2027 | INMF-170000004 | 37,53,250.00 | 1,58,24,750.00 | 89.03% | 52,79,129.62 | 2,22,58,284.57 | 28.90% |
31-03-2027 | INMF-170000005 | 22,88,000.00 | 1,81,12,750.00 | 100.00% | 27,41,715.43 | 2,50,00,000.00 | 16.55% |
Total | 1,81,12,750.00 | 2,50,00,000.00 | 27.55% |
Contract asset and contract liability
At each month end, WIP - sales value (revenue earned) is set against WIP - invoiced on-account (amount billed). If billing is ahead of revenue, the net is a contract liability; if revenue is ahead of billing, it is a contract asset.
Month end | Cumulative revenue (160202) | Cumulative billing (160203) | Contract asset / (liability) |
|---|---|---|---|
31-10-2026 | 52,36,581.52 | 1,12,50,000.00 | (60,13,418.48) |
30-11-2026 | 98,70,456.85 | 1,62,50,000.00 | (63,79,543.15) |
31-12-2026 | 1,36,81,852.71 | 1,62,50,000.00 | (25,68,147.29) |
31-01-2027 | 1,69,79,154.95 | 1,62,50,000.00 | 7,29,154.95 |
28-02-2027 | 2,22,58,284.57 | 2,12,50,000.00 | 10,08,284.57 |
31-03-2027 | 2,50,00,000.00 | 2,50,00,000.00 | – |
Billing is front-loaded — 45% of the fee is invoiced in October — so the project is in a contract liability for the first three months. From January, development and UAT run ahead of the next milestone and the position turns into a contract asset, which closes when the Go-Live milestone is invoiced.
Plan vs actual
A fixed price protects the customer, not the margin. Actual cost came in 3,38,750.00 above the forecast, mainly from logistics design complexity, additional development and UAT defect fixing, and the whole overrun reduced INMF's margin.
Plan (INR) | Actual (INR) | Variance (INR) | |
|---|---|---|---|
Contract revenue | 2,50,00,000.00 | 2,50,00,000.00 | – |
Project cost (FP project) | 1,77,74,000.00 | 1,81,12,750.00 | 3,38,750.00 |
Gross margin | 72,26,000.00 | 68,87,250.00 | (3,38,750.00) |
Gross margin % | 28.90% | 27.55% | (1.35%) |
From October to February, actual cost stayed within the forecast, so each month earned the planned margin of 28.90%. In March, cumulative cost passed the forecast: cost to complete fell to nil, completion jumped to 100%, and the month earned only 16.55%. Because the forecast was not revised, the whole overrun fell into the last period. Revising the forecast model when the overrun first appears — Microsoft recommends keeping the original forecast as a baseline and adjusting a copy — spreads the loss of margin over the remaining months instead.
The training cost of 3,15,000.00 on the internal project sits outside the contract. It does not affect completion % or the project margin, but it reduces the margin of the engagement to 65,72,250.00 (26.29%).
Business event vs accounting event
Implementation stage | Business event | D365 document / data entry | Accounting impact | Entry posted |
|---|---|---|---|---|
Contract | Implementation contract signed | Project contract, funding source | No | – |
Planning | Project, WBS and cost budget agreed | Project, WBS, hour forecast (FP-BUDGET), on-account schedule | No | – |
Kick-off | Project starts | Project stage: In process | No | – |
Advance, Activate, Fit-Gap Design, UAT, Go-Live | Milestone reached and invoiced | Project invoice proposal (on-account) | Yes | Dr Trade Receivables; Cr WIP - invoiced on-account, IGST payable |
Collections | Customer pays, net of TDS | Customer payment journal | Yes | Dr Bank, TDS Recoverable; Cr Trade Receivables |
Delivery | Consultants work on activities | Timesheets, project hour journal | Yes | Dr Cost - hour; Cr Payroll allocation |
Training | Shadow consultant learns on the job | Timesheets on internal project | Yes | Dr Cost - hour (internal project); Cr Payroll allocation |
Month-end close | Revenue earned to date | Revenue recognition, monthly | Yes | Dr WIP - sales value; Cr Accrued revenue |
Hypercare ends | Project closed | Eliminate; project stage Completed | Yes | Dr WIP - invoiced on-account; Cr WIP - sales value |
Internal project closed | Training complete | Project stage Completed | No | – |
Key takeaway: invoices move amounts between the customer and the balance sheet; revenue reaches profit and loss only through the monthly revenue recognition.
Accounting vouchers of the Contract to Close process
Hour transactions are summarized by month and project, as each timesheet line posts its own voucher.
Document | Voucher | Date | Account name | Debit (INR) | Credit (INR) |
|---|---|---|---|---|---|
Advance invoice | INMF-180000000 | 11-10-2026 | Trade Receivables - Domestic | 73,75,000.00 | |
Advance invoice | INMF-180000000 | 11-10-2026 | WIP - invoiced on-account | 62,50,000.00 | |
Advance invoice | INMF-180000000 | 11-10-2026 | IGST payable | 11,25,000.00 | |
Advance receipt | INMF-CU000052 | 25-10-2026 | Bank Account - INR | 67,50,000.00 | |
Advance receipt | INMF-CU000052 | 25-10-2026 | TDS Recoverable | 6,25,000.00 | |
Advance receipt | INMF-CU000052 | 25-10-2026 | Trade Receivables - Domestic | 73,75,000.00 | |
Activate invoice | INMF-180000001 | 31-10-2026 | Trade Receivables - Domestic | 59,00,000.00 | |
Activate invoice | INMF-180000001 | 31-10-2026 | WIP - invoiced on-account | 50,00,000.00 | |
Activate invoice | INMF-180000001 | 31-10-2026 | IGST payable | 9,00,000.00 | |
Activate receipt | INMF-CU000053 | 31-10-2026 | Bank Account - INR | 54,00,000.00 | |
Activate receipt | INMF-CU000053 | 31-10-2026 | TDS Recoverable | 5,00,000.00 | |
Activate receipt | INMF-CU000053 | 31-10-2026 | Trade Receivables - Domestic | 59,00,000.00 | |
Hours, October | Timesheets | October 2026 | Cost - hour | 37,23,000.00 | |
Hours, October | Timesheets | October 2026 | Cost - hour (internal project) | 52,500.00 | |
Hours, October | Timesheets | October 2026 | Payroll allocation | 37,75,500.00 | |
Revenue recognition | INMF-170000000 | 31-10-2026 | WIP - sales value | 52,36,581.52 | |
Revenue recognition | INMF-170000000 | 31-10-2026 | Accrued revenue - sales value | 52,36,581.52 | |
Fit-Gap Design invoice | INMF-180000002 | 30-11-2026 | Trade Receivables - Domestic | 59,00,000.00 | |
Fit-Gap Design invoice | INMF-180000002 | 30-11-2026 | WIP - invoiced on-account | 50,00,000.00 | |
Fit-Gap Design invoice | INMF-180000002 | 30-11-2026 | IGST payable | 9,00,000.00 | |
Hours, November | Timesheets | November 2026 | Cost - hour | 32,94,500.00 | |
Hours, November | Timesheets | November 2026 | Cost - hour (internal project) | 52,500.00 | |
Hours, November | Timesheets | November 2026 | Payroll allocation | 33,47,000.00 | |
Revenue recognition | INMF-170000001 | 30-11-2026 | WIP - sales value | 46,33,875.33 | |
Revenue recognition | INMF-170000001 | 30-11-2026 | Accrued revenue - sales value | 46,33,875.33 | |
Fit-Gap Design receipt | INMF-CU000056 | 18-12-2026 | Bank Account - INR | 54,00,000.00 | |
Fit-Gap Design receipt | INMF-CU000056 | 18-12-2026 | TDS Recoverable | 5,00,000.00 | |
Fit-Gap Design receipt | INMF-CU000056 | 18-12-2026 | Trade Receivables - Domestic | 59,00,000.00 | |
Hours, December | Timesheets | December 2026 | Cost - hour | 27,09,750.00 | |
Hours, December | Timesheets | December 2026 | Cost - hour (internal project) | 52,500.00 | |
Hours, December | Timesheets | December 2026 | Payroll allocation | 27,62,250.00 | |
Revenue recognition | INMF-170000002 | 31-12-2026 | WIP - sales value | 38,11,395.86 | |
Revenue recognition | INMF-170000002 | 31-12-2026 | Accrued revenue - sales value | 38,11,395.86 | |
Hours, January | Timesheets | January 2027 | Cost - hour | 23,44,250.00 | |
Hours, January | Timesheets | January 2027 | Cost - hour (internal project) | 52,500.00 | |
Hours, January | Timesheets | January 2027 | Payroll allocation | 23,96,750.00 | |
Revenue recognition | INMF-170000003 | 31-01-2027 | WIP - sales value | 32,97,302.24 | |
Revenue recognition | INMF-170000003 | 31-01-2027 | Accrued revenue - sales value | 32,97,302.24 | |
Hours, February | Timesheets | February 2027 | Cost - hour | 37,53,250.00 | |
Hours, February | Timesheets | February 2027 | Cost - hour (internal project) | 52,500.00 | |
Hours, February | Timesheets | February 2027 | Payroll allocation | 38,05,750.00 | |
UAT sign-off invoice | INMF-180000003 | 28-02-2027 | Trade Receivables - Domestic | 59,00,000.00 | |
UAT sign-off invoice | INMF-180000003 | 28-02-2027 | WIP - invoiced on-account | 50,00,000.00 | |
UAT sign-off invoice | INMF-180000003 | 28-02-2027 | IGST payable | 9,00,000.00 | |
Revenue recognition | INMF-170000004 | 28-02-2027 | WIP - sales value | 52,79,129.62 | |
Revenue recognition | INMF-170000004 | 28-02-2027 | Accrued revenue - sales value | 52,79,129.62 | |
Go-Live invoice | INMF-180000004 | 03-03-2027 | Trade Receivables - Domestic | 44,25,000.00 | |
Go-Live invoice | INMF-180000004 | 03-03-2027 | WIP - invoiced on-account | 37,50,000.00 | |
Go-Live invoice | INMF-180000004 | 03-03-2027 | IGST payable | 6,75,000.00 | |
UAT sign-off receipt | INMF-CU000060 | 12-03-2027 | Bank Account - INR | 54,00,000.00 | |
UAT sign-off receipt | INMF-CU000060 | 12-03-2027 | TDS Recoverable | 5,00,000.00 | |
UAT sign-off receipt | INMF-CU000060 | 12-03-2027 | Trade Receivables - Domestic | 59,00,000.00 | |
Go-Live receipt | INMF-CU000064 | 30-03-2027 | Bank Account - INR | 40,50,000.00 | |
Go-Live receipt | INMF-CU000064 | 30-03-2027 | TDS Recoverable | 3,75,000.00 | |
Go-Live receipt | INMF-CU000064 | 30-03-2027 | Trade Receivables - Domestic | 44,25,000.00 | |
Hours, March | Timesheets | March 2027 | Cost - hour | 22,88,000.00 | |
Hours, March | Timesheets | March 2027 | Cost - hour (internal project) | 52,500.00 | |
Hours, March | Timesheets | March 2027 | Payroll allocation | 23,40,500.00 | |
Revenue recognition | INMF-170000005 | 31-03-2027 | WIP - sales value | 27,41,715.43 | |
Revenue recognition | INMF-170000005 | 31-03-2027 | Accrued revenue - sales value | 27,41,715.43 | |
Elimination | INMF-170000006 | 31-03-2027 | WIP - invoiced on-account | 2,50,00,000.00 | |
Elimination | INMF-170000006 | 31-03-2027 | WIP - sales value | 2,50,00,000.00 | |
Total | 12,74,27,750.00 | 12,74,27,750.00 |
Trial balance after the Contract to Close process
Main account | Main account name | Debit (INR) | Credit (INR) | Closing balance (INR) |
|---|---|---|---|---|
110125 | Bank Account - INR | 2,70,00,000.00 | – | 2,70,00,000.00 |
130100 | Trade Receivables - Domestic | 2,95,00,000.00 | 2,95,00,000.00 | – |
132250 | TDS Recoverable | 25,00,000.00 | – | 25,00,000.00 |
160202 | WIP - sales value | 2,50,00,000.00 | 2,50,00,000.00 | – |
160203 | WIP - invoiced on-account | 2,50,00,000.00 | 2,50,00,000.00 | – |
201121 | Payroll allocation | – | 1,84,27,750.00 | -1,84,27,750.00 |
223130 | IGST payable | – | 45,00,000.00 | -45,00,000.00 |
420200 | Accrued revenue - sales value | – | 2,50,00,000.00 | -2,50,00,000.00 |
501001 | Cost - hour | 1,81,12,750.00 | – | 1,81,12,750.00 |
501002 | Cost - hour (internal project) | 3,15,000.00 | – | 3,15,000.00 |
Total | 12,74,27,750.00 | 12,74,27,750.00 | – |
Observations from the trial balance:
- WIP - sales value and WIP - invoiced on-account both close at nil: the monthly revenue recognitions and the milestone invoices were cleared against each other at elimination.
- Trade Receivables closes at nil, as all five invoices are settled.
- The receipts reconcile: Bank 2,70,00,000.00 + TDS Recoverable 25,00,000.00 = contract value 2,50,00,000.00 + IGST 45,00,000.00 = 2,95,00,000.00.
- Cost - hour and Cost - hour (internal project) together equal Payroll allocation of 1,84,27,750.00.
Profit and loss statement after the Contract to Close process
Particulars | Amounts (2026-27) |
|---|---|
Revenue from Operations | 2,50,00,000.00 |
Total Income | 2,50,00,000.00 |
Project cost (consultant hours: contract 1,81,12,750.00 + training 3,15,000.00) | 1,84,27,750.00 |
Absorbed employee cost (Payroll allocation) | -1,84,27,750.00 |
Total Expenses | – |
Profit Before Tax | 2,50,00,000.00 |
Profit After Tax for the Year | 2,50,00,000.00 |
Total Comprehensive Income for the Year | 2,50,00,000.00 |
As in Part 2, the absorption credit (Payroll allocation) is not a real profit. In a live ledger, the matching salaries would be booked through payroll, and the profit from the engagement would be 65,72,250.00: the project margin of 68,87,250.00 less the training cost of 3,15,000.00. GST collected and TDS withheld do not affect profit.
Balance sheet after the Contract to Close process
Particulars | Amounts (2026-27) |
|---|---|
ASSETS | |
Current Assets | |
Trade Receivables | – |
Contract assets (unbilled revenue) | – |
Cash and Cash Equivalents | 2,70,00,000.00 |
Current Tax Assets (TDS receivable) | 25,00,000.00 |
TOTAL ASSETS | 2,95,00,000.00 |
EQUITY AND LIABILITIES | |
Other Equity | 2,50,00,000.00 |
Contract liabilities (advance from customer) | – |
Other Current Liabilities (GST payable) | 45,00,000.00 |
TOTAL EQUITY AND LIABILITIES | 2,95,00,000.00 |
At the close of the project, the contract balances are nil: everything earned has been billed and everything billed has been collected. During the project they were not — a balance sheet at 31-10-2026 would show contract liability of 60,13,418.48, and at 28-02-2027 a contract asset of 10,08,284.57.
Key takeaways
Every stage of the fixed-price project can be traced from the implementation milestone to the D365 document, the voucher and the financial statements:
Contract (no entry) → Milestone invoice (WIP - invoiced on-account) → Customer receipt → Timesheets (project cost) → Monthly revenue recognition (WIP - sales value / revenue) → Elimination → Project closed
- Billing is not revenue. The billing schedule decides when the customer is invoiced; the revenue recognition decides what is earned.
- Completion drives revenue. With the cost-to-cost method, the hour forecast is as important as the hours posted: revenue each month is only as accurate as the cost to complete.
- The contract balance changes sign. Front-loaded billing creates contract liability; work running ahead of milestones creates a contract asset.
- Configuration decides the route. The project group, the line property's Capitalize cost and the ledger posting setup together decide whether hour cost passes through WIP or goes straight to profit and loss.
- Overruns land at the end unless the forecast is revised during the project.
The objective of this series remains the same: to understand not just which steps to perform in D365 F&O, but the accounting logic behind every important transaction. The configuration and process steps for project accounting will follow in separate posts.
Sources
- Project management and accounting overview, Microsoft Learn
- How project groups, categories and line properties determine project posting, Microsoft Learn
- Fixed price revenue estimate projects, Microsoft Learn