Bằng cách tận dụng sức mạnh của công nghệ thông tin, hệ thống quản lý bệnh viện đã trỏ thành công cụ không thể thiếu đối với các cơ sở y tế hiện đại.. Trong báo cáo này, nhóm askell Clou
Trang 1DẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRUONG DAI HOC BACH KHOA KHOA KHOA HOC VA KY THUAT MAY TINH
BAO CÁO BÀI TẬP LỚN
MÔN LẬP TRÌNH NÂNG CAO
SV thực hiện: Thịnh Trần Khánh Linh 2211862
Nguyễn Hiệp Tài 2212985 Nguyễn Trung Tín 2213500 Nguyễn Mạnh Tuấn 2213786 Nguyễn Hà Thuỳ Linh 2211856 Trần Nguyễn Thanh Lâm 2211822
THANH PHO HO CHi MINH, THANG 4 NAM 2024
Trang 2TRUONG DAI HOC BACH KHOA 6
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
đóng góp Leader: Phân công nhiệm vu theo
1 Trần Nguyễn Thanh Lam | 2211822 từng tuần va kiểm tra tiến độ, 100%
làm báo cáo BA: Làm các usecase diagram,
- Frontend: Hién thue UI Admin,
6 | Nguyễn Hà Thuy Linh 2211856 100%
Receptionist, Doctor
Trang 3
TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
3 Hiện thực phần mềm: 13 3.1 Các kiến thức trong Ự án: c c c c c r va 13 3.1.1 Singleton Pattern: 2.0 cv a a 13 3.1.2 NoSQL Database: 2 c c L Q r Là gà và va 14 3.13 Password Hashing: 0.0.00 2 va 15 3.2 Cac cdng nghé trong du an: 2 c c c c r c rà gà vàng 16 3.3 Câu trúc mã nguỒN: Q Q Q Q Q r Q ga va 19 : 87) 6C NNHaaIIII annnaananaiiia Ặ 20 3.41 Hiện thực Database: cv và va 20 3.4.2 Hién thuc Backend: 2 0.000.000 0000 0 ee 20 3.4.3 Hién thuc Frontend: 2 0.00.00 0000 0 es 20
4 Kiém thi phần mềm: 22
5.1 Ưu điểm và hạn chế 0 c c c c c vn ng xxx x2 26 5.2 Tính ứng dụng trong thực tiễn ee 27 5.3 Ké hoach phat trién tiép theo 2 27
6 Mã nguồn và hướng dẫn sử dụng 28
Trang 4TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
1 Giới thiệu
Trong vài thập kỷ qua, sự tích hợp của công nghệ thông tin vào lĩnh vực y tế đã làm thay đổi cách cung cấp và quản lý dịch vụ y tế, mở ra một thời đại của sự hiệu quả, độ chính xác và tiện lợi chưa từng có
Bằng cách tận dụng sức mạnh của công nghệ thông tin, hệ thống quản lý bệnh viện
đã trỏ thành công cụ không thể thiếu đối với các cơ sở y tế hiện đại Các hệ thống này bao gồm một loạt các chức năng, bao gồm hồ sơ sức khỏe điện tử (EHR), lập lịch, thanh toán, quản lý hàng tồn kho và hơn thế nữa Chúng cung cấp cho các chuyên gia y tế thông tin toàn diện về bệnh nhân ngay lập tức, giúp chấn đoán nhanh chóng hơn, lập kế hoạch điều trị cá nhân hóa và cải thiện kết quả lâm sàng Hơn nữa, HMS tạo điều kiện cho việc phối hợp liền mạch giữa các phòng ban khác nhau, đảm bảo cung cấp dịch vụ đúng thời gian và phân phối tài nguyên hiệu quả, giảm đáng kế lượng tiêu thụ về giấy, mực so với cách lưu trữ thông tin truyền thống
Trong báo cáo này, nhóm askell Cloumns sẽ nghiên cứu các tác động của công nghệ thông tin đối với lĩnh vực y tế thông qua việc xây dựng một ứng dụng quản lý bệnh viện Sau đó nhóm sẽ thảo luận về các đặc điểm chính và lợi ích của các hệ thống này, xem xét vai trò của chúng trong tối ưu hóa việc cung cấp dịch vụ y tế, nâng cao trải nghiệm khám chữa bệnh, cùng với đó là những thách thức liên quan đến việc triển khai
và vận hành ứng dụng trong thực tế
Thông qua việc phân tích toàn diện về việc tích hợp công nghệ số hóa vào lĩnh vực
y tế để tối ưu hóa khả năng của hệ thống quản lý bệnh viện, nhớm đã tạo ra một giải pháp hữu ích nhằm hỗ trợ các cơ sở y tế có thể thích ứng với các yêu cầu của việc cung cấp dịch vụ y tế hiện đại, từ đó cải thiện kết quả cho bệnh nhân và nâng cao chất lượng chăm sóc
Trang 5TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
Hệ thống được thiết kế dành cho các đối tượng sử dụng sau:
1 Admin: người quản trị các tài khoản trong hệ thống
2 Receptionist: người thực hiện các thủ tục khám chữa bệnh
3 Doctor: người tiến hành khám chữa bệnh và kê đơn thuốc
4 Technician: người quản lý các thiết bị y tế
5 Pharmacist: người quản lý kho thuốc
Mỗi loại đối tượng sẽ được thao tác trên một giao diện đi kèm với bộ tính năng khác nhau phù hợp với nhu cần sử dụng trong thực tế tại các bệnh viện Trang đăng nhập sẽ hiện ra khi người dùng mở ứng dụng lên và chỉ cho phép người có quyền hạn mới được
sử dụng tính năng tương ứng với vai trò của người đó trong bệnh viện
2.1 Use Case Diagrams
Dé có cái nhìn tổng quan về các tính năng được thiết kế cho 5 loại đối tượng này, ta
sẽ xem qua 5 sơ đồ Use Case Diagram - thể hiện các tương tác có thể xảy ra giữa người dùng và hệ thống
Trang 6TRUONG DAI HOC BACH KHOA gp
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
2.1.1 Đối với Admin
Giao điện Admin gồm các tinh năng sau:
e Tao tài khoản cho nhân viên mới (5 loại người dùng) bằng cách điền các thông tin
cá nhân và chỉ định username + password
e Hiển thị danh sách tất cả các nhân viên cùng với thông tin về ID, tên, khoa
e Tìm kiêm thông tin nhân viên theo tên
e Xóa nhân viên khỏi hệ thống
Trang 7TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
2.1.2 Đối voi Receptionist
«extend» aree (Coenen) «extend»
auto find Doctor
We
S «extend»_
_= C delete
«extend»
Giao điện Receptionist gdm các tính năng sau:
e Quản lý danh sách các bệnh nhân: thêm, tìm kiếm theo tên, chỉnh sửa thông tin, xóa,
e Quản lý danh sách các hỗ sơ bệnh án (medical record) của mỗi bệnh nhân: thêm, xem thông tin, xuất viện (đưa bệnh án vào trạng thái hoàn thành), xóa Khi tạo mới một bệnh án, tùy vào khoa khám bệnh được chọn mà hệ thống sẽ tìm kiém va chon ra mét Doctor cho bệnh nhân, mỗi Doctor không được có quá 5 hồ sơ bệnh
Trang 8TRUONG DAI HOC BACH KHOA 6
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
2.1.3 Đối với Doctor
a View
appointments /< - «extend»
doctor Post
finish health test - - «include»
Giao điện Doctor gồm các tính năng sau:
e Xem các hồ sơ được gửi đến từ Receptionist hoặc Technician: thông tin bệnh nhân
Receptionist
Khi gửi cho Technician, hồ sơ chuyển sang trạng thái TESTING
khi giti cho Receptionist, hé so chuyén sang trang thai DIAGNOSED
Trang 9TRUONG DAI HOC BACH KHOA gp
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
2.1.4 Đối với Technician
view patient info
«extend» "
View med records /*”"””" «extend» -
Giao điện Technician gồm các tính năng sau:
e Xem các hồ sơ được gửi đến từ Doetor: thông tin cá nhân và lịch sử bệnh án
e Chỉnh sửa trên phần test result: upload file kết quả xét nghiệm gửi về cho Doctor
e Quản lý các máy móc y tế: thêm, dùng, bảo trì, tìm kiếm theo tên, xóa Khi gửi về cho Doctor, hồ sơ chuyển thành TESTED
Trang 10TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
2.1.5 Đối với Pharmacist
Giao dién Pharmacist gồm các tính năng sau:
e Quản lý các lô thuốc: thêm, chỉnh sửa thông tin thuốc, tìm kiếm theo tên, xuất thuốc, xóa thuốc
e Lọc các lô thuốc theo tình trạng: số lượng rỗng, hết hạn
Mỗi phần tử thuốc sẽ là một lô thuốc được nhập vào kho gồm các thông tin: tên, mô
tả, hạn sử dụng, số lượng, đơn vị Như vậy có thể có nhiều lô thuốc cùng tên nhưng khác nhau về hạn sử dụng hoặc số lượng
Tính năng xuất thuốc sẽ tạo ra hóa đơn dưới dạng file pdf
2.2 Class Diagram
Hệ thống được thiết kế theo mô hình hướng đối tượng nên ta sẽ xem xét sơ dé Class Diagram, thể hiện quan hệ của các đối tượng chính trong hệ thống
Trang 11TRUONG DAI HOC BACH KHOA gp
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
User
-userid: String san
«enumeration» -username: String - -
xd: String #staffld: String
ode #name: String
(from User) userMode: Made
- ¬ Mode: Mode Staff tri
ADMIN tafild: String DOCTOR +getLIserld(): String 1 1
RECEPTIONIST TECHNICIAN PHARMACIST p0: Map< <String S Otiecr
+hashPassword( Sting): String ~
+toMap(): Map<String, Object> Bia ze!
Doctor i | Technician | Pharmacist | Admin +PATIENT_LIMIT: Long = SL F 1 1 | J Patient -department: DeptType C 1 Ũ 1 C | ]
patientid: String -patientCount: Long
name: String +getDepartmem): DeptType
birthDate: Loc: alate ~getPatientCountQ: Long - Medicine
-gender: Gend ~toMap(: Ma in Machine =a
-address: sting machineld: String gionel Sane oe ng rin ber 9 machineName: String Date: Local 9
bloodG foup avaiUse: “imponDate: LocalDate
healthinsuranceNumber: String “useCount: Long -expiryDate: LocalDate
— amount: Long +getPatientid(): String +getMachineld(): String unit: String
He porn aoe s +getMach neName0 String description: String
+getformattedDate(): String *getAvaiUse(: Long —
+oetGen: getadress) Sting sgetUseCount(): Long +getM cgeiMedicineNamed} Sing eld
+getAddress(): Sting ` 1 i: In np ~ isl +getformattedImportDate(): LocalDate wtDat
+getPhoneNumbe ning % " >to, M Object> 3
etBi roup(): BloodGroup t: Time 2 00) ap ro Obs +getformattedExpiryDate(): Loc
-Status: Status +getAmountQ: Long
+toMap() Map<String, Object>
+getMedRecid(): String TestResult +getPatientid(): String Shrine
+getDoctorld(): sestType: Sriag
-analysisFileP ath: String -diagnosis: String -prescription: String
enumeration» nai h
` +setCheckOut(Timestamp): void (from MedicalRecord) +getStatus(): Status +gefTestType0: Strin
PENDING 0: Long +9) ‘AnalysisFilePath0:
Giải thích về quan hệ giữa các class:
1 Quan hệ Composition giữa User và Staff: các thông tin đăng nhập của tài khoản được cô lập vào lớp Ủser Khi một nhân viên mới được tạo ra, một instance Staff phải được tạo ra trước, sau đó Staf#f ID sẽ được lưu vào User để khi đăng nhập,
hệ thống truy xuất User từ DB và từ đó nhận được các thông tin của người dùng lưu trong Staf Khi xóa tài khoản, User cũng sẽ được xóa trước rồi đến Staff
2 Quan hệ thừa kế của Doctor, Receptionist, Technician, Pharmacist, Ad- min tir Staff: vì hệ thống được xây dựng còn đơn giản nên ngoài Doctor ra, các loại người dùng còn lại chưa có sự khác nhau về các thông tin cá nhân Tuy nhiên nhóm vẫn giữ thiết kế này để dễ mở rộng trong tương lai
=5 Quan hé Association giữa MedicalRecord với Doctor và Receptionist:
để có thể hiển thị với đúng người dùng, hồ sơ phải lưu thong tin cha Doctor va leceptionist gắn với hồ sơ đó Sự tồn tại của MedicalRecord không ảnh hưởng đến Doctor hay Receptionist và ngược lại
11
Trang 124 Quan hệ Composition giữa MedicalRecord và Patient: bệnh nhân có thể
có nhiều hồ sơ bệnh án khi đi khám bệnh nhiều lần MedicalRecord sẽ bị xóa khi
TRUONG DAI HOC BACH KHOA
KHOA KHOA HỌC VÀ KỸ THUẬT MAY TÍNH +
Patient bị xóa khỏi hệ thống
5 Quan hệ Composition giữa TestResult và MedicalRecord: kết quả khám bệnh là một phần của hồ sơ bệnh án nên cũng sẽ bị xóa khi hồ sơ bị xóa Ngoài ra, trong mã nguồn còn nhiều class khác liên quan đến hiển thị giao diện, truy cập Database, Filemanager,
UserDAO -gblđanagar: DBManaper
+deleteDocument( ): void
+getMachineByName(String): List«Machine>
+getUsableMachine(): List<Machine>
+getUnusableMachine(): ListsMachine= +getAllMachines(): List<Machine>
+getMadicineByld(String): Medicine +getAliMedicine(): List<Medicine>
+getMedicineByName(String): List<Medicine> +getOutOfStock(): List<Mecicine>
Trang 13TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
và trình bày trọng tâm của giải pháp cho vấn đề đó, theo cách mà có thể dùng đi dùng lại hàng triệu lần mà không cần phải suy nghĩ
Nhóm chúng em đã nhận ra tầm quan trọng của việc áp dụng design pattern trong quá trình thực hiện dự án và đã lựa chọn Singleton là pattern phù hợp cho mục đích của mình
Singleton là một pattern phải thỏa mãn 2 tiêu chí
e Giới hạn chỉ có duy nhất 1 instance của class đó tồn tại ở bất kỳ thời điểm nào class đó được request
e Cho phép quyền truy cập global
Vấn đề mà singleton giải quyết là làm sao để đảm bảo rằng 1 class chỉ có 1 instance duy nhất và nó luôn sẵn sàng để sử dụng ở bất kỳ thời điểm hoặc vị trí nào trong phần mềm của chúng ta Có thể lấy ví dụ như:
e Những tài nguyên được chia sẻ như DB để truy suất, file vật lý được sử dụng chung Những tài nguyên này nên chỉ có 1 instance tồn tại để sử dụng và theo dõi trạng thái của nó trong suốt quá trình sử dụng
e Hoặc những kiểu object không cần thiết phải tạo instance mới mỗi lần sử dụng như logging object, hãy tưởng tượng chuyện gì xảy với mỗi dòng log chúng ta lại tạo mới một logging object
Cách thức implement cơ bản với Java (Eager Initialization Singleton)
:public class Singleton {
2 // 1 Set instance to static
13
Trang 14TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
9 // 3 Getter set to static method
10 public static Singleton getSingletonInstance() {
mở phân tán Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ database mới: distributed (phân tán) + non-relational (không ràng buộc) Dây là 2 đặc tính quan trọng nhất
Dac điểm của các No§QL Database:
e Consistency: chấp nhận tính nhất quán yếu, có thể không thấy ngay được sự thay đổi mặc dù đã cập nhật dữ liệu
14
Trang 15TRUONG DAI HOC BACH KHOA ge
KHOA KHOA HOC VA KỸ THUAT MÁY TÍNn €+
e High Availability: Do chấp nhận sự trùng lặp trong lưu trữ nên nếu một node (commodity machine) nào đó bị chết cũng không ảnh hưởng tới toàn bộ hệ thống
e High Scalability: Gan như không có một giới hạn cho đữ liệu và người dùng trên hệ thống
e Deployment Flexibility: việc bố sung thêm/loại bỏ các node, hệ thống sẽ tự động nhận biết để lưu trữ mà không cần phải can thiệp bằng tay Hệ thống cũng không đòi hổi cấu hình phần cứng mạnh, đồng nhất
Phân loại các NoSQL Database:
e IXey-value stores Lưu trữ kiểu key-value là kiểu lưu trữ dữ liệu NoSQL đơn giản nhất sử dụng từ một API Chúng ta có thể nhận được giá trị cho khóa, đặt một giá trị cho một khóa, hoặc xóa một khóa từ dữ liệu
e Column-oriented databases (column-family) Cơ sở dữ liệu column-family lưu trữ
đữ liệu trong nhiều cột trong mỗi dòng với key cho từng dòng
e Document-oriented databases Tài liệu là nguyên lý chính của cơ sở dữ liệu kiến dữ liệu Dữ liệu lưu trữ và lấy ra là các tài liệu với định dạng XML, JSON, BSON Tài liệu miêu tả chính nó, kế thừa từ cầu trúc dữ liệu cây
Sau khi tìm hiển về công nghệ NoSQL, nhóm chúng em đã quyết dinh chon Cloud Firestore, mot Document-oriented database
3.1.3 Password Hashing:
Hashing là quá trình tạo ra một chuỗi (được băm) từ một thông điệp (chuỗi) được truyền vào sử dụng một hàm toán học nào đó (hàm băm mật mã) Mặc dù hiện nay có rất nhiều "hàm băm", mỗi hàm được viết dưới nhiều thuật toán khác nhan, cho ra nhiều kết quả khác nhau Tuy nhiên để là một hàm băm tốt cần phải có 4 thuộc tính bảo mật như sau:
e Có tính xác định: Cùng một chuỗi đầu vào được xử lý bởi cùng hàm băm, sẽ cho ra cùng một kết quả
e Không thể đảo ngược: Không thể tạo ra chuỗi (thông điệp) từ một chuỗi đã được băm từ hàm băm
15