arrow_back Back to Projects
Case Study Integrations · Healthcare Ops

Lab ↔ EMR Integration Program

I drove a multi-team program that connected providers' EMRs to the lab: providers self-requested a connection, Sales approved it as a client value-add, then orders flowed out and results flowed back automatically, over HL7 v2 on SFTP for the majority and REST API where it fit. My job was to align Engineering, Sales, Lab Operations, Product, and external EMR vendors behind one charter, manage the dependencies and risks between them, and move each connection through a launch-readiness gate to live.

RoleTechnical Program Manager
ScopeMulti-team program · 5 functions
StackHL7 v2 · SFTP · REST API
OutcomeZero data loss · Thousands of transactions
The Problem

Two bottlenecks: manual data exchange, and manual onboarding

For providers: orders and results were exchanged by email and re-keyed by hand between the lab and each clinic's EMR. That meant transcription errors, slow turnaround, and records drifting out of sync, exactly the friction that pushes a practice to a competitor.

For the lab: connecting a new EMR was a manual, Sales-gated process. Because the integration was offered as a value-add for ordering clients, every request needed internal approval before engineering provisioned it, and that intake happened over email and spreadsheets, so it was slow, inconsistent, and hard to track.

The task: stand up an end-to-end program with a self-service request and approval front door, and a reliable delivery layer that pushed orders out and pulled results back into the EMR with zero data loss.

How I Drove It · Charter

The program charter

Before any building, I set a charter so every team was solving the same problem against the same bar. Goal, scope, and success criteria were agreed up front and used to settle trade-offs later.

flag

Goal

One self-service path from a provider's request to live, bidirectional EMR data exchange, with zero data loss and a full audit trail.

fact_check

Scope

In: request and approval front door, HL7 over SFTP and REST transport, compendium and custom panels, reliability and monitoring.

Out: EMR-side clinical workflows and billing.

verified

Success criteria

  • check_circleZero data-loss incidents
  • check_circleFull, queryable audit trail
  • check_circleOnboarding cut from weeks to days
  • check_circleTests orderable inside the EMR
How I Drove It · Workstreams

The workstreams I coordinated

The program ran as parallel workstreams, each with an owning function. I kept them aligned to the charter and to each other, so a decision in one did not quietly break another.

5+

Workstreams

5

Functions aligned

35+

People coordinated

Front door: request & approval workflowSales + Product
Transport & HL7 mapping over SFTPEngineering
REST API integrationsEngineering
Compendium & custom panelsSales + Lab Operations
Reliability & monitoringEngineering
EMR-vendor coordinationExternal vendors + PM
How I Drove It · Governance

The governance cadence

Illustrative

A steady rhythm kept the workstreams in sync and surfaced risk early, so blockers were raised in a forum that could clear them rather than discovered at launch.

groups

Weekly delivery standup

Engineering + PM walked active connections, blockers, and the next launch candidates.

arrow_forward
reviews

Biweekly steering committee

Sales, Engineering, and Product aligned on approvals, scope, and top risks.

arrow_forward
sync

Async status

Live request state in the portal and automated provider updates cut "is it done yet?" pings.

How I Drove It · Milestones

The milestone timeline

Illustrative

The program was sequenced so each phase de-risked the next: prove the front door, standardize the majority transport, then extend to selective paths and scale.

Q1

Charter & front door

Request and approval workflow live.

arrow_forward

Q2

Standardized HL7 mapping

Reusable HL7 over SFTP; first bidirectional connections.

arrow_forward

Q3

API path & catalog

REST API where it fit; compendium and custom panels.

arrow_forward

Q4

Scale & harden

More EMRs live; reliability and monitoring hardening.

How I Drove It · Dependencies

The dependency map

Each connection depended on handoffs across functions and outside the company. I mapped them so an owner and a clean handoff existed for every one, and nothing waited on an unnamed party.

fact_check

Sales approval gate

Upstream · internal

Gated whether a request became work. Handoff: an approval carried the EMR, mode, and contacts straight to provisioning. Owner: Sales + PM.

dns

EMR-vendor readiness

External

Determined transport and timeline per connection. Handoff: shared HL7 mappings and specs. Owner: external vendors + Engineering.

biotech

Lab LIS intake & results

Downstream · internal

Received orders and generated results. Handoff: field mapping to the lab's data contract. Owner: Lab Operations + Engineering.

