RIDING BYTES
← All insights

July 21, 2026 · 9 min read

SENAITE and lab compliance: ISO 17025, 21 CFR Part 11, and what the software actually gives you

How SENAITE's audit trail, electronic signatures, role model, and validation path map to the specific clauses of ISO 17025 and 21 CFR Part 11 that a QC or clinical lab has to satisfy.

SENAITE and lab compliance: ISO 17025, 21 CFR Part 11, and what the software actually gives you

Compliance frameworks are what a lab-management system exists for. If your samples end up in a court, a regulator’s inbox, or an accreditation audit, the LIMS has to be able to answer three questions in seconds: who did what, when, and can it be reproduced?

SENAITE was built with this as the working assumption, not as an afterthought. This post maps the concrete SENAITE features to the specific clauses of the two frameworks most laboratories care about: ISO/IEC 17025:2017 for testing and calibration laboratories, and 21 CFR Part 11 for laboratories operating under FDA jurisdiction.

Not every clause of either framework is software-solvable. A LIMS cannot make your staff qualified, cannot validate your instruments, and cannot force a supervisor to actually read the verification queue. What it can do is remove entire classes of risk from the manual side of the process. That is the boundary this post draws.

ISO/IEC 17025:2017

Clause references in this section are to the 2017 revision of the standard.

Clause 7.5 — Technical records

“Technical records shall be retained … for each activity that influences the result … in such a way that … any changes to the technical records can be tracked to previous versions or to the original observations.”

SENAITE’s answer is the workflow transition log on every sample and every analysis. Every state change writes an entry with the acting user, the timestamp (server time, not the browser’s), the transition performed, and any comment the user added. This log is append-only from the UI — there is no “edit” button, no “delete” button. Results can be retracted (a formal transition that returns the analysis to to_be_tested and records the retraction in the log); they cannot be silently overwritten.

Verified and published results are locked for edit. The dispose and dispatch workflows extend this locking to closed-out samples via the ILockingState marker interface, so an integration cannot mutate an archived sample’s results even through the JSON API.

Clause 7.11 — Control of data and information management

“A laboratory information management system used for the collection, processing, recording, reporting, storage, or retrieval of data shall be validated for functionality … Any changes … shall be authorized, documented, and validated before implementation.”

SENAITE is developed in the open on GitHub. Every change is a pull request with a reviewer, a description, tests, and a merge commit. That commit history is your change control record. A regulator asking “when did the analysis-locking behaviour change and who approved it?” gets a link to a specific PR with the answer.

For validation, we typically run two paths in parallel with customers:

  1. Installation and operational qualification (IQ/OQ) of the platform. We provide a documented test plan against a known SENAITE release, executed on the customer’s target environment.
  2. Performance qualification (PQ) of the customer’s specific configuration. Analysis services, calculations, workflow configuration, and report templates are tested against agreed acceptance criteria before go-live.

The SENAITE Enterprise VM exists partly to make the IQ side of this repeatable: same image, same version pins, same hardening every time.

Clause 6.2 — Personnel and 7.7 — Method verification

Personnel authorization to perform tasks (6.2.5) and sign-off on methods (7.7) both require a way to prove who is authorized to do what, and to demonstrate that they did it.

SENAITE’s answer is a role and permission model granular per object, per transition, and per field. Roles like Analyst, Verifier, LabManager, and Publisher map directly to the functions a laboratory has, and the workflow enforces the mapping. An analyst can submit a result; only a verifier (a different user) can transition it to verified. A published result can only be invalidated by a lab manager.

The full mapping of role to transition, state by state, is worked out in every workshop and will get its own reference post.

Clause 7.8 — Reporting of results

“Test reports and calibration certificates shall be issued accurately, clearly, unambiguously, and objectively.”

SENAITE’s report templates are configurable per client and per report type. The reporting engine handles per-lab logos, custom paper formats, and multi-report batches. Signatures on reports are tied to the SENAITE user account that published them, and the published PDF is stored against the sample so the exact document the client received is retrievable years later.

21 CFR Part 11

The FDA’s Part 11 rule covers electronic records and electronic signatures in regulated industries. Not every lab running SENAITE is Part 11 obligated (only labs supporting FDA- regulated products, roughly speaking), but for those that are, the compliance surface is well-defined.

§11.10(a) — Validation

“Validation of systems to ensure accuracy, reliability, consistent intended performance, and the ability to discern invalid or altered records.”

Same story as ISO 17025 clause 7.11: documented IQ/OQ against the SENAITE release, PQ against the customer’s configuration. The advantage of an open-source LIMS is that the “black box you have to trust” is not a black box — source code is public, and validation evidence can include line-level reference to the specific commit under test.

