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

Trong hệ thống y tế hiện đại, công tác quản lý và vận hành tại các cơ sở khám chữa bệnh đóng vai trò then chốt đối với chất lượng chăm sóc sức khỏe cộng đồng. Khảo sát thực tế tại các bệnh viện quy mô nhỏ và phòng khám cho thấy nhiều hạn chế trong khâu điều hành: quy trình tiếp nhận bệnh nhân còn thủ công dẫn đến tình trạng quá tải, người bệnh phải di chuyển từ sớm, xếp hàng và bốc số chờ đợi trong thời gian dài. Mặt khác, các nghiệp vụ quản lý hồ sơ bệnh án, lịch khám, quản lý nhân sự và tổng hợp thống kê phần lớn được xử lý thủ công hoặc thông qua các phần mềm riêng lẻ, thiếu tính đồng bộ và liên thông dữ liệu. Thực trạng này làm gia tăng áp lực công việc cho đội ngũ nhân viên y tế, đồng thời làm giảm hiệu quả phục vụ người bệnh.

Xuất phát từ thực tiễn trên, đề tài "Thiết kế và xây dựng website quản lý bệnh viện" được tác giả Lê Minh Đương thực hiện nhằm thiết lập một nền tảng số hóa tập trung, tích hợp các tiện ích trực tuyến cho bệnh nhân và các chức năng quản trị chuyên sâu cho cơ sở y tế.

Đề tài xác định 5 mục tiêu nghiên cứu cụ thể:

  1. Phân tích và xây dựng mô hình quản lý bệnh viện tiên tiến, đáp ứng các yêu cầu và xu hướng phát triển của ngành y tế.
  2. Thiết kế và triển khai các tính năng chính như quản lý hồ sơ bệnh nhân, lịch hẹn khám, quản lý thông tin bác sĩ.
  3. Tối ưu hóa quy trình vận hành, nâng cao hiệu quả và chất lượng dịch vụ y tế.
  4. Đảm bảo an toàn và bảo mật dữ liệu y tế, tuân thủ các quy định về bảo vệ thông tin cá nhân.
  5. Nghiên cứu và áp dụng các công nghệ mới, xu hướng hiện đại trong quản lý bệnh viện.

Đối tượng quản lý của hệ thống bao gồm:

  • Bác sĩ và Điều dưỡng: Quản lý thông tin định danh (mã số, họ tên, ngày sinh, giới tính, email, số điện thoại, số CCCD), lịch làm việc/lịch khám, lịch phẫu thuật, hồ sơ bệnh án và phân công theo chuyên khoa.
  • Phòng ban chuyên môn: Gồm 9 chuyên khoa: Nhi khoa, Chỉnh hình, Tim mạch, Thần kinh, Ung thư, X quang, Vật lý trị liệu, Da liễu, Tai mũi họng.
  • Bệnh nhân: Quản lý thông tin cá nhân (mã bệnh nhân, họ tên, ngày sinh, giới tính, email, số điện thoại, địa chỉ, số CCCD) và tiền sử bệnh án.

Phạm vi nghiên cứu được triển khai trong khuôn khổ Đồ án chuyên ngành Kỹ thuật phần mềm (Lớp 21DKTPM1A, Khóa 2021) tại Khoa Công nghệ Thông tin, Trường Đại học Nguyễn Tất Thành, hoàn thành vào tháng 09 năm 2024 (Học kỳ III, năm học 2023 - 2024).


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

Đề tài kết hợp phương pháp nghiên cứu định tính và định lượng thông qua chu trình phát triển phần mềm:

  • Khảo sát và đánh giá hiện trạng: Phân tích giao diện, chức năng và trải nghiệm người dùng từ hệ thống cổng thông tin của các đơn vị thực tế (Website Bệnh viện Thống Nhất, Website Bệnh viện Quận Tân Phú).
  • Mô hình hóa hệ thống: Ứng dụng mô hình phân rã chức năng BFD (Business Function Diagram), biểu đồ ca sử dụng Use Case và biểu đồ tuần tự (Sequence Diagram) để mô tả luồng nghiệp vụ.
  • Thiết kế và triển khai kiến trúc phần mềm: Sử dụng mô hình Client-Server với cấu trúc phân tầng kết nối qua RESTful API.

