Features
Every capability, with its limit beside it.
Sixteen things LabFlow does, and where each one stops. The second half is what decides whether it fits your laboratory.
ref 12.0 to 15.5 g/dL · adult female · resolved, not printed
This is the component itself, not a screenshot of it. Change the theme in the header and it changes with the rest of the page.
Six records, and none of them collapses into another.
Every feature below hangs off one of these six. Merging any two of them is what makes a laboratory system unable to express half of a real workflow, so they are separate here and separate in the database.
Patient
A person, not a visit. One record carries every order they have ever had, at every laboratory that runs LabFlow.
patients
Order
One order can need three tubes, and one tube can serve six tests. That many-to-many shape is the domain rather than an inconvenience.
orders
Specimen
The accession number is generated by the database, never by a client counter, because two technicians receiving at the same second must not produce the same one.
specimens
Ordered test
A test with no result yet is a real state. It is queryable, it ages, and it is what the worklist lists.
order_tests
Result
Versioned, never overwritten. A correction is a new row pointing at the row it supersedes.
results
Report
A snapshot signed by a person, recording the results as they stood at a moment. Amending a result does not rewrite an issued report.
reports
A coded catalogue, so a test means the same thing twice.
Tests are held in a catalogue with LOINC codes, container requirements and storage conditions attached, and orders reference the catalogue rather than free text. That is what lets a haemoglobin ordered at one laboratory be recognised by a second one, and it is what makes a panel more than a list of words.
Priority is part of the order, not a note on it, so a routine draw and a stat draw are different objects to a worklist rather than different phrasing to a human.
Where it stops. The catalogue is yours to configure. LabFlow does not ship a pre-loaded national test menu, and pretending otherwise would mean shipping someone else's clinical decisions as a default.
Chain of custody, including the part with no signal.
Every hand a specimen passes through is a row: who, when, where, and what condition it was in. That record is what an investigation reads six months later when a result is questioned, and it is the reason a rejected specimen has a reason attached rather than a status.
Seventeen custody actions work offline. A phlebotomist who loses signal in a basement or a home visit keeps working, and the queue reconciles on reconnect with conflicts surfaced rather than guessed.
The Android application is built from the same codebase and has not been published to a store. There is no iOS application.
Where it stops: LabFlow records the excursion. It does not read your fridge. Temperature comes from whoever or whatever reported it, and the record says which.
Eight statuses, because a result has more than two states.
Fold the ordered test into the result and the worklist has nothing to list until the work is already done. These are the states a real bench moves through, and each one is queryable.
pending and in_progress
Ordered and not yet worked, then picked up. This is the pair a worklist is built from, and the pair that ages: a test waiting 41 minutes since receipt is visible as such.
Turnaround is measured from receipt, which is the moment the laboratory took responsibility.
entered and preliminary
A value exists and nobody has stood behind it yet. Preliminary results can be visible to a clinician who needs them now, and they are labelled every time they are shown.
A preliminary result that looks identical to a final one is a patient-safety defect, not a display preference.
validated and released
A person has reviewed it, and then it has left the laboratory. The two are separate because a validated result that has not been released is a real and common state.
Release is the point after which an amendment has to tell someone. Before it, a correction is just an edit.
rejected and cancelled
The specimen could not be worked, or the order was withdrawn. Both carry a reason, and neither deletes the row that recorded the attempt.
A haemolysed sample that vanishes from the record is a laboratory that cannot explain why a result is late.
There is deliberately no ninth status called amended. An amendment is a new row at the next version pointing at the row it supersedes, and the superseded row stays released and stays true as of when it was released.
A range is resolved for this patient, not printed beside the value.
The difference is small on screen and large at the bench. One asks the reader to do the arithmetic; the other has already done it and says which interval it used.
Haemoglobin 9.1 g/dL
Normal: 12.0 - 15.5
The reader compares. Nothing states which population that interval belongs to, whether it matches this patient's age and sex, or which method produced it. Two laboratories printing the same line can mean two different things.
Haemoglobin 9.1 g/dL Low
ref 12.0 to 15.5 · adult female · this method
The interval was selected by age, sex and method, the comparison is recorded, and the flag is part of the result rather than a rendering of it. The same result exported as a FHIR file carries the same interpretation.
Where it stops. The intervals themselves are yours. LabFlow resolves against the ranges your laboratory has verified for its own methods and population. It does not supply clinical reference intervals, and a vendor that shipped them as defaults would be making your validation decisions for you.
Two safety checks that run before a human looks.
Neither is predictive and neither is machine learning. Both are arithmetic against something already recorded, which is exactly why they can be trusted in a clinical setting.
The delta check
This result against this patient's previous one. A haemoglobin that moved 4 g/dL since yesterday is either a real emergency or a mislabelled tube, and both need a person now.
The critical value
A value past the threshold at which someone has to be told, whatever else is happening. It is a communication obligation, not a flag colour.
The escalation ledger
Who was called, when, by which route, and whether they acknowledged. It lives on the result rather than in a notification log, because that is where an investigation looks.
The unacknowledged state
An unacknowledged critical value blocks release. It is stated on screen rather than implied by an absence, because absence is not something a person notices at 03:00.
Notified 15 Jul 10:04 to Dr H. Lindqvist by telephone. Acknowledged 10:06. Release is unblocked and the acknowledgement is on the result, with a name against it.
Where it stops: LabFlow records the call. It does not place it. There is no auto-fax and no automated outbound telephony.
Westgard multi-rule, evaluated on the run that produced the result.
Quality control that is filed and never consulted is paperwork. Here the control run is attached to the patient results produced beside it, which is what turns it into a gate.
Where it stops: which rules apply to which analyte is a laboratory decision and stays one. LabFlow evaluates the set you configure. It does not choose it for you, and it does not perform calibration; calibration dates and results are recorded on the equipment register.
Release is a gate that can say no.
A release button that always works is a button. A gate collects the conditions that must hold, evaluates them, and refuses in a way that names the reason. A technician should never have to guess why a result will not go out.
The quality-control run covering this result violated 1-3s. The run is out of control, so results produced beside it are not releasable until the run is repeated or a named person overrides with a reason.
A critical value on this order has not been acknowledged. Release resumes as soon as the acknowledgement is recorded, with the name of whoever took the call.
Every condition held. The report is a signed snapshot of the results as they stood at this moment, and the signature belongs to a person rather than to the system.
Where it stops: LabFlow enforces the gate. It does not decide your release policy. Which conditions are hard blocks and which are overridable is configuration, and every override is a row in the audit log.
The old value is the one a clinician acted on, so it survives.
The tempting design is a status called amended and one row that changes. It destroys the only thing an incident review needs: what the report actually said when somebody read it and prescribed against it.
So a correction is a new row at the next version carrying a pointer to the row it supersedes. The superseded row keeps its released status, because it was released, and that remains true.
Whoever received the original is told about the amendment. An amendment nobody is told about is worse than the original error.
6.9 mmol/L · released 15 Jul 10:02 by A. Farouk · v1
Reported and acted on. The record of that is not rewritten.
Twelve personas get twelve applications.
A permission model that only hides menu items is decoration. These are capability grants checked where the work happens, and every list query has to prove its tenant from its own filters rather than trusting the caller.
In the laboratory
Outside it
On the platform
The audit log is written by the same path that does the work. Not by a listener that might be off, and not by a wrapper somebody could forget to call. An action that skipped the log would also have skipped the action, which is the only version of this guarantee worth making.
Two message formats, and one honest gap.
Interoperability claims are where laboratory software is least honest, so the boundary is drawn explicitly: what is application code, and what is infrastructure you still have to run.
HL7 v2 out
A released report downloads as an HL7 v2 result message, built from the same records as the printed report, so the two cannot disagree.
HL7 v2 in
A pasted or uploaded order message becomes a draft order, matched to the coded catalogue. Nothing is created until a person confirms it, and unmatched codes are listed rather than dropped.
FHIR out
A released report also downloads as a FHIR R4 DiagnosticReport bundle, from the same source, carrying the interpretation and the interval that produced it.
No live feed
These are files. Nothing listens for messages and nothing is sent automatically; moving a file between systems is yours to do. That sentence decides your integration timeline.
No mapping has been validated against Cerner, Epic, athenahealth or Allscripts. LabFlow writes and reads files in the standards those products speak, which is not the same thing and is not described as though it were.
A marketplace with a person reading the applications.
Patients search for a laboratory and book with it. Laboratories apply to be listed, and an application moves through five states with a human review in the middle, because listing an organisation that runs clinical tests is not a self-serve checkout.
The platform side of that is a real administrative surface: application review, moderation, roles, and configuration, all of it audited and none of it reachable by a laboratory user.
Approved means listed in the marketplace and able to take bookings. Nothing about that step is automatic, and a rejected application is told why.
The ledger
Features a laboratory system is expected to have, that this one does not.
Each of these has been requested, assumed, or previously advertised on this site. None is built. Reading this list is faster than discovering it during an implementation.
Invoices, payments and claim records are built, and a claim’s denial and appeal are recorded by hand. No 837P or 837I generation, no 835 remittance parsing, no ERA posting and no patient statements. If revenue cycle is the requirement, this is the wrong product.
Quality control is built. Calibration dates, due and overdue dates and each calibration’s result are recorded on the equipment register; nothing schedules a calibration and nothing sends a reminder. The two are often described as a single capability and they are not.
HL7 v2 and FHIR move as files: a released report downloads, and an order file imports as a draft. Nothing listens for messages or sends them, and a live feed is its own project.
Cerner, Epic, athenahealth and Allscripts were previously named on this site as validated integrations. No validation has been performed against any of them.
Critical-value communication is recorded, including who called and whether it was acknowledged. LabFlow does not place the call or send the fax.
Delta checks and Westgard evaluation are rule-based arithmetic, and the code names them that way. Describing them as AI would mislead a reviewer about how a clinical number was produced.
Neither is offered, and neither is a BAA, 24/7 phone support or a nightly backup guarantee. All four were previously advertised. See the full removal ledger.
The audit trail, the versioning and the capability model are built. The documentation package a Part 11 assessment expects is planned work, and calling it done would be the easiest and worst claim on this page.
LabFlow is HIPAA conscious: audit logging, least-privilege access, tenant isolation and recorded consent are designed in. It is not certified, and no software can be, so the word compliant does not appear on this site.
The fastest way to find out whether this fits is to describe your bench.
Feature lists are a poor way to evaluate laboratory software, because the question is never whether a capability exists. It is whether it expresses the way your laboratory already works, and that takes one conversation rather than one comparison table.
Plan shapes and what drives cost are on the pricing page. What changes for each person on your team is on the benefits page.
There is no demo environment to sign into yet and no trial to start, so this site does not offer either. The conversation is the honest first step.