A new version of the diagnosis code set takes effect part-way through your financial year. What has to happen across the systems that code and bill?
Anchor every coding decision to the date of service rather than the date of processing, then find every downstream copy of a code - payer rules, contract terms, authorisation records, reports - and version those too. The quiet casualty is your own trend data.
What the interviewer is scoring
- Does the candidate separate a classification used for billing from a clinical terminology used for recording
- Whether the date of service is named as the field that selects which version applies
- That codes copied into contracts, edit rules and authorisation records are identified as the real migration surface
- Whether the break in year-on-year reporting is raised before anyone in finance discovers it
- Does the candidate plan for counterparties adopting the new version at a different moment than you do
Answer
Establish which code sets are in scope before anything else
"The codes are changing" is never one change, and the first thing a strong answer does is separate the vocabularies, because they update on different cycles and are owned by different people.
A diagnosis classification such as ICD-10 exists to group conditions for statistics and payment, and it is revised periodically with codes added, split, retired and redefined. A procedure code set is separate again, maintained by a different body, revised on its own cycle, and used to say what was done. Sitting underneath both, in a well-run organisation, is a clinical terminology such as SNOMED CT used to record what the clinician meant, which is much finer-grained and does not change in step with the billing classifications. Then there are the artefacts that consume those codes: the grouping logic that turns a coded inpatient stay into a payment category, the payer's edit rules that decide whether a diagnosis supports a procedure, the local charge master, and every internal report.
So the scope question is not "which codes changed" but "which of our own artefacts contain a code". That set is always larger than the coding team's list, and finding it is most of the work.
The date of service is the version selector
The single design decision that makes the rest tractable is that the applicable version of a code set is determined by when the care happened, not by when anyone touched the record. An encounter from before the effective date is coded, corrected, rebilled and appealed under the old version for as long as it lives, which may be years.
That has consequences people miss. Coding work is not instantaneous, so on any given day your coders are working accounts on both sides of the boundary and the software has to present the right code set for each, not a single global switch. Validation has to be evaluated as of the date of service too, otherwise a perfectly valid old-version code fails an edit written for the new one. A late charge added to an old encounter carries the old version. And a rebill of a two-year-old account is not an opportunity to recode it under current rules.
The mechanical form of this is that every code table carries a valid-from and valid-to date, every reference to a code carries the date context that selected it, and nothing is ever deleted from the table. Retiring a code means giving it an end date, because the encounters that used it still exist and still have to be readable.
The copies of a code nobody versioned
The migration surface is the set of places where a code has been copied out of the code table into something else, and each has its own failure.
Payer contracts name codes in carve-outs, exclusions and rates, so a code that has split into three leaves the contract silent about two of them and a reimbursement argument follows. Internal edit and scrubbing rules reference codes directly, and rules written against retired codes simply stop firing, which is worse than failing loudly because the claims then go out unchecked. Authorisation records hold the code the approval was granted against, so a long-running authorisation crosses the boundary and the claim arrives bearing a code the approval does not mention. Clinical decision support, registry submissions, quality measures and patient-facing summaries all carry their own embedded lists. And any code compiled into application logic rather than held as configuration will be found the hard way.
The crosswalk between old and new codes is where candidates over-promise. Mappings are frequently one-to-many or many-to-one, and a many-to-one mapping destroys distinctions that somebody's rule depends on, while a one-to-many mapping cannot be applied automatically because choosing among the targets requires clinical information the mapping does not contain. The honest deliverable is a mapping plus a list of cases that cannot be mapped mechanically, and a named owner for that list.
Your own trend line breaks before anyone notices
The failure that reliably escapes the release plan is not a rejected claim. It is that every longitudinal number you produce becomes untrustworthy at the boundary, and nothing anywhere reports an error.
When a code splits, the counts under the parent concept fall and the counts under the new children appear from nowhere. When two codes merge, an apparent surge arrives. When a definition is tightened, incidence drops without any change in the population. Case mix shifts, so payment per case shifts, so the finance variance report shows something that looks like an operational change and is not. Somebody will build a narrative on that before anyone checks the code set, and case-mix drift is exactly the signal that also indicates upcoding, which is why conflating the two is expensive.
The control is to decide, in advance, how time series will be handled: which reports are restated onto a common grouping, which are explicitly broken with a documented discontinuity, and which are simply reported per version. Publishing the boundary date alongside the numbers costs nothing and prevents a quarter of arguments.
Running the change
Sequence it as a dated release rather than a deployment. Load the new tables with their effective dates early and leave them inert, so the switch is a date arriving rather than code shipping. Work the coding backlog down before the boundary, because an account coded three weeks late under the wrong version is a rework item and the queue is where they accumulate. Rehearse by recoding a sample of real encounters under both versions and comparing the payment outcome, which is the only way to find out that a grouping change has moved money before it moves.
Then treat your counterparties as independently versioned. Clearing houses, payers and downstream registries adopt on their own timetable, and a claim that is correct for the date of service can still be rejected by a party that has not caught up, or by one that has moved on while you have not. Watch rejection reasons by payer for a few weeks either side of the boundary, because the shape of that curve tells you which of them is out of step, and treat a spike in front-end rejections as a version problem until proven otherwise.
Code sets are data with dates on them, and the encounter chooses the version. Every place your estate has copied a code into a contract, a rule or a report is a place where that discipline is not enforced, and that is where the change will actually hurt.
Likely follow-ups
- An account is coded after the effective date for an encounter before it. Which version wins, and who enforces that?
- A prior authorisation was granted against a code that no longer exists. What happens when the claim arrives?
- How would you find the places in the estate where a code is embedded in logic rather than in data?
- What would you tell an analyst who reports that a condition's incidence jumped in one month?
Related questions
- The business wants to change a rating factor next Monday. Walk me through what actually has to happen.hardAlso on effective-dating5 min
- A broker asks you to backdate a cover change to three months ago. How do you model the policy so that works?hardAlso on effective-dating5 min
- How do you turn what the business tells you into a domain model that holds up once the exceptions arrive?hardAlso on effective-dating7 min
- You are building the payer side. How do you configure benefits so a plan change does not need a code release?hardAlso on effective-dating6 min
- The business says "we need a dashboard" and gives you a three-week deadline. Walk me through what you do first.mediumAlso on reporting5 min
- How does a clinical encounter turn into a bill?mediumAlso on revenue-cycle5 min
- A maintenance script deletes rows it should not have touched, and nobody notices for six hours. Walk me through the recovery.hardSame kind of round: scenario6 min
- A customer ports their number away to another operator. What has to happen on your side, and what usually goes wrong?hardSame kind of round: scenario6 min