PROJECT: HealthBook


Overview

HealthBook is for clinic receptionist who prefer to use a desktop app for managing doctors and patients information and appointments. It is optimized for receptionist who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).

Summary of contributions

  • Major enhancement: added the ability to add/delete a prescription of an appointment

    • What it does: allows the user (receptionist) to add/delete a prescription to add more relevant details to the appointment.

    • Justification: This allows the receptionist to keep a record of the prescription related to the appointment to have more information about the visit and patient’s conditions. It will also be useful in the event where patients forgets/is unsure about the prescription and this can be easily accessed.

    • Highlights: This enhancement value adds to the HealthBook and is one of the major features of a medical appointment. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required creating of new models and interaction with all components of the code.

  • Minor enhancement:

    • Added remark command that adds an unconstrained information snippet to each contact for each person’s place card for a quick view of the person’s details.

    • Made parameters non-case sensitive for all commands i.e view-patient n/john doe will view the patient John Doe

  • Code contributed: Functional code

  • Other contributions:

    • Implementation of new features:

      • Added remark command (Pull requests #10)

      • Added add-prescription command (Pull requests #30)

      • Added delete-prescription command (Pull requests #50)

      • Wrote test cases for new commands (Pull requests #10, #55, #82, #30)

    • Enhancements to existing features:

      • Removed case-sensitivity for parameters for all commands (Pull requests #125)

    • Documentation:

      • Updated User Guide

      • Updated Developers guide (Pull requests #21, #165)

    • Community:

      • Reported bugs and suggestions for other teams in the module (Example 1, 2, 3)

{you can add/remove categories in the list above}

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.

Adding remark to patient : remark

Adds a remark to the patient/doctor’s information. Input will override current remark. If input is empty, previous remark will be deleted.
Format: remark n/NAME [p/PHONE] r/REMARK

Parameter p/PHONE is only needed when there are duplicate names in HealthBook, so phone number is needed to differentiate them.

Examples:

  • remark n/John Doe r/Has chronic heart disease

  • remark n/Amanda Jane p/84739294 r/

Adding prescriptions to a patient’s appointment: add-prescription

Adds a prescription to the patient’s appointment with details of medicine name, dosage and number of times to consume in a day.
Format: add-prescription APPOINTMENT_ID pn/MEDICINE_NAME pd/DOSAGE pc/CONSUMPTION_PER_DAY

Examples:

  • add-prescription 10001 pn/Paracetamol pd/2 pc/3

  • Each prescription is tied to an appointment.

  • There cannot be a duplicate of drug name for that particular appointment.

  • Drug that patient is allergic to cannot be added

After adding the prescription, all commands that requires the prescription’s medicine name are non-case sensitive.

Deleting prescriptions of a patient’s appointment: delete-prescription

Delete a prescription of the patient’s appointment by appointment ID and medicine name.
Format: delete-prescription APPOINTMENT_ID pn/MEDICINE_NAME

Examples:

  • delete-prescription 10001 pn/Paracetamol

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.

Remark Feature

Current Implementation

Remark command allows user to input any information into a Person object with no restrictions. If an input is empty, the previous existing remark is deleted. This command can only be called after person is created.

RemarkCommandSequenceDiagram
Figure 1. Remark Command Sequence Diagram

Step 1. The user types in remark in the command box followed by the parameters appointment_id r/some remark

Step 2. Upon hitting enter, the new remark will be visible in the Doctor/Patient’s contact. If input was empty, the previous remark will be deleted.

Add Prescription Feature

Current Implementation

The add prescription feature is facilitated by AddPrescriptionCommand and AddPrescriptionCommandParser This command is implemented such that it is able to add a Prescription object for a specific Appointment specified by appointment id.

Since Appointment currently only stores Doctor and Patient as String, thus appointment with the updated prescription will be updated for both Doctor and Patient only if the appointment is upcoming and only updated for Patient if the appointment is completed.

AddPrescriptionSequenceDiagram
Figure 2. Add Prescription Sequence Diagram

Step 1. The user types add-prescription in the command box followed by the parameters APPOINTMENT_ID pn/MEDICINE_NAME pd/DOSAGE pc/CONSUMPTION_PER_DAY.

Step 2. Upon hitting enter, the Prescription will be created and added to the Appointment.

Exception will be thrown if a medicine of the same name already exists in appointment regardless of dosage and consumption per day.
Exception will be thrown if medicine that the patient is allergic to is added to the appointment.
Prescription can be added to both upcoming and completed appointments

Design considerations

Aspect: How to model Prescription
  • Alternative 1 (Current choice) : prescription is modelled by a Prescription object with 3 attributes medicineName , dosage and consumptionPerDay

  • Alternative 2 : Prescription object stores attributes medicineName as a String and dosage, consumptionPerDay as int.

Delete Prescription Feature

Current Implementation

The delete prescription is facilitated by DeletePrescriptionCommand and DeletePrescriptionCommandParser. This command is implemented such that it is able to delete a Prescription object for a specific `Appointment specified by appointment id.

DeletePrescriptionSequenceDiagram
Figure 3. Delete Prescription Sequence Diagram

Step 1. The user types delete-prescription in the command box followed by the parameters APPOINTMENT_ID pn/MEDICINE_NAME.

Step 2. Upon hitting enter, the Prescription will be deleted from the Appointment.

Exception will be thrown if medicine to be deleted does not exist in appointment.
Prescription can be deleted from both upcoming and completed appointments

Appendix A: Use Cases

(For all use cases below, the System is the HealthBook and the Actor is the receptionist, unless specified otherwise)

Use case: Register Doctor

MSS

  1. User requests to register a Doctor into the HealthBook

  2. User enters relevant details specified by command

  3. HealthBook brings user to google log in page

  4. User enters google login details

  5. User closes google page and reopens HealthBook

  6. HealthBook registers the doctor.

    Use case ends.

Extensions

2a. User enters wrong format for command.

  • 2a1. HealthBook shows an error message.

    Use case resumes at step 2

2b. User enters a duplicate persons.

  • 2b1. HealthBook shows an error message.

    Use case resumes at step 2

3a. User closes google page without logging in.

  • 3a1. HealthBook will become unresponsive

  • 3a2. User closes and reopens Healthbook

    Use case restarts from step 1

Use case: Register Patient

MSS

  1. User requests to register a Patient into the HealthBook

  2. User enters relevant details specified by command

  3. HealthBook registers the patient.

    Use case ends.

Extensions

2a. User enters wrong format for command.

  • 2a1. Healthbook shows an error message.

    Use case resumes at step 2

2b. User enters a duplicate persons.

  • 2b1. Healthbook shows an error message.

    Use case resumes at step 2

Use case: Delete Doctor/Patient

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to delete a specific person in the list

  4. HealthBook deletes the person

    Use case ends.

Extensions

  • 2a. The list is empty.

    Use case ends

  • 3a. User enters a name that belongs to multiple contacts with different phone numbers

    • 3a1. Healthbook shows an error message that prompts user to enter phone parameter.

      Use case resumes at step 2

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2

Use case: View person

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to view a specific person in list

  4. HealthBook shows the person

    Use case ends

Extensions

  • 2a. The list is empty.

    Use case ends

  • 3a. User enters a name that belongs to multiple contacts with different phone numbers

    • 3a1. Healthbook shows an error message that prompts user to enter phone parameter.

      Use case resumes at step 2

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2

Use case: List persons

MSS

  1. User requests to list persons

  2. HealthBook shows list of persons.

    Use case ends.

Use case: Filter Doctor/Patient

MSS

  1. User requests to filter doctors/patients

  2. HealthBook shows list of doctors/patients

    Use case ends.

Use case: Add Appointment

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to add an appointment to the HealthBook for a specific Doctor and Patient

  4. HealthBook adds the person

    Use case ends.

Extensions

  • 3a. The given Doctor and/or Patient name is has a duplicate contact with a different phone number.

    • 3a1. HealthBook shows an error and prompts user to input a phone number to differentiate.

      Use case resumes at step 2

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2

Use case: Delete Appointment

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to delete an appointment in the HealthBook for a specific appointmentId

  4. HealthBook deletes the appointment

    Use case ends.

Extensions

  • 3a. The given Id is invalid.

    • 3a1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Complete Appointment

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to complete a specific appointment in the list

  4. HealthBook completes the appointment

Extensions

  • 2a. The list is empty.

    Use case ends.

  • 3a. The given Id is invalid.

    • 3a1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Add Prescription

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to add a specific prescription to a specific appointment in the list

  4. HealthBook adds the prescription

Extensions

  • 3a. The given Id is invalid.

    • 3a1. HealthBook shows an error message.

      Use case resumes at step 2.

  • 3b. The given prescription’s medicine name already exists in HealthBook

    • 3b1. HealthBook shows an error message.

      Use case resumes at step 2.

  • 3c. The given patient is allergic to the given prescription’s medicine name.

    • 3c1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Delete Prescription

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to delete a specific prescription from a specific appointment

  4. HealthBook deletes the prescription

    Use case ends.

Extensions

  • 2a. The list is empty.

    Use case ends.

  • 3a. The given id is invalid.

    • 3a1. HealthBook shows an error message.

      Use case resumes at step 2.

  • 3b. The given prescription is invalid.

    • 3b1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Add Medical History

MSS

  1. User requests to list persons/filter-patients

  2. HealthBook shows a list of persons/patients

  3. User requests to add medical history to a specific person in the list

  4. HealthBook adds the medical history of the patient.

Extensions

  • 3a. The given Patient name has a duplicate contact with a different phone number.

    • 3a1. HealthBook shows an error and prompts user to input a phone number to differentiate.

      Use case resumes at step 2.

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2.

  • 3c. User enters a duplicate allergy/condition

    • 3c1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Delete Medical History

MSS

  1. User requests to list persons/filter-patients

  2. HealthBook shows a list of persons/patients

  3. User requests to delete medical history of a specific person in the list

  4. HealthBook deletes the medical history of the patient.

Extensions

  • 3a. The given Patient name has a duplicate contact with a different phone number.

    • 3a1. HealthBook shows an error and prompts user to input a phone number to differentiate.

      Use case resumes at step 2.

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2.

  • 3c. User enters an invalid allergy/ condition

    • 3c1. HealthBook shows an error message.

      Use case resumes at step 2.

Use case: Remark person

MSS

  1. User requests to list persons

  2. HealthBook shows a list of persons

  3. User requests to add/delete a remark to a specific person in the list

  4. HealthBook adds/deletes the remark.

    Use case ends.

Extensions

  • 3a. The given Person name has a duplicate contact with a different phone number.

    • 3a1. HealthBook shows an error and prompts user to input a phone number to differentiate.

      Use case resumes at step 2.

  • 3b. User enters an invalid name and/or phone

    • 3b1. Healthbook shows an error message.

      Use case resumes at step 2.