Integrate OpenELIS with Odoo: My GSOC 2025 Journey with OpenELIS and Odoo
Introduction
This summer, I had the opportunity to work on an exciting project as part of Google Summer of Code (GSOC) 2025. My project focused on bridging two powerful open-source systems OpenELIS Global, a Laboratory Information Management System (LIMS), and Odoo.
- Mentor: @reagan
- Backup Mentor: @Moses_Mutesasira
Explore the code commits- Project Report: GitHub - vickabire/GSoC-2025---Vickabire
The mission?
To automate billing workflows, so that invoices are seamlessly generated in Odoo whenever lab orders are placed in OpenELIS.
The Problem: Manual Billing
For many laboratories, billing is still a manual and error-prone process.
Problems with the old workflow:
- Repetitive data entry

- Increased errors

- Slower turnaround

- Poor financial visibility

Designing the Integration
To solve this, I designed a Service-Oriented Architecture (SOA) with a clear separation of concerns:
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β OpenELIS βββββΆβ Integration βββββΆβ Odoo β
β (LIMS) β β Service β β (ERP) β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
- OpenELIS β manages lab tests & workflows
- Integration Service β event-driven bridge between systems
- Odoo β handles billing & financial records
Core Components
- OdooClient β Handles XML-RPC communication (auth, CRUD, invoices)
- OdooIntegrationService β Business logic for invoice creation
- TestProductMapping β CSV-based test-to-product mapping
- Event Handling β Uses Spring events for asynchronous processing
Building the Odoo Client Layer
Key capabilities:
Authentication with Odooβs XML-RPC endpoint
Automatic patient creation in Odoo if they donβt exist
Duplicate prevention using national IDs or names
Error resilience β failures in Odoo donβt stop OpenELIS operations
Mapping Tests to Products
At the heart of the integration is a simple CSV configuration file:
loinc_code,product_name,quantity,price_unit
12345-6,Complete Blood Count,1,25.00
78901-2,Basic Metabolic Panel,1,35.00
Laboratories can update test pricing or product mappings anytime without touching code.
Event-Driven Workflow
Hereβs how it works step by step:
Sample Created in OpenELIS
β
βΌ
[ Event Fired: SamplePatientUpdateDataCreated ]
β
βΌ
OdooIntegrationService β Finds/creates patient in Odoo
β
βΌ
Maps lab tests β Odoo products
β
βΌ
π° Invoice automatically created in Odoo
Deployment & Monitoring
Configuration is externalized via environment variables: Look at this example of a repository that i created to run the integration, all i need to do is build openELIS with the Odoo changes and then copy the .war to config/openelis/tomcat/war. We are using odoo-initializer developed by Mekom Solutions to initialize our odoo instance with configurations containing products and product categories that eventually OpenELIS will map to.
See more of the configuration in the repository below.
Health check endpoint /health/odoo returns:
{
"status": "UP",
"odoo": "Available"
}
The Benefits
With this integration in place, laboratories now enjoy:
Automated Billing β invoices created instantly
Data Consistency β no mismatched records
Operational Efficiency β less admin work
Real-Time Financial Visibility β track revenue seamlessly
Scalability β flexible SOA design for future features
Reflections
Working on this project was both technically challenging and deeply rewarding. I had the privilege of being mentored by @reagan , @Moses_Mutesasira , @mherman22 whose guidance made this journey smoother and more impactful.
Demo
Final Thoughts
My GSOC 2025 journey has been an incredible learning experience. More importantly, itβs a step toward making healthcare systems more efficient, reliable, and sustainable through automation and integration.