About the Feature
The Bahmni tele-consultation feature release is set of artefacts that can be deployed/installed on an existing Bahmni system using 0.92 version. These artefacts would enable the healthcare professionals using bahmni to schedule video tele-consultation appointments.
See this documentation page too: Teleconsultation
Features List
Scheduling video tele-consultation appointments
Send appointment confirmation and link to patient’s email address.
Start tele-consulatation from patient dashboard.
Video Demo
https://www.youtube.com/watch?v=cLxmGHshCzI
Prerequisites
Supported Bahmni Version 0.92.
How to upgrade to the latest version - Install Bahmni on CentOS
Assumptions
To rollback, manually deploy back the old artefacts.
This feature is completely supports rollback.
Steps to deploy Tele-consultation feature
Install Bahmni version 0.92 Install Bahmni on CentOS
Download appointment omod and place it in /opt/openmrs/modules/ directory
#Download appoitment omod yum install https://github.com/Bahmni-Covid19/openmrs-module-appointments/releases/download/Release_v1/appointments-1.2.3.omod mv appointments-1.2.3.omod /opt/openmrs/modules/ chown bahmni:bahmni /opt/openmrs/modules/appointments-1.2.3.omod
Download bahmniapps.zip, unzip and place it in /var/www/ replacing the existing bahmniapps
#Download bahmniapps.zip yum install https://github.com/Bahmni-Covid19/openmrs-module-appointments/releases/download/Release_v1/bahmniapps.zip unzip bahmniapps.zip -d bahmniapps mv bahmniapps /var/www/ chown bahmni:bahmni /var/www/bahmniapps
Next Steps:
These are manual steps to be done, in order to see some tele-consultation configurations in bahmni_config.
In file /var/www/bahmni_config/openmrs/apps/customDisplayControl/js/customControl.js under directive
patientAppointmentsDashboard
, where we have$q.all([getUpcomingAppointments(), getPastAppointments()]).then(function (response) { $scope.upcomingAppointments = response[0].data; $scope.upcomingAppointmentsHeadings = _.keys($scope.upcomingAppointments[0]); $scope.pastAppointments = response[1].data; $scope.pastAppointmentsHeadings = _.keys($scope.pastAppointments[0]); }); $scope.goToListView = function () { $window.open('/bahmni/appointments/#/home/manage/appointments/list'); };
replace the following
var convertUTCtoLocal = function (start_date_time, end_date_time) { var date = Bahmni.Common.Util.DateUtil.formatDateWithoutTime(start_date_time); var timeSlot = Bahmni.Common.Util.DateUtil.formatTime(start_date_time) + " - " + Bahmni.Common.Util.DateUtil.formatTime(end_date_time); return [date, timeSlot]; }; $q.all([getUpcomingAppointments(), getPastAppointments()]).then(function (response) { $scope.upcomingAppointments = response[0].data; $scope.upcomingAppointmentsUUIDs = []; $scope.teleconsultationAppointments = []; for (var i=0; i<$scope.upcomingAppointments.length; i++) { $scope.upcomingAppointmentsUUIDs[i] = $scope.upcomingAppointments[i].uuid; $scope.teleconsultationAppointments[i] = $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_TELECONSULTATION; delete $scope.upcomingAppointments[i].uuid; delete $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_TELECONSULTATION; const [date, timeSlot] = convertUTCtoLocal($scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_START_DATE_KEY, $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_END_DATE_KEY); delete $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_START_DATE_KEY; delete $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_END_DATE_KEY; $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_DATE_KEY = date; $scope.upcomingAppointments[i].DASHBOARD_APPOINTMENTS_SLOT_KEY = timeSlot; } $scope.upcomingAppointmentsHeadings = _.keys($scope.upcomingAppointments[0]); $scope.pastAppointments = response[1].data; $scope.pastAppointmentsHeadings = _.keys($scope.pastAppointments[0]); }); $scope.goToListView = function () { $window.open('/bahmni/appointments/#/home/manage/appointments/list'); }; $scope.openJitsiMeet = function (appointmentIndex) { var jitsiMeetingId = $scope.upcomingAppointmentsUUIDs[appointmentIndex]; appService.setTeleConsultationVars(jitsiMeetingId, true); }; $scope.showJoinTeleconsultationOption = function (appointmentIndex) { return $scope.upcomingAppointments[appointmentIndex].DASHBOARD_APPOINTMENTS_STATUS_KEY == 'Scheduled' && $scope.teleconsultationAppointments[appointmentIndex]; }
In the file /var/www/bahmni_config/openmrs/apps/customDisplayControl/views/patientAppointmentsDashboard.html, the the following header and its content:
<th> Join Teleconsultation </th>
<button style="background: #669998; color: white;" ng-if="showJoinTeleconsultationOption($index)" ng-click="openJitsiMeet($index)"> Join Teleconsultation </button>
To the file /var/www/bahmni_config/openmrs/apps/registration/app.json add the following:
under config/attributes:
"cluster", "email"
b. under fieldValidations add
"email" : {"pattern" : "^(?=.{1,40}$)(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,4})$", "errorMessage" : "Should be a valid email address"},
How To Setup Email System
Create a file called email-notification.properties in /opt/openmrs/
Have the following contents in the file and update the contents to the email server properties.
smtp.from.email.address= smtp.from.name= smtp.host= smtp.port= smtp.ssl= smtp.username= smtp.password=
This link can help setup personal gmail account for email system.
https://support.google.com/a/answer/176600?hl=en#zippy=%2Cuse-the-gmail-smtp-server
3. Set bahmni.appointment.teleConsultation.sendEmail true in OpenMRS global property to send email for tele-consultation
Fall back mechanism (To restore the system back to original state before tele-consultation feature was installed)
Before proceeding with the installation steps take the backup of the following:
appointments omod in /opt/openmrs/modules/ folder.
bahmniapps directory under /var/www/ folder.
bahmni_config directory under /var/www/ folder
If you want to revert the feature, please restore the above backups of appointments omod, bahmniapps and bahmni_config directories and restart openmrs service.
Contact Us:
Praveena Dayanand<praveena.dayanand@thoughtworks.com>
Adhavan Kp<adhavan.kp@thoughtworks.com>
Ruchika Bhargava<ruchikab@thoughtworks.com>
Swati Gogia<swatigogia openers id>