Aternex.
The software workshopA clinical analytics dashboard, built from scratch over HL7

Healthcare, physician services

A clinical analytics dashboard, built from scratch over HL7

Onboarding a facility became a checklist an operations manager could read, and reporting and billing got data they could trust.

Engagement
Contract, lead developer
When
2025 to 2026
Stack
  • C#
  • .NET
  • Vue
  • Next.js
  • SQL Server
  • InterSystems IRIS
  • Oracle
  • HL7
  • Hangfire
  • Okta
  • Azure Pipelines
A clearer picture of the data
HL7 messagesFlat files
FacilityBilling fieldsReview
Incoming dataVerify
Field mappingCheck
Daily metricsReport

Facility metrics. No patient details on screen.

Schematic illustration of the delivered system

The starting point

The challenge.

A national physician services company took HL7 messages from many facilities into InterSystems IRIS, fed by Oracle. Across years of data, about 2 billion records, every facility sent its data a little differently, so a value that reporting and billing expect in one field can arrive in another. When a new facility came on, nobody could easily see which fields it actually filled, which were wrong, and how complete its data was, and that fed straight into reporting and billing.

The change

The result.

A field check for every facility and daily completeness metrics over about 2 billion records, built across the engagement, with no patient details on screen.

Onboarding a facility became a checklist an operations manager could read, and reporting and billing got data they could trust.

Inside the work

How the pieces
came together.

A closer look at the decisions and changes behind the result.

  1. 01

    Built a field check for every facility: for each field reporting and billing rely on, an operations manager sees that facility's three most recent values and marks the field verified or needs review, separately for HL7 and flat-file feeds, with the reviewer recorded. At a glance they can say: this facility is sending the value we need, but in a different field than we expect.

  2. 02

    Everything else grew out of that check. Tagged every field as billing, analytical or other, and measured each facility every day: how complete its billing, analytical and other fields are, HL7 against flat-file completion, how many populated fields are verified, and the verification rate.

  3. 03

    Built an archive job that copies HL7 from IRIS into SQL Server in batches of 25,000 rows and records every run, so the analytics never query the source system.

  4. 04

    Wrote an HL7 parser that labels every field from a schema dictionary kept in the database, rather than hard-coding one message layout.

  5. 05

    Defined the operational metrics alongside them: admissions, discharges, ER visits, length of stay, ER wait, time to provider and door to decision.

  6. 06

    Rolled the metrics up daily, weekly, monthly, quarterly and yearly, recalculating only the periods that changed, with retention rules for raw and rolled-up data.

  7. 07

    Stored the full messages but kept patient details off the dashboard, and limited every screen to the Okta groups allowed to see it.

  8. 08

    Split the work into 6 .NET 10 APIs on a shared framework behind a Vue 3 dashboard, started its rewrite in Next.js, and load-tested it with 6 million generated records, 100,000 per facility across 60 facilities.

A conversation is a good place to start

Have a challenge like this?

Let’s look at what your team needs and where a focused piece of engineering could help.