# 🏥 Sistem Informasi Rumah Sakit Jaya Abadi (OOP Implementation) Program CLI interaktif berbasis Python yang mengimplementasikan konsep dasar **Object-Oriented Programming (OOP)** untuk pengelolaan alur operasional rumah sakit, mulai dari pendaftaran pasien, penjadwalan janji temu, pemeriksaan dokter, tindakan keperawatan, hingga pencatatan rekam medis. --- ## 📌 Penerapan Konsep OOP ### 1. Pewarisan (Inheritance) * **Superclass**: `Employee` * Menyimpan atribut umum pegawai (`employee_id`, `name`, `age`, `position`, `status`, `birth_date`, `hourly_salary`) dan method dasar (`total_salary()`, `display_info()`, `info_company()`). * **Subclass**: 1. `Receptionist`: Menangani registrasi pasien dan pengaturan jadwal temu dengan dokter. 2. `Doctor`: Melakukan diagnosis, memberikan resep obat, dan mengatur jadwal praktek. 3. `Nurse`: Melakukan pemeriksaan awal fisik, pemberian obat sesuai resep, dan pembaruan rekam medis. --- ### 2. Enkapsulasi (Encapsulation) Semua atribut internal pada class `Pasien`, `Employee`, dan `Doctor` dijadikan **private** (menggunakan prefix `__`) untuk melindungi integritas data. Akses data dikontrol menggunakan dekorator `@property` (Getter) dan `@.setter` (Setter): * Validasi nilai numerik (seperti umur dan gaji tidak boleh negatif). * Menjaga keamanan data sensitif rekam medis pasien. --- ### 3. Polimorfisme & Method Overriding Method dari Superclass di-override oleh Subclass sesuai kebutuhan spesifik: * **`total_salary()` pada `Doctor`**: Meng-override perhitungan gaji dasar `Employee` dengan menambahkan tunjangan spesialis medis (`__tunjangan_spesialis`). * **`display_info()` pada Seluruh Subclass**: Menyesuaikan tampilan informasi sesuai peran dan spesialisasi masing-masing entitas pegawai (`Receptionist`, `Doctor`, `Nurse`). --- ## 🏗️ Diagram Kelas (Class Diagram) ```mermaid classDiagram class Pasien { -str __nama -str __id_pasien -str __birth_date -str __alamat -str __telp -str __keluhan -bool __bpjs -int __no_antrian -str __dokter -str __diagnosis -str __resep -str __obat -str __dosis -str __catatan -str __status +get_info() +get_rekam_medis() } class Employee { +str company$ +int total_employee$ +int working_hours -str __employee_id -str __name -int __age -str __position -str __status -str __birth_date -int __hourly_salary +total_salary() int +display_info() +info_company()$ } class Receptionist { +int antrian_counter$ +display_info() +register_patient(pasien) +manage_appointment(pasien, dokter, waktu) } class Doctor { -int __tunjangan_spesialis +total_salary() int +display_info() +diagnose_patient(pasien, diagnosis, resep) +set_schedule(hari, jam_mulai, jam_selesai) } class Nurse { +display_info() +examine_patient(pasien) +give_medicine(pasien, obat, dosis) +update_medical_record(pasien, catatan) } Employee <|-- Receptionist : Mewarisi Employee <|-- Doctor : Mewarisi Employee <|-- Nurse : Mewarisi Receptionist ..> Pasien : Mendaftarkan Doctor ..> Pasien : Mendiagnosis Nurse ..> Pasien : Merawat ``` --- ## ⚙️ Fitur dan Alur Sistem 1. **Menu Pasien**: * Registrasi data diri pasien baru. * Melihat daftar semua pasien. * Melihat detail informasi profil pasien. * Memeriksa riwayat rekam medis lengkap. 2. **Menu Receptionist**: * Melihat info & data receptionist. * Mendaftarkan pasien & menerbitkan nomor antrean. * Menjadwalkan janji temu pasien dengan dokter spesialis. 3. **Menu Dokter**: * Melihat info & jadwal dokter. * Melakukan pemeriksaan, penetapan diagnosis, dan peresepan obat. * Menetapkan jadwal praktek klinik dokter. 4. **Menu Perawat**: * Melihat info tenaga perawat. * Melakukan pemeriksaan awal (vital sign/kondisi fisik). * Memberikan obat kepada pasien sesuai resep dokter. * Memperbarui catatan akhir pada rekam medis pasien. 5. **Info Perusahaan**: * Menampilkan informasi umum instansi rumah sakit dan total pegawai aktif. --- ## 🚀 Cara Menjalankan Program Pastikan Python 3 telah terpasang di sistem Anda. 1. Buka terminal pada folder proyek: ```bash cd /home/matthewflrnt/study-archived/semester-3/oop-task/oop-rumahsakit ``` 2. Jalankan script utama: ```bash python3 main.py ``` --- ## 📝 Ringkasan Jawaban Tugas OOP 1. **Pewarisan Superclass & Subclass**: * **Superclass**: `Employee` * **Subclass**: `Receptionist`, `Doctor`, `Nurse` 2. **Atribut dan Method Spesifik**: * Diturunkan dari Superclass: `employee_id`, `name`, `age`, `position`, `status`, `birth_date`, `hourly_salary`, method `total_salary()`, dan `display_info()`. * Khusus Subclass: * `Receptionist`: `register_patient()`, `manage_appointment()` * `Doctor`: `__tunjangan_spesialis`, `diagnose_patient()`, `set_schedule()` * `Nurse`: `examine_patient()`, `give_medicine()`, `update_medical_record()` 3. **Penerapan Method Overriding**: * `Doctor.total_salary()` meng-override perhitungan gaji dasar untuk menambahkan tunjangan spesialis. * `Receptionist.display_info()`, `Doctor.display_info()`, dan `Nurse.display_info()` meng-override method cetak info untuk menampilkan detail peran masing-masing. 4. **Enkapsulasi**: * Semua variabel instance private (`__attribute`) dengan getter dan setter menggunakan properti `@property`.