The Registration module allows for a flexible configuration of patient attributes that will suit several implementations. The following types of fields to be captured for a patient.
Core Fields
Core fields come out of the box with Bahmni. Current set of core data are Name, gender, age and address. Addresses can be configured to take from a dictionary using the Address Hierarchy configuration.
Implementation Specific Fields
Fields that needs to be captured from the user can be configured using OpenMRS PersonAttributes functionality. If you need to add more attributes in an implementation, follow these steps.
1. Navigate to "Manage Person Attributes Types" link in OpenMRS Administration page.
2. Add "New Person Attribute Type". The "format" of the attribute will define the type of GUI element to be shown on Bahmni's Registration Page. If the attribute type is string, a textbox will be shown. If it is of "org.openmrs.Concept" type, then a dropdown is displayed. The label on the UI is taken from the "Description" of the attribute.
3. Apart from this, the bahmni-config (implementation specific configuration folder) provides an additional level of customiz
ation. We can display/hide some of the GUI elements that are configured in PersonAttributes. The settings are available at bahmni-config/openmrs/apps/registration/app.json. The following are some of the configurations.
showMiddleName, showCasteSameAsLastNameCheckbox,localNameSearch
4. Also, for the patient name, the autoComplete feature can be configured in app.json using the configuration-
"autoCompleteFields":["familyName", "caste"]
Using appointment module:
If you are using appointment module in your implementation, then you should add a database migration to add two person attributes that are required by the appointment module to function correctly. They are 'Telephone Number' and 'Unknown patient'. For example, https://github.com/Bhamni/jss-config/blob/master/openmrs/migrations/liquibase.xml#L1706
- Add a migration in the bahmni_config/openmrs/migrations folder.
- This migrations can be added directly to the liquibase.xml file or other based on your migrations folder structure.
- The migration should contain the following two changesets.
<changeSet id="IMPL-PERSON-ATTRIBUTE-TELEPHONE-NUMBER" author="Swathi, Jaswanth" context="rel0.76">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM person_attribute_type where name = 'Telephone Number';
</sqlCheck>
</preConditions>
<comment>Adding Telephone Number person attribute type</comment>
<sql>
INSERT INTO person_attribute_type (name, description, format, searchable, creator, date_created, retired, sort_weight, uuid) VALUES ('Telephone Number', 'Telephone Number', 'java.lang.String', '0', 1, now(), 0, 3, uuid());
</sql>
</changeSet>
<changeSet id="IMPL-PERSON-ATTRIBUTE-UNKNOWN-PATIENT" author="Swathi, Jaswanth" context="rel0.76">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM person_attribute_type where name = 'Unknown patient';
</sqlCheck>
</preConditions>
<comment>Adding Unknown patient person attribute type</comment>
<sql>
INSERT INTO person_attribute_type (name, description, format, searchable, creator, date_created, retired, sort_weight, uuid) VALUES ('Unknown patient', 'Unknown Patient', 'java.lang.String', '0', 1, now(), 0, 3, uuid());
</sql>
</changeSet>
Additional Patient Information
There are certain situations where you would need to fill in some patient attributes always, and some on a need basis. For that, the process is to add the PersonAttributes as mentioned in previous section. Then update the app.json file to include the attribute in "additionalPatientInformation" section as shown below. In this example, familyIncome was added in PatientAttributes and is configured to be shown as additional patient information.
"additionalPatientInformation" : [
{ "name":"familyIncome", "display":true }, /* display determines whether to show or hide */
{ "name":"rationCard", "display":true }
]