Since the beginning of time, collateral has been input into the LOS by means of a form that integrates with NADA. The NADA bookout service is useful as it provides VIN verification and valuation, but it is limited in what it accepts as valid collateral. VIN lookups for new cars are usually not available in the service NADA provides us, and vehicles can only be valuated when enough data is available for the specific make and model. This means new and rare cars are generally unacceptable to our system.
The solution we agreed to was to create a new form UI where manual collateral could be entered. Because we started collateral with NADA, the system was already somewhat complex, though some care was taken to abstract out the bookout type. Still, our solution had to expand upon that abstraction, particularly in back-end persistence and front-end KnockoutJS field bindings.
We began by studying the current collateral structure and providing documentation for how the existing system handles NADA input. We added the manual collateral UI, some new fields to boot, and ensured the front-end packaging of field values into a JSON object was working in the same way as NADA.
Full abstraction of back-end persistence was next. We decided to shim a layer into the current collateral POST submission and add functionality just prior to persistence for input from all bookout types, both existing and future. This layer would be responsible for parsing the JSON, adding structs and field validation per bookout type, and repacking into a standard JSON format.
The biggest thing remaining was implementing front-end functionality. We needed to bind the new form fields using (already present, and poorly implemented) KnockoutJS, map the values, and dynamically translate those values as the user toggles bookout types according to some non-trivial business logic. Further, we had to dynamically load bookout-specific functionality from front-end viewmodels, properly handling cases where the code was already loaded.
All the remained after we completed the tasks above was to update some services consuming collateral data and to ensure everything across the application was functioning as it had before.