Nền tảng công nghệ và lý thuyết được tác giả sử dụng bao gồm:

  • Frontend (ReactJS): Thư viện JavaScript mã nguồn mở xây dựng giao diện người dùng theo kiến trúc thành phần (Component-based). Khai thác cơ chế Virtual DOM giúp tối ưu hiệu năng kết xuất giao diện, cú pháp mở rộng JSX và cơ chế quản lý trạng thái (State/Props) để đồng bộ hóa dữ liệu.
  • Backend (Express.js trên nền tảng Node.js): Framework phát triển máy chủ và xây dựng hệ thống API endpoints, xử lý định tuyến (Routing) và tích hợp các lớp Middleware trung gian thực hiện xác thực, kiểm soát luồng dữ liệu và bắt lỗi hệ thống.
  • Cơ sở dữ liệu (MongoDB): Hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) lưu trữ dữ liệu dưới dạng tài liệu JSON/BSON linh hoạt (Schema-less), hỗ trợ khả năng mở rộng ngang (Scale-out) và tích hợp với Node.js thông qua thư viện Mongoose ORM.
  • Lưu trữ đa phương tiện: Nền tảng Cloudinary dùng để lưu trữ và quản lý tập tin hình ảnh chân dung bác sĩ thông qua các định danh public_id và đường dẫn url.
  • Quản lý mã nguồn: Công cụ kiểm soát phiên bản Git và nền tảng lưu trữ GitHub.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc phân tầng, phân định rõ ràng giữa giao diện người dùng (Client-side) và khối logic xử lý trung tâm (Server-side), trao đổi dữ liệu thông qua giao thức HTTP/HTTPS.

Ma trận chức năng hệ thống

Tên chức năng Mô tả chi tiết nghiệp vụ
Quản lý bệnh nhân Cho phép thêm, sửa, xóa, tìm kiếm bệnh nhân; quản lý thông tin chi tiết (họ tên, ngày sinh, số điện thoại, email, giới tính, tiền sử bệnh án).
Quản lý bác sĩ Cho phép thêm, sửa, xóa, tìm kiếm bác sĩ; quản lý thông tin cá nhân, chuyên khoa công tác, lịch trực và hình ảnh đại diện.
Quản lý phòng ban Thiết lập danh mục chuyên khoa và tiếp nhận bệnh nhân đăng ký theo từng phòng ban cụ thể.
Quản lý nội dung Quản trị viên cập nhật, chỉnh sửa thông tin giới thiệu, chính sách bệnh viện, banner phòng ban và các bài viết tin tức.
Quản lý cuộc hẹn Tiếp nhận, tổng hợp và xử lý danh sách yêu cầu đặt lịch khám bệnh trực tuyến của người dùng gửi đến hệ thống.
Quản lý tin nhắn Tổng hợp toàn bộ thư từ, tin nhắn phản hồi, liên hệ của người dùng gửi về từ trang chủ website.
Phân tích dữ liệu Cung cấp báo cáo thống kê, phân tích dữ liệu hoạt động và thông tin lịch sử khám bệnh.

Thiết kế cấu trúc cơ sở dữ liệu

Dữ liệu được mô hình hóa thành các bộ sưu tập (Collections) trong MongoDB với các ràng buộc chi tiết:

Bảng thông tin người dùng (User)

