PROJECT: ClinicIO


1. Overview

This page showcases my contributions to an open source software engineering group project as part of a university module. ClinicIO is a desktop application intended for medical clinic receptionists and doctors. It allows them to effortlessly manage a multitude of clinic processes such as managing queues. While there is a Graphical User Inteface (GUI) for displaying results, a key constraint for the module was to ensure that the application is used through a text interface. The program logic is written in Java in an Object Oriented manner and the GUI is written in JavaFX.

In the management of the project, I was responsible for ensuring the quality of the project’s documentation. This involved a decided focus on reviewing language, ensuring that it is in-depth and simple to understand. I believe this is important to enable our program to be adopted by users and external developers.

My individual role was as a developer in charge of managing the program’s data. To this end, I worked together with my group members to understand their features and subsequently integrated the ability to view analytics for each of them. In addition, I contributed the ability to export data out of the program.

2. Summary of contributions

This section lays out my contributions to the project.

2.1 Major enhancement: the ability to view detailed statistics and visualizations.

  • What it does: It allows the user to track the activity of a clinic through objective metrics, in a simple manner. Analytics are enabled for patients, appointments and doctors.

  • Justification: This feature improves the product significantly because it provides a user with insight to make decisions regarding the clinic’s processes. This can be used to improve the efficiency and the experience for both staff and patients. It ensures that the clinic is able to improve with time, in order to benefit all stakeholders.

  • Highlights: This enhancement integrates across the major functions of a clinic. It was a challenge to design and implement a flexible yet powerful interface through which different types of visualizations can be easily created. A consistent and visually appealing graphical user interface was also a key part of this. This was done in order to ensure that many more metrics can be programmed to be tracked in the future.

The following code snippet adds a summary of statistics to be displayed:

statData.updateSummary("title goes here", "list of labels go here", "list of values go here")

  • Minor enhancement: the ability to export various types of patient data to a human editable format (CSV).

2.2 Other contributions:

  • Project management:

    • Added handy git tips that helped group members: 1, 2

  • Enhancements to existing features:

    • Added the ability to switch between GUI panels on top of an existing GUI placeholder: #227

  • Documentation:

    • Updated the developer guide appendices: #20, #61

    • Added a section to guide users on previewing user interfaces: #120

  • Community:

    • Reviewed team mates' code contributions (with non-trivial review comments): #60, #132, #140

    • Reported bugs and suggestions for other teams in the cohort: 1, 2, 3

3. Contributions to the User Guide

The following are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users .

Data Management

Analytics

The analytics feature allows users to view statistics across the various functions of a clinic. These are viewed in isolation with separate commands for each department. However, they share a similar user interface composed of two distinct sections. They are the summary and the visualizations as shown in the following screenshot:

AnalyticsScreenshot
Summary

The summary displays the number of occurrences of events such as the Number of appointments in the screenshot above. They can be raw totals or averages. This will be indicated by the title. The numbers are categorized according to the following time periods:

  1. Today: The occurrences on the present real life date.

  2. This Week: The occurrences in the present real life week spanning from Monday to Sunday.

  3. This Month: The occurrences in the present real life month.

  4. This Year: The occurrences in the present real life year.

Visualizations

The pane below the summary displays visualizations. There may be multiple visualizations which can be cycled through using the Next and Previous buttons. The visualizations may be either one of a vertical bar chart, horizontal bar chart, vertically stacked bar chart or a line chart.

Analytics Commands

The following commands can be used to display the different types of statistics.

Displaying patient statistics : patientstats

Displays the following information about patients:

  • A summary of the number of patients over various time periods.

  • The number of patients segmented by each day of the week.

  • The number of patients segmented by different time periods within a day.

Format: patientstats

Displaying appointment statistics : apptstats

Displays the following information about appointments:

  • A summary of the number of scheduled appointments over various time periods.

  • The availability of appointment slots as compared to the number of scheduled appointments.

  • The number of appointments scheduled for each month in the current year.

Format: apptstats

Displaying doctor statistics : doctorstats

