PROJECT: ClerkPro


Overview

ClerkPro is a desktop application used for managing clinic’s appointments, queue and scheduling. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement 1: added the ability to enqueue/dequeue patients into the queue

    • What it does: allows the user to add patients into the queue based on the referenceId of the patient. It also allows the user to remove patients from the queue based on the index number.

    • Justification: This feature has high priority as the user (clerk/receptionist) would need to add or remove patients from the queue.

    • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.

  • Major enhancement 2: added the ability to serve patients and assign them to a doctor

    • What it does: serves the first patient in the queue and assigns them to a doctor based on the index number.

    • Justification: This feature is important as the user (clerk/receptionist) would need to assign patients in the queue to doctors.

  • Major enhancement 3: added the ability to keep track of doctors on duty

    • What it does: allows the user to be able to know how many doctors are on duty. Also, allows the user to know if any doctors went for a break.

    • Justification: This feature is useful as it allows the user (clerk/receptionist) to know how many doctors are on duty and is able to assign patients to them.

  • Minor enhancement: added compatibility with the undo/redo commands

  • Code contributed: [Functional code] [Test code]

  • Other contributions:

    • Project management:

      • Managed releases v1.3 amd v1.2.1 (2 releases) on GitHub

    • Enhancements to existing features:

      • Updated the UI for doctors on duty and queue (Pull requests #203, #134, #119)

    • Documentation:

      • Did cosmetic tweaks to existing contents of the User Guide.

      • Created various UML diagrams for Developer Guide. #87

    • Community:

      • Reported bugs and suggestions for other teams

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.

Marks the doctor as on-duty: onduty

Marks the doctor, based on the index given, as on-duty and adds him/her to a list of on-duty doctors.

Format: onduty <ON_DUTY_DOCTOR_ENTRY_ID>

  • e.g. onduty 1

Marks the doctor as off-duty: offduty

Marks the doctor, based on the index given, as off-duty and removes him/her from the list.

Format: offduty <ON_DUTY_DOCTOR_ENTRY_ID>

  • e.g. offduty 1

Queue Management

Adds a patient to the queue: enqueue

Adds a patient to the queue based based on the patient’s Id. The enqueued patient must be a registered. Staff members cannot be enqueued.

Format: enqueue <PATIENT_REFERENCE_ID>

  • e.g. enqueue E0000001A

Removes a patient from the queue: dequeue

Removes a patient from the queue based on their queue position.

Format: dequeue <QUEUE_INDEX>

  • e.g. dequeue E0000001A

Assigns next patient to an available doctor : next

Assigns the next patient in the queue to a doctor.

Format: next <ENTRY_ID>

  • e.g. next 1

Doctor takes a break: break

Avoids directing patients to a doctor. e.g. Doctor is on a lunch break

Format: break <ENTRY_ID>

  • e.g. break 1

Doctor resumes his/her duty: resume

Allows patients to be directed to a doctor. e.g. Doctor is back from his/her break.

Format: resume <ENTRY_ID>

  • e.g. resume 1

Commands Summary

  • Patient Management

    • Search for patient using reference Id, name or phone number: patient [<SEARCH_KEYWORD>]

    • Register new patient: newpatient -id <PATIENT_REFERENCE_ID> -name <PATIENT_NAME> [-phone <PHONE_NUM>] [-email <EMAIL>] [-address <ADDRESS>] -num [-tag <Tags>]…​

    • Edits patient details: editpatient -entry <ENTRY_ID>[-id <PATIENT_REFERENCE_ID>] [-name <NAME>] [-phone <PHONE_NUM>] [-email <EMAIL>] [-address <ADDRESS>] -num [-tag <Tags>]…​

  • On-Duty Doctors Management

    • Search for doctors using reference Id, name or phone number: doctor [<SEARCH_KEYWORD>]

    • Register new doctor: newdoctor -id <STAFF_REFERENCE_ID> -name <NAME> [-phone <PHONE_NUM>] [-email <EMAIL>] [-address <ADDRESS>] [-tag <TAGS>]…

    • Edit doctor details: editdoctor -entry <ENTRY_ID> [-id <STAFF_REFERENCE_ID>] [-name <NAME>] [-phone <PHONE_NUM>] [-email <EMAIL>] [-address <ADDRESS>]-num

    • Mark doctor as on-duty: onduty <ENTRY_ID>

    • Mark doctor as off-duty: offduty <ENTRY_ID>

  • Queue Management

    • enqueue: enqueue <PATIENT_REFERENCE_ID>

    • dequeue: dequeue <QUEUE_INDEX>

    • Assigns next Patient in queue to doctor: next <DOCTOR_ENTRY_ID>

    • Marks doctor on break: break <DOCTOR_ENTRY_ID>

    • Marks doctor on resuming work: resume <DOCTOR_ENTRY_ID>

  • Appointment Management

    • Search for appointments: appointments [<REFERENCE_ID>]

    • Add new appointment: newappt -id <REFERENCE_ID> -start <START_TIMING> [-end <END_TIMING>] [-reoccur <INTERVALS> -num <REOCCURRING_TIMES>]

    • Edit appointment: editappt -entry <ENTRY_ID> -start <START_TIMING> [-end <END_TIMING>]

    • Cancel appointment: cancelappt <ENTRY_ID>

    • Acknowledge arrival of patient for appointment: ackappt <REFERENCE_ID>

    • List all missed appointments: missappt

    • Mark missed appointment as settled: settleappt <ENTRY_ID>

  • Duty-shift Management

    • Search for shift: shifts [<REFERENCE_ID>]

    • Add new shift: newshift -id STAFF_REFERENCE_ID -start <START_TIMING> -end <END_TIMING> [-reoccur <INTERVALS> -num <REOCCURRING_TIMES>]

    • Change shift: editshift -entry <ENTRY_ID> -start <START_TIMING> -end <END_TIMING>

    • Cancel shift: cancelshift <ENTRY_ID>

  • Inventory commands (v2.0)

    • inventory: inventory

    • prescription: prescription <PRESCRIPTION_ID | PRESCRIPTION_NAME>

  • User Accounts (v2.0)

    • login: login <USER_NAME>

    • logout: logout

  • General Commands

    • help: help

    • exit: exit

    • undo: undo

    • redo: redo

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.

Given below is the Sequence Diagram for interactions within the Logic component for the enqueue E0000001A API call.

EnqueueSequenceDiagram
Figure 1. Interactions inside the Logic Component for the enqueue E0000001A Command.

Model component

ModelOverviewClassDiagramV3
Figure 2. Structure of the Model Component

Queue feature

The queue feature allows the user to enqueue and dequeue a patient from the queue.

  • e.g. enqueue 003A - Enqueues the patient with referenceId 003A.

  • e.g. next 1 Serves the next patient in queue and allocates him/her to room 1.

Queue supports a few basic commands:

  • Enqueue — Enqueues a patient into the queue.
    Format: enqueue <PATIENT_REFERENCE_ID>

  • Dequeue — Dequeues a patient from the queue.
    Format: dequeue <QUEUE_INDEX>

  • Next — Assigns the next patient in the queue to a doctor.
    Format: next <ENTRY_ID>

  • Break — Avoids directing patients to a doctor. e.g. Doctor is on a lunch break
    Format: break <ENTRY_ID>

  • Resume — Allows patients to be directed to a doctor. e.g. Doctor is back from his/her break.
    Format: resume <ENTRY_ID>

Current Implementation

The queue will be displayed in a list.

The following activity diagram summarizes what happens when a user executes an enqueue command:

EnqueueActivityDiagram
Figure 3. Enqueue Activity Diagram

The following activity diagram summarizes what happens when a user executes a next command:

NextActivityDiagram
Figure 4. Next Activity Diagram

Below is an example usage of the queue feature.

Step 1: User enters the enqueue E0000001A command.

Step 2: The command then calls Model#enqueuePatient to enqueue the patient into the queue.

Step 3: Patient will then displayed in the queue.