STT Tên trường Kiểu dữ liệu Kích thước / Ràng buộc Mô tả
1 firstName String Bắt buộc, tối thiểu 2 ký tự Họ và tên đệm
2 lastName String Bắt buộc, tối thiểu 2 ký tự Tên người dùng
3 email String Bắt buộc, đúng định dạng email Địa chỉ email liên lạc
4 phone String Bắt buộc, đúng 10 chữ số Số điện thoại
5 CCCD String Bắt buộc, chính xác 12 chữ số Số Căn cước công dân
6 dob Date Bắt buộc Ngày tháng năm sinh
7 Gender String Bắt buộc, nhận giá trị: "Male", "Female" Giới tính
8 Password String Bắt buộc, tối thiểu 8 ký tự, ẩn khi truy vấn Mật khẩu tài khoản
9 Role String Bắt buộc, nhận giá trị: "Patient", "Doctor", "Admin" Vai trò tài khoản
10 doctorDepartment String Không bắt buộc với Patient/Admin Chuyên khoa trực thuộc
11 docAvatar.public_id String Bắt buộc khi tạo tài khoản Bác sĩ Mã định danh ảnh trên Cloudinary
12 docAvatar.url String Bắt buộc khi tạo tài khoản Bác sĩ Đường dẫn ảnh trên Cloudinary

Bảng thông tin cuộc hẹn (Appointment)

STT Tên trường Kiểu dữ liệu Kích thước / Ràng buộc Mô tả
1 firstName String Bắt buộc, tối thiểu 2 ký tự Họ đệm người khám
2 lastName String Bắt buộc, tối thiểu 2 ký tự Tên người khám
3 email String Bắt buộc, định dạng email hợp lệ Email xác nhận lịch
4 phone String Bắt buộc, tối thiểu 10 ký tự Số điện thoại liên hệ
5 CCCD String Bắt buộc, chính xác 12 ký tự Số Căn cước công dân
6 dob Date Bắt buộc Ngày sinh bệnh nhân
7 Gender String Bắt buộc, nhận giá trị: "Male", "Female" Giới tính
8 appointment_date String Bắt buộc Ngày hẹn khám bệnh
9 department String Bắt buộc Chuyên khoa đăng ký
10 doctor.firstName String Bắt buộc Họ đệm bác sĩ phụ trách
11 doctor.lastName String Bắt buộc Tên bác sĩ phụ trách
12 hasVisited Boolean Mặc định: false Trạng thái đã từng khám hay chưa
13 address String Bắt buộc Địa chỉ cư trú bệnh nhân
14 doctorId String Bắt buộc Mã định danh bác sĩ
15 patientId String Bắt buộc Mã định danh bệnh nhân
16 status String Mặc định: "Pending". Danh sách: ["Pending", "Accepted", "Rejected"] Trạng thái phê duyệt lịch hẹn

Bảng tin nhắn liên hệ (Message)

STT Tên trường Kiểu dữ liệu Ràng buộc Mô tả
1 firstName String Bắt buộc, tối thiểu 2 ký tự Họ đệm người gửi tin nhắn
2 lastName String Bắt buộc, tối thiểu 2 ký tự Tên người gửi tin nhắn

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

Chương 1: Tổng quan đề tài

Chương 1 trình bày lý do chọn đề tài dựa trên kết quả khảo sát thực tế tại các phòng khám và bệnh viện nhỏ. Tác giả phân tích các bất cập trong phương thức vận hành truyền thống, từ đó xác định mục tiêu xây dựng một nền tảng quản lý khám chữa bệnh trực tuyến. Chương này phân định các yêu cầu chức năng (phân hệ người dùng và phân hệ quản trị), yêu cầu phi chức năng về thiết kế giao diện (tính tương thích responsive, bố cục hiện đại, màu sắc nhận diện thương hiệu), mô tả các thực thể dữ liệu cần quản lý và danh mục 9 phòng ban chuyên khoa. Đồng thời, tác giả thiết lập ma trận phân tích rủi ro trong quá trình triển khai, bao gồm: rủi ro an toàn và bảo mật dữ liệu cá nhân, tính chính xác của dữ liệu y tế, mức độ tiện dụng của giao diện, tính tương thích đa nền tảng và khả năng mở rộng hệ thống.

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

