Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh số hóa ngày càng sâu rộng, lĩnh vực chăm sóc sức khỏe tại Việt Nam vẫn đối mặt với thực trạng phần lớn các quy trình vận hành được tiến hành thủ công. Việc quản lý hồ sơ bệnh án, sắp xếp lịch hẹn, theo dõi dược phẩm và thực hiện quy trình khám chữa bệnh theo cách truyền thống gây ra nhiều bất cập: tốc độ xử lý chậm, dễ phát sinh sai sót và chồng chéo trong công việc, ảnh hưởng trực tiếp đến chất lượng dịch vụ và gây phiền hà cho bệnh nhân.

Xuất phát từ thực trạng đó, nhóm 09 — gồm ba sinh viên Vũ Minh Chiến (MSSV: 20211416), Đàm Như Đạt (MSSV: 20211504) và Bùi Ngọc Đức (MSSV: 20211760) thuộc lớp DCCNTT12.05, Khoa Công nghệ Thông tin, Trường Đại học Công nghệ Đông Á — đã lựa chọn đề tài xây dựng phần mềm quản lý dịch vụ chăm sóc sức khỏe bằng ngôn ngữ Python, thực hiện dưới sự hướng dẫn của giảng viên Ths. Nguyễn Đức Thiện trong khuôn khổ học phần Lập trình ứng dụng với Python, năm học 2024.

Mục tiêu và nhiệm vụ cụ thể của đề tài được nhóm xác định gồm bốn bước:

  1. Phân tích yêu cầu: Xác định các yêu cầu chức năng và phi chức năng của ứng dụng.
  2. Thiết kế hệ thống: Lập mô hình kiến trúc hệ thống, thiết kế cơ sở dữ liệu và giao diện người dùng.
  3. Lập trình và hiện thực hóa: Sử dụng Python và các công nghệ liên quan để phát triển các module và chức năng.
  4. Kiểm thử và triển khai: Tiến hành kiểm thử để đảm bảo ứng dụng hoạt động chính xác, sau đó triển khai lên môi trường thực tế.

Trọng tâm của đề tài là phân tích và mô phỏng toàn bộ quy trình quản lý trong lĩnh vực chăm sóc sức khỏe, giúp người dùng dễ dàng thao tác và người quản lý có cái nhìn tổng quan, chính xác về các hoạt động tại cơ sở y tế.

Đối tượng và phạm vi: Hệ thống hướng đến hai nhóm người dùng chính là Admin (quản trị viên) và Nhân viên tại các cơ sở dịch vụ chăm sóc sức khỏe. Đề tài được thực hiện trong học kỳ năm 2024, tại môi trường phát triển cục bộ sử dụng cơ sở dữ liệu MySQL với tên schema hcms.


Cơ sở lý thuyết và phương pháp

Công nghệ và thư viện sử dụng

Đề tài sử dụng ngôn ngữ Python làm nền tảng phát triển chính, kết hợp ba thư viện cốt lõi:

Thư viện Vai trò trong hệ thống
mysql-connector-python Kết nối và tương tác với cơ sở dữ liệu MySQL; hỗ trợ SSL/TLS, connection pooling, transaction (commit/rollback), stored procedures
PyQt6 Xây dựng giao diện đồ họa desktop; tương thích Qt Designer, hỗ trợ đa nền tảng (Windows, macOS, Linux)
ReportLab Tạo và xuất tài liệu PDF động từ dữ liệu hệ thống; hỗ trợ bảng, biểu đồ, mã vạch, mã hóa PDF

Kiến trúc module

Hệ thống được tổ chức theo mô hình phân lớp gồm ba module chính:

  • config: Chứa cấu hình kết nối database với class dbconfig, thiết lập host, user, dbname (hcms) và quản lý vòng đời kết nối.
  • model: Chứa các đối tượng nghiệp vụ của hệ thống, định nghĩa các lớp, hàm và phương thức xử lý dữ liệu tới database. Ví dụ lớp Khachhang kế thừa lớp User, cung cấp các phương thức get_all_user, create_user, update_user, delete_user.
  • views: Chứa các file giao diện .ui thiết kế từ Qt Designer, xử lý sự kiện, nút bấm và bảng dữ liệu bằng cách gọi các module trong model tương ứng.

Phương pháp phát triển

Nhóm áp dụng quy trình phát triển phần mềm tuần tự theo kế hoạch năm tuần: tuần 1 — đọc tài liệu và phát biểu bài toán; tuần 2 — phân tích bài toán, xác định yêu cầu; tuần 3 — thiết kế cơ sở dữ liệu và phân luồng dữ liệu; tuần 4 — thiết kế giao diện và chức năng người dùng; tuần 5 — xử lý tác vụ người dùng trên ứng dụng và kiểm thử hệ thống.

