← Aleksandr Baranov

EMR integration hub & partner help center

Software Engineer · contract · 2024 — now · K Health

Five internal teams ask EMR Connect for a patient's history; it fetches that from the EMR systems partner clinics run on (FHIR / Epic). Beside it, the partner help center, rebuilt on Next.js + Contentful.

EMR Connect: the service in the middle, carrying requests from five internal teams out to partner clinics' Epic systems and the patient records backEMR CONNECT — ONE SERVICE, BOTH DIRECTIONSInternalservicesSalesforce · mobile appeligibility · Airflow ETLfive internal teamsEMR Connectconfig-driven traversalRedis cache-aside · TTLPub/Sub sync workersPartner clinicEMRFHIR API · Epicrate-limitedRedox: real-timesync requestpatient historypaced FHIR callsrecords · updatesNo internal team talks to Epic directly — everything crosses this one service.

My role

Team product. The integration service, the PDF service and the partner help center are mine.

What I did

  • Generalized the pull from Epic into a config-driven traversal: it exposes no entity graph, so which records to walk is configuration. Adding a partner EMR is a config change.
  • Redis cache-aside over Epic's rate-limited API, with a TTL per entity set by what the data means: a prescription is history and never expires, a doctor's record is refetched every three days.
  • Sync workers on the team's Pub/Sub queue: paced to Epic's rate limits, live requests ahead of batch backfills, and a killswitch that stops one clinic's sync the day they ask.
  • PHI never reaches the logs. Datadog gets ids, timings and error shapes, enough to debug a sync and nothing that identifies a patient.
  • Built the legal-PDF service: HTML templates filled with patient data, rendered by Puppeteer, stored in Google Cloud Storage behind signed links that expire.
  • Moved the partner help center off Salesforce to Next.js + Contentful, a content space per partner. Standing up a new partner's help center, or editing one, now takes hours instead of a week.

Stack

Node.js · TypeScript · NestJS · Next.js · Contentful · PostgreSQL · Redis · GCP Pub/Sub · Google Cloud Storage · Puppeteer · Datadog

More work →