Your HRIS Remembers Salaries. Can It Remember the Roster You Billed?

Your HR system can almost certainly tell you what an agent earned on a day last spring. That is the easy half. In a multi-client contact centre, the record that protects your pay run and your client invoice is the roster: who was assigned to which client, at what rate, on which day. That one lives between your HRIS and your WFM tool, and a backdated change can rewrite it out from under an invoice you already sent.

Serge Belov

Serge Belov

Founder, FrontLine · Published August 14, 2026

A client calls to dispute last month's invoice. They want to know why they were billed for fourteen agents in the week of the 8th when they only ever saw twelve on their program. You go to reconstruct it, and you find that two agents were moved off that account on the 20th, backdated to the 6th, after the invoice had already run.

So which roster is true. The one you billed from, or the one your system shows you now. If you cannot produce both, you cannot defend the invoice, and you should not fully trust the pay run for that period either.

This is where the expensive disputes in a multi-client centre actually come from. Not from bad math. From not being able to reproduce the roster exactly as it stood on a past day, before and after someone changed it.

Your HRIS probably does keep history

Let me clear one thing out of the way first, because it is the objection every HRIS admin will raise, and they are right to raise it.

Modern HR systems keep history. PeopleSoft has stored effective-dated rows since the 1990s, specifically, in Oracle's words, to maintain an accurate history of information over time. Workday, Oracle HCM Cloud, and SAP SuccessFactors all effective-date their core objects. So do most of the mid-market: BambooHR, Rippling, ADP, UKG. If you can run a report "as of April 1" and get an agent's job title and salary as they were on that day, your HRIS is doing what data people call Slowly Changing Dimension Type 2: a versioned, effective-dated history. That is table stakes, and most of the market clears it.

So this is not a "HR software has no memory" article. The problem is narrower and sharper than that, and it lives in two places the effective-dated employment record does not reach.

One clock is not enough

The first is that effective-dating tracks a single clock: when a fact was true. It does not track a second clock that matters just as much for money: when you found out.

Martin Fowler has the cleanest example of why that gap bites. Sally's raise is entered on March 15, effective February 15. Ask "what was Sally's salary on February 25" and there are two correct answers. Six thousand, as you believed it and paid it at the time. Sixty-five hundred, as you know it now, after the backdated entry. For anything you already acted on, a paycheque you cut, an invoice you sent, the number you have to be able to reproduce is the one you believed then, not the one you know now.

Holding both answers at once is what data people call bitemporal: valid time, when the fact was true, plus transaction time, when it was recorded. It is genuinely rare. Among mainstream HR systems Workday's reporting is the clean exception, with an Effective Date and a separate Entry Date that lets a report ignore later backdated entries. Most of the others, when you correct a past record, edit the row in place. The corrected value is right going forward, but the value you believed on the original day is overwritten unless you go digging in an audit log. That overwritten value is exactly the one a pay dispute or a billing dispute turns on.

But the roster was never in your HRIS anyway

The second place, and the bigger one, is that the record you bill and pay against is not the employment record at all. It is the roster: which client and line of business each agent was assigned to, at what bill rate and what pay rate, on a given day.

In a single-employer company those are nearly the same thing. In a multi-client contact centre they are not. An agent's base salary can sit unchanged for a year while their client assignment, and the rate you bill for it, moves three times. The salary is not the billable fact. The assignment-and-rate, by day, is.

And that record does not live in your HRIS. It lives in your workforce management or scheduling tool. This is where the argument gets uncomfortable, because those tools were not built to hold a defensible pay and billing history. They were built to drive an adherence number. What they keep is a short change log. Calabrio recalculates adherence for retroactive schedule changes up to thirty days back. NICE CXone considers schedule updates within roughly the previous three months. The Zendesk and Talkdesk family expose schedule-change history for the past ninety days. Genesys Cloud keeps an audit log of actions with no versioned schedule at all. That is enough to answer "was this agent on time." It is not built to answer "reconstruct the paid-and-billed roster for the week of the 8th, as it stood before the backdated change." And in the tools I have looked at, the commercial piece, client assignment carrying a rate, is not modelled as a versioned, point-in-time object at all.

So the roster-as-was falls straight into the crack between the two systems. The HRIS keeps the employment record and assumes the roster is someone else's problem. The WFM (Workforce Management: forecasting, scheduling, and adherence.) tool keeps the schedule and assumes the commercial record is someone else's problem. Nobody owns the one thing you actually get audited on.

What that crack costs

Three places it shows up, and none of them are hypothetical once you run more than one client.

Pay. Retroactive pay is routine, not an edge case: a rate change with a past effective date means recomputing against the correct rate for each affected day. If you cannot pin the rate an agent actually carried on each day of a past period, retro pay is a guess, and it is a guess a labour board can ask you to defend.

Billing. An invoice is only as defensible as your ability to show who was assigned to that client, at what rate, on which days. A reassignment backdated after the invoice ran quietly changes that basis. You are not doing anything wrong. Your system simply cannot show the version you billed from anymore.

Reporting and audit. Headcount, staffing, and SLA (Service Level Agreement: a contractual performance target, e.g. answering X% of calls within Y seconds.) numbers have to reconcile to the roster as it was, not as it is now. When a client or an auditor asks, "as it is now" is the wrong answer, and "as we knew it then" is the one you need to have.

None of this is exotic. It is the ordinary result of backdated changes meeting a record that nobody versioned properly.

What it takes to hold the seam

So what does doing this right actually require. Three things.

First, the roster itself, client and line-of-business assignment with its rates, has to be first-class, effective-dated data, versioned the way your HRIS already versions a salary. Not a nightly snapshot of current state, which is precisely the thing that cannot survive a backdated edit.

Second, it should be bitemporal, so you can answer both "what was true on that day" and "what we knew on that day." At a minimum the system has to preserve the value you believed at the time instead of overwriting it on correction.

Third, it has to live across the seam. A backdated assignment or rate change has to update pay, billing, and reporting from one record, or you are back to three teams reconciling by hand and hoping they land on the same number.

This is the part FrontLine was built to hold, and I will be plain about what that does and does not mean. FrontLine scopes every record to tenant, client, and line of business, keeps assignment history effective-dated, and writes an immutable audit event on every change, so the roster you billed from stays reproducible after the fact. That is holding the seam. It is not a claim that we are the only system with a memory. Your HRIS has a memory, and a good one. It is a claim about which record, and across which boundary.

If you are evaluating anything, the questions that separate a real answer from a snapshot are short:

Can you reproduce the full roster, client assignment and rate included, exactly as it stood on an arbitrary past day, including changes that were backdated after that day?

Is client assignment with its rate a versioned object, or a current-state field that the last edit overwrote?

When a change is backdated, does it flow to pay, billing, and reporting from one record, or do three teams reconcile it by hand?

If the answer to the first one is a snapshot and a shrug, you already know where your next billing dispute is headed.

The takeaway

Your HRIS remembering salaries is table stakes, and most of the market clears it. The record that actually protects you in a multi-client centre is the one that sits between systems: the roster, with its client assignments and rates, reproducible exactly as it stood on any past day, after backdated changes.

Effective-dating gets you the employee. Bitemporal, seam-spanning roster history gets you the invoice and the pay run. In this business, that is the difference between defending a number and hoping nobody asks.

Sources

Two time axes (bitemporal). Martin Fowler, Bitemporal History. Valid time versus transaction time, and the Sally payroll example where "her salary on Feb 25" has two correct answers.

Effective-dated HR history (SCD2). Oracle PeopleSoft, Using Effective Dates and Workday, Reporting with HCM Data. Cited to show the employment record is well handled, and that Workday's Effective Date plus Entry Date is effectively bitemporal for reporting.

SCD2 is necessary, not sufficient. Kimball Group, on retroactive Type-2 changes. A backdated change to a versioned attribute forces restating history, which the guidance calls great complexity.

Retroactive pay. Paychex, What is Retroactive Pay. Retro pay must be computed against the correct rate for each affected past day.

WFM change and recalculation windows (as documented at the time of writing, and subject to change): Calabrio, Historical Adherence (thirty days). The other windows referenced (NICE CXone roughly three months, the Zendesk and Talkdesk family ninety days, Genesys Cloud audit-log only) are drawn from current vendor help documentation.

Two honesty notes on scope. The claim that a backdated assignment change can invalidate a prior invoice reconstruction is reasoning from how these records work, not a documented vendor behaviour. The observation that WFM tools do not model a commercial client-assignment-with-rate as a versioned object is based on the absence of any such documented feature in the tools reviewed, not on a vendor statement.

Serge Belov

Serge Belov

Founder, FrontLine

Founder of FrontLine and a thirty-year contact centre solution architect. He has built and run the systems behind multi-client operations, and started FrontLine to put the whole operation, hire to retire, on one platform.

Your HRIS Remembers Salaries. Can It Remember the Roster You Billed? · Contact Centre Insights | FrontLine