A standalone Electron application that receives test results from laboratory instruments and stores them in a local database (SQLite and/or MySQL). It is designed to be LIS-agnostic — any Laboratory Information System can pick up results from the shared database.
- Laboratory instruments (e.g., Abbott m2000, Cepheid GeneXpert, Roche COBAS) connect to this tool over TCP
- The tool receives results using standard protocols (ASTM or HL7)
- Results are stored in a local SQLite database and optionally in a MySQL database
- The LIS picks up results from MySQL and updates its test requests independently
- Support for multiple instruments running simultaneously
- ASTM (with/without checksum) and HL7 communication protocols
- TCP Server and TCP Client connection modes
- Real-time connection monitoring and logging
- Auto-connect on startup with login bypass
- Results table with search, sort, and sync status tracking
- Optional LIS API integration for instrument name suggestions
- Import/Export settings for backup and replication across machines
- Dashboard with result statistics
# Install latest version
curl -fsSL https://raw.githubusercontent.com/deforay/vlsm-interfacing/master/scripts/install.sh | bash
# Install a specific version
curl -fsSL https://raw.githubusercontent.com/deforay/vlsm-interfacing/master/scripts/install.sh | bash -s -- --tag v4.0.3See the User Guide for step-by-step setup instructions covering login, settings configuration, and using the console.
For developers or anyone who wants to build the application locally from source.
Prerequisites: Node.js LTS
# Clone the repository
git clone https://github.com/deforay/vlsm-interfacing.git
cd vlsm-interfacing
# Install dependencies
npm install
# Run in development mode
npm start
# Build for production
npm run electron:buildThe production build output will be in the release/ directory.
Run the local quality gate before submitting a change:
npm run verifyThis checks lint rules, unit tests, the Electron main-process compilation, and
the optimized Angular production build. The same gate runs automatically for
pull requests and pushes to master.
npm run verify starts with npm run check:safety, which asserts the two facts
that keep this app's renderer safe. The renderer runs with nodeIntegration
enabled, so anything that executes as script there executes with full Node. That
is only safe because every value reaching the DOM goes through Angular's
escaping, and the window only ever loads the bundled file:// build.
The check fails on changes that would break either — writing unescaped HTML
(innerHTML, bypassSecurityTrust*), loading remote content into a window,
opening a second web context, weakening webPreferences, or evaluating code at
runtime. Each finding explains what it protects and what to do instead.
If a finding is genuinely safe, say why on the line or the one above:
element.innerHTML = LEGAL_NOTICE; // electron-safety-ok: module constant, no inputA reason is required; a bare marker is still rejected.
For the same check as a pre-commit hook, run once per clone:
npm run install-hooksCI is the enforcement — the hook is only faster feedback, and --no-verify
skips it.