End-to-end workflows
How work moves through Projects from start to finish, who does each step and what the system does in response.
On this page (8)
Win a project: create from template, team, plan, baseline
Who: PM-A (Project manager role), PM-B (a second Project manager), Member M (Project member role)
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Projects > All Projects > Create Project > template 'Construction Project'; start 2026-10-01, planned finish 2027-03-29, contract value 1,000,000, manager 'Test PM', customer a test customer; Create | Project 360 opens in Planning or Draft with 11 tasks, 5 milestones, 5 billing steps (10 / 10 / 30 / 20 / 10 %), a draft 'Original budget' of 850,000 and three documents; code uses the company prefix |
| 2 | PM-A: Overview > Add Team Member: employee 'Test Engineer' (role Site engineer, allocation 100 %); add user M as a team member | Both appear in the team with availability; M can now see the project under My Projects |
| 3 | PM-A: Tasks: open task 'Excavation', assign to M, planned hours 80; add a dependency to the next task on the Gantt | Task shows M as assignee; Gantt draws the link and the critical path; a loop attempt is refused |
| 4 | M: Projects > Execution > Tasks (mine): open the task, move it to In progress, set progress 25 % | Task becomes In progress with actual start today; project overall progress rises by the planned-hours weight; M sees no budget, cost or margin anywhere |
| 5 | PM-A: Actions > Save schedule baseline; PM-A tries to approve the baseline; PM-B approves it (Gantt > baselines) | Baseline is Draft until approved; task baseline start / finish / cost are filled from the snapshot after approval; variance columns appear on the Gantt |
| 6 | PM-A: Actions > In Progress (from Planning, via Approved if the template requires) | Status follows the allowed moves only; each move is on the activity feed 'Status changed to In Progress' |
Estimate, budget approval (maker-checker), freeze, budget change
Who: PM-A (project.budget.edit), PM-B (project.budget.approve), Member M (no budget rights)
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Planning > Estimation: new estimate, add 3 lines (Concrete 100 m3 x 20 with waste 5 % = 2,100 cost; Labour; Equipment), Save lines, Submit | Estimate state Submitted; Summary by category shows cost, price and margin %; PM-A cannot edit the lines any more ('Only a draft estimate can be edited; make a new revision.') |
| 2 | PM-B: approve the estimate; PM-A: Budget > Budget versions > From estimate | Estimate Approved (an older approved estimate becomes Superseded); a new draft budget version is made with one line per cost code, labelled 'From estimate <number>' |
| 3 | PM-A: adjust lines so the total is 475,000 (Material 255,000, Labour 120,000, Subcontract 100,000); Save lines; Submit for approval; then press Approve as PM-A | Version Submitted; approvers get a notice; PM-A refused 'Somebody other than who submitted it must approve it.' |
| 4 | PM-B: Reject once with the version open, then PM-A re-submits and PM-B Approves | Reject sends it back to Draft; after Approve the state is Approved, previous approved version (if any) is Revised, activity 'Budget approved - <name>'; Budget vs Actual grid shows Original = Current = 475,000 |
| 5 | PM-B: Freeze the approved version; PM-A tries Save lines on it | State Frozen; PM-A refused 'Only a draft budget can be edited; revise the approved one instead.' |
| 6 | PM-A: Budget change: Transfer 20,000 Material -> Subcontract, reason 'Subcontract the blockwork'; PM-A tries Approve; PM-B approves | Change BC-001 Submitted; PM-A refused 'Somebody other than who asked for it must decide it.'; after PM-B: Material current 235,000, Subcontract current 120,000, total still 475,000; Approved Changes column shows -20,000 / +20,000 |
| 7 | M opens the Budget tab | Refused 'You do not have permission for this action.'; the Project 360 KPI Approved Budget shows a dash |
Time and expenses: log, approve, post, see actual cost and P&L
Who: Member M (cost 75 / bill 150 per hour, linked to a user), PM-A (project.resource.assign), PM-B (project.budget.approve)
| # | What the person does | What the system does |
|---|---|---|
| 1 | M: Project 360 > Costs > Timesheets > Log Time: today, 8 h, billable, task Excavation; Save; Submit | Entry Draft -> Submitted; approvers with project.resource.assign notified; M's own Approve is refused 'Somebody else approves your time.' |
| 2 | M: Costs > Expenses > Add Expense: Permits, 1,250 AED, billable; Submit | Expense Submitted; approvers with project.budget.approve notified |
| 3 | PM-A: Projects > Execution > Timesheets: filter Submitted, tick M's entry, Approve selected | Entry Approved; cost 600.00 (8 x 75) and value 1,200.00 (8 x 150) count in Actual cost (labour) at once |
| 4 | PM-A tries to approve the expense (has resource.assign only); PM-B approves it | PM-A refused 'You do not have permission for this action.'; PM-B: Approved; 1,250 counts in Actual cost |
| 5 | PM-B (or PM-A with budget.edit): Costs > Cost summary > Post approved time & expenses | Time becomes Posted with a journal Dr Labour cost 600 / Cr Project Cost Clearing 600; expense Posted with Dr Expense 1,250 / Cr Expense clearing; each journal carries the project dimension; pressing again posts nothing twice |
| 6 | PM-B: Costs > Project P&L; Forecast > Revise ETC with a reason | P&L shows direct cost 1,850 by category (labour 600, expense 1,250); Forecast shows Budget, Actual, Committed, ETC, EAC, VAC and a history line with the reason |
| 7 | PM-A: Billing > Invoice time & material | One draft customer invoice with 8 h x 150 and 1,250 expense; both entries become Billed; pressing again -> 'There is no approved billable time or expense to bill.' |
Procurement: purchase request to PO to bill to actual cost
Who: PM-A (project.edit), PM-B (project.budget.approve), Purchasing / Accounting users
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Procurement > Purchase request: 'Concrete C40', vendor a test vendor, 120 m3 x 310; Save; Submit | Request PR-001 Submitted, estimated 37,200.00; approvers notified |
| 2 | PM-A tries Approve; PM-B approves | PM-A refused 'Somebody other than who asked must decide it.'; PM-B: Approved; 37,200 shows as Committed (material) on the project |
| 3 | PM-A: Create Purchase Order | A DRAFT purchase order is created in Purchasing carrying the project, branch, department and cost centre; request state Ordered; activity 'Purchase Order created - <number>' |
| 4 | Purchasing: confirm the PO; Accounting: receive and post a vendor bill of 37,200 | Once confirmed the PO net counts as committed instead of the request (never both); after the bill posts Committed drops by 37,200 and Actual cost rises by 37,200 |
| 5 | PM-A: Costs > Cost summary and Budget > Budget vs Actual | By category: Material actual +37,200; Budget vs Actual: Material Committed 0, Actual +37,200, Forecast Final unchanged unless ETC revised |
| 6 | PM-A: try to order a request that is still Submitted (API) or edit the ordered one | 'Only an approved request can be ordered.' / 'Only a draft request can be changed.' |
Subcontract: claim, review, verify, certify net of retention, vendor bill, payment
Who: PM-A (project.edit), PM-B (project.budget.approve), Accounting
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Procurement > Subcontracts > New subcontract: vendor, value 200,000, retention 10 %, advance 10 %; Activate; record a vendor advance of 20,000 | Subcontract Active; 200,000 shows as Committed (subcontract) |
| 2 | PM-A: New claim: period end today, progress 25 %, claimed 50,000; then Reviewed; then Verified (verified = 50,000) | Claim states Claimed -> Reviewed -> Verified; verified amount stored |
| 3 | PM-B: Certified (certified = 50,000) | Retention 5,000, advance recovery min(5,000, 20,000) = 5,000, net 40,000; committed falls to 150,000 and 50,000 counts as subcontract actual cost |
| 4 | PM-A: Raise vendor bill | Draft vendor bill of 45,000 (certified less recovery) with the project dimension, posted at once when possible; then Dr Accounts payable 5,000 / Cr Retention payable 5,000; if the bill stays draft 'Post retention' appears and is refused 'Post the claim's vendor bill first.' until Accounting posts it |
| 5 | Accounting pays the bill; PM-A marks the claim Paid | Claim state Paid; subcontract card shows Paid 45,000 and retention held 5,000; Payable to subcontractors report ties to the ledger |
| 6 | PM-B: try to certify 60,000 on a claim verified at 50,000 (API or second claim) | Refused 'Cannot certify more than was verified.' |
Progress billing with retention and advance, then release retention
Who: PM-A (project.billing.create), PM-B (project.billing.create), Accounting. Contract 1,000,000; retention 10 %, cap 5 %; advance 10 %, recovery 20 %
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Billing > Record advance received: 100,000, reference 'ADV-TEST-1' | Advance posted Dr Bank / Cr Customer advances 100,000; advance balance 100,000 |
| 2 | PM-A: Progress claim > Create application: cumulative 30 %, period end today | Claim PC-001 Application: value completed 300,000, this claim 300,000, retention min(10 % x 300,000, cap 50,000) = 30,000, advance recovery min(20 % x 300,000 = 60,000, balance 100,000) = 60,000, net due 210,000 |
| 3 | PM-A: Submit, then Reviewed (a notice goes to approvers); PM-B: Certify with 'Certified by' = the customer's representative | Claim Submitted -> Reviewed -> Certified; certifier name recorded; a second application cannot start while this one is open ('Finish the open application first.') until it is invoiced |
| 4 | PM-B: Create Invoice on the certified claim | Draft customer invoice for the GROSS 300,000 carrying the project dimension, posted at once when possible; then journals move 30,000 to retention receivable and 60,000 off the advance; customer owes net 210,000; claim state Invoiced |
| 5 | PM-A: second application cumulative 50 % (then certify and invoice as above) | Current claim 200,000; retention min(20,000, cap 50,000 - held 30,000 = 20,000) = 20,000; recovery min(40,000, balance 40,000) = 40,000; net due 140,000; a cumulative below 30 % is refused 'Progress cannot go back from the last certified claim.' |
| 6 | PM-A: when the defects period ends, Release retention on claim PC-001 | Dr Receivable 30,000 / Cr Retention receivable 30,000; retention state Released; pressing again -> 'This retention is already released.' |
Change order: raise, price, customer review, approve, move budget and contract, bill
Who: PM-A (project.edit), PM-B (project.change.approve, a different person), PM-A or Billing (project.billing.create)
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Changes > Create Change Order: title 'Extra basement waterproofing', kind customer_variation, one line qty 1 cost rate 35,000 price rate 50,000, schedule impact 10 days; Save | CO-001 in Potential Change; revenue 50,000, cost 35,000, margin 15,000; contract value on Project 360 still 1,000,000 |
| 2 | PM-A: move Estimate -> Proposal -> Customer Review | Each step allowed one at a time; at Customer Review approvers with project.change.approve get a notice; the change can no longer be edited ('A change under customer review or approved is not edited; raise another change.') |
| 3 | PM-A tries Approved; PM-B moves to Approved | PM-A refused 'Somebody other than who raised the change must decide it.'; PM-B: Approved with approver and time recorded; contract value now 1,050,000, Approved revenue 50,000 |
| 4 | Move to Budget Updated | An approved budget change of kind variation for 35,000 is created and the project budget rises by 35,000 |
| 5 | Move to Contract Updated | Expected finish moves 10 days later |
| 6 | Move to Billed; open Billing | A billing step 'Variation CO-001 - Extra basement waterproofing' for 50,000, method manual, state Ready; Create Invoice makes the draft invoice; try to skip a step (Approved straight to Billed) -> 'A change in Approved cannot move to Billed.' |
Close the project: checklist, close, read-only, reopen
Who: PM-A (Project manager with project.close), Member M
| # | What the person does | What the system does |
|---|---|---|
| 1 | PM-A: Project 360 > Overview and Billing: finish open tasks, complete milestones, invoice every billing step, order / close requests, complete subcontracts, release or note retention | Close checklist facts show 0 open tasks, 0 open milestones, 0 billing steps not invoiced, 0 requests open, 0 subcontracts open |
| 2 | PM-A: Actions > Completed | Status Completed; actual finish = today |
| 3 | PM-A: Actions > Closed before ticking anything | Refused 'Finish the close checklist first: Tasks complete, Milestones complete, ...' listing all 11 items |
| 4 | PM-A: Actions > Close checklist: tick all 11; Save checklist; Actions > Closed | Status Closed; M (no project.close) cannot save the checklist or close ('You do not have permission for this action.') |
| 5 | PM-A and M: try to log time, add an expense, create a task, raise a change order, save the budget | Each refused 'A closed or cancelled project is read-only. Reopen it through an authorised correction first.' |
| 6 | PM-A: Actions > Completed (reopen); then edit the project name | Status Completed and edits work; audit shows the status moves in order |