menu_book

Compendium & catalog

Cross-functional

Made tests orderable inside the EMR. Handoff: codes mapped and coordinated with each vendor. Owner: Sales + Lab Operations.

How I Drove It · RAID

Risks, assumptions, issues & dependencies

Illustrative

I ran a living RAID log and worked it every cadence. The point was not to list risks, it was to name an owner and clear the blocker.

Type Item Severity How I unblocked it Owner
RiskEMR vendor readiness varied widelyBuilt standardized, reusable HL7 mappings so onboarding became configuration, not bespoke work.Engineering
RiskManual compendium upkeep risked stale codesSet a coordinated update cadence with vendors; flagged catalog sync for automation.Sales + Lab Ops
IssueSFTP transfer drops and malformed HL7Added retries, de-duplication, parse-error handling, and monitoring so nothing was silently lost.Engineering
Dep.Sales approval gate could bottleneck intakeDefined an approval SLA and surfaced live request status in the portal.Sales + PM
Assum.HL7 v2 is the majority-ready pathValidated through the transport decision matrix before committing it as the default.PM
HighMediumLow
How I Drove It · Status Reporting

The biweekly steering update

Every two weeks I sent leadership a one-page snapshot: where the program stood, what could derail it, and the decisions I needed from them. The point was to keep the steering committee aligned and unblock the program without a meeting. This is a sanitized version.

summarizeLab ↔ EMR Integration · steering snapshot
Overall RAG: Green

Schedule

On track. Phased rollout hitting milestones; new connections moving through the gate.

Scope

Stable. Holding to the charter; transport and catalog work inside agreed bounds.

Vendor readiness

Watch. Some EMR vendors lag on HL7 readiness, pacing the slowest connections.

Top 3 risks & mitigations

EMR-vendor readiness varies (Engineering). Mitigation: standardized, reusable HL7 mappings make onboarding configuration, not bespoke build.

SFTP drops / malformed HL7 (Engineering). Mitigation: retries, de-duplication, parse-error handling, and monitoring so nothing is silently lost.

Sales approval gate could bottleneck intake (Sales + PM). Mitigation: a defined approval SLA and live request status in the portal.

Decisions needed

gavelApprove the FHIR investment path so the program rides the industry shift instead of accruing legacy mappings.
gavelConfirm compendium-sync automation as a priority to retire recurring manual catalog upkeep.
campaign

The ask: dedicated engineering capacity to build the FHIR path and automate compendium sync.

The Solution

One end-to-end flow: request → approve → provision → exchange

I framed it as a single pipeline with two halves, a self-service front door and the technical delivery behind it, so a provider went from "I want this" to live data exchange without manual handoffs falling through the cracks.

how_to_reg

Provider requests

self-service portal

arrow_forward
fact_check

Sales approves

client value-add

arrow_forward
settings_ethernet

Provision

HL7/SFTP or API

arrow_forward
sync_alt

Orders & results

flow to/from EMR

support_agent

The front door

Providers requested an integration through a self-service portal instead of email threads. Each request landed in an internal queue where Sales approved or rejected it. The gate existed because the integration was offered as a value-add for ordering clients, so each request was a commercial decision as much as a technical one. Approval handed off cleanly to provisioning, so nothing stalled in someone's inbox.

lan

The pipe

Delivery ran as HL7 v2 messages over SFTP for the vast majority of EMRs, and REST API where the EMR supported it. Each connection was provisioned bidirectional (orders out, results back) or results-only, depending on what the practice needed and what their EMR could do.

The Catalog

Making custom panels orderable inside the EMR

A connection only mattered if the right tests were actually orderable on the provider's side. Inside the EMR, that menu is the compendium: the catalog of tests a practice can pick from when placing an order. Getting the compendium right was as much a part of the integration as the transport underneath it.

menu_book

The compendium

The orderable test catalog surfaced inside each EMR. Mapping the lab's tests to the right compendium codes was what let a provider find and place the correct order without leaving their EMR. It was the difference between a live pipe and one nobody could actually use.

inventory_2

Custom panels

Frequently-ordered tests, bundled into a single orderable unit and offered at preferred pricing, one of the commercial levers Sales could offer clients. I worked with Sales to give these bundles their own dedicated compendium codes, so a bundled panel was orderable in one click inside the provider's EMR rather than as a handful of separate line items.

build

