Skip to content

The Expense Report Nobody Wanted to Touch

How Two SuiteProjects Pro Scripts Turned a Dreaded Month-End Chore Into a Non-Event

There is a task in every professional services organization that nobody volunteers for. It sits in a gray zone between finance and operations, it surfaces at the worst possible time, usually right before a billing cycle, and it has a way of multiplying the moment you think you have it under control.

For one of our clients, that task was updating mileage reimbursement rates.

On the surface, it sounds simple enough. A government agency updates the allowable reimbursement rate for kilometreage. Someone on the finance team looks it up, opens SuiteProjects Pro, and updates the rate on the Expense Category record. Done.

Except it was never done. Because the rate on the Expense Category record was only half the job.

The Hidden Scope of a Simple Rate Change

This client manages projects across multiple business units, with dozens of active engagements running concurrently. Each project has its own Expense Policy, a set of rules that governs what can be expensed, at what rate, and under what conditions. And each of those policies has its own line item for mileage.

So when the government rate changed, the correct reimbursement amount existed on the Expense Category record in one place, and the wrong reimbursement amount persisted in however many Expense Policy lines were attached to active projects. Which, depending on the month, could be a lot.

The rate on the Expense Category was right. Every Expense Policy line attached to every active project was still wrong. And that gap was where the billing errors lived.

The manual process looked like this: someone would pull a list of projects with mileage expense policies, open each one, find the policy line, update the rate, save the record, and move on to the next. On a good day with a short project list, it might take an hour. On a bad day or when the rate changed mid-year and someone forgot it could take much longer, and there was no reliable way to confirm every project had been updated correctly.

There was a second, related problem waiting in the wings. Even when rates were correct, expense submissions themselves were creating headaches. Employees were occasionally submitting expense reports without the required receipt attachments. Others were coding expenses to project tasks that were not designated for expense entry. Both issues created back-and-forth between finance and the submitter, delayed reimbursements, and cluttered up the billing process with corrections.

Two Scripts, One Coherent Solution

Top Step addressed both problems with a pair of targeted SuiteProjects Pro scripts. Neither is complicated in concept. Both have significant impact in practice.

Script One: Update Expense Policies Globally

The first script automates the cascade of rate updates that previously had to happen one project at a time.

Here is how it works: when the finance team updates the rate on a Mileage or Kilometreage Expense Category record in SPP, they check a single checkbox field called “Update Expense Policies.” That checkbox is the trigger. On its next scheduled run, the script scans every Expense Policy Line in the system that references that Expense Category, and updates the maximum rate on each line to match the new value on the Category record. When the run is complete, it unchecks the trigger checkbox field automatically, leaving the record clean.

One checkbox. One script run. Every project updated.

The script also includes a project-level override for edge cases. If a specific project has negotiated a different reimbursement rate for contractual reasons, a field on that project record called “Skip Policy Updates” can be flagged. When the script encounters that project, it leaves its Expense Policy line alone. The exception is intentional and documented, not an oversight.

An effective date field was also added to the Expense Category record, so the rate change does not apply until the appropriate date, which is useful when a government rate update is announced in advance but does not take effect until the new fiscal period.

One checkbox. One script run. Every project updated including the edge cases that would have been easiest to miss.

The impact on the finance team was immediate. A task that used to require careful, project-by-project manual work now runs in the background. The team updates the Expense Category, checks the box, and moves on. The script handles the rest.

Script Two: Expense Report Submission Validation

The second script operates at the point of submission rather than in the background, functioning as a gatekeeper that catches two common classes of expense report errors before they enter the approval queue.

The first check: required attachments. Certain expense categories either by their nature or by company policy require a receipt to be attached before the report can be submitted. The script reads a checkbox field on each Expense Category record called “Receipt Required.” If a submitted report includes a line item from one of those categories and no attachment is present, the script blocks submission and surfaces a clear error message identifying which items are missing documentation.

The second check: eligible tasks. Not every task on a project is set up to accept expense entries. The script reads a corresponding checkbox field on the Project Task record called “Expenses Allowed.” If a report line is coded to a task where that field is not checked, submission is blocked and the error message identifies the specific task, prompting the submitter to select an appropriate one.

It is worth noting that this script was originally sourced from a SuiteAnswers automation sample as a starting point, not a finished solution. What made it valuable was the customization layer applied on top: adding the bilingual error messages (the client operates across both English and French-speaking teams), configuring the specific field logic for their Expense Category and Project Task setup, and integrating it cleanly into their existing submission workflow.

The result is that by the time an expense report reaches an approver, it is complete. Receipts are attached. Tasks are correctly coded. The back-and-forth that used to slow down reimbursements and billing has been largely eliminated at the source.

What These Scripts Have in Common

On the surface, these two scripts solve different problems. One runs on a schedule and touches the backend configuration of how expense rates are managed across projects. The other runs at the moment of form submission and validates what an employee is doing in real time.

But they share a common design philosophy: find the place where errors enter the system and close it.

Mileage rate errors enter the system when a Category record is updated but Expense Policy lines are not. The global update script closes that gap. Submission errors enter the system when employees attach incomplete reports or code expenses incorrectly. The validation script closes that gap.

Neither script requires significant ongoing maintenance. Neither demands changes to how the finance team or employees fundamentally work. They sit quietly in the background, doing the checking and updating that humans would otherwise have to do manually and occasionally forget.

The best scripts are the ones you stop thinking about. They run, they work, and the problem they were solving simply stops being a problem.

Is Your Expense Process Creating Hidden Work?

Most professional services organizations have at least one version of the expense report nobody wants to touch. It might be mileage rates. It might be a different category of reimbursable expense, or a different kind of policy line that requires periodic reconciliation. The manual process exists, it takes time, and it is prone to the kind of small, hard-to-catch errors that surface at exactly the wrong moment.

SuiteProjects Pro scripting can address these gaps directly, with solutions tailored to your specific policies, field structures, and workflows. If your team is spending time on tasks that feel like they should be automated, or catching expense errors that feel like they should have been caught earlier, we would be glad to talk through what a targeted script could do.

Contact Top Step to discuss how SuiteProjects Pro scripting can simplify your expense management workflows.

 

Scroll To Top