Background of Issue
Job Categories are a very useful part of Xero Practice Manager. They can be applied to jobs to help us with reporting, and to map our revenue streams from XPM through to Xero when we do our invoicing. In XPM it is important we set these up a specific way to ensure we achieve two things:
- We can filter our WIP by our Billable Fees and our Fixed Price Agreement.
- We can split out revenue streams, so when invoices flow to Xero they show the correct revenue code for the type of work we have done.
When we have both Billable Fees and Fixed Price Agreements, it is difficult to get a useful WIP report because we have both negative and positive WIP in the same report. Let’s say for example we have $200k of billable time on our Billable Fees jobs. This is $200k of WIP, which is time we can bill. This is an asset to us because WIP turns into invoices, and invoices turn into cash.
Let’s say we also have $300k of Fixed Price Agreement jobs that we have billed in advance. So we have sent the invoices but not yet done the work. This is the opposite to the situation above, so we have ($300k) of WIP. We have invoiced for the work, but not done it yet, so our WIP balance is negative. This is a liability to us because we have collected the funds from the clients, but we have a liability to complete the work.
If we run a standard WIP report, our total balance would be ($100k). This looks like we have $100k billed in advance. But in reality, we have $300k billed in advance, and $200k that we need to bill. It can be difficult to see how much we need to bill without the ability to filter out WIP in this way.
By using our Job Categories to split these billings models, we use Job Category as a filter so we can easily filter between our Billable Fees, and our Fixed Price Agreements.
At a starting point, we would want our Job Categories to be split between:
- Fixed Price Agreement
- Billable Fees
Internal is the Job Category we would use for our internal jobs for non productive time.
We may want to use some variation on the names provided above. Perhaps you call your Fixed Price Agreements ‘Month Service Agreements”, and your Billable Fees are called Time Charge Agreements”. This is fine, we just want to ensure we are splitting our Job Categories by the different billing models so we can filter our WIP reports.
There is another problem we need to solve using our Job Categories, which is our revenue mappings to Xero. There are three levels of hierarchy for your revenue stream mappings from XPM to Xero. These are:
- Task and Cost Mappings (Highest Level)
- Job Category Mappings
- Default Mappings (Lowest Level)
We want to set up our revenue streams to be mapped from our Job Categories. This will override the Default mappings, but not the Task and Cost mappings, so we need to ensure we DO NOT have any revenue streams setup on our Tasks and Costs. This will be covered in more detail in the next section of this document.
It is also worth pointing out that our Fixed Price Agreements are billed from Xero, so we split our revenue streams in our Xero invoices, rather than using the Job Categories in XPM. This means we only need to worry about splitting out our Billable Fees Job Categories by the different revenue streams.
Let’s look at an example. You could have a Fixed Price Agreement that includes Annual Accounts, GST, Payroll, and Coaching. The first three tasks should be coded as ‘Compliance Revenue’, whereas the Coaching Task should be coded as ‘Advisory Revenue’. This means we would set up our repeating invoice in Xero to be split by these four services with the appropriate revenue codes.
If this exact engagement has a Billable Fees, you may want to split it into two jobs. One for all the Compliance work, and one of the Coaching work. This is so we can set the appropriate Job Category in each job so our revenue streams are correctly populated when the invoice arrives in Xero.
Here is an example list of Job Categories:
- Fixed Price Agreement
- Billable Fees - Compliance
- Billable Fees - Advisory
This is a nice tidy list, but some people like to break these out a bit further to define whether the compliance and advisory is repeating, or one off. The benefit of this approach is you can see how much of your revenue is repeating work, and which is one off. If we wanted to do this we would therefore set up our Job Categories like this:
- Fixed Price Agreement
- Billable Fees - Compliance (one off)
- Billable Fees - Compliance (repeating)
- Billable Fees - Advisory (one off)
- Billable Fees - Advisory (repeating)
We do not worry about allocating the Fixed Price Agreement or Internal Categories a revenue stream. This is because we will be invoicing our Fixed Price Agreements from Xero, and our Internal jobs we do not invoice. Our Billable Fees however, we want to split out based on the revenue streams.
On a final note, the reason we do not use Task and Cost revenue mappings is because these are not picked up for any interim invoices. So if you send a deposit invoice for some work, the Tasks and Costs are not invoiced and therefore XPM does not know which revenue codes to use, so it goes to the next layer which is the Job Categories, and if we have nothing there, it will go to default. If we setup the revenue mappings based on Job Categories however, it will always pick up the Job Category revenue code regardless of whether it is a time invoice, or an interim. This is the main reason we recommend this method.
You can watch our video that explains Job Categories here.
How to Resolve
If you currently have Job Categories setup that are not inline with what has been described above, the first step is to create the new job categories. It is optional whether you want to separate the revenue streams by Repeating and One Off, but it is a good idea to at least break out by Advisory and Compliance.
To make the update faster, it’s a good idea to rename the Job Categories that are most widely used in the jobs. For example, if 80% of your jobs have ‘Compliance’ as the Job Category, and most are Billable Fees, then rename this ‘Compliance’ Job Category to ‘Billable Fees - Compliance’ and assign it the correct revenue steam. This will auto-update all your jobs with that category to the new name so you don’t have to edit all these jobs.
The next step is to remove all revenue mappings from Tasks and Costs in your database. You can do this by going to settings, then to Tasks, and click into each task and remove the revenue mappings in the ‘Income’ field. Do the same for costs by clicking into the cost database and removing all the revenue mappings.
You then need to update each active job with the new Job Category. Hopefully you were able to update most of them automatically by updating the Job Category name. For those that need to be updated, click into the job, change the Job Category, then hit save.
Once all your job categories are updated, you then need to update all your recurring jobs to the new Job Categories you have set up. Click into each of them and allocate them the appropriate Job Category. When the job is created on its next renewal date, it will be created with this new Job Category.
Once all jobs and recurring jobs have been updated, you can delete the old Job Categories that are no longer in use.
Steps to Resolve
- Create your new job categories as described in the video above. To make this
- Go to your task admin and edit each task to remove any revenue mappings.
- Go to your cost admin and edit each cost to remove any revenue mappings.
- Click into each job and update the job category to one of the new ones you have created.
- Click into each recurring job and update the job category to one of the new ones you have created.
- Delete the old job categories from your Job Category list.
If you work without distractions, you should be able to setup your new job categories, and delete the Task and Cost mappings in about half an hour. You should then be able to update your job categories on jobs at a rate of around 500 jobs per hour. Deleting old job categories should take no more than 5 minutes. So if you have 1,000 jobs, you’re looking at about 2.5 hours work.