§11.10(c) — Protection of records

“Protection of records to enable their accurate and ready retrieval throughout the records retention period.”

SENAITE stores every sample, analysis, worksheet, and report in a single ZODB file (Data.fs). A retention period of ten years, twenty years, or “forever until the customer says otherwise” is a directory-copy problem, not a database-migration problem. Our managed hosting tier runs daily off-site backups with monthly restore verification, and the storage layer does not care whether the sample was published yesterday or in 2015.

§11.10(d) — System access

“Limiting system access to authorized individuals.”

The same permission model that answers ISO 17025 clause 6.2. Users are managed inside SENAITE or via an external directory (LDAP, SSO); permissions are role-based and per-object.

§11.10(e) — Audit trails

“Use of secure, computer-generated, time-stamped audit trails to independently record the date and time of operator entries and actions that create, modify, or delete electronic records.”

Two mechanisms answer this together.

The workflow transition log already covered under ISO 17025 records every state change with actor and timestamp. On top of that, SENAITE keeps a snapshot audit log written by subscribers on ObjectInitializedEvent, ObjectModifiedEvent, and ObjectTransitionedEvent (senaite.core.subscribers.auditlog). Each event serialises the full field set of the object to JSON, attaches a metadata block (actor, roles, review_state, active flag, server-time timestamp, remote address, user agent, referer, comments), and appends it to a per-object PersistentList annotation (senaite.core.snapshots). Snapshots are indexed in a dedicated AUDITLOG_CATALOG so they can be queried, diffed, and browsed from the audit-log control panel.

The audit trail is server-generated, not user-editable, and every entry carries the acting user and server-time timestamp. When an object is removed, its snapshot log is frozen via the IDoNotSupportSnapshots marker — no post-hoc rewrites, even by staff with delete permission.

Analysis Service audit log popover for Cs-137 dry mass. Metadata rows (Name, Category Balance, Price € 0.00, Keyword, Unit, Point of Capture Lab, Method Weighing). Below, a Log table showing two versions: version 2, admin, 2026-07-21 22:54, action Submit, workflow Unassigned → To be verified, with ResultCaptureDate change from Not set to 2026-07-21T22:54:17+02:00 and Analyst change from Not set to admin. Version 1, admin, action Edit, workflow Registered → Unassigned, with CalculationVersion, Result, and Modification Date changes shown as strikethroughs and green new values.
Snapshot audit log for a real analysis. Two versions, each with actor, timestamp, workflow action, remote IP, and a field-level diff of what changed.

§11.50 and §11.70 — Signature manifestations and record linking

An electronic signature under Part 11 must be linked to its record in a way that cannot be excised or copied by ordinary means, and the signed record must display the printed name of the signer, the date and time of signing, and the meaning of the signature.

In SENAITE, the acting user’s identity is attached to every workflow transition, and the transition metadata is stored on the object itself. A published report displays the publisher’s name and the publication timestamp; a verified analysis carries the verifier’s name and the verification timestamp. Attempts to detach the signature from the record fail because they are the same record.

What SENAITE does not do for you

Compliance is a process. Software is one input to that process. SENAITE will not:

  • Qualify your instruments. IQ/OQ/PQ of the instrument itself is your problem. SENAITE captures the results; the instrument’s own qualification is separate.
  • Train your staff. Role assignments in SENAITE assume the staff assigned to those roles are actually competent. Training records and competency assessments live outside the LIMS (though many labs attach them to user records via a Plone content type extension).
  • Substitute for an SOP. Standard operating procedures are documents, not software. SENAITE workflows can enforce that an SOP is followed; they cannot write the SOP.
  • Validate itself in your specific environment. The general IQ/OQ evidence we provide is a starting point. The final validation record is against the customer’s actual server, their actual configuration, their actual data set.

What we do around this

If your compliance obligations are on the tighter end — FDA-regulated clinical trials, environmental monitoring for regulatory reporting, water quality against the EU Drinking Water Directive — the questions above stop being theoretical.

Our 3-day workshop includes a half-day session on mapping your specific regulatory obligations to SENAITE features, with concrete gaps flagged for the implementation phase. For labs with a scheduled audit or a validation deadline, we run this as a standalone engagement.

Everything above is verifiable in the code. Nothing here is a sales claim — SENAITE is open source, the code is on GitHub, and every mechanism cited in this post is grep-able against a specific file.

Bring this to your lab

Whether you are evaluating SENAITE, scaling it across sites, or wiring up instruments and monitoring, the team that wrote the platform is the team you talk to.

Start a conversation