The operational catch: compendium codes were maintained by hand. Every price change, discontinued test, new test, or new custom panel meant a manual update that had to be coordinated with each EMR vendor before it went live, which made catalog upkeep a recurring, cross-functional effort rather than a one-time setup.

Decision Framework

HL7 over SFTP vs. REST API

Transport wasn't winner-take-all. I chose it per EMR. I scored both options against what actually drove adoption and reliability (1 = poor, 5 = excellent) to make the default explicit: HL7/SFTP for the majority, API where it earned its keep.

Criterion HL7 over SFTP ✓the majority REST APIselective
EMR / vendor readiness52
Engineering / onboarding cost43
Reliability & throughput44
Latency (real-time vs batch)35
Maintenance burden43
Total2017

Decision: HL7 v2 over SFTP became the default because nearly every EMR already speaks HL7. That readiness made it the fastest, most repeatable way to bring a practice live, and it carried the vast majority of connections. REST API won where the EMR offered a solid one and the practice needed lower latency than batch file drops; there it beat HL7 on freshness, but the thinner vendor support and per-integration build cost kept it from being the default. The point wasn't picking one transport; it was matching each EMR to the path that got it live reliably.

System Design

Architecture & data flow

Once a request was approved, the integration layer brokered every message between the EMR and the lab: generating HL7 v2 (ORM orders, ORU results) or API calls, mapping each EMR's fields to the lab's data contract, moving files over SFTP, and logging every hop for the audit trail.

local_hospital

Provider EMR

Orders placed and results received inside the provider's workflow.

Orderable via compendium codes
arrow_forward
hub

Integration layer

swap_horiz

Field mapping to the lab's data contract

settings_ethernet

Transport: HL7 v2 over SFTP (majority), REST API (selective)

verified_user

Reliability: retries, de-duplication, HL7 parse-error handling

receipt_long

Audit log: every hop logged and queryable

arrow_forward
biotech

Lab (LIS)

Order intake and result generation in the lab system.

arrow_forward

Orders (ORM) flow out, EMR to lab

arrow_back

Results (ORU) flow back, lab to EMR

HL7 v2 over SFTP · the majority REST API · selective Each connection provisioned bidirectional or results-only.
Approved requests provisioned the integration layer, which mapped each EMR's HL7 v2 (ORM, ORU) or API messages to the lab's data contract, moved them over SFTP or REST, and logged every hop for the audit trail.
Launch Readiness

The Go/No-Go checklist

No connection went live on a hunch. Each one cleared the same gate, and every item had to be green to call it a Go. It made "are we ready?" an objective decision instead of an argument.

rulePer-integration launch gate
check_circleAll green = Go
check_circleField mapping validated against the lab's data contract
check_circleTest order and result round-tripped end to end
check_circleZero-data-loss reconciliation passed
check_circleAudit trail queryable for every hop
check_circleRetries and monitoring active
check_circleCompendium and custom-panel codes mapped and orderable
check_circleProvider sign-off on live connection
Impact

Before & after

hub

25+

EMR integrations live

schedule

weeks to onboard

Days

after self-service + approval

database

Thousands

ordering & results transactions

verified

Verified outcome: zero data-loss incidents across thousands of ordering & results transactions, with a full, queryable audit trail for compliance.

Execution

How it got built

how_to_reg

Request & approval workflow: Designed the provider-facing request form and the internal Sales approval queue, capturing the EMR, integration mode, and contacts up front so an approval handed engineering everything needed to provision, no back-and-forth. Providers could see where their request sat (submitted, approved, provisioning, live) in the portal and through automated email updates, which cut "is it done yet?" follow-ups.

description

Standardized HL7 mapping over SFTP: Built standardized, reusable HL7 v2 mappings (ORM orders, ORU results) against the lab's data contract that could be shared with EMR vendors to stand up a bidirectional or results-only integration, turning much of each onboarding into configuration rather than bespoke work. Messages moved over SFTP, the path that brought the majority of practices live.

api

REST API where it fit: For EMRs with a capable API, parsed the spec, aligned on auth and SLAs, and built the integration directly, for lower latency than batch file drops where the practice needed it.

warning

Failure-state design: Built retries on dropped SFTP transfers, handling for malformed HL7, de-duplication, and monitoring, so a transient outage couldn't silently lose an order or a result.

Reflection

What I'd do differently

arrow_backAll projects mailDiscuss this work