The University of Regina Campus Dentist Clinic is dedicated to providing high-quality dental care to students, faculty, and staff. However, the clinic faces challenges in managing patient records, appointment scheduling, billing, and inventory management. These challenges result in increased administrative workload, longer wait times for patients, and potential errors in record-keeping. Our task is to solve this efficiently by building a software application using the Java Programming Language.
The key functions that we envision for the software include the following:
- Appointment Scheduling
- Patient Records for Dentists
- Patient Records for Patients
- User Management for Admin
- Patient and Dentist Appointment Reminders
- Patient and Dentist Account Creator
Verbs: Schedule, Manage, Remind, Collect, and Update.
The main objective of this software is to streamline and facilitate the process of booking a dental appointment. We aim to improve the user experience for Dentists, Patients, and Admins by allowing them to book appointments seamlessly and view their appointments clearly.
Adjectives: Efficient, Secure, Reliable, User Friendly, Accessible, Modern, and Adaptable.
-
Economic factors: This project is to be done within the scope of the course, limiting the budget and resources available. This may restrict some of our ability to design software that is efficient, effective, and aesthetically pleasing.
-
Regulatory compliance (Security and Access): The project must be secure and only accessible by authorized personnel. The database must be protected from unauthorized access, and data must be accessible only to appointed admins.
-
Reliability: The software must be reliable and capable of supporting multiple users (patients and dentists) accessing it simultaneously.
-
Ethics: Ensuring the privacy of users' data is paramount. The software must allow patients to update their personal information (e.g., phone number, address) while ensuring the accuracy and transparency of dental records. Patients and dentists must know who has access to their data and what data is accessible.
| Task | Start Date | End Date | Duration | Status |
|---|---|---|---|---|
| Project Planning | Jun 10 | Jun 12 | 3 days | Completed |
| MVP 1: Managing Patients | Jun 13 | Jun 20 | 8 days | Completed |
| MVP 2: Scheduling Appts | Jun 21 | Jun 30 | 10 days | In Progress |
| MVP 3: Managing Prescrip | Jul 1 | Jul 10 | 10 days | Pending |
| Integration & Testing | Jul 11 | Jul 20 | 10 days | Pending |
| Final Review & Adjustments | Jul 21 | Jul 25 | 5 days | Pending |
| MVP | Accounts for | Testing | Conclusion |
|---|---|---|---|
| 1. Managing Patients | Adding, Removing, Updating, Viewing, Searching Patients | Unit | Works well and allows for basic patient management functionality. More features could improve usability. |
| 2. Scheduling Appointments | Adding, Removing, Updating, Viewing, Handling Conflicts | Unit, Integration | Handles scheduling well but could benefit from better conflict resolution and reminders. |
| 3. Managing Prescriptions | Adding, Removing, Updating, Viewing Prescriptions | Unit, Integration, System | Effective for prescription management but could be enhanced with prescription validation and alerts. |
Accounts for: Basic CRUD (Create, Read, Update, Delete) operations on patient records. Testing: Unit tests focus on individual functionalities like adding, removing, and updating patient information. Conclusion: The system effectively manages patient records but could benefit from additional features for enhanced usability.
Accounts for: Scheduling-related functionalities including adding, removing, updating appointments, and handling conflicts. Testing: Both unit and integration tests ensure that individual functionalities and their interactions are working correctly. Conclusion: The appointment scheduling system works well but could be improved with better conflict resolution strategies and reminders for appointments.
Accounts for: Managing prescription-related tasks including adding, removing, updating, and viewing prescriptions.
Testing: Comprehensive tests including unit, integration, and system tests to cover all aspects of prescription management. Conclusion: The system is effective in managing prescriptions but could be enhanced with features like prescription validation and alert systems for better patient safety. This table should provide a clear and concise overview of the MVPs, their functionalities, testing methods, and conclusions. If you need further adjustments or additional details, feel free to ask!
Unit testing was conducted on all three MVPs, focusing on critical functions that are essential to the system's operation. This includes adding and managing patients, scheduling appointments, and managing prescriptions.
-
Path 1:
1 → 2 → 4- Start → Enter patient name, ID, and contact info → Patient Exists? (Yes) → Update patient info → Save patient info to the database → End
-
Path 2:
1 → 3 → 4- Start → Enter patient name, ID, and contact info → Patient Exists? (No) → Create new patient → Save patient info to the database → End
-
Path 1:
1 → 2 → 3 → 4- Start → Enter appointment ID, date, time, patient ID, and doctor username → Conflict Exists? (Yes) → Resolve appointment conflict → Save appointment to the database → Send appointment reminder to patient and doctor → End
-
Path 2:
1 → 3 → 4- Start → Enter appointment ID, date, time, patient ID, and doctor username → Conflict Exists? (No) → Save appointment to the database → Send appointment reminder to patient and doctor → End
-
Path 1:
1 → 2 → 4 → 5- Start → Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username → Prescription Exists? (Yes) → Update existing prescription → Save prescription info to the database → Send prescription details to the patient → End
-
Path 2:
1 → 3 → 4 → 5- Start → Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username → Prescription Exists? (No) → Create new prescription → Save prescription info to the database → Send prescription details to the patient → End
Prime paths are a set of paths that cover all possible scenarios in the control flow graphs for each MVP. These paths ensure comprehensive testing of all functionalities. A Summary of Prime Paths in Numbers are as follows:
- Path 1:
1 → 2 → 4 - Path 2:
1 → 3 → 4
- Path 1:
1 → 2 → 3 → 4 - Path 2:
1 → 3 → 4
- Path 1:
1 → 2 → 4 → 5 - Path 2:
1 → 3 → 4 → 5
Test cases were derived from the prime paths to ensure that all critical paths in the control flow graphs are tested. This includes both positive and negative test cases to cover all edge cases and potential issues.
| MVP | Test Case | Path | Description | Steps | Test Values | Expected Result |
|---|---|---|---|---|---|---|
| Managing Patients | Update Existing Patient Info | 1 → 2 → 4 |
Update an existing patient's information | 1. Enter patient name, ID, and contact info (existing patient) 2. Check if the patient exists 3. Update patient info 4. Save patient info to the database |
Patient Name: John Doe Patient ID: P001 Contact Info: 555-1234 New Contact Info: 555-5678 |
The patient's info is successfully updated and saved in the database. |
| Managing Patients | Create New Patient | 1 → 3 → 4 |
Create a new patient | 1. Enter patient name, ID, and contact info (new patient) 2. Check if the patient exists 3. Create new patient 4. Save patient info to the database |
Patient Name: Jane Smith Patient ID: P002 Contact Info: 555-0000 |
The new patient's info is successfully created and saved in the database. |
| Scheduling Appointments | Resolve Appointment Conflict | 1 → 2 → 3 → 4 |
Resolve a conflict when scheduling an appointment | 1. Enter appointment ID, date, time, patient ID, and doctor username 2. Check if a conflict exists 3. Resolve the conflict 4. Save appointment to the database 5. Send appointment reminder to patient and doctor |
Appointment ID: A001 Date: 2024-07-10 Time: 10:00 AM Patient ID: P001 Doctor Username: doc1 |
The appointment conflict is resolved, and the appointment is saved and reminders are sent. |
| Scheduling Appointments | Save Appointment without Conflict | 1 → 3 → 4 |
Save an appointment without any conflicts | 1. Enter appointment ID, date, time, patient ID, and doctor username 2. Check if a conflict exists 3. Save appointment to the database 4. Send appointment reminder to patient and doctor |
Appointment ID: A002 Date: 2024-07-11 Time: 11:00 AM Patient ID: P002 Doctor Username: doc2 |
The appointment is saved and reminders are sent without any conflicts. |
| Managing Prescriptions | Update Existing Prescription | 1 → 2 → 4 → 5 |
Update an existing prescription | 1. Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username 2. Check if the prescription exists 3. Update existing prescription 4. Save prescription info to the database 5. Send prescription details to the patient |
Prescription ID: RX001 Patient ID: P001 Medication: Ibuprofen Dosage: 200mg Instructions: Take twice daily Doctor Username: doc1 New Dosage: 300mg |
The existing prescription is updated, saved in the database, and details are sent to the patient. |
| Managing Prescriptions | Create New Prescription | 1 → 3 → 4 → 5 |
Create a new prescription | 1. Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username 2. Check if the prescription exists 3. Create new prescription 4. Save prescription info to the database 5. Send prescription details to the patient |
Prescription ID: RX002 Patient ID: P002 Medication: Paracetamol Dosage: 500mg Instructions: Take thrice daily Doctor Username: doc2 |
The new prescription is created, saved in the database, and details are sent to the patient. |
graph TD
A[Initialize Patient Details] --> B[Enter patient name, ID, and contact info]
B --> C{Patient Exists?}
C -- Yes --> D[Update patient info]
C -- No --> E[Create new patient]
D --> F[Save patient info to the database]
E --> F[Save patient info to the database]
graph TD
A[Initialize Appointment Details] --> B[Enter appointment ID, date, time, patient ID, and doctor username]
B --> C{Conflict Exists?}
C -- Yes --> D[Resolve appointment conflict]
C -- No --> E[Save appointment to the database]
D --> E[Save appointment to the database]
E --> F[Send appointment reminder to patient and doctor]
graph TD
A[Initialize Prescription Details] --> B[Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username]
B --> C{Prescription Exists?}
C -- Yes --> D[Update existing prescription]
C -- No --> E[Create new prescription]
D --> F[Save prescription info to the database]
E --> F[Save prescription info to the database]
F --> G[Send prescription details to the patient]
DU Path 1: Initialize Patient Details -> Enter patient name, ID, and contact info -> Patient Exists? -> Update patient info -> Save patient info to the database
DU Path 2: Initialize Patient Details -> Enter patient name, ID, and contact info -> Patient Exists? -> Create new patient -> Save patient info to the database
| Test Case | Path | Description | Test Values | Expected Result |
|---|---|---|---|---|
| Update Existing Patient Info | Initialize -> Enter -> Exists? -> Update -> Save | Update an existing patient's information | Patient Name: John Doe, Patient ID: P001, Contact Info: 555-1234, New Contact Info: 555-5678 | The patient's info is successfully updated and saved in the database. |
| Create New Patient | Initialize -> Enter -> Exists? -> Create -> Save | Create a new patient | Patient Name: Jane Smith, Patient ID: P002, Contact Info: 555-0000 | The new patient's info is successfully created and saved in the database. |
DU Path 1: Initialize Appointment Details -> Enter appointment ID, date, time, patient ID, and doctor username -> Conflict Exists? -> Resolve appointment conflict -> Save appointment to the database -> Send appointment reminder to patient and doctor
DU Path 2: Initialize Appointment Details -> Enter appointment ID, date, time, patient ID, and doctor username -> Conflict Exists? -> Save appointment to the database -> Send appointment reminder to patient and doctor
| Test Case | Path | Description | Test Values | Expected Result |
|---|---|---|---|---|
| Resolve Appointment Conflict | Initialize -> Enter -> Conflict Exists? -> Resolve -> Save -> Send | Resolve a conflict when scheduling an appointment | Appointment ID: A001, Date: 2024-07-10, Time: 10:00 AM, Patient ID: P001, Doctor Username: doc1 | The appointment conflict is resolved, and the appointment is saved and reminders are sent. |
| Save Appointment without Conflict | Initialize -> Enter -> Conflict Exists? -> Save -> Send | Save an appointment without any conflicts | Appointment ID: A002, Date: 2024-07-11, Time: 11:00 AM, Patient ID: P002, Doctor Username: doc2 | The appointment is saved and reminders are sent without any conflicts. |
DU Path 1: Initialize Prescription Details -> Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username -> Prescription Exists? -> Update existing prescription -> Save prescription info to the database -> Send prescription details to the patient
DU Path 2: Initialize Prescription Details -> Enter prescription ID, patient ID, medication, dosage, instructions, and doctor username -> Prescription Exists? -> Create new prescription -> Save prescription info to the database -> Send prescription details to the patient
| Test Case | Path | Description | Test Values | Expected Result |
|---|---|---|---|---|
| Update Existing Prescription | Initialize -> Enter -> Exists? -> Update -> Save -> Send | Update an existing prescription | Prescription ID: RX001, Patient ID: P001, Medication: Ibuprofen, Dosage: 200mg, Instructions: Take twice daily, Doctor Username: doc1, New Dosage: 300mg | The existing prescription is updated, saved in the database, and details are sent to the patient. |
| Create New Prescription | Initialize -> Enter -> Exists? -> Create -> Save -> Send | Create a new prescription | Prescription ID: RX002, Patient ID: P002, Medication: Paracetamol, Dosage: 500mg, Instructions: Take thrice daily, Doctor Username: doc2 | The new prescription is created, saved in the database, and details are sent to the patient. |
System Testing was done on the entire Dental Clinic Management System. To accomplish this, we extracted a Finite State Machine and used node coverage, a form of graph coverage, to test it. We did not use logic coverage since we did not have hardcoded predicates to guard the transition between states. If we did have predicates dictating the transition in our code, we would have used logic coverage.
stateDiagram
[*] --> Initialize
Initialize --> EnterPatientDetails: Enter patient details
EnterPatientDetails --> CheckPatientExists: Check if patient exists
CheckPatientExists --> UpdatePatientInfo: Update patient info if exists
CheckPatientExists --> CreateNewPatient: Create new patient if not exists
UpdatePatientInfo --> SavePatientInfo: Save updated patient info
CreateNewPatient --> SavePatientInfo: Save new patient info
SavePatientInfo --> [*]
Initialize --> EnterAppointmentDetails: Enter appointment details
EnterAppointmentDetails --> CheckConflict: Check for conflicts
CheckConflict --> ResolveConflict: Resolve conflict if exists
CheckConflict --> SaveAppointment: Save appointment if no conflict
ResolveConflict --> SaveAppointment: Save resolved appointment
SaveAppointment --> SendReminders: Send appointment reminders
SendReminders --> [*]
Initialize --> EnterPrescriptionDetails: Enter prescription details
EnterPrescriptionDetails --> CheckPrescriptionExists: Check if prescription exists
CheckPrescriptionExists --> UpdatePrescription: Update prescription if exists
CheckPrescriptionExists --> CreateNewPrescription: Create new prescription if not exists
UpdatePrescription --> SavePrescription: Save updated prescription
CreateNewPrescription --> SavePrescription: Save new prescription
SavePrescription --> SendPrescriptionDetails: Send prescription details
SendPrescriptionDetails --> [*]
- Dashboards: Develop comprehensive dashboards to visualize key metrics and data, such as:
- Patient statistics
- Appointment schedules
- Prescription details
- Rescheduling: Implement features that allow patients and staff to reschedule appointments easily.
- Cancellation: Provide functionality for canceling appointments with automated notifications to both patients and staff.
- Billing: Integrate billing functionalities to handle patient invoices, payments, and insurance claims.
- Inventory Management: Develop a module to manage dental supplies, track inventory levels, and generate purchase orders.
- Patient Feedback: Implement a system for collecting and analyzing patient feedback to improve service quality.
- Notification System: Enhance the system with email and SMS notifications for appointment reminders, prescription pickups, and more.
- Reporting: Create detailed reports for clinic management to analyze performance, patient trends, and operational efficiency.
- Security Enhancements: Ensure data security and privacy with robust authentication, encryption, and access control measures.
As a team, We believe that by implementing these features, the Dental Clinic Management System will become more robust, user-friendly, and capable of meeting the comprehensive needs of the clinic.