Rather than porting the legacy app screen-for-screen, a multi-year program that would have faithfully reproduced the same manual bottleneck, I rebuilt it as a modern web application: roughly 60–70% of the legacy system rebuilt completely, prioritized by what analysts actually use daily, plus the AI extraction capability the legacy app never had.
The technical decision: AI extraction is an optional, pluggable mode with manual entry as a permanent fallback. The product degrades gracefully and is never hostage to a model endpoint being available.
The backend started on Python (FastAPI). Partway through the build I learned the rest of the company's applications run on .NET, so I rebuilt the backend on .NET 8 to match the enterprise stack. That is the backend in use today; the Python version is retired.
Benchmarking works differently depending on what's being priced: capital equipment is compared by discount from list price, consumables by price percentile across other hospitals. A tornado chart shows which lines drive the gap, and reports export in two formats.
The extraction capability proven inside this prototype shipped separately as a standalone production tool, AI Quote Automation, now in daily analyst use.