Phương pháp phân tích yêu cầu được thực hiện thông qua bảng hỏi — đặt câu hỏi nghiệp vụ và trả lời có hệ thống — để xác định tác nhân (actor) và phân quyền chức năng trước khi thiết kế.

Nguồn dữ liệu tham khảo: Giáo trình Lập trình Python của Ths. Nguyễn Đức Thiện (Đại học Công nghệ Đông Á, 25/05/2024) và tài liệu kỹ thuật về PyQt6 từ cộng đồng phát triển.


Nội dung chính theo từng chương

Chương I: Cơ sở lý thuyết

Chương này trình bày lý do chọn đề tài, phân tích thực trạng quản lý dịch vụ chăm sóc sức khỏe theo phương thức thủ công và những bất cập kéo theo. Nhóm giới thiệu tổng quan về vai trò của Python trong phát triển ứng dụng, sau đó mô tả chi tiết ba thư viện được sử dụng — mysql-connector-python, ReportLab và PyQt6 — với các tính năng chính, ưu điểm và lý do lựa chọn cho từng thư viện trong ngữ cảnh của hệ thống.

Kế hoạch thực hiện đề tài được trình bày dưới dạng bảng phân công theo tuần, thể hiện lộ trình triển khai từ nghiên cứu đến kiểm thử.

Chương II: Xây dựng chương trình

Đây là chương trọng tâm, bao gồm toàn bộ thiết kế và hiện thực hóa hệ thống. Nhóm xác định sáu chức năng cốt lõi của hệ thống: quản lý nhân viên, quản lý dịch vụ, quản lý khách hàng, quản lý hóa đơn, quản lý lịch hẹn và báo cáo thống kê.

Phân quyền hệ thống được xác định rõ ràng qua hai vai trò:

Chức năng Admin Nhân viên
Quản lý thông tin nhân viên ✓ —
Quản lý dịch vụ ✓ ✓
Quản lý khách hàng ✓ ✓
Quản lý lịch hẹn ✓ (toàn quyền) ✓ (tạo mới)
Quản lý hóa đơn ✓ (toàn quyền) ✓ (tạo mới)
Báo cáo thống kê ✓ —
Đăng nhập / Đăng xuất ✓ ✓

Mỗi chức năng được mô tả theo luồng xử lý (flow) cụ thể: danh sách → thêm → sửa → xóa, kèm sơ đồ phân rã chức năng và sơ đồ use case tổng quát.

Thiết kế cơ sở dữ liệu bao gồm bảy thực thể chính với cấu trúc thuộc tính và ràng buộc khóa được mô tả đầy đủ, cùng mô hình thực thể quan hệ ERD thể hiện sáu mối quan hệ một-nhiều giữa các thực thể. Giao diện hệ thống bao gồm ba màn hình chính: Đăng nhập, Giao diện Nhân viên và Giao diện Quản lý.

Chương III: Kết quả thực nghiệm chương trình

Chương này trình bày kết quả kiểm thử chức năng theo định dạng test case có cấu trúc. Toàn bộ các test case được thiết kế và thực thi vào ngày 08/07/2024, với mức độ ưu tiên Medium cho tất cả các trường hợp kiểm thử. Sáu nhóm chức năng được kiểm thử bao gồm: đăng nhập, quản lý khách hàng, quản lý nhân viên, quản lý lịch hẹn, quản lý hóa đơn, quản lý dịch vụ và báo cáo thống kê.

Chương IV: Kết luận

Chương tổng kết các nội dung đã đạt được, những hạn chế còn tồn tại và định hướng phát triển tiếp theo của hệ thống.


Thiết kế và triển khai

Kiến trúc cơ sở dữ liệu

Cơ sở dữ liệu MySQL với schema tên hcms bao gồm bảy bảng:

Tên bảng Mô tả Khóa ngoại
hcms_danhmuc_dichvu Danh mục dịch vụ —
hcms_dichvu Chi tiết dịch vụ dv_danhmuc_id → danhmuc_dichvu
hcms_khachhang Thông tin khách hàng —
hcms_nhanvien Thông tin nhân viên (gồm cả tài khoản đăng nhập) —
hcms_hoadon Hóa đơn hd_khachhang_id, hd_nhanvien_id
hcms_hoadon_chitiet Chi tiết dịch vụ trong hóa đơn hdct_dichvu_id, hdct_hoadon_id
hcms_lichhen Lịch hẹn của khách hàng lv_khachhang_id

Bảng hcms_nhanvien lưu cả thông tin cá nhân lẫn thông tin tài khoản (mật khẩu, quyền) trong cùng một thực thể, phản ánh thiết kế tích hợp xác thực vào đối tượng nhân viên.

Kết quả kiểm thử chức năng

Tất cả các test case được thực thi đều ghi nhận trạng thái Pass. Dưới đây là tổng hợp các test case theo chức năng:

