Laboratory Information System with Westgard QC for an ISO 15189 Lab
Client Context
A clinical laboratory network operating four labs (two in Ho Chi Minh City, one in Hanoi, one in Da Nang) covering biochemistry, immunology and hematology. They were preparing for ISO 15189 re-accreditation and needed to retire a 9-year-old LIS that no longer met audit-trail requirements and could not integrate with newer analyzers. Vireon Labs delivered this work in partnership with Aratech Vietnam, who own the clinical and regulatory expertise.
The Challenge
Business Challenge
Internal Quality Control was largely paper-based: QC officers manually plotted Levey-Jennings charts and applied Westgard rules at end of shift. Out-of-control runs were often detected only after patient results had been released, forcing re-runs, re-billing and clinician callbacks. ISO 15189 surveillance audits flagged the audit-trail gaps as a major non-conformity.
Technical Challenge
Heterogeneous analyzer fleet (Roche Cobas, Sysmex XN, Abbott Architect, Mindray BS-2000) with mixed HL7 v2 ORU/ORM dialects; some older analyzers communicated only via RS-232 serial bridges. Existing LIS could not enforce role-based access cleanly, and audit trail granularity did not meet ISO 15189 §5.10 requirements.
Signals Before We Started
Westgard rules applied manually at end of shift — average 4–6h delay to detect out-of-control runs
~8% of QC-failed patient results were released before the failure was detected, requiring callbacks
ISO 15189 surveillance audit flagged audit-trail granularity as a major non-conformity
New analyzer onboarding took 6–10 weeks because of HL7 dialect quirks
Pathologists waited on average 12 minutes for a previous-day QC summary
Our Solution
Overview
A modular LIS with a Westgard rules engine that evaluates QC in real time as each control sample is reported by the analyzer. Patient results are held automatically when QC fails, with explicit pathologist override and full audit trail. HL7 v2 + a serial bridge for legacy analyzers cover the entire installed fleet, and a hybrid on-prem + Azure deployment respects data-residency constraints.
Architecture
.NET 8 modular monolith for the LIS core (deployed on-prem at each lab), Angular 17 web app served from the lab's intranet, SQL Server 2022 as the system of record, a dedicated HL7 v2 interface engine (Mirth-style) with RS-232 bridges for legacy analyzers. A read-only replication path to Azure SQL in the Singapore region powers central pathologist dashboards. Identity via Azure AD with on-prem fallback through ADFS. All clinical PHI stays inside the lab's local network unless a pathologist explicitly accesses the central dashboard.
Approach
- 1
Discovery with QC officers + accrediting pathologist before any code
- 2
Westgard rules engine built and validated against 18 months of historical QC data
- 3
Analyzer-by-analyzer HL7 integration with the lab tech team in the room
- 4
Hold-and-release workflow with explicit pathologist override + audit
- 5
Hybrid deployment: on-prem clinical core + Azure read replica for cross-lab views
- 6
Parallel run with the legacy LIS for one full QC cycle per lab
Platform Modules
The system was delivered as the following modules — each with its own owner, integration contract and rollout plan.
LIS Core
Patient, sample, test, result and QC aggregates; the system of record for the lab. All clinical data lives on-prem.
Westgard Engine
Real-time rule evaluator (1₂s, 1₃s, 2₂s, R₄s, 4₁s, 10x and lab-defined variants); evaluates every control sample within 1s.
Hold & Release
Automatic hold on patient results when QC fails; explicit pathologist override with mandatory free-text justification, fully audited.
Interface engine
HL7 v2 ORU/ORM message routing; per-analyzer dialect adapters; RS-232 bridge for legacy hardware; replayable message archive.
Pathologist dashboard
Cross-lab Levey-Jennings, exception queue, and signed clinical sign-off; available on the central Azure replica.
Audit & evidence
Field-level, cryptographically chained audit trail; one-click export of evidence packs for ISO 15189 auditors.
Data Flow
An analyzer sends a result message (HL7 ORU^R01) to the on-prem interface engine. The engine validates the message, persists the raw payload for replayability, and forwards a normalized result into the LIS Core. The LIS Core writes the result and emits a domain event. If the result is a QC sample, the Westgard Engine evaluates the active rule set within 1s and emits either `qc.passed` or `qc.failed`. On `qc.failed`, the Hold & Release module automatically suspends release of patient results from that analyzer / test until a pathologist reviews. Every state transition is appended to the cryptographically chained audit log. Once a day, an anonymized read-only projection replicates to Azure SQL in Singapore for the cross-lab pathologist dashboard.
Integrations
Roche Cobas, Abbott Architect, Sysmex XN, Mindray BS-2000 (HL7 v2)
Two legacy analyzers via RS-232 bridge
Hospital Information System (HIS) via HL7 v2 ORM/ORU
Billing module (CSV + secure SMB)
Azure AD + ADFS for hybrid identity
Delivery Timeline
Phased delivery — each phase had explicit goals, measurable outcomes and a checkpoint before progression.
Phase 1 — Discovery & Westgard rules baseline
Week 1–4Goals- ·Inventory analyzers, current HL7 dialects and audit-trail gaps
- ·Catalog the Westgard rules in use per test family (1₂s, 1₃s, 2₂s, R₄s, 4₁s, 10x)
- ·Validate against 18 months of historical QC data
Outcomes- ✓Rules engine reproduced 99.6% of historical QC pass/fail decisions
- ✓Remaining 0.4% turned out to be data-entry errors in the legacy LIS
- ✓Pathologist sign-off on the rule set obtained
Phase 2 — LIS core + audit trail
Week 4–12Goals- ·Patient, Sample, Test, Result, QC, User, Audit domain in code
- ·Full ISO 15189 §5.10-compliant audit trail (who, when, what, before/after)
- ·Hold-and-release workflow for QC-failed results
Outcomes- ✓Audit log captured at the field level, with cryptographic chaining (HMAC-SHA256)
- ✓First internal audit on the new LIS passed without findings on traceability
Phase 3 — Analyzer integration
Week 10–22Goals- ·HL7 v2 integration for Cobas, Architect, Sysmex, Mindray
- ·RS-232 bridge for the two oldest analyzers
- ·Bi-directional ORM/ORU flow
Outcomes- ✓Full fleet connected in lab 1 by week 18, lab 2 by week 22
- ✓Onboarding a new analyzer dropped from 6–10 weeks to ~4 days
Phase 4 — Westgard real-time engine
Week 16–24Goals- ·Evaluate every incoming QC sample against the active rule set in <1s
- ·Auto-hold patient results when QC fails, with audit
- ·Live Levey-Jennings dashboard per analyzer
Outcomes- ✓Detection lag for out-of-control runs dropped from 4–6h to <60s
- ✓Patient-result release-before-failure-detected dropped from 8% to 0.3% (residual cases all attributable to manual overrides with documented justification)
Phase 5 — Parallel run & ISO re-accreditation
Week 22–32Goals- ·Run new + legacy LIS in parallel for one full QC cycle per lab
- ·Train all QC officers, lab techs and pathologists
- ·Support ISO 15189 surveillance audit
Outcomes- ✓All 4 labs cut over by week 30
- ✓ISO 15189 surveillance audit completed with the previous audit-trail non-conformity closed
- ✓Average pathologist wait for QC summary dropped from 12 min to <5s
Technology Stack
The Results
Measurable impact delivered within 7 months (Phase 1–5).
Security & Compliance
- ✓ISO 15189 §5.10 audit-trail compliance — field-level, cryptographically chained
- ✓All PHI stays on-prem; only anonymized read replica leaves the lab network
- ✓Role-based access aligned to lab roles (tech, QC officer, pathologist, biomedical engineer, admin)
- ✓Pathologist override on QC-fail requires mandatory justification, captured in audit
- ✓Encrypted backups; full restore drills every quarter
- ✓Penetration test against the public-facing pathologist dashboard annually
Delivery & Operations
- ✓GitHub Actions CI with the historical-QC reproducibility test as a release gate
- ✓On-prem deployments via versioned MSI packages with rollback scripts
- ✓Per-lab staging environment refreshed from anonymized production data
- ✓Vireon + Aratech joint on-call: clinical questions → Aratech, platform questions → Vireon
- ✓Quarterly Westgard rule-set review with the accrediting pathologist
Key Learnings
Reproducing 18 months of historical QC decisions was the single artifact that earned pathologist trust. Without it, no clinician would have accepted automated hold-and-release.
Audit trails must be field-level, not row-level. ISO 15189 auditors want to see exactly which field changed, by whom, with the before / after value — anything less is a finding.
Hybrid is the realistic deployment model for regulated clinical software in this region. Pathologists need cross-lab views; regulators require PHI to stay on-prem. A read-only anonymized replica resolved that tension cleanly.
Partnering with a domain specialist (Aratech) for the clinical / regulatory side was decisive — engineering velocity is necessary but not sufficient when the buyer is a pathologist and the auditor is the regulator.
More Success Stories
Explore how we've helped other clients achieve their goals.
Let's Discuss Your Project
Schedule a free consultation to explore how we can help you achieve your goals.