Overview
VISIT is an open-source Customer Relationship Management (CRM) software for House Call Doctors. It is based on a Command-Line Interface (CLI) application called AddressBook3 by the SE-EDU Initiative. The UnrealUnity Team comprising of 5 people including myself introduced features that allow these doctors on-the-go to manage their appointments in an easy and enhanced fashion. It is written in Java with its GUI created in JavaFX, and has about 16 kLoC.
I was tasked with conceptualizing and implementing the Appointments system comprising of Reminders and Follow-ups. This document highlights these features and provides the documentation for them from the User and Developer Guides.
Summary of contributions
-
Major enhancement: Added the appointments system
-
What it does: Allows the user to create and manage appointments such as follow-ups with patients and general reminders.
-
Justification: Doctors need a way to track when their next appointments are, or to follow-up with patients in their care, such as if the patient has been cured by the end of their antibiotics dose. They also need some way to track important deadlines and events through reminders, such as a particular hospital being closed.
-
Highlights: This enhancement required two data structures to be used at the same time in parallel due to the underlying way data is stored in AddressBook3. Due to the lack of documentation from how most of the base project worked, a lot of tracing and trial-and-error had to be done.
-
-
Minor enhancement: Forced commands without arguments to refuse execution if invalid arguments are still specified.
-
Code contributed: [RepoSense]
-
Other contributions:
-
Tests:
-
Project management:
-
Managed the look and feel of the GitHub website, example: #57
-
Provisioned site short-urls and project email address.
-
Vetted and assigned incoming Issues to team members.
-
Performed major refactoring to rebrand project.
-
-
Documentation:
-
Worked on documentation for the project, example: #191
-
-
Community:
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Appointment System
VISIT also enables doctors to keep abreast and up-to-date on any events or deadlines as VISIT can be customized to remind them of any follow-up visits or other timed reminders.
There are two kinds of Appointments: Follow-Ups and Reminders.
You can only have one active Appointment of the same title, adding the same Appointment with a different day count will simply update the existing Appointment.
Follow-ups in this version do not update if you change the name of the patient after the follow-up is created.
Adding a follow-up visit with patient : followup
Adds a follow-up visit for a particular patient. You can add one even if you have never had a visit with the patient in the past. The application will keep track of when your next appointment with the patient is on the Appointments window.
Format: followup INDEX [d/DAYS]
The follow-up entry will by default generate the follow-up for 7 days' time if not specified. |
Examples:
-
followup 9 d/10
Creates a follow-up entry on patient with index 9 for 10 days later. -
followup 1
Creates a follow-up entry on patient with index 1 for 7 days later.
Creating a generic reminder : reminder
Creates a new reminder to show up in the Appointments window.
Format: reminder TEXT [d/DAYS]
The reminder entry will by default generate the prompt for 7 days' time if not specified. |
Examples:
-
reminder Two Point Hospital closed d/10
Creates a reminder "Two Point Hospital closed" that will display for the next 10 days. -
reminder Losartan recall
Creates a reminder "Losartan recall" that will display for the next 7 days.
Removing an Appointment : removeappt
Remove an appointment from VISIT. This can be either a Follow-up or Reminder.
Format: removeappt DESCRIPTION [d/DAYS]
Any appointment matching just the description will be removed if the specific days is not specified. |
Examples:
-
removeappt Two Point Hospital closed
Removes any appointment which description is "Two Point Hospital closed". -
removeappt Satya Nadella
Removes any appointments with the patient whose name is Satya Nadella.
Show Appointments "Message of the Day" box : show
Shows a pop-up containing the appointments. This is useful if you want to keep a small window just containing the appointments on the screen, separate from the main window.
Format: show
Sort Appointments : sort
Sorts the appointments in order of type, days remaining, and finally by name.
Format: sort
Contributions to the Developer Guide
Given 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. |
Appointments feature
Implementation
The Appointments feature comprises of Reminders and Follow-Ups. Users can create a generic Reminder to be notified of an ongoing "something to take note of", such as a hospital being closed. Follow-ups are used to plan future visits to patients. Both Reminders and Follow-ups are represented by the Appointment
class, but are facilitated by the AppointmentList
class for UI updates and AppointmentTable
class for JSON updating.
The AppointmentList
and AppointmentTable
are similar and run the same operations in parallel. This is a constraint due to how data is stored into JSON by the underlying program, and is on the timeline to be converged in v2.0. Due to their similarities, we will only look at AppointmentTable
for the sake of this documentation.
It implements the following operations:
-
AppointmentTable#getDefaultAppointments()
— Returns a default, emptyAppointmentTable
. -
AppointmentTable#getAppointmentList()
— Returns anObservableList
version of the Appointments for UI usage. This is necessary asAppointmentTable
is loaded on launch andAppointmentList
uses this data to propagate the UI. -
AppointmentTable#addAppointment(type, description, days)
— Adds a new Appointment. -
AppointmentTable#deleteAppointment(description, days)
— Deletes an appointment from VISIT. -
AppointmentTable#antiDuplicate(check, description, days)
— Checks if the Appointment already exists. Returns true if there is no duplicate, false if there is a duplicate. -
AppointmentTable#sortAppointments()
— Sorts the list of appointments by days remaining, then name. -
AppointmentTable#cascadeDay(days)
— Decrements the days an Appointment has left. Run on application launch byUserPrefs
after calculating days elapsed. -
AppointmentTable#outputAppointments()
— Outputs the Appointments to readable String.
These operations are exposed in the Model
interface.
The following sequence diagram shows how adding an appointment works, using reminders as an example:
The following activity diagram shows how adding an appointment works, using follow-ups as an example: