Skip to content

m-akma1/heartline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

159 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Heartline

Heartline Logo

Overview

Heartline is a desktop-based healthcare management system designed for a single hospital environment. The application provides integrated features for:

  • User authentication (doctor & patient)
  • Medical record management
  • Consultation scheduling
  • Queue and session handling for doctors
  • Prescription and medicine consumption scheduling
  • Viewing patient history, session availability, and doctor schedules

Tech Stack and Requirements

Tech stack used:

  • Programming Language: Java 21+
  • GUI Framework: JavaFX 21+
  • Build System: Maven 3.8+
  • Database: SQLite 3+

Before running the application, ensure you have the following installed:

  • Java Development Kit (JDK) 21 or higher
  • Maven 3.8 or higher
  • SQLite 3+

Installation

Clone the repository:

git clone https://github.com/m-akma1/IF2150-2025-K02-G06-Heartline.git
cd IF2150-2025-K02-G06-Heartline

Install dependencies:

mvn clean install

Initialize the database:

sqlite3 heartline.db < src/main/resources/database/schema.sql

Running the Application

During development:

mvn javafx:run

To package into a standalone fat-jar:

mvn clean package

The output JAR will be in:

target/heartline-1.0.jar

Run it with:

java -jar target/heartline-1.0.jar

Project Structure

./
├── pom.xml
├── README.md
├── data/                          # Old Database Loccation
├── docs/                          # UI Screenshots
├── img/                           # Old Image Assets Location
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── heartline/
│   │   │       ├── App.java       # Main JavaFX Entry
│   │   │       ├── Launcher.java  # Main JAR Entry
│   │   │       ├── controller/    # Business Logic Layer
│   │   │       ├── model/         # Entity Classes, Record, Enums
│   │   │       ├── repository/    # Database Access Layer
│   │   │       ├── util/          # Utility (Password Hashing)
│   │   │       └── views/         # Dynamic Views Controller
│   │   └── resources/
│   │       ├── database/          # SQL Schema and Sample Table Configuration
│   │       └── heartline/
│   │           ├── assets/        # Images and Icons
│   │           ├── style/         # CSS Files
│   │           └── views/         # FXML Files
└── target/                        # Compiled and Executable Files

Modules

Package controller

Sub-Package File Names Person In Charge
controller.auth AuthController.java Aurelia Jennifer Gunawan
DoctorLoginController.java Aurelia Jennifer Gunawan
ForgotPassController.java Aurelia Jennifer Gunawan
PatientLoginController.java Aurelia Jennifer Gunawan
RegisterController.java Aurelia Jennifer Gunawan
ResetPassController.java Aurelia Jennifer Gunawan
VerifyOtpController.java Aurelia Jennifer Gunawan
controller.doctor DoctorAccountController.java Stefani Angeline Oroh
DoctorDashboardController.java Stefani Angeline Oroh
DoctorDocumentsController.java Stefani Angeline Oroh
DoctorMainController.java Stefani Angeline Oroh
DoctorMedicalRecordsController.java Stefani Angeline Oroh
DoctorPrescriptionController.java Stefani Angeline Oroh
DoctorQueueController.java Stefani Angeline Oroh
controller.patient PatientAccountController.java Vara Azzara Ramli Pulukadang
PatientBookingController.java Reva Natania Sitohang
PatientConsultationController.java Reva Natania Sitohang
PatientDashboardController.java Vara Azzara Ramli Pulukadang
PatientMainController.java Muhammad Akmal
PatientMedicalRecordController.java Vara Azzara Ramli Pulukadang
PatientMedicationController.java Reva Natania Sitohang
PatientQueueController.java Vara Azzara Ramli Pulukadang

Package views

Sub-Package File Names Person In Charge
views.auth AuthMainView.java Aurelia Jennifer Gunawan
DoctorLoginView.java Aurelia Jennifer Gunawan
ForgotPassView.java Aurelia Jennifer Gunawan
HomeView.java Aurelia Jennifer Gunawan
PatientLoginView.java Aurelia Jennifer Gunawan
RegisterSuccessView.java Aurelia Jennifer Gunawan
RegisterView.java Aurelia Jennifer Gunawan
ResetPassView.java Aurelia Jennifer Gunawan
ResetSuccessView.java Aurelia Jennifer Gunawan
VerifyOTPView.java Aurelia Jennifer Gunawan
views.doctor DoctorAccountView.java Stefani Angeline Oroh
DoctorDashboardView.java Stefani Angeline Oroh
DoctorMainView.java Muhammad Akmal
DoctorMedicalRecordDetailsView.java Stefani Angeline Oroh
DoctorMedicalRecordsView.java Stefani Angeline Oroh
DoctorPrescriptionPopupView.java Stefani Angeline Oroh
DoctorQueueManagementView.java Stefani Angeline Oroh
views.patient ChangesSavedView.java Reva Natania Sitohang
ConfirmBookView.java Reva Natania Sitohang
LogoutConfirmView.java Reva Natania Sitohang
MedicationInfoPopup.java Reva Natania Sitohang
PatientAccountView.java Vara Azzara Ramli Pulukadang
PatientBookConsultationView.java Reva Natania Sitohang
PatientConsultationView.java Reva Natania Sitohang
PatientDashboardView.java Vara Azzara Ramli Pulukadang
PatientMainView.java Muhammad Akmal
PatientMedicalRecordsDetailsView.java Vara Azzara Ramli Pulukadang
PatientMedicalRecordsView.java Vara Azzara Ramli Pulukadang
PatientMedicationsView.java Reva Natania Sitohang
PatientQueueStatusView.java Vara Azzara Ramli Pulukadang
(Root Views) Dialogs.java Muhammad Akmal