Displays the following information about doctors:

  • A summary of the average number of consultations per doctor over various time periods.

  • The number of patient preferences for each doctor.

  • The total number of consultations for each doctor.

Format: doctorstats

You can view my user guide contribution towards the export feature here: exporting patient data

4. Contributions to the Developer Guide

The following below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Analytics feature

Implementation

The following class diagram represents the relationships between classes in the analytics package.

AnalyticsClassDiagram

The abstract Statistics class specifies methods for the computation and retrieval of two groups of statistics. The first group consists of statistics to be displayed as a summary while the second is for ones that are visualized. Each of the statistics classes inherit from Statistics. They are encapsulated in Analytics which acts as a wrapper class for the various statistics and employs the delegation pattern. Each of the statistics classes may depend on`DateUtil` and TimeUtil. These classes contain utility methods for date and time information such as the number of occurrences in a certain date or time period. The occurrences can be of events such as appointments.

Data Management

Each of the statistics classes depend on the following classes for storing data:

  • StatData:

    • acts as a structure to encapsulate all statistics data to be displayed for simpler transport from Analytics to AnalyticsDisplay.

    • contains SummaryData and CircularList objects. The latter stores VisualizationData objects.

    • interfaces directly with the statistics classes to receive data.

    • used by AnalyticsDisplay to obtain fields required to create summary and visualizations.

  • SummaryData:

    • acts as a structure to encapsulate information required to create summaries.

    • contains the following fields:

      • title: the title of the summary information.

      • summaryElements: the texts and their accompanying values.

  • CircularList:

    • used for storing VisualizationData objects. Allows visualizations to be cycled backwards and forwards on the user interface.

  • VisualizationData:

    • acts a structure to encapsulate information required to create visualizations.

    • contains the following fields:

      • id: the id of the chart. Used as an identifier to apply Cascading Style Sheet (CSS) to style each chart individually.

      • type: the type of the chart. May be either one of a vertical bar chart, horizontal bar chart, vertically stacked bar chart or a line chart.

      • isContinuous: indicates if the chart is continuous or categorical. Used by Plot to create the appropriate chart.

      • chartTitle: the title of the chart.

      • xTitle: the title of the horizontal axis if the chart is vertical or the vertical axis if horizontal.

      • yTitle: the title of the vertical axis if the chart is vertical or the horizontal axis if horizontal.

      • dataGroups: the groups of data points to be plotted. Must be the same in number as dataGroupsLabels.

      • dataGroupsLabels: the label for each group of data. Used in the legend of the chart. Must be the same in number as dataGroups.

  • Tuple:

    • used to store pairs of values as a convenient means by which to transport data points.

    • used mostly within a List, allowing order to be preserved.

Processes

This section describes the processes that take place in order to display analytics.

All Statistics Commands

The following apply to all the different types of statistics:

  1. Analytics updates the appropriate statistics object with the latest appropriate lists (e.g. appointments) from ModelManager.

  2. The particular statistics object then calculates the summary for the various time periods mentioned above.

  3. The particular statistics object then calculates data for one or more visualizations and updates StatData.

  4. Analytics retrieves StatData from the statistics object and passes it to ModelManager.

  5. ModelManager raises an AnalyticsDisplayEvent containing StatData.

  6. AnalyticsDisplay retrieves StatData from AnalyticsDisplayEvent and passes it to AnalyticsPlot.

  7. AnalyticsPlot updates the summary user interface.

  8. AnalyticsPlot decides and plots the appropriate chart on the user interface.

patientstats Command

The following are the processes performed specifically by PatientStatistics:

  1. PatientStatistics calculates the summary of the number of patients.

  2. PatientStatistics calculates the number of patients for the following time periods in a day:

    • 9AM - 12PM, 12PM - 3PM, 3PM - 6PM, 6PM -9PM

  3. PatientStatistics updates StatData with this data for a vertical bar chart visualization.

  4. PatientStatistics calculates the total historical number of patients for each day in a week.

  5. PatientStatistics updates StatData with this data for a vertical bar chart visualization.

apptstats Command
By default, 24 appointment slots are available in day.

