Workflow · Workflow

Acumatica Workflow — Leave Request Patterns

Acumatica Workflow — Leave Request Patterns is one of the most common workflow customisations in Acumatica. Every business has a process that does not fit the standard approval.

John Kihiu12 min read

Leave request approval (Employee Self-Service, screen EP305500, graph EmployeeTimeCardMaint/the time-off request entity depending on your build) is the workflow non-finance stakeholders actually interact with the most, which means the UX expectations are different from AP or PO approval — employees expect near-instant feedback, and managers approve from a phone as often as a desktop. The technical requirements this drives are worth calling out specifically.

Balance validation has to happen before the transition, not as part of it

A leave request for more days than the employee has accrued shouldn't reach a manager's queue at all — it should be rejected at entry, before workflow routing even begins. This is a validation concern, not a workflow condition: I check accrued balance in a RowPersisting handler (or via the Time and Expenses balance API if leave balances are tracked in a connected module) and throw a PXSetPropertyException if the request exceeds balance, rather than letting the request enter PendingApproval and relying on the manager to notice and reject it. Managers rubber-stamp; balance checks should not depend on them catching a math error.

C#
protected virtual void EPLeaveRequest_RowPersisting(PXCache cache,
    PXRowPersistingEventArgs e)
{
    var request = (EPLeaveRequest)e.Row;
    if (request == null) return;

    decimal available = GetAccruedBalance(request.EmployeeID, request.LeaveType);
    if (request.RequestedDays > available)
    {
        cache.RaiseExceptionHandling<EPLeaveRequest.requestedDays>(request,
            request.RequestedDays,
            new PXSetPropertyException(
                "Requested {0} days exceeds available balance of {1}.",
                PXErrorLevel.Error, request.RequestedDays, available));
    }
}

Direct-manager assignment is the default case this workflow gets right for free

Unlike the conditional-assignment scenarios I've built for POs or vendors, leave request approval maps almost perfectly onto the stock "by condition, resolve manager via Report-To" assignment rule — this is the one workflow in this series where the out-of-box condition-based rule genuinely is the whole requirement, with no graph extension needed. The complexity clients actually ask for is what happens when the manager is also on leave — skip-level escalation — which the stock delegation feature (set on the manager's own Employee Preferences, effective-dated) handles natively if configured, so this is a configuration conversation with the client's HR team, not a development task.

Calendar conflicts: a check the workflow can gate on, but shouldn't decide

Some clients want "don't let more than N people from the same team be on leave simultaneously" enforced automatically. I push back on making this a hard workflow gate — team coverage judgment calls belong with the manager, not a formula — and instead surface the conflict as information in the approval notification (a computed count of overlapping approved leave in the same workgroup for the requested date range) so the manager approves or rejects with full context, rather than the system silently blocking a request the manager would have actually wanted to approve (someone covering, a quiet period, whatever context the system doesn't have).

Resist over-automating human judgment calls

Leave request workflows are the ones most likely to get over-engineered with hard business rules that don't survive contact with real team dynamics. Compute the useful number (accrued balance, team overlap) and let the human decide; reserve hard gates for things that are genuinely non-negotiable, like balance never going negative.

Design for the approval happening on a phone, days later than ideal

Because leave approval routes to managers who are often themselves traveling or on leave, response time matters more here than in AP workflows where someone is at a desk daily. I make sure the approval email/notification includes enough context to approve directly from the notification (via Acumatica's mobile app deep link or an action link in the email) rather than requiring a full desktop login — and set a sensible reminder/escalation interval (2-3 days, not the default which is sometimes much longer) so a request doesn't silently sit past the employee's intended leave start date.

Wrapping up

Leave request approval is refreshingly close to a stock configuration exercise — validate balance before the workflow ever sees the request, lean on the built-in manager-chain assignment rule, and resist the urge to hard-code team-coverage rules that belong with human judgment. The real engineering effort goes into notification design and response-time tuning, not into the Configure method.

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.