Acumatica · Customization

Acumatica Project Billing Rules — Progress, Milestone, and More

How to configure Acumatica project billing — progress billing, milestone-based, time-and-materials, fixed-fee, and the rules that determine when an invoice is generated.

John Kihiu12 min read

Billing rules are the most underrated piece of Acumatica's Projects module. Most implementations copy the demo T&M rule, attach it to every task, and then handle every non-trivial billing arrangement manually with credit memos and apologies. That's a waste, because the billing rule engine — steps, filters, formulas, rate tables — can express almost any commercial arrangement I've met: time and material, fixed price on progress, milestones, cost-plus with caps, and combinations per task. Here's how the pieces fit and the patterns I actually deploy.

How a billing rule executes

A billing rule (PM207000) is a set of steps. Each step is one of two types: Time and Material steps read unbilled PM transactions filtered by account group and turn them into invoice lines; Budget steps read the project budget (revenue budget lines) and bill an amount — typically pending invoice amounts you set through progress or a formula. When you run Project Billing (PM503000 or the Bill button on the project), each task's assigned rule executes step by step, and the output is a pro-forma invoice (if enabled) or a draft AR invoice.

Because the rule attaches per task, one project can mix arrangements: task 010 fixed-price on milestones, task 020 T&M for change orders, task 030 rebillable expenses at cost plus 10%. That per-task composition is the design insight most people miss.

T&M steps: the workhorse

A T&M step's essentials: the account group filter (which PM transactions it consumes — typically LABOR and a rebillable expense group), the rate type, and the invoice description formula. Rates deserve attention. Rate tables (PM206000) resolve a price from a sequence of criteria — rate type, then rate code sequences matching project, task, employee, labor item — and the first matching sequence wins. My advice: keep the sequence hierarchy shallow (project-specific overrides, then a standard rate by labor item) and document it, because debugging "why did this hour bill at the wrong rate" through a five-level rate table is genuinely painful.

Formulas on the step control line aggregation and descriptions. A description formula like this keeps invoices readable:

Formula
=[PMTran.Date] + ' - ' + [EPEmployee.AcctName]
  + ' - ' + [PMTran.Description]

Aggregate by employee and date for professional-services invoices; itemize per transaction for audit-heavy clients. It's a checkbox-level change with a big effect on how many invoice disputes you field.

Progress billing (fixed price)

Budget steps bill from the revenue budget. The standard fixed-price pattern: put the contract value on revenue budget lines, and each period the PM enters completed % (or a pending invoice amount directly) on the project's revenue budget tab. The budget step picks up the pending amount and invoices it. Two operational notes:

Milestone billing

Milestones are progress billing with discipline. Model each milestone as its own revenue budget line (or its own task, if deliverables need separate cost tracking): "Milestone 1 — Design sign-off, 30,000." When the milestone is achieved, set that line's pending amount to 100% and bill. The reason to prefer lines-per-milestone over one line with creeping percentages is auditability — the invoice shows the milestone by name, and an argument with the customer becomes "was this delivered," not "is 47% fair."

Retainage lives here too

Construction-style contracts holding 10% until completion: enable retainage on the project and the billing rule's steps can carry a retainage percentage per line. Release retainage as its own billing event at the end. Don't simulate retainage with manual credit memos — unwinding that at project close is horrible.

Cost-plus and caps

Cost-plus is a T&M step over cost account groups with a markup formula (multiply the amount, or use the rate table with a % markup rate type). Contract caps — "T&M not to exceed 50,000" — use the limits feature: set a maximum amount tied to the revenue budget, and billing stops at the cap while the excess stays as unbilled WIP for the uncomfortable conversation it deserves.

Testing a billing rule

Before attaching a rule to live projects, I build one sandbox project per arrangement and run a full cycle: post known time/expenses, run billing, verify the pro-forma line by line, release, check AR and the project's billed-to-date. Billing rules fail quietly — a wrong account group filter doesn't error, it just silently bills nothing — so the test isn't "does it run," it's "does every transaction I expected appear, and nothing else."

Wrapping up

Compose per task: T&M steps for effort, budget steps for fixed-price and milestones, rate tables kept shallow, pro-formas always on, limits for caps and retainage where the contract demands it. The engine can express the contract you actually signed — the work is mapping the commercial terms onto steps deliberately instead of forcing everything through one copied T&M rule.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.