← back

Lab Analyzer Integration API

An ASP.NET Core 8 API that acts as the middleware between clinical laboratory analyzers and a Laboratory Information System — connecting machines, parsing protocols, and routing results to where they need to go.

Clinical laboratories run multiple analyzers simultaneously — machines that process blood samples, run chemistry panels, count cells, and identify organisms. Each machine speaks a different protocol: some use ASTM over serial, some use HL7 over TCP, some use proprietary formats. The job of this API is to speak all of them and funnel the results into a single system.

When a machine finishes processing a sample, it sends a result message through its connection — serial RS-232 or TCP depending on the machine. The API receives that message, identifies which analyzer sent it, and hands it to the right parser. The parser decodes the protocol (ASTM, HL7, or VITEK 2's proprietary format), extracts the test results, and maps the machine's internal test codes to the lab's standard codes using a configurable mapping table.

Once parsed and mapped, the result gets written to the system — either the modern REST endpoint, the legacy LIS database, or both, depending on how that machine is configured. This lets the lab migrate machines one at a time without disrupting the existing workflow. Failed writes are queued and retried automatically in the background via Hangfire.

The connection manager keeps a live registry of every configured analyzer. Operators can start, stop, or restart individual machine connections at runtime through the API — no service restart needed. Supported machines include Roche Cobas (C311, Pure, E411), Sysmex XN-330, bioMerieux VITEK 2, Bio-Rad D-10, and AVL 9180/9181.

I built the entire API from scratch — connection management, protocol parsers, result processing, legacy LIS integration, background jobs, auth, and a WinForms desktop tool used by on-site staff to configure machines without touching config files.

Note · Company Project Built as part of my role at the company. Source is proprietary — this page covers how it works and what I built.
/ / /

Company project — proprietary source, built and maintained as part of my role.