In the project I work on, we handle Medical Billing.
Every time the state makes a change to the official form (which our data classes represent), in order to maintain backward compatibility with previous forms, we add the new properties but leave the old ones intact, and have a document version property which is used to determine what validation is done and UI actions to display it.
This has lead to bloated classes over the life of the project (almost 5 years of State-mandated changes), and simply not supporting old document formats is not an option.
I would like to try creating a new class for each document version, but even then we will have several copies of very similar (though slightly changed) code. And class names such as ProgressNoteV16, ProgressNoteV17 look horrible.
Inheritance can't be used, because that would still result in the same problem (classes having properties that are no longer needed). Interfaces would make the Interface just as bloated, which wouldn't solve the issue.
What are the solutions and best practices used to solve this problem?