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+
Clone the repository:
git clone https://github.com/m-akma1/IF2150-2025-K02-G06-Heartline.git
cd IF2150-2025-K02-G06-Heartline
Install dependencies:
Initialize the database:
sqlite3 heartline.db < src/main/resources/database/schema.sql
During development:
To package into a standalone fat-jar:
The output JAR will be in:
Run it with:
java -jar target/heartline-1.0.jar
./
├── 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
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
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
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 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
Package Name
File Names
Person In Charge
util
HashGenerator.java
Aurelia Jennifer Gunawan
File Name
Person In Charge
App.java
Muhammad Akmal
Launch.java
Muhammad Akmal
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.
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.
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.
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.
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.
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.
Column
Type
Notes
id
INTEGER PRIMARY KEY AUTOINCREMENT
Medicine identifier.
name
TEXT
Medicine name.
description
TEXT
Optional details/instructions.
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.
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.
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.
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.
Made for: Varel Tiara @varel183
K02 – G06 Spider Lily
IF2150 Software Engineering 2025/2026
Bandung Institute of Technology