The comp run is where a data problem stops being hypothetical. The rep calls. Then their manager calls. And the number they are disputing is tied to a paycheck.
Most of what breaks incentive compensation isn’t bad data in the usual sense. The data sources reference puts it plainly: a realignment drops a rep 40 percent overnight while the underlying data stays perfectly correct. A duplicated prescriber splits credit across two records, and nobody notices until the comp run, and then everybody notices.
Both failures pass every null check, format check, and row count you have.
The failures are relational
A column test asks whether a value is present and well formed. Alignment errors are failures of the relationship between tables: a territory ID in the roster that doesn’t exist in the hierarchy, or an account with sales activity that never made it into the account master. Every individual value is valid. The join is what’s wrong.
Alignment also changes on a schedule you don’t control. The quarterly Veeva alignment load is one of the recurring jobs that eats commercial data hours. Our own data sources reference says the roster arrives “periodically, and always at the worst moment.”
Six checks to run before the comp period closes
| Check | What it catches | TestGen test |
|---|---|---|
| Every prescriber key in the IC credit table appears once in the master | A duplicated prescriber splitting credit | Duplicate Rows, Unique Values |
| Every zip and territory in the roster exists in the current hierarchy | Orphaned territories that drop sales from the roll-up | Reference Match |
| Territory totals tie to national totals, per grouping | Integration steps dropping or double-counting rows | Aggregate Balance |
| National total matches the prior delivery after a realignment | Telling a mapping change from a data change | Aggregate Balance against the prior delivery |
| Activity and performance use the same alignment version | Field reports that never reconcile | Custom Condition on the joined data, or Reference Match on the alignment version |
| Every target resolves to a current master record | Call plans pointing at prescribers who no longer exist | Reference Match |
Most compare one table against another, or one delivery against the last. That is the point.
The fourth row settles the 40 percent call. Did the national total hold while the rep’s territory dropped? Then the mapping moved the credit. That is a sales operations conversation, not a data defect, and you can have it with evidence the same morning. If the national total moved too, something upstream changed, and the comp run waits.
The fifth row comes straight from the field performance report, which breaks under a realignment while every underlying value stays valid, and from field activity and performance being computed against different alignment versions. Once activity and performance are joined, a Custom Condition expresses that rule as one condition instead of a custom SQL query. If they live in separate tables, a Reference Match on the alignment version does the same job.
Run the identifier tests underneath all six. A transposed NPI drops a prescriber from the join while a pattern check stays green, and in the illustrative ticket from our identifier post, a rep’s territory comes up about 40 TRx short because of it.
Keep the record
The IC quota and grade inputs arrive weekly or by comp period. Whatever the cadence, the test results are your answer to a dispute. In DataOps TestGen every result takes a disposition: confirm it as a real problem, dismiss it as reviewed, or mute a known issue. That durable record of tests, results, and dispositions is what lets you show the number held.
Where the IC system fits
The IC system and the alignment design belong to sales operations and whichever vendor runs them. What they read is the data layer. That is what you test. On one launch behind a multi-billion-dollar acquisition, the incentive compensation system computed reward structures from data in Snowflake that DataKitchen software had transformed and quality checked, and IC reports were ready before launch along with field reporting.
The comp run is the wrong place to find out the alignment changed.