Open a reconciliation report built on exact NDC matching and you will see a list of shortages and overages. The trouble is that most of them are not real. They are NDC swaps in disguise. To run a pharmacy on that report, you first have to separate the phantoms from the genuine gaps.
Definitions that matter
- NDC swap (phantom shortage). The drug was purchased and dispensed, but billing and purchasing recorded different NDCs for it. No real gap exists.
- True shortage. You billed for a quantity of a drug that your purchase records do not account for. A genuine gap that costs money or invites audit questions.
Why they look identical
On an exact-match report, both show up the same way: a billed line with no matching purchase. The report cannot tell that one is a manufacturer swap and the other is a missing purchase. Without family-level mapping, every swap masquerades as a shortage - and every real shortage is camouflaged among them.
How detection separates them
Swap detection adds a step the spreadsheet cannot: it normalizes each NDC and maps it into a drug family before matching. Then the logic is simple:
- If a billed NDC pairs with a purchased NDC in the same family at matching quantity, it is a swap and resolves automatically.
- If a billed quantity still has no matching purchase after family mapping, that is a true shortage and stays flagged.
- If a billed line is short by part of its quantity, the swap resolves and the remaining gap is flagged as a partial true shortage.
Why this is the whole game
A reconciliation report is only useful if you can act on it. When 80% of the flagged items are phantom swaps, the report is noise - and the real shortages, the ones worth recovering or defending in an audit, hide in that noise. Separating swaps from true shortages is what turns a reconciliation from a confusing list into a short, actionable worklist.
Once you can tell the two apart, the natural next question is how much an undetected swap actually costs you. The next article walks through a worked example, line by line.