Acumatica · Customization

Acumatica Projects — Time and Expense Capture

How Acumatica Projects handles time and expense capture — timesheets, expense claims, approvals, and the project budget that catches overruns early.

John Kihiu12 min read

Project accounting in Acumatica lives or dies on capture. The billing rules, WIP reports and profitability dashboards are all downstream of one unglamorous question: do time and expenses actually get recorded, promptly, against the right project and task? I've implemented the Projects module for engineering firms and a services company, and in every case the configuration took a week while the capture discipline took a quarter. Here's how the machinery works and where it fights you.

The capture pipeline

Time flows through time cards (or the simpler time activities), expenses through expense claims and expense receipts. Both end up as PM transactions — the atomic unit of project accounting, living in PMTran — tagged with project, project task, cost code (if enabled), inventory item (for labor, a non-stock item representing the labor type), and account group. Billing rules later read those PM transactions to build invoices; the account group is the pivot the whole thing turns on, so mis-mapped account groups are the number one cause of "billable time that never billed."

Time entry: what users actually tolerate

Acumatica gives you employee time cards (EP305000) on a weekly grid, time activities attached to cases/tasks/events, and mobile entry through the Acumatica app. Some hard-won guidance:

Expenses: receipts, claims and corporate cards

The expense flow is receipt → claim → release, and the mobile app's receipt capture (photograph the receipt, OCR pre-fills amount and date on recent versions) is genuinely the best part of the module. Configuration points that matter:

C#
protected virtual void _(Events.RowPersisting<EPExpenseClaimDetails> e)
{
    var row = e.Row;
    if (row == null || row.CuryTranAmt <= 50m) return;

    // require an attachment (receipt) above the threshold
    var noteFiles = PXNoteAttribute.GetFileNotes(Base.Caches[e.Row.GetType()], row);
    if (noteFiles == null || noteFiles.Length == 0)
        throw new PXRowPersistingException(
            nameof(EPExpenseClaimDetails.curyTranAmt), row.CuryTranAmt,
            "Receipts over 50 require an attached image.");
}

From capture to project cost

On release, time cards and expense claims generate PM transactions (and GL entries per the posting setup). Watch two things in the first month of go-live: unreleased documents piling up (a GI listing open time cards and claims older than N days, on the PM's dashboard, fixes this socially), and the date the cost lands — PM transactions carry the transaction date, so late-entered time distorts week-by-week burn charts even when totals are right. The cure is capture discipline, not configuration.

Cost codes: opt in deliberately

Cost codes add a third dimension (project → task → cost code), which construction clients need and services clients mostly don't. Turning them on is easy; retrofitting thousands of transactions after turning them on late is not. Decide up front.

What good looks like

A healthy install has: same-day or next-day time entry above 80%, expense claims released within a week, zero PM transactions with missing account groups, and a project manager who checks the committed-vs-actual dashboard without being asked. Every one of those is measurable with a Generic Inquiry, and I set the four of them up as dashboard KPIs during go-live so the slide back into old habits is visible immediately.

Wrapping up

The Projects module's capture machinery — time cards, expense claims, PM transactions, account groups — is solid and flexible. The failure modes are almost all upstream of the software: unrestricted lookups, gap-ridden rate tables, unreleased documents, and slow entry habits. Configure the guardrails, trim the mobile screens, put staleness on a dashboard, and the billing and profitability layers downstream get dramatically easier.

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.