Chương 2 tập trung trình bày các công nghệ nền tảng được lựa chọn để hiện thực hóa đồ án:

  • Express.js: Trình bày nguyên lý hoạt động theo cơ chế xử lý yêu cầu HTTP và điều hướng (routing), vai trò của các tầng Middleware trung gian, khả năng tích hợp Template Engine (EJS, Handlebars, Pug) và kiến trúc phân lớp ứng dụng (routes, controllers, models, views). Phân tích ưu điểm về tốc độ, tính gọn nhẹ và nhược điểm về yêu cầu cấu hình bảo mật thủ công.
  • ReactJS: Giới thiệu mô hình giao diện dựa trên Component, cú pháp JSX, cơ chế Virtual DOM tối ưu tốc độ render, và cấu trúc cây thư mục chuẩn của dự án (src/components, src/pages, src/services, src/utils, src/assets). Phân tích các quy tắc xử lý sự kiện trong React (đặt tên camelCase, truyền hàm xử lý, ngăn chặn hành vi mặc định bằng preventDefault(), cơ chế ràng buộc this và Arrow Functions).
  • MongoDB & Mongoose: Trình bày cấu trúc dữ liệu NoSQL, các kiểu dữ liệu hỗ trợ (Double, String, Object, Array, Binary Data, ObjectID, Boolean, Date, Decimal128, Timestamp...), cơ chế Scale-out, Replication và phương thức kết nối dữ liệu từ ReactJS đến Express.js thông qua thư viện Axios/Fetch.

Chương 3: Phân tích và thiết kế hệ thống

Chương 3 chi tiết hóa kiến trúc hệ thống thông qua các công cụ mô hình hóa:

  • Thiết lập sơ đồ phân rã chức năng BFD và ma trận 7 nhóm chức năng quản trị.
  • Xây dựng biểu đồ Use Case tổng quan và đặc tả chi tiết hai ca sử dụng nòng cốt: UC01 - Đăng nhập (kiểm tra trường bắt buộc, xác thực email và mật khẩu, phân quyền điều hướng) và UC02 - Đăng ký (kiểm tra tính hợp lệ của email, kiểm tra độ an toàn của mật khẩu và tính trùng khớp của mật khẩu xác nhận).
  • Xây dựng các biểu đồ tuần tự (Sequence Diagram) mô tả luồng giao tiếp giữa Actor, Giao diện (Boundary), Bộ điều khiển (Controller) và Cơ sở dữ liệu (Database) cho 3 chức năng: Đăng nhập, Đăng ký khám và Quy trình khám bệnh.
  • Thiết kế chi tiết lược đồ dữ liệu vật lý cho 3 Collection: User, Appointment, và Message kèm theo các ràng buộc toàn vẹn dữ liệu.

Chương 4: Thực nghiệm và triển khai hệ thống

Chương 4 mô tả kết quả lập trình và thực thi hệ thống qua các giao diện thực tế:

  • Phân hệ người dùng:
    • Giao diện Trang chủ (Home) hiển thị biểu ngữ phòng ban, thông tin giới thiệu, địa chỉ tích hợp bản đồ số, đường dây nóng hotline, giờ làm việc và biểu mẫu "Gửi tin nhắn cho chúng tôi" cho phép gửi phản hồi trực tiếp không bắt buộc đăng nhập.
    • Giao diện Trang cuộc hẹn và Form đặt lịch khám bệnh trực tuyến yêu cầu bệnh nhân đăng nhập tài khoản trước khi chọn khoa, chọn bác sĩ và thời gian khám.
    • Giao diện Trang giới thiệu (About Us) và hệ thống form Đăng nhập / Đăng ký tài khoản với tính năng bắt lỗi tự động.
  • Phân hệ quản trị (Dashboard Admin):
    • Giao diện đăng nhập bảo mật dành riêng cho nhà quản trị.
    • Bảng điều khiển quản lý danh sách cuộc hẹn, cung cấp công cụ kiểm duyệt và chuyển đổi trạng thái tiếp nhận (Pending, Accepted, Rejected).
    • Giao diện quản lý nhân sự tổng hợp thông tin đội ngũ y bác sĩ, cho phép thực hiện thêm bác sĩ mới, cấp quyền tài khoản quản trị viên mới và theo dõi phản hồi tin nhắn từ người dùng.

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

