GSoC 2025: Integrate OpenELIS with Odoo - Final Presentation

Integrate OpenELIS with Odoo: My GSOC 2025 Journey with OpenELIS and Odoo

:rocket: 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.

The mission?
:backhand_index_pointing_right: To automate billing workflows, so that invoices are seamlessly generated in Odoo whenever lab orders are placed in OpenELIS.


:cross_mark: The Problem: Manual Billing

For many laboratories, billing is still a manual and error-prone process.

:warning: Problems with the old workflow:

  • Repetitive data entry :memo:
  • Increased errors :cross_mark:
  • Slower turnaround :hourglass_not_done:
  • Poor financial visibility :money_with_wings:

:building_construction: 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

:puzzle_piece: Core Components

  1. OdooClient – Handles XML-RPC communication (auth, CRUD, invoices)
  2. OdooIntegrationService – Business logic for invoice creation
  3. TestProductMapping – CSV-based test-to-product mapping
  4. Event Handling – Uses Spring events for asynchronous processing

:gear: Building the Odoo Client Layer

:sparkles: Key capabilities:

  • :key: Authentication with Odoo’s XML-RPC endpoint
  • :bust_in_silhouette: Automatic patient creation in Odoo if they don’t exist
  • :magnifying_glass_tilted_left: Duplicate prevention using national IDs or names
  • :shield: Error resilience – failures in Odoo don’t stop OpenELIS operations

:bar_chart: 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

:white_check_mark: Laboratories can update test pricing or product mappings anytime without touching code.


:counterclockwise_arrows_button: 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  

:desktop_computer: 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.

:magnifying_glass_tilted_right: Health check endpoint /health/odoo returns:

{
  "status": "UP",
  "odoo": "Available"
}

:glowing_star: The Benefits

With this integration in place, laboratories now enjoy:

  • :high_voltage: Automated Billing – invoices created instantly
  • :white_check_mark: Data Consistency – no mismatched records
  • :stopwatch: Operational Efficiency – less admin work
  • :chart_increasing: Real-Time Financial Visibility – track revenue seamlessly
  • :crystal_ball: Scalability – flexible SOA design for future features

:raising_hands: 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.

:video_camera: Demo

:rocket: 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.

2 Likes

this is great work @Vickabire , well done

2 Likes

Great Job @Vickabire .

No more need to build and copy the war file as the changes are now published in the latest docker images

4 Likes