Hi, we have a production server that is running on an older version of the EndTB Bahmni (ver1.5). We would like to upgrade to use EndTB version 2.1.2.
Our instance of EndTB is extensively modified from the default configuration. The main changes we’ve made are
we have modified the concept dictionary
we’ve added and removed observation templates (and edited the ones we’ve retained); and the associated form conditions for these templates has also been changed
we have modified the list of drugs (TB drugs and non-TB drugs), and the dosing, frequency values
Added many custom reports
Given these changes, I would really appreciate any guidance on things we need to be mindful of in upgrading to a more recent version. Crucially - will our existing openmrs/mysql database require any changes to work with newer versions of Bahmni and openmrs? Will the existing templates continue to work (ie do newer versions of Bahmni still implement templates by adding concept sets to the “All Observation Templates” concept?). Would form conditions still work using our existing json files?
There are a number of considerations to take note of as stated below. However as you consider them, I would recommend getting a db dump of the prod db then import this into a running upgraded instance then do a comprehensive test of feature by feature as you take note of incompatibilities as (UI anomalies) and error logs (OpenMRS logs and Initializer logs) - I would do this first!
1. OpenMRS Core & Module Compatibility
Bahmni v2.1.2 typically uses OpenMRS 2.3.x+ and newer versions of modules (e.g., Bahmni Core, EMR API, Bahmni Apps, etc.).
Your existing OpenMRS database schema from v1.5 will not directly work unless migrated using OpenMRS platform upgrade tools (like Liquibase or update scripts).
You must follow a versioned path: i.e., OpenMRS 1.11 → 2.0 → 2.3 → etc., applying the correct Liquibase upgrade scripts or using Bahmni database upgrade helpers.
Backup everything before starting, and test on a staging copy of the DB.
2. Concept Dictionary Changes
Bahmni still supports concept dictionaries the same way, but newer versions may introduce new concepts or changes in existing ones.
You must merge your custom dictionary with the updated one carefully, avoiding conflicts with:
Concept classes
Data types
Concept sets (especially for templates and form mappings)
Tools like OpenMRS Initializer or metadata-sharing can help version and manage custom dictionaries.
3. Observation Templates & Concept Sets
Yes, “All Observation Templates” is still used to organize templates in newer versions.
However:
There may be new configuration options or UI changes in how templates are rendered.
If your templates are based on concept sets, they should still be usable — provided the concept UUIDs remain unchanged.
4. Form Conditions
Form conditions written in JavaScript within JSON forms will continue to work — as long as the Bahmni Form module is the same or compatible.
But beware of changes in:
DOM rendering
Validation rules
Deprecated APIs in newer Bahmni versions
You might need to retest and possibly refactor some conditions, especially if they rely on specific field IDs or element layouts.
5. Drugs & Orders
The Drug Order model in OpenMRS changed significantly in OpenMRS 2.x (esp. around dosing, frequency, order groups).
Any custom TB and non-TB drug entries, and especially frequency concepts, must be validated post-upgrade.
If your drug list is customized, you should:
Export it pre-upgrade
Compare with Bahmni v2.1.2’s drug list
Merge cautiously
Order Entry UI might also expect certain concept mappings (e.g., dose units, frequencies) to exist.
6. Custom Reports
If you’re using Bahmni Reports, check if:
Your .sql and .json report files are compatible.
The reporting database schema has changed in the newer version (some tables may be renamed or normalized).
The underlying data sources (e.g., patient_program, obs, orders) remain consistent with what your reports expect.
@kazlaw thank you so much for the detailed response. This is really helpful and gives us really good guidance on how to proceed. Looks like a bit of work will be involved and a lot of testing to make sure the upgraded version functions as intended but great to know that ultimately there is a viable pathway to move to a current version. Thanks!