Legal documents

Seven documents, each one written rather than assembled.

A legal page that could belong to any product tells you nothing about this one. These say what LabFlow handles, who is responsible for it, how long it is kept, which companies see it, and what has not been done yet.

The setseven documents
Documents7
Last reviewed6 August 2026, all seven
Written byThe LabFlow team, not a template
Law firm reviewNone. This is not legal advice
The HIPAA wordConscious, never compliant
Named processors5

Every document is on this page. Choosing one changes the address bar, so the link you copy is the link to that document.

The documents

Data security

The engineering answer, concrete enough to argue with.

Last reviewed2026-08-06
Clauses11
URL/data-security
External testNone

The HIPAA statement is about obligations. This is about mechanisms. It is written for the engineer or security reviewer on your side, and it is deliberately specific enough that they can tell us we are wrong.


One database, and the boundary inside it#

Every tenant lives in one Postgres database, separated by row-level policies rather than by separate databases. That is a real trade: it is cheaper and simpler to operate, and it means the isolation is only as good as the policies.

So the policies are treated as the product, not as configuration. The rule that matters: a query must prove its tenant from its own filters. A policy that checks a column the query never filters on does not refuse the query, it silently returns the rows that pass, which arrives as a perfectly ordinary success. That failure is invisible to any test that only checks for errors, so it is tested by asking for another tenant's data as an ordinary user and requiring a refusal.

Sign-in and sessions#

Authentication is handled by the database platform's own identity service. Passwords are never stored by us in any form we could read. Sessions are held in the browser as a token with a short life and a refresh, and signing out ends them.

Releasing a report is a second gate: it requires re-authentication at the moment of signing, and a stale proof fails rather than being accepted. That is the point of an electronic signature, and a signature that never fails is decoration.

Roles are enforced by the server, never by the interface#

Hiding a button is a courtesy to the person using the product. It is not a control, because the request behind the button can still be made. Every permission check therefore exists twice: once in the interface so the product is comprehensible, and once on the server where it is the actual boundary.

Two rules follow, and both exist because their absence is a common and quiet failure. A role is never writable by the account it describes, so nobody can promote themselves by editing their own record. And a permission is read from the server's view of the account rather than from anything the client sent with the request.

Encryption, and the claim that is not made#

Traffic between your browser and the service is encrypted in transit. Data at rest is encrypted by the database and storage platforms.

LabFlow is not end-to-end encrypted, and it cannot be. A laboratory system has to search results, evaluate quality-control rules across runs, and produce reports, all of which require the server to read the data. A vendor claiming both end-to-end encryption and server-side clinical logic is claiming two things that do not fit together, and it is worth asking which one is true.

Keys and secrets#

No credential is committed to source, and no server-side key is ever shipped in the browser bundle. Keys that a browser must carry are restricted to the origins allowed to use them, so a copied key does not work from anywhere else. Keys are rotatable without a code change, which is the property that decides whether a rotation actually happens.

Backups, and the honest state of them#

Backups are whatever the database platform's free tier provides, on its schedule, with its retention. There is no independent backup under our own control, no tested restore procedure, and no stated recovery point or recovery time.

For a laboratory this is a material limitation and it should be weighed as one. A laboratory that needs a tested restore with a stated objective does not have it here, and adding it costs money, which is the reason it does not exist rather than an oversight.

What leaves in a log or an error report#

An error report carries the class of the error, the route pattern it happened on, and whether it was handled. It does not carry the request body, the query string, breadcrumb payloads or user context beyond an opaque identifier.

That is done at the reporting boundary with an allowed-list rather than a blocked-list, and the difference is the whole point: a blocked-list ships the one field nobody thought of, which during an incident is usually the entire response body somebody logged in a hurry.

The audit trail#

Every clinical action writes a row: who, what, when, from where, in the same transaction as the change itself, so a change cannot exist without its record. No application role holds update or delete on that table.

Reads are recorded too where the record is a patient's. That is unusual and it is deliberate: a question about who looked at a record is the one an investigation asks first, and a trail that only records writes cannot answer it.

Kept for six years. Amendments never overwrite: a corrected result is a new version, and the value a clinician originally acted on stays readable.

Dependencies#

The product runs on a small number of well-used packages, kept at current stable versions, with an inventory in the repository recording what each one is for. New dependencies are added rarely and deliberately, because every one of them is a party you did not choose and cannot see.

Reporting something you have found#

Send it through the contact page with enough detail to reproduce it. You will get an acknowledgement from a person, an assessment, and a note when it is fixed. There is no bug bounty and no payment, which is stated so nobody spends a week expecting one.

Please do not test against a live tenant holding real patient records. Ask and a test tenant will be created; that request is welcome and it is the fastest route.

What is not in place#

No independent penetration test. No bug bounty. No SOC 2 or ISO certification. No security operations centre and no on-call rotation, so out of hours there may be nobody awake to answer. No formal secure-development lifecycle beyond the review that happens on every change. No tested disaster recovery, per clause 06.

These are listed rather than omitted because a security page that lists only controls is telling you about the author's marketing, not about their system.

Four things no document on this page can do for you.

Legal pages are usually written to close questions. These are here to open the four that a careful buyer should ask next, because a page that leaves you feeling reassured has probably done you a disservice.

They are not legal advice, and no lawyer has read them

They are written to be accurate rather than to be defensible. Your counsel should read the terms and the HIPAA statement and expect to negotiate.

They are not a contract you can rely on for production

The governing-law clause is open and there is no business associate agreement. Both are named in the documents rather than left for you to discover.

They cannot describe your laboratory's obligations

Risk analysis, training, access review, physical safeguards and a tested contingency plan stay yours whichever system you run.

They are not evidence that any of it is implemented

A document describing a safeguard reads exactly like a document describing an intention. Ask to see the audit trail and ask to be refused a tenant that is not yours.

One page owns each fact, and the rest point at it.

Seven documents that each state a retention window are seven chances for six of them to be out of date. So each fact has a single home, and everywhere else is a link.

Retention

The four windows, and what each is anchored to

Results and reports, pathology material, the audit trail, specimen movement. The numbers live in one place and every other mention links to it.

Processors

Which companies see anything, and what each receives

Four named, with the specific thing each one gets. The cookies page describes what reaches your browser; this describes what reaches somebody else's server.

Owned by /privacy-policy, clause 03

Measurement

What analytics receives, and the commitment about session replay

Deliberately stated in identical words on two pages, so that changing one without the other is visible rather than quiet.

Stated twice: privacy clause 05, cookies clause 04

Permissions

Every Android permission, with the four-way agreement rule

The manifest, this page, the privacy policy and the store declaration must say the same thing before a build is released.

Gaps

What is missing, listed rather than omitted

No business associate agreement, no external audit, no penetration test, no tested restore, no governing-law clause, no availability commitment.

HIPAA clause 04, security clause 11

If a clause is wrong, that is worth an email.

These were written by the team that built the product, which makes them accurate about the software and untested as law. A correction, a challenge, or a question about how a specific safeguard actually works will be answered by a person who can check the code rather than by somebody reading from the same page you are.

Revision historypublished

All seven documents were rewritten in one pass on 6 August 2026. Every future revision is dated and published as an entry in the feed, so a change to a policy is something you can subscribe to.