Package model

Sub-Package File Names Person In Charge
model.user Doctor.java Muhammad Akmal
Patient.java Muhammad Akmal
User.java Muhammad Akmal
model.medic Consultation.java Muhammad Akmal
MedicalRecord.java Muhammad Akmal
Medicine.java Muhammad Akmal
Prescription.java Muhammad Akmal
Session.java Muhammad Akmal
model.enums BloodType.java Muhammad Akmal
Clinic.java Muhammad Akmal
Gender.java Muhammad Akmal
QueueStatus.java Muhammad Akmal
Rhesus.java Muhammad Akmal
Role.java Muhammad Akmal
SessionStatus.java Muhammad Akmal

Package repository

Package Name File Names Person In Charge
repository ConsultationRepository.java Muhammad Akmal
DatabaseManager.java Muhammad Akmal
DoctorRepository.java Muhammad Akmal
MedicalRecordRepository.java Muhammad Akmal
MedicineRepository.java Muhammad Akmal
OtpRepository.java Muhammad Akmal
PatientRepository.java Muhammad Akmal
PrescriptionRepository.java Muhammad Akmal
SessionRepository.java Muhammad Akmal
UserRepository.java Muhammad Akmal

Utility Module

Package Name File Names Person In Charge
util HashGenerator.java Aurelia Jennifer Gunawan

Root Files

File Name Person In Charge
App.java Muhammad Akmal
Launch.java Muhammad Akmal

Database Schema

Table: user

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Unique identifier for every account.
role TEXT Enum contrained to PATIENT or DOCTOR.
email TEXT UNIQUE Login credential.
password_hash TEXT Bcrypt/hashed password.
full_name TEXT Display name.
phone TEXT Optional contact number.

Table: doctor

Column Type Notes
user_id INTEGER PRIMARY KEY FK to user(id) with cascade delete.
specialization TEXT Optional specialization string.
clinic TEXT Enum for valid clinics.

Table: patient

Column Type Notes
user_id INTEGER PRIMARY KEY FK to user(id) with cascade delete.
birth_date TEXT ISO date string.
height REAL Stored in centimeters.
weight REAL Stored in kilograms.
blood_type TEXT Enum A, B, AB, O.
rhesus TEXT Enum POSITIVE, NEGATIVE.
gender TEXT Enum Male, Female, Other.
created_at TEXT Creation timestamp.
last_updated TEXT Last modification timestamp.

Table: session

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Session identifier.
doctor_id INTEGER NOT NULL FK to doctor(user_id) with cascade delete.
date_time_start TEXT Session start timestamp.
date_time_end TEXT Session end timestamp.
room TEXT Assigned room.
queue_position INTEGER DEFAULT 0 Maximum queue size for the time slot.

Table: consultation

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Consultation identifier.
patient_id INTEGER FK to patient(user_id) with cascade delete.
session_id INTEGER FK to session(id) with cascade delete.
date_time TEXT When the consultation happens.
description TEXT Optional complaint/summary.
queue_number INTEGER Queue number issued to the patient.
status TEXT Waiting, Ongoing, or Completed.

Table: medical_record

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Medical record identifier.
consultation_id INTEGER FK to consultation(id) with cascade delete.
diagnosis TEXT Mandatory diagnosis text.
description TEXT Optional supporting notes.
created_at TEXT Creation timestamp.
last_updated TEXT Update timestamp.

Table: medicine

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Medicine identifier.
name TEXT Medicine name.
description TEXT Optional details/instructions.

Table: prescription

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Prescription identifier.
medical_record_id INTEGER FK to medical_record(id) with cascade delete.
medicine_id INTEGER FK to medicine(id) with cascade delete.
dosage TEXT Frequency/instruction string.
notes TEXT Extra notes for the patient.
created_at TEXT Creation timestamp.
last_updated TEXT Update timestamp.

Table: schedule

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Schedule entry identifier.
prescription_id INTEGER FK to prescription(id) with cascade delete.
date_time TEXT When the medicine should be consumed.

Table: file_storage

Column Type Notes
id INTEGER PRIMARY KEY AUTOINCREMENT Attachment identifier.
related_id INTEGER ID of the owning record.
related_table TEXT Name of the table the file belongs to.
file_name TEXT Original file name.
file_type TEXT MIME/content type.
file_path TEXT Local storage path.
checksum TEXT Integrity hash.
uploaded_by INTEGER FK to user(id) with cascade delete.
uploaded_at TEXT Upload timestamp.

Table: otp_codes

Column Type Notes
email TEXT PRIMARY KEY Email awaiting OTP verification.
otp_code TEXT Generated code.
expires_at TEXT Expiration timestamp.
created_at TEXT Creation timestamp.

Contributors

Made for: Varel Tiara @varel183

K02 – G06 Spider Lily
IF2150 Software Engineering 2025/2026
Bandung Institute of Technology

Name NIM GitHub
Stefani Angeline Oroh 13524064 @stefaniangeline
Aurelia Jennifer Gunawan 13524089 @aureliajenn
Vara Azzara Ramli Pulukadang 13524091 @pidipam
Reva Natania Sitohang 13524098 @revanatania
Muhammad Akmal 13524099 @m-akma1

About

Project for Software Engineering (Semester 1 25/26). Heartline: a desktop-based healthcare management system for a hospital.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors