- Home
- Apps
- Specialized Solutions
- Clinical Lab — Laboratory Information System (LIS)
Illustrative previewA made-to-order Odoo Laboratory Information System that runs your diagnostic lab end to end
— from test order and sample collection through result validation to a branded, reference-ranged report.
ECOSIRE builds, installs, and supports it against your test catalog and workflow.
What is Clinical Lab — Laboratory Information System (LIS)?
A made-to-order Odoo Laboratory Information System that runs your diagnostic lab end to end — from test order and sample collection through result validation to a branded, reference-ranged report. ECOSIRE builds, installs, and supports it against your test catalog and workflow. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Diagnostic labs bleed time and trust in the gap between an ordered test and a released, defensible result. Requisitions arrive on paper or in a spreadsheet, samples get relabelled by hand, technicians key values into one system while the pathologist signs off in another, and the final report is a Word template someone maintains privately. Odoo out of the box has no concept of an analyte, a reference range, a specimen, or a two-step technician-then-pathologist release — product can hold a "test" as a sellable line and account can invoice it, but nothing models the clinical result, flags an abnormal or critical value, tracks turnaround time, or stops an unvalidated result from reaching a patient. That is exactly the road Odoo native runs out of, and where a purpose-built Laboratory Information System belongs.
ECOSIRE builds the clinical-lab-lis module on top of base, mail, product, account, our clinical-core-his-emr, and web. At its core sit new ORM models (models.Model) for the test catalog, analytes, panels/profiles, lab orders, samples, and results. A configurable test carries its analytes, unit of measure, reference ranges (by sex and age band where you need it), and a price that links to a product.product so billing stays native. Panels such as CBC or LFT are defined once and expand into their component analytes automatically when ordered — implemented with compute methods and @api.depends so the order line, the result grid, and the invoice always agree. A lab order is raised straight from an EMR encounter (through the clinical-core-his-emr link) or as a standalone requisition, then moves through a sample-collection step that generates barcode labels and tracks each specimen by container and status.
Result entry happens in a purpose-designed grid (XML/OWL views) where every value is compared against its reference range on save and automatically flagged normal, abnormal, or critical. Release is gated by a two-step state machine: a technician enters and submits, and only a user with the pathologist/validation role — enforced through ir.model.access.csv and record rules — can approve and release. Turnaround time is computed per test from order to release, with overdue items highlighted on a worklist dashboard filtered by department and status. On release, the validated result is pushed back into the patient's EMR encounter timeline, a branded cumulative report is rendered as a QWeb PDF (analytes, units, reference ranges, and flags laid out for the clinician), and delta comparison against the patient's prior values is available for review. Ordered tests post to the patient invoice automatically through the account hook, and automated actions can chase overdue samples or notify on a critical flag. Everything is reachable over Odoo's XML-RPC/JSON-RPC API for analyzer middleware or portal integration, and the build targets Odoo 17.0, 18.0, and 19.0 on both Community and Enterprise (Enterprise-only features such as advanced studio views or approvals are only assumed when your edition supports them).
Because this is build-to-order, nothing is a shrink-wrapped download. We start with a short scoping call, confirm your test catalog, reference-range policy, report layout, and any analyzer or EMR touchpoints, then build against your Odoo version and edition, review with you on a staging database, and hand over installable source, documentation, and a git repository. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); analyzer/instrument middleware integration, multi-branch or multi-company labs, deeper localization, and larger historical-result data migration increase the quoted scope. The from-price is indicative only — you receive a fixed quote after the scoping call.
What you get
- Installable source code for the `clinical-lab-lis` module built for your Odoo version (17.0 / 18.0 / 19.0) and edition
- Installation and configuration on your environment, including test catalog, analytes, reference ranges, and report branding setup
- Technical documentation: data model, security model (access rules and record rules), report templates, and integration/API notes
- End-user guide plus a live training session for lab technicians, pathologists, and front-desk staff
- Post-go-live support window for defect fixes and configuration questions
- UAT on a staging database with a documented rollback plan before production cutover
- Git repository handover with full commit history and tagged release
Who this is for
Lab manager running a standalone diagnostic lab
Needs order-to-result throughput, a pending-samples worklist, and TAT visibility so no requisition falls through the cracks, with billing posted automatically rather than reconciled by hand.
Consultant pathologist / validation authority
Wants a hard two-step gate so only they can release results, plus reference-range flags and delta checks against prior values to sign off defensibly and fast.
Hospital IT / EMR owner
Needs the LIS to sit inside the same Odoo instance as the EMR, push validated results into the encounter timeline, and expose an API for analyzer middleware — not a separate system to reconcile.
Lab technician at the bench
Wants a fast result-entry grid with automatic abnormal/critical flagging and barcode-labelled samples, so data entry is quick and mistakes surface immediately.
How Clinical Lab — Laboratory Information System (LIS) Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Analytes & reference ranges | Modelled natively with sex/age bands and auto-flagging | Possible but you design the data model from zero | Often fixed ranges, hard to tailor per lab | No concept of an analyte or range |
| Two-step technician→pathologist release | Enforced via state machine + record rules | Build it yourself and maintain the security | Varies; sometimes single-step only | Not available |
| Panels/profiles (CBC, LFT) | Defined once, auto-expand into analytes on order | Custom compute logic to be written | Usually supported but rigid | No panel logic |
| EMR encounter integration | Results pushed into the patient timeline via clinical-core | Integration effort on top of the build | Standalone; EMR link often absent | No lab-to-encounter link |
| Branded QWeb lab report | Cumulative report with ranges, flags, your branding | Report template built to spec, added cost | Generic template, limited branding | No lab report format |
| Turnaround-time tracking | Computed per test with overdue worklist highlighting | Requires custom compute + dashboard | Sometimes basic timestamps only | None |
| Billing hook to invoice | Ordered tests post to `account` automatically | Wire the account link yourself | Integration quality varies | Manual invoice lines only |
| Support & handover | Install, training, support window, git repo handover | Depends on the developer engaged | Vendor support tiers, no source control of your logic | Community forums only |
Frequently Asked Questions about Clinical Lab
Is this an existing app I can download and install today?
No. This is a build-to-order module. ECOSIRE builds it against your test catalog, reference-range policy, report layout, and Odoo version/edition, then installs and supports it. There is no instant download — you request a quotation and we build it for you.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The clock starts once we've agreed the test catalog, workflow, report design, and any analyzer/EMR integrations on the scoping call. Larger data migrations or instrument middleware can extend that, and we tell you before you commit.
How does pricing and scoping work?
Pricing starts from $999 (indicative, single-company base scope). That figure is a starting point, not a fixed price — analyzer integration, multi-branch/multi-company labs, deeper localization, and historical-result migration increase scope. After a short scoping call you receive a fixed written quote for your exact requirements.
What support and updates do I get after go-live?
Every build includes a post-go-live support window for defect fixes and configuration questions, plus the git repository so your own team can maintain it. Version upgrades to a newer Odoo release, new tests/panels, or added integrations are quoted as follow-on work.
Which Odoo versions and editions does it support?
We build for Odoo 17.0, 18.0, and 19.0 on both Community and Enterprise. The module is built against your specific version and edition; Enterprise-only capabilities are only assumed where your edition provides them.
Can it connect to our analyzers and our existing EMR?
Yes. The module links results into the patient encounter through our clinical-core-his-emr layer, and exposes Odoo's XML-RPC/JSON-RPC API so analyzer middleware or a lab portal can push orders and pull results. Specific instrument protocols are scoped and quoted per integration.
Who is allowed to release a result?
Release is gated by a two-step state machine. A technician enters and submits, and only a user holding the pathologist/validation role can approve and release — enforced with Odoo access rights (`ir.model.access.csv`) and record rules, so unvalidated results never reach a patient.
Related Modules

Clinical Core — Hospital & Clinic Management (OPD/IPD/EMR)
A made-to-order Hospital Information System built natively on Odoo — patient registry with auto MRN, OPD/IPD (ADT) workflows, appointments, and a structured EMR. ECOSIRE builds, installs, and supports it for your clinic or hospital after a scoping call.

Clinical Imaging — Radiology (RIS) with DICOM/PACS Viewer
A made-to-order Odoo radiology information system: imaging ordering from the EMR encounter, DICOM modality worklist for the scanners, radiologist reporting with signed final reports, and an embedded web DICOM/PACS viewer — all tied to the patient record. ECOSIRE builds, installs, and supports it after a scoping call.

Clinical Patient Portal
A patient-facing website and portal front-end for Odoo where patients self-register, book appointments against real doctor availability, view validated results, pay invoices, and message their care team. Built to order by ECOSIRE on top of Odoo's website, portal, payment, and mail framework.

Clinical Pharmacy Dispensing
A made-to-order Odoo module that turns prescriptions into dispensing records with formulary control, FEFO lot/expiry, interaction alerts, and pharmacy billing. ECOSIRE scopes, builds, installs, and supports it for your pharmacy.
Clinical Lab
A made-to-order Odoo Laboratory Information System that runs your diagnostic lab end to end — from test order and sample collection through result validation to a branded, reference-ranged report. ECOSIRE builds, installs, and supports it against your test catalog and workflow.
- Configurable test catalog as new ORM models with per-test analytes, units, sex/age-banded reference ranges, and a linked `product.product` for pricing
- Test panels/profiles (CBC, LFT, RFT, etc.) defined once and auto-expanded into component analytes on order via compute methods with `@api.depends`
- Lab order raised directly from a `clinical-core-his-emr` encounter or as a standalone requisition, with patient and clinician context carried through
- Sample-collection step that generates barcode/label data per specimen and tracks container type, collection time, and specimen status