Chức năng Số test case Kết quả
Đăng nhập 3 (Test_L1, Test_L2, Test_L3) Pass
Quản lý khách hàng 3 (Thêm, Sửa, Xóa) Pass
Quản lý nhân viên 2 (Thêm, Xóa) Pass
Quản lý lịch hẹn 3 (Tạo, Sửa, Xóa) Pass
Quản lý hóa đơn 2 (Xuất, Xóa) Pass
Quản lý dịch vụ 2 (Thêm, Xóa) Pass
Báo cáo thống kê 2 (Thống kê dịch vụ, Doanh thu) Pass

Một số dữ liệu kiểm thử cụ thể được ghi lại trong văn bản: hóa đơn xuất với tổng tiền 93.000 VND cho khách hàng Bùi Ngọc Đức; dịch vụ kiểm thử thêm mới là "Phẫu thuật nội soi" với đơn giá 1.500.000 VND; file xuất PDF thống kê được lưu với tên Thongkequy3 và báo cáo doanh thu được lưu với tên baocaodoanhthu.

Chức năng đăng nhập phân biệt rõ hai vai trò: đăng nhập với số điện thoại 0969741403 và mật khẩu 09072024 chuyển sang form quản trị (Admin); đăng nhập với số điện thoại 0365993602 và mật khẩu 09072024 chuyển sang form nhân viên.

Công nghệ xuất báo cáo

Hệ thống hỗ trợ xuất báo cáo dưới dạng PDF thông qua thư viện ReportLab, bao gồm hai loại báo cáo: báo cáo doanh thu và thống kê sử dụng dịch vụ. Theo mô tả trong mục lục, hệ thống dự kiến hỗ trợ thêm xuất định dạng Excel, tuy nhiên nội dung kiểm thử chỉ ghi nhận kết quả với PDF.


Kết quả và đóng góp

Nhóm 09 hoàn thành một ứng dụng desktop quản lý dịch vụ chăm sóc sức khỏe có đầy đủ sáu nhóm chức năng nghiệp vụ, được kiểm thử thực tế với tất cả test case đạt trạng thái Pass.

Các kết quả cụ thể đã đạt được theo ghi nhận của nhóm:

  • Xây dựng ứng dụng hoàn chỉnh sử dụng Python, PyQt6 và MySQL.
  • Áp dụng thực tiễn các kiến thức về List, Tuple, lớp kế thừa và đối tượng trong Python.
  • Nắm được cách thiết kế và quản lý cơ sở dữ liệu quan hệ: tạo bảng, thiết lập mối quan hệ và thực hiện truy vấn.
  • Học được cách quản lý dự án từ giai đoạn lên ý tưởng, thiết kế, lập trình, kiểm thử đến triển khai, bao gồm sử dụng công cụ Git để theo dõi phiên bản mã nguồn và phối hợp làm việc nhóm.
  • Phát triển kỹ năng phân tích và giải quyết vấn đề khi gặp lỗi trong quá trình lập trình.

Định hướng phát triển tiếp theo được nhóm đề xuất:

  • Cải thiện giao diện người dùng để tăng tính thân thiện và trực quan.
  • Tích hợp trí tuệ nhân tạo và học máy để phân tích dữ liệu và dự đoán xu hướng.
  • Mở rộng chức năng quản lý từ xa, chăm sóc sức khỏe cá nhân hóa và dịch vụ y tế trực tuyến.

Hạn chế và hướng nghiên cứu tiếp

Văn bản ghi nhận một số nội dung nhóm xác định là chưa đạt được trong phạm vi bài tập, chủ yếu liên quan đến việc hoàn thiện quy trình quản lý dự án với Git và kỹ năng phân tích lỗi chuyên sâu — các mục này trùng lặp với phần "đã đạt được" trong cách trình bày của văn bản, cho thấy nhóm nhận thức được khoảng cách giữa mục tiêu đề ra và mức độ thành thục thực tế.

Xét theo phạm vi thực tế của đề tài, một số giới hạn có thể nhận thấy từ nội dung văn bản: hệ thống chạy trên môi trường cục bộ (localhost), chưa có cơ chế triển khai đám mây hay đa người dùng đồng thời; chức năng xuất Excel được đề cập trong thiết kế nhưng chưa có test case xác nhận; tích hợp AI/ML và quản lý từ xa được xác định là hướng phát triển tương lai, chưa được hiện thực hóa trong phiên bản hiện tại.


Giá trị tham khảo

