On this page:
What's new in OpenMRS 1.9
Release date: 6 June 2012
Version 1.9.0 of OpenMRS has three (3) major changes. (A larger list can be found below.)
- Grouping encounters into visits
- Multiple providers per encounter
- Additional attributes to concept mapping
377 Bugs Fixed
Click here to see all 377 bugs fixed in OpenMRS 1.9.74 New Features Added
Click here to see all 74 new features added in OpenMRS 1.9.User Interface Changes
- The Manage Global Properties link has been changed into Settings where the global properties are grouped according to category. The old style of listing all without grouping can be accessed from the Advanced Settings link.
- The Encounters tab on the patient dashboard is replaced with Visits unless you set the visits.enabled setting to false.
Introduction of Concept Reference Terms
By default, when you upgrade to 1.9, all of your existing concept mappings are mapped as "NARROWER-THAN". If you actually want some of your concept mappings to be "SAME-AS" mappings (which would be the case if you are using mappings to uniquely identify concepts without using their concept id, for example), then before you migrate you can specify this by using the "comment" column of the concept_map table to specify the behavior that you want.
In summary (assuming a 1.6 -> 1.9 upgrade):
- In your pre-migration 1.6 system, in the concept_map table, update the comment field with the name of the map type that you want to apply to the mapping, prefixed with the words "Map Type: ". Valid concept may type names include "NARROWER-THAN", "SAME-AS", and "BROADER-THAN". For example, you would say: "Map Type: SAME-AS".
- If you are running a sync environment, the following groovy script might help do this (you'll want to set the source names and map type to meet your own specifications):
def typeName = "Map Type: SAME-AS"; def sourceNames = ["PIH","org.openmrs.module.mdrtb"]; for (sourceName in sourceNames) { org.openmrs.ConceptSource source = concept.getConceptSourceByName(sourceName); List conceptMaps = concept.getConceptsByConceptSource(source); for (conceptMap in conceptMaps) { if (!typeName.equals(conceptMap.getComment())) { conceptMap.setComment(typeName); concept.saveConcept(conceptMap.getConcept()); } } }
For more information, see: https://tickets.openmrs.org/browse/TRUNK-3296
Core and Bundled Modules
This module is a core module in OpenMRS 1.9. It can be upgraded, but can not be removed:
Core Module |
Version |
---|---|
0.5.2 |
These modules are bundled with OpenMRS 1.9. They will be started automatically and can be removed if desired.
Bundled Module |
Version |
---|---|
1.9.3 |
|
0.7.1.1 |
|
1.6.0 |
|
1.5.7 |
|
0.2.5 |
|
4.0.9.4 |
|
1.3.4 |
|
0.9 |
Download
Download OpenMRS 1.9
- Download OpenMRS 1.9.0 from Sourceforge.net.
- Other download options are listed on OpenMRS.org.
- OpenMRS 1.9.0 represents revision 27760.
Upgrading
Enhanced Validation
Starting in OpenMRS 1.9, every object that you save is validated (e.g. checking required fields, not allowing duplicate names). Prior to 1.9 this was not always done, so it is likely that existing pre-1.9 databases have data that is invalid, and 1.9 will not let you save those objects without fixing the validation errors.
To avoid running into this situation at unexpected times, you should use the Validation Module module before upgrading in production. There are two approaches:
- (better approach, because it uses 1.9's actual validation)
- Upgrade a copy of your production database on a test server
- Use the Validation module on the test server to identify any invalid items
- Fix these errors on your production server
- repeat, until there are no further validation errors
- (easier approach, but this uses validation in your running version)
- Use the validation module on your existing production server to identify any invalid items
- Fix these errors in-place on your production server
- repeat, until there are no further validation errors
Release Testing Helper Module
We now offer the Release Testing Helper to help you test the upgrade to OpenMRS 1.9.0 using your existing data. You can get more information about this module by reading ?Release Testing Helper Module on the OpenMRS Wiki. A video recording of how to use the Release Testing Helper is available on YouTube.
Contributors
A huge thanks to the 71 people that have contributed to the code base and helping us to get this far:
|
|
|
|
Not to mention all the people that contributed in countless other ways to support this release and be a great part of the shaping of this release:
For Developers
Non-Backwards-Compatible Changes for Developers
OpenMRS 1.9 includes a few non-backwards-compatible changes from version 1.8:
- Form no longer has the xslt and template properties. Use the new FormResource API.
- Encounter provider is no longer a mere person but has to be in the new provider tables. So a provider may not be a person. And each encounter provider has to be associated with an encounter role.
- Hibernate upgraded. See ?Non-backwards-compatible changes to Hibernate's Type API
Data Model Changes
The OpenMRS data model diagram for version 1.9.0 can be viewed from the OpenMRS Data Model page.
Click here to see all database changes in OpenMRS 1.9.* (Fixed)Modified edit_privilege to correct column size
* (Fixed)Add a table to enable generic storage of serialized objects
* (Fixed)users.retired to BOOLEAN
* Changing global_property.property from varbinary to varchar
* Drop the not null person id contraint
* (Fixed)Change active_list_type.retired to BOOLEAN
* (Fixed)Change active_list_type.retired to BOOLEAN
* (Fixed)Change concept_name.locale_preferred to BOOLEAN
* Adding index on notification_alert.date_to_expire column
* Adding "date_changed" column to person_address table
* Adding "changed_by" column to person_address table
* Add 'location_behavior' column to patient_identifier_type table
* Drop Not-Null constraint from location_id column in patient_identifier table
* Create table to store concept stop words to avoid in search key indexing
* Inserting the initial concept stop words
* Adding the discontinued_reason_non_coded column to orders.
* Adding 'start_date' column to person_address table
* Adding 'end_date' column to person_address table
* Adding "date_changed" column to patient_identifier table
* Adding "changed_by" column to patient_identifier table
* Adding "date_changed" column to relationship table
* Adding "changed_by" column to relationship table
* Increasing the serialized_data column of serialized_object to hold mediumtext
* Dropping unused date_started column from obs table
* Dropping unused date_stopped column from obs table
* Adding correct foreign key for concept_answer.answer_drug
* Create the person_merge_log table
* Create visit type table
* Create the visit table and add the foreign key for visit_type
* (Fixed)Changed visit.voided to BOOLEAN
* Adding visit_id column to encounter table
* Adding the start_date column to relationship.
* Adding the end_date column to relationship.
* Creating visit_attribute_type table
* (Fixed)Change visit_attribute_type.retired to BOOLEAN
* Refactoring visit_attribute_type table (devs only)
* Creating visit_attribute table
* (Fixed)Change visit_attribute.voided to BOOLEAN
* Increasing maximum length of patient identifier type regex format
* Change all empty concept_source.hl7_code to NULL
* Add unique constraint to the concept_source table
* Adding the outcomesConcept property to Program
* Adding the outcome property to PatientProgram
* Creating location_attribute_type table
* (Fixed)Change visit_attribute.retired to BOOLEAN
* Refactoring location_attribute_type table (devs only)
* Creating location_attribute table
* (Fixed)Change visit_attribute.retired to BOOLEAN
* Converting general address format (if applicable)
* Converting Spain address format (if applicable)
* Converting Rwanda address format (if applicable)
* Converting USA address format (if applicable)
* Converting Kenya address format (if applicable)
* Converting Lesotho address format (if applicable)
* Converting Malawi address format (if applicable)
* Converting Tanzania address format (if applicable)
* Renaming the concept_source table to concept_reference_source
* Adding concept_reference_term table
* (Fixed)Change concept_reference_term.retired to BOOLEAN
* Adding concept_map_type table
* (Fixed)Change concept_map_type.retired to BOOLEAN
* Renaming the concept_map table to concept_reference_map
* Adding concept_reference_term_id column to concept_reference_map table
* Renaming concept_map_type.isHidden to is_hidden
* Inserting core concept map types
* Adding concept_map_type_id column and a foreign key constraint to concept_reference_map table
* Adding changed_by column and a foreign key constraint to concept_reference_map table
* Adding date_changed column and a foreign key constraint to concept_reference_map table
* Adding concept_reference_term_map table
* Creating concept reference terms from existing rows in the concept_reference_map table
* Adding foreign key constraint to concept_reference_map.concept_reference_term_id column
* Dropping foreign key constraint on concept_reference_map.source column
* Dropping concept_reference_map.source column
* Dropping concept_reference_map.source_code column
* Dropping concept_reference_map.comment column
* Remove ON DELETE CASCADE from relationship table for person_a
* Remove ON DELETE CASCADE from relationship table for person_b
* (Fixed)Changing from smallint to BOOLEAN type on BOOLEAN properties
* Updating logging level global property
* Void all attributes that have empty string values.
* Create provider table
* (Fixed)Change provider.retired to BOOLEAN
* Creating provider_attribute_type table
* (Fixed)Change provider_attribute_type.retired to BOOLEAN
* Refactoring provider_attribute_type table (devs only)
* Creating provider_attribute table
* (Fixed)Change provider_attribute.voided to BOOLEAN
* Creating encounter_role table
* (Fixed)Change encounter_role.retired to BOOLEAN
* Creating encounter_provider table
* (Fixed)Change encounter_provider.voided to BOOLEAN
* Inserting the unknown encounter role into the encounter_role table
* Creating providers for persons from the encounter table
* Migrating providers from the encounter table to the encounter_provider table
* Dropping the provider_id column from the encounter table
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Add xslt column back to the form table
* Add template column back to the form table
* Add obs.previous_version column (TRUNK-420)
* Rename form_resource table to preserve data; 20111010-1515 reference is for bleeding-edge developers and can be generally ignored
* Creating form_resource table
* Fix all the old void_reason content and add in the new previous_version to the matching obs row (POTENTIALLY VERY SLOW FOR LARGE OBS TABLES)
* Inserting Auto Close Visits Task into 'schedule_task_config' table
* Deleting non-existing roles from the role_role table
* Associating daemon user with a person
* Add the not null person id contraint
* Setting super user gender
* Add unique uuid constraint and attributes inherited from BaseOpenmrsData to the person_merge_log table
* Fix empty descriptions on relationship types
* Change merged_data column type to CLOB in person_merge_log table
* Create clob_datatype_storage table
* Add date_changed column to drug table
* Add changed_by column to drug table
* Increase size of drug name column to 255 characters
End Of Life (EOL) announcement
OpenMRS 1.6 is no longer supported
As of described in Unsupported Releases (EOL), OpenMRS can only support up to three released versions at a time (the current release and then two versions back). With the release of OpenMRS 1.9.0, support is no longer provided by the core Development Team for OpenMRS 1.6.x and earlier. This announcement also serves as advance notice that support will end for OpenMRS 1.7.x, concurrent with the release of OpenMRS 1.10.