The following are the processes performed specifically by AppointmentStatistics:

  1. AppointmentStatistics calculates the summary of the number of appointments.

  2. AppointmentStatistics calculates the number of scheduled and available appointment slots for each day of the following week.

  3. AppointmentStatistics updates StatData object with this data for a stacked bar chart visualization.

  4. AppointmentStatistics calculates the number of scheduled appointments for each date in the current year.

  5. AppointmentStatistics updates StatData object with this data for a line chart visualization.

doctorstats Command

The following are the processes performed specifically by DoctorStatistics:

  1. DoctorStatistics calculates the summary of the average number of consultations per doctor.

  2. DoctorStatistics calculates the number of patients who prefer each doctor.

  3. DoctorStatistics updates StatData object with data for a horizontal bar chart visualization.

Design Considerations

Aspect: Computing statistics
  • Alternative 1 (current choice): Compute statistics only upon request

    • Pro: This reduces unnecessary computational workload.

    • Con: There is greater computational workload upon request of the statistics which may result in the user having to wait longer (if at all) to view them.

  • Alternative 2: Compute statistics every time there is a change in the underlying data

    • Pro: There is no chance of the user having to wait to view statistics.

    • Con: This increases the computational workload which may provide little benefit if statistics are not viewed frequently by the user.

Aspect: User interface for the different types of statistics
  • Alternative 1 (current choice): Single, predetermined user interface

    • Pros: It is consistent, making it easier for users to process the information. It easier to implement due to the reusability of code.

    • Con: It lowers flexibility by mandating all statistics types to only have a summary and visualization component.

  • Alternative 2: Customized user interface for each type of statistic

    • Pro: It allows displays of quantitative information that are better suited for each individual statistics type. This results in greater flexibility even in the future as users may have changing analytics needs.

    • Cons: It may lower design consistency, forcing users to readjust each time they view it. It is more difficult to implement.

  • Alternative 3: Allow users to pick and choose which statistics they want to view.

    • Pro: This provides the greatest flexibility as users have total control in which statistics they view.

    • Cons: The burden is placed on the user having to decide which statistics they want to view. It is more difficult to implement as a consistent user interface needs to be designed to accomodate all the possible combinations.

Export feature

The export feature allows users to extract patient related data out of the program, into Comma Separated Values(CSV) format.

Current Implementation

The following swimlane diagram represents the workflow of the export functionality.

ExportSwimlaneDiagram

The ExportPatientData class contains static methods for filtering and organizing the relevant data. These methods depend on a list of patients. It then passes the data to ExportUtil in order to write to a CSV file. ExportUtil also checks the validity of the data to be written. The names and locations of the CSV files are predetermined by ExportPatientData. All exported files are stored in the root folder of the program.

The following operations are implemented:

  • exportpatients Command - exports all patients' personal information into ClinicIO_patientdata.csv.

  • exportpatientsappointments Command - exports all patients' appointment records into ClinicIO_patientsappointments .csv.

  • exportpatientsconsultations Command - exports all patients' consultation records into ClinicIO_patientsconsultations.csv.

Design Considerations

Aspect: File format
  • Alternative 1 (current choice): CSV

    • Pros: It is human editable and has a simple schema, making it easier to understand. It is supported on all target platforms. Additionally, it is easier to implement.

    • Con: It does not allow complex relationships. This may result in repetitive data.

  • Alternative 2: XLS (Native Excel format)

    • Pros: It allows more complex relationships between data to be stored. Data can also be stored in the form of charts and graphs.

    • Cons: It is less widely supported and consumes more memory. It is also more difficult to implement.

Aspect: File location and naming
  • Alternative 1 (current choice): File location and naming are predetermined within the program and they are to be stored in the root folder.

    • Pros: Users can easily find it as it is in the same location as the program and has a standard name. It also results in a quicker operation and is easier to implement.

    • Con: It reduces flexibility as another step is required if the user needs it in another directory.

  • Alternative 2: File location and naming are specifiable by user.

    • Pro: This would give users more control.

    • Cons: It results in a slower operation due to the time taken to enter filename and location. It is also more difficult to implement.