Tài liệu này phù hợp để tham khảo cho các nhóm đối tượng sau:

  • Sinh viên năm 2–3 ngành Công nghệ Thông tin đang học hoặc chuẩn bị thực hiện bài tập lớn môn Lập trình Python, đặc biệt ở các trường đại học có chương trình đào tạo theo hướng ứng dụng thực tiễn. Phần mô tả module (config, model, views) và đoạn mã minh họa lớp Khachhang có thể làm tham chiếu cách tổ chức dự án Python theo kiến trúc phân lớp.
  • Người thực hiện đề tài tương tự về quản lý phòng khám, spa, trung tâm y tế có thể tham khảo cách phân quyền Admin/Nhân viên, thiết kế ERD bảy thực thể và luồng kiểm thử theo test case có cấu trúc.
  • Người học PyQt6 kết hợp MySQL có thể tham khảo cách nhóm kết nối ba thư viện (mysql-connector-python + PyQt6 + ReportLab) vào một ứng dụng desktop hoàn chỉnh.

Các phần đáng tham khảo nhất là: bảng phân quyền chức năng theo vai trò (Chương II), cấu trúc bảng cơ sở dữ liệu với kiểu dữ liệu và ràng buộc (Chương II) và bộ test case có cấu trúc đầy đủ theo định dạng Test Case ID / Test Step / Expected Result / Actual Result / Status (Chương III).


Câu hỏi thường gặp

1. Hệ thống phân biệt quyền Admin và Nhân viên như thế nào khi đăng nhập? Việc phân quyền dựa trên trường nv_quyen (kiểu tinyint) trong bảng hcms_nhanvien. Sau khi xác thực số điện thoại và mật khẩu, hệ thống đọc giá trị quyền này để chuyển hướng sang form quản trị (Admin) hoặc form nhân viên. Trong kiểm thử, tài khoản SĐT 0969741403 / mật khẩu 09072024 vào form Admin; tài khoản SĐT 0365993602 / mật khẩu 09072024 vào form Nhân viên.

2. Cơ sở dữ liệu có tên schema là gì và gồm những bảng nào? Schema có tên hcms (Healthcare Management System). Hệ thống gồm bảy bảng: hcms_danhmuc_dichvu, hcms_dichvu, hcms_khachhang, hcms_nhanvien, hcms_hoadon, hcms_hoadon_chitiet và hcms_lichhen, liên kết với nhau qua sáu mối quan hệ một-nhiều được mô tả trong sơ đồ ERD.

3. Nhân viên có thể tự xóa lịch hẹn hoặc hóa đơn không? Theo phân quyền được xác định trong văn bản, chức năng xóa lịch hẹn và xóa hóa đơn chỉ dành cho Admin. Nhân viên chỉ có quyền tạo mới lịch hẹn và tạo mới hóa đơn; việc sửa và xóa thuộc toàn quyền Admin.

4. Báo cáo thống kê hỗ trợ xuất những định dạng nào và tên file được đặt như thế nào trong kiểm thử? Trong phần kiểm thử được ghi nhận, hệ thống xuất báo cáo dưới dạng PDF thông qua ReportLab. File thống kê sử dụng dịch vụ được lưu với tên Thongkequy3; file báo cáo doanh thu được lưu với tên baocaodoanhthu. Thiết kế chức năng còn đề cập xuất Excel và in trực tiếp, nhưng các trường hợp này không có test case xác nhận trong văn bản.

5. Hóa đơn trong hệ thống lưu trữ thông tin gì và giá trị kiểm thử cụ thể là bao nhiêu? Bảng hcms_hoadon lưu: tổng tiền (hd_tongtien, kiểu double), ngày tạo (hd_ngaytao, kiểu datetime), mô tả (hd_mota), trạng thái (hd_trangthai), mã khách hàng và mã nhân viên. Chi tiết dịch vụ trong hóa đơn được lưu riêng ở bảng hcms_hoadon_chitiet. Trong test case kiểm thử, hóa đơn xuất ngày 12/7/2024 lúc 10:00:00 với số lượng 1 dịch vụ có tổng tiền 93.000 VND, mô tả "Liệu pháp điều trị", trạng thái "Chờ xác nhận".


Kết luận

Bài tập lớn của nhóm 09 là một sản phẩm đào tạo hoàn chỉnh trong khuôn khổ học phần Lập trình ứng dụng với Python tại Trường Đại học Công nghệ Đông Á, thực hiện năm 2024. Hệ thống hiện thực hóa đầy đủ sáu nhóm chức năng quản lý dịch vụ chăm sóc sức khỏe, xây dựng trên stack Python – PyQt6 – MySQL – ReportLab với kiến trúc phân lớp config/model/views rõ ràng. Toàn bộ 17 test case được ghi nhận đều đạt kết quả Pass, phản ánh mức độ hoàn thiện phù hợp với mục tiêu của một bài tập lớn cấp môn học. Nhóm cũng đề xuất lộ trình phát triển tiếp theo với định hướng tích hợp AI/ML và mở rộng sang dịch vụ y tế trực tuyến, cho thấy tư duy hướng đến khả năng mở rộng của hệ thống.