Đồ án đã hiện thực hóa một hệ thống phần mềm quản lý bệnh viện hoàn chỉnh với các kết quả cụ thể:

  • Xây dựng thành công hệ thống ứng dụng web hai phân hệ độc lập (Cổng thông tin cho bệnh nhân và Trang quản trị Dashboard cho cơ sở y tế) vận hành trên nền tảng MERN stack tinh gọn (ReactJS, Express.js, Node.js, MongoDB).
  • Số hóa quy trình đăng ký khám chữa bệnh: cho phép bệnh nhân chủ động đặt hẹn trực tuyến theo 9 chuyên khoa và chỉ định bác sĩ phụ trách, giúp giảm thiểu tình trạng xếp hàng bốc số truyền thống.
  • Thiết lập cơ chế kiểm soát dữ liệu chặt chẽ thông qua phân quyền tài khoản (3 vai trò: Patient, Doctor, Admin), tự động kiểm tra định dạng CCCD (12 ký tự), số điện thoại (10 chữ số), tính hợp lệ của email và độ dài mật khẩu.
  • Tích hợp dịch vụ lưu trữ đám mây Cloudinary để tối ưu hóa việc quản lý dữ liệu đa phương tiện (ảnh chân dung bác sĩ), giảm tải lưu trữ trực tiếp trên máy chủ backend.

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

Theo nội dung phân tích rủi ro và phạm vi thực nghiệm của đồ án, tác giả ghi nhận một số hạn chế và định hướng phát triển:

  • Hạn chế kỹ thuật và bảo mật: Việc sử dụng Express.js đòi hỏi phải tự cấu hình các lớp bảo mật nâng cao để ngăn ngừa lỗ hổng dữ liệu y tế nhạy cảm; việc quản lý trạng thái trong ReactJS chưa sử dụng các thư viện chuyên sâu như Redux nên sẽ gặp phức tạp khi hệ thống mở rộng quy mô.
  • Phạm vi nghiệp vụ: Hệ thống hiện tại tập trung chủ yếu vào khâu đặt lịch khám, quản lý danh sách bác sĩ và duyệt trạng thái cuộc hẹn; các nghiệp vụ phức tạp như quản lý kho dược phẩm, viện phí/thanh toán trực tuyến và tích hợp bệnh án điện tử chuyên sâu chưa được triển khai hoàn chỉnh.
  • Hướng phát triển trong tương lai: Nâng cấp kiến trúc backend lên các framework có cấu trúc chặt chẽ hơn (như NestJS), tích hợp cổng thanh toán viện phí không dùng tiền mặt, mở rộng phân hệ quản lý kho thuốc và hoàn thiện quy trình kê đơn thuốc điện tử.

Giá trị tham khảo

Đồ án là tài liệu tham khảo phù hợp cho sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm và Hệ thống thông tin khi thực hiện đồ án chuyên ngành hoặc khóa luận tốt nghiệp:

  • Thiết kế cơ sở dữ liệu NoSQL: Cung cấp mẫu thiết kế Schema chuẩn cho bài toán quản lý đặt lịch và phân quyền người dùng trong MongoDB.
  • Quy trình phân tích hướng đối tượng: Cung cấp tài liệu mẫu về xây dựng sơ đồ BFD, Use Case đặc tả, và Sequence Diagram cho các luồng nghiệp vụ xác thực và đăng ký dịch vụ y tế.
  • Kiến trúc Fullstack: Minh họa quy trình tích hợp giữa ReactJS và RESTful API viết bằng Express.js, kết hợp cùng dịch vụ lưu trữ Cloudinary.

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

