EKLIS.CLIENT REPORT
02 · PLATFORM

System shape & decided stack

A modular monolith with one deliberate satellite: the interface engine runs as its own process so instrument traffic never drops during a deploy. Every rule that touches a result is versioned data, not code.

Decided technology stack

LayerChoiceNotes
FrontendNext.js (TypeScript)One codebase; role-gated surfaces (lab ops, portals, admin)
BackendPython · FastAPIModular monolith; split services only when scale forces it
DatabaseMySQL — schema-per-tenantOne database per tenant lab; isolation enforced at the data layer, never only in application code
Cache / queuesRedisSessions, rate limits, interface message queues, background jobs
PackagingDockerCI-gated deploys; running stack always equals main
HostingUS region under HIPAA BAANo real patient data exists anywhere until a Business Associate Agreement is signed

Architecture

Lab Ops Web Physician Portal Patient / DTC Portal Billing Console Admin / Operator accession · worklists OOE · results inbox results · self-order claims · denials tenants · compendium Next.js — one codebase, role-gated surfaces nginx gateway — single origin · httpOnly session cookie · TLS · rate limits /api · FHIR R4 (P4) FastAPI modular monolith auth · RBAC · MFA · immutable audit on every PHI access orders accessioning results + verify QC (Westgard) compendium/LOINC reporting/PDF billable events portals API Rules engine — versioned data, not code reflex chains · auto-verification · delta checks · critical flags · QC gating Interface engine separate process — stays up through deploys HL7 v2 MLLP listener / sender ASTM analyzer drivers (TCP/serial) durable message log + replay Redis queues MySQL schema-per-tenant isolation Redis sessions · queues Clearinghouse via BillingProvider adapter (P3) Analyzers · EHR/EMRs · Reference labs ASTM E1394 · HL7 ORM/OML in, ORU out · ELR every box: Docker · deploy = scripts/deploy.sh gated on green scripts/ci.sh · secrets from .env / platform store PHI only on US-region hosting under a signed HIPAA BAA
One monolith, one deliberate satellite. The interface engine is separated so instrument traffic never drops during a deploy — inbound messages are acknowledged into a durable log before processing. The rules engine (accent) is the product's brain: every auto-released result records the exact rule-set version that passed it.

Architecture principles

Interface engine layer

Every external connection — analyzers (ASTM/HL7/POCT1-A), EHR feeds (HL7 v2 orders in, results out), reference-lab send-outs, public-health reporting — is an adapter behind a common interface with per-interface queues, retry, and a message log. No integration calls scattered through core services.

Rules engine layer

Reflex testing, auto-verification, delta checks, critical-value detection, and billing-rule checks are declarative, versioned rule sets evaluated server-side — never hardcoded per-test logic.

Lab-type configuration

Each tenant selects a lab profile (clinical/commercial, hospital, POL, toxicology, molecular, pathology, veterinary). The profile drives test-catalog defaults, workflow stages shown, server-enforced field rules, and page composition — profiles are reference data, extensible per lab.

Billing boundary

The LIS produces clean billable events (CPT-coded, diagnosis-linked, payer-attached); claim submission goes through a clearinghouse adapter behind a single BillingProvider interface — clearinghouse choice stays swappable.

Non-functional targets

TargetCommitment
AvailabilitySLA 99.9% · p95 API latency < 300 ms · RPO ≤ 5 min / RTO ≤ 1 hr
Interface engineNo inbound analyzer/HL7 message ever dropped — queue-and-acknowledge with durable message log; instrument-to-portal turnaround < 30 s
Bench speedKeyboard/scanner-first UX: accession a specimen (scan → verify → route) in < 5 s
OnboardingPOL self-serve onboarding under 1 day, including a starter test catalog
Inspection readinessAny result's full chain of custody (order → collection → accession → runs → QC status → verification → report versions → deliveries) reconstructable from one screen