13 Jun 2014
During the last few days I finished the user interface for managing procedures. Procedures contain necessary information about the operation - like intervention and operation theater preparation duration. This is important for the scheduling algorithm. At the end of this week I began to setup the environment for the integer programming solver lpsolve that I will use to implement the scheduling. It is available under the LGPL license and offers wrappers for java and many other programming languages.
06 Jun 2014
I am proud to present you the first screenshots of this new module!
It is the first version of the scheduling page. It shows a daily view of all the operation theaters (ot) and offers functionality to adjust the available times. Within this period surgeries will be scheduled. A click on the grey area opens a dialog to adjust this times. The operation theaters are modeled as locations in the openmrs-core data model. I added a tag “is_operation_theater” to isolate them from other locations. I have also added two location attributes which store the default available times. As already mentioned, the user has the ability to adjust this times for a certain day, or mark this ot as not available (e.g. maintenaince, holiday, …). This information is stored with the help of the appointmentscheduling module. For each day and resource (=ot) an appointment block entry will be created if the available times differ from the default ones.
I have to admit that I expected to move forward faster this week. The reasons that slowed me down are: It has been a long time since I have done some front end development and I haven’t ever worked with jQuery before.
Nevertheless, I am confident that I will increase my development velocity over time!
Last but not least, I want to thank Terry Hannan. He is a well respected Clinical Associate Professor, Physician and past President of the Australian College of Health Informatics (ACHI). He was so kind to read through my project proposal and share his long-term experience with me. Terry has over thirty years international experience in Health Informatics and e-Health. We discussed several aspects of the user interface, which will result in an improved outcome. He also sent me a link to the following video, which describes several techniques to ensure that physicians open the right patient record. It inspired me to think more deeply about simple things as selecting the right entry in a search result table.
I am looking forward to further discussions!
30 May 2014
During the last few days I have finished the basic webservice layer for the surgery entity and extended the api.
At the end of the week, I started to develop the scheduling UI. I came across the jquery plugin fullcalendar from Adam Shaw.
Unfortunately it doesn’t offer two features that are required for this project:
- resource view: it is not possible to define resources (e.g. operating theaters) that are displayed as columns in the daily view. Open Issue 490
- available times: it is also not possible to define background events that define times when the resource is available Open Issue 496
There exist numerous forks of this project which all extend the functionality in some way. Unfortunately their changes are not integrated into the main project.
I filtered out two attempts that seem to be “actively” developed:
I also found a project from Szabó Rudi, offering both features, but it seems that it isn’t actively developed. It is based on the fullcalendar version 1.4.5, while the current release is 1.6.4 - I wasn’t even able to get the sources, because the archive was currupted.
There is already a beta of v2 of the fullcalendar available with many improvements like timezone support, and built-in internationalization. I hope that in the nearer future the resource view as well as available times are integrated in the main project. Till then I will use the Abletech fork, because having a resource view is a lot more important. I will see how to add the available time functionality later.
23 May 2014
This week I laid out the foundation for this module:
- installed the reference application
- created a running module using app- and uiframework
- started to create data model using JPA annotations instead of hibernate config files
- added findPatient.page form coreapps into my module (adaption to findSurgery record is not yet finished)
- added jacoco code coverage generation to the build process
- started to develop service layer
- started to develop webservice for surgery resource
- read tutorial about liquibase and started to write changeSet to create tables
Of course I have faced a lot of difficulties during this first week. The most tiresome ones were related to configuration issues. It also takes a while to figure out implicit conventions (e.g.: Which rest webservice url ends up in calling my getAll() method of my resource?). I am glad that there is a lot of documentation and code out there where you can have a look of how others solved the problems. This helped me a lot.
15 May 2014
Time is flying and the community bonding period is almost over.
In the last couple of days my mentor and I refined the project proposal.
We concentrated on the automatic scheduling algorithm which should maximize the operating theater utilization while minimizing the waiting time for patients.
There is a whole lot literature on this topic out there - here a few papers (the last one is a literature overview):
We decided to implement the approach based on the first paper - it is an Integer Programming solution.
Furthermore I designed a first draft of the data model. I gave a lightning talk at this weeks developer forum about these two topics and received valueable feedback from the entire community.
I am very excited to start on Monday morning!