Case studies / Facility Management
Case studyContracts, work orders and billing for a facilities provider
A facilities services provider with large field teams connected contracts, work orders, timesheets and billing in Odoo, so work done is invoiced and margin is visible by contract.
Overview
A facilities services company providing cleaning, maintenance, security and soft services to offices, hospitals, schools and retail parks. It employs large field teams and a lean central office that handles contracts, scheduling and finance.
Scale. About 400 service contracts with different terms, rates and service levels, delivered across many client sites by mobile teams and site-based staff.
The challenge
Contract terms lived in documents. Rates, inclusions, service levels and annual uplifts were buried in signed agreements and amendment letters, and the finance team relied on memory and a shared folder to work out what to bill.
Work orders were raised in a separate tool that had no link to the contract. Reactive jobs, which are often billable on top of the fixed fee, were completed and closed without anyone checking whether the client should be charged.
Timesheets were on paper. Supervisors collected them weekly, payroll keyed them in, and the hours rarely reached the people who priced contracts. Overtime on a site might go unnoticed for months.
As a result, billing missed work that had been done, and margin by contract was unknown. The business knew it was profitable overall, but could not say which clients made money and which did not.
Several large contracts were due for renewal. The commercial team wanted to go into those negotiations knowing the true cost of service rather than estimating it.
The solution
Each contract in Odoo now carries its service lines, rates and service levels. Recurring invoices are generated from those lines, and annual uplifts apply on the correct date without anyone remembering to make the change.
Work orders, whether planned or reactive, are linked to the contract and the site. Field staff receive jobs on the mobile app, record time, materials and photos, and close the job on site, and billable extras flow straight to the next invoice.
Timesheets and resource planning sit in the same system, so hours worked land against the contract that consumed them. Payroll receives approved hours directly instead of keying in paper sheets.
Margin is reported by contract and by site, combining revenue, labour, materials and subcontracted cost. Service-level performance is tracked alongside it, so operations and commercial teams look at quality and profit together.
Purchases for sites go through procurement from approved suppliers, and the cost lands against the right contract. Clients can raise requests and follow progress through their own portal, which has reduced the volume of status calls to the central office.
The engagement
- Six months
- Five specialists
- Contract clean-up, Odoo contracts, field service, timesheets, planning, recurring invoicing and margin reporting, mobile forms, five integrations and a rollout by client portfolio.
Integrations
- Mobile field apps
- Client portals
- Payroll
- Procurement from approved suppliers
- Accounting
How we delivered it
- 01
Clean up contracts
Five weeks
Before design, we worked with the commercial team to clean up contract terms and map every service line. Each contract was reduced to a clear set of billable lines, rates, service levels and uplift rules.
- 02
Configure and build mobile
Nine weeks
We configured contracts, work orders, timesheets and recurring billing in Odoo and built mobile forms for field staff. Supervisors tested the forms on real sites, in gloves and in bad signal.
- 03
Migrate and rehearse billing
Five weeks
Contracts were migrated with their cleaned terms. We then ran the first billing cycle in parallel with the old process and investigated every difference before switching over.
- 04
Portfolio rollout
Seven weeks
The rollout went client portfolio by client portfolio. Supervisors were trained on site, and each portfolio's first month of invoices was reviewed jointly by operations and finance.
Results
- Shorter invoicing cycles with billable extras captured
- Margin visible by contract and site
- Earlier warning of service-level breaches
- Approved hours sent to payroll without re-keying
Invoicing cycles shortened because work orders feed billing directly. Reactive work is billed in the month it is done, and the finance team no longer reconstructs charges from job sheets and emails.
Margin by contract is now visible. Within the first quarter, the commercial team identified contracts priced below cost and renegotiated them at renewal with evidence rather than estimates.
Service-level breaches are seen early. Supervisors and clients can see response and completion times as they happen, and recurring problems on a site are dealt with before they turn into a complaint.
The contract clean-up has outlasted the project. New contracts are now written in the same structured form, so they can be set up in the system on the day they are signed.
We went into our biggest renewal knowing exactly what that contract cost us to run. That had never happened before.
What made the difference
Contracts were cleaned up before migration, because messy terms produce messy invoices.