1. Hệ thống hỗ trợ những vai trò người dùng (Role) nào và có những chuyên khoa nào?
Hệ thống thiết lập 3 vai trò người dùng trong cơ sở dữ liệu gồm: Patient (Bệnh nhân), Doctor (Bác sĩ) và Admin (Quản trị viên). Về mặt chuyên môn, hệ thống hỗ trợ phân loại theo 9 chuyên khoa: Nhi khoa, Chỉnh hình, Tim mạch, Thần kinh, Ung thư, X quang, Vật lý trị liệu, Da liễu và Tai mũi họng.

2. Ràng buộc dữ liệu đối với thông tin cá nhân trong bảng User được quy định như thế nào?
Các trường firstName và lastName yêu cầu tối thiểu 2 ký tự; email phải đúng định dạng; phone bắt buộc đúng 10 chữ số; CCCD bắt buộc chính xác 12 chữ số; Gender chỉ nhận một trong hai giá trị "Male" hoặc "Female"; Password có độ dài tối thiểu 8 ký tự và được cấu hình ẩn khi thực hiện truy vấn dữ liệu.

3. Sự khác biệt về điều kiện đăng nhập giữa tính năng gửi tin nhắn liên hệ và đặt lịch hẹn khám là gì?
Tại phần biểu mẫu "Gửi tin nhắn cho chúng tôi" ở trang chủ, người dùng không cần đăng nhập tài khoản vẫn có thể gửi thông tin phản hồi về hệ thống. Ngược lại, tại trang "Cuộc hẹn", người dùng bắt buộc phải đăng ký tài khoản và đăng nhập thành công thì mới có thể điền biểu mẫu đặt lịch khám bệnh.

4. Trạng thái cuộc hẹn (status) trong bảng Appointment gồm những giá trị nào?
Trường status có giá trị khởi tạo mặc định là "Pending" (Chờ duyệt). Khi quản trị viên truy cập bảng điều khiển (Dashboard Admin) để xử lý cuộc hẹn, trạng thái sẽ được cập nhật thành một trong ba giá trị: "Pending", "Accepted" (Chấp nhận) hoặc "Rejected" (Từ chối).

5. Dữ liệu hình ảnh đại diện của bác sĩ được hệ thống xử lý và lưu trữ bằng giải pháp nào?
Hình ảnh đại diện của bác sĩ được tải lên và lưu trữ trên nền tảng đám mây Cloudinary. Trong cơ sở dữ liệu MongoDB, hệ thống lưu trữ hai thông tin định danh tương ứng là docAvatar.public_id (mã định danh công khai trên Cloudinary) và docAvatar.url (đường dẫn liên kết trực tiếp tới hình ảnh).


Kết luận

Đồ án chuyên ngành của sinh viên Lê Minh Đương đã hoàn thành việc nghiên cứu, phân tích và xây dựng thành công website quản lý bệnh viện đáp ứng các yêu cầu nghiệp vụ cơ bản trong đăng ký và quản lý khám chữa bệnh. Hệ thống giải quyết được bài toán tự động hóa lịch hẹn, phân quyền quản trị nhân sự y tế và tối ưu hóa luồng tương tác giữa bệnh nhân và cơ sở khám chữa bệnh dựa trên nền tảng công nghệ web hiện đại. Báo cáo đồ án cung cấp tài liệu chi tiết từ khảo sát hiện trạng, mô hình hóa luồng chức năng, đặc tả cơ sở dữ liệu đến triển khai thực nghiệm giao diện, đóng vai trò là một tài liệu tham khảo có giá trị kỹ thuật thực tiễn cho các đề tài phát triển ứng dụng quản lý y tế tương tự.