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

Trong công tác quản lý tại các cơ sở khám chữa bệnh, việc tối ưu hóa quy trình hành chính và quản trị thông tin y tế đóng vai trò then chốt nhằm nâng cao chất lượng phục vụ và giảm thiểu sai sót trong vận hành. Nhận thức được nhu cầu số hóa dữ liệu y tế, nhóm tác giả tại Trường Đại học Sài Gòn đã thực hiện đồ án "Hospital Database" nhằm xây dựng một Hệ thống Quản lý Bệnh viện (Hospital Management System - HMS). Hệ thống được định hướng để giải quyết bài toán lưu trữ, quản lý và theo dõi toàn diện thông tin nhân viên y tế, hồ sơ bệnh nhân, phân chia chuyên khoa, danh mục dược phẩm cùng các dịch vụ khám chữa bệnh nội trú và ngoại trú.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định cụ thể như sau:

  1. Phân tích mô hình nghiệp vụ quản lý bệnh viện tổng thể, bao gồm quy trình tiếp nhận bệnh nhân, phân luồng khám ngoại trú, quản lý nhập viện điều trị nội trú, quản lý đơn thuốc và quản trị nhân sự y tế (bác sĩ, điều dưỡng).
  2. Thiết kế cơ sở dữ liệu quan hệ hoàn chỉnh từ mức quan niệm (mô hình ER) đến mức quan hệ và lược đồ vật lý, đảm bảo các ràng buộc toàn vẹn dữ liệu chặt chẽ và chuẩn hóa dữ liệu.
  3. Cài đặt hệ thống phần mềm ứng dụng nền tảng Web với công nghệ Java Spring Boot kết hợp hệ quản trị cơ sở dữ liệu MySQL 8, cung cấp giao diện tương tác cho nhân viên y tế và bộ phận quản lý.

Về đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Quy trình quản lý thông tin hành chính và chuyên môn y tế trong một bệnh viện giả định (Bệnh viện X).
  • Phạm vi không gian và thời gian: Đồ án được nghiên cứu và bảo vệ tại Trường Đại học Sài Gòn vào ngày 27 tháng 11 năm 2024, dưới sự hướng dẫn của TS. Phan Trọng Nhân.

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

Đồ án xây dựng dựa trên nền tảng lý thuyết vững chắc về mô hình hóa dữ liệu, kiến trúc phần mềm và các công nghệ phát triển ứng dụng doanh nghiệp:

  • Mô hình liên kết thực thể (Entity-Relationship Model - E-R): Áp dụng lý thuyết do Peter Chen giới thiệu năm 1976 để biểu diễn cấu trúc dữ liệu logic, xác định các tập thực thể, thuộc tính (thuộc tính đơn trị, thuộc tính đa trị, thuộc tính định danh/khóa), bậc và lực lượng của các mối quan hệ nghiệp vụ.
  • Mô hình dữ liệu quan hệ (Relational Data Model): Dựa trên nền tảng lý thuyết của E. F. Codd (1970) để chuyển đổi từ mô hình E-R sang cấu trúc các bảng hai chiều, chuẩn hóa các cột, định nghĩa khóa chính (Primary Key), khóa ngoại (Foreign Key) và thiết lập các chỉ mục (Index) nhằm tối ưu hiệu năng truy vấn.
  • Hệ quản trị cơ sở dữ liệu quan hệ MySQL 8: Khai thác các tính năng lập chỉ mục (Primary Index, Unique Index, Composite Index), cơ chế khóa ngoại và các ràng buộc kiểm tra (CHECK constraints) trên bộ lưu trữ InnoDB với bộ ký tự utf8mb4.
  • Nền tảng Java và Hệ sinh thái Spring:
    • JDK Java 17 LTS: Sử dụng phiên bản hỗ trợ dài hạn với các tính năng hiện đại như Sealed Classes (JEP 409), Pattern Matching cho switch (JEP 406), Strong Encapsulation (JEP 403), Context-Specific Deserialization Filters (JEP 415), Foreign Function & Memory API (JEP 412) và Vector API (JEP 414).
    • Spring Boot: Đóng vai trò backend framework với cơ chế cấu hình tự động (Auto-configuration), quản lý Bean qua Dependency Injection, máy chủ nhúng và tích hợp Spring Data JPA.
    • Spring Security: Cung cấp giải pháp xác thực (Authentication) và phân quyền (Authorization) theo vai trò (ROLES), bảo vệ hệ thống trước các nguy cơ bảo mật như CSRF và XSS.
    • Thymeleaf: Template engine xử lý giao diện động tích hợp trực tiếp trong mô hình Spring MVC.
  • Phương pháp nghiên cứu: Đồ án áp dụng phương pháp phân tích - thiết kế hệ thống hướng dữ liệu kết hợp thực nghiệm phần mềm. Nhóm tác giả khảo sát các quy tắc nghiệp vụ bệnh viện thực tế, mô hình hóa cấu trúc quan hệ, cài đặt lược đồ cơ sở dữ liệu và hiện thực hóa các chức năng trên mã nguồn thực tế.

Thiết kế và triển khai hệ thống

Kiến trúc công nghệ

Hệ thống được phát triển theo mô hình ứng dụng web đa tầng, phân tách rõ ràng giữa tầng dữ liệu, tầng nghiệp vụ logic (Business Logic / API) và tầng giao diện:

Thành phần Công nghệ / Thư viện sử dụng Vai trò chức năng
Ngôn ngữ & Nền tảng Java 17 LTS Nền tảng thực thi logic hệ thống
Backend Framework Spring Boot, Spring MVC, Spring Data JPA Xử lý yêu cầu, điều hướng và quản lý logic nghiệp vụ
Bảo mật Spring Security Quản lý xác thực người dùng và phân quyền truy cập
Cơ sở dữ liệu MySQL 8 (Storage Engine: InnoDB) Lưu trữ dữ liệu quan hệ, quản lý ràng buộc và chỉ mục
Giao diện người dùng HTML5, CSS3 (Flexbox/Grid), JavaScript, AJAX, Thymeleaf Hiển thị dữ liệu động và hỗ trợ tương tác không tải lại trang

Thiết kế cơ sở dữ liệu vật lý

Cơ sở dữ liệu của hệ thống gồm 23 bảng dữ liệu chính, được tổ chức thành các nhóm nghiệp vụ rõ ràng:

  1. Nhóm bảng danh mục địa lý:

    • cities: Quản lý danh mục thành phố (city_id, city_code, city_name, index_id, is_active, is_delete).
    • districts: Quản lý danh mục quận/huyện (district_id, district_code, district_name, city_id, order_id, dan_so, is_active, is_delete).
    • wards: Quản lý danh mục phường/xã (ward_id, ward_code, ward_name, district_id, is_active, is_delete, order_id).
  2. Nhóm bảng nhân sự, tổ chức và tài khoản:

    • users: Lưu trữ tài khoản đăng nhập (id, username, password, role_id, is_active, is_deleted).
    • roles và user_roles: Định nghĩa vai trò và liên kết phân quyền người dùng.
    • employee: Lưu thông tin chung của nhân viên y tế (id, code, first_name, last_name, dob, gender, phone_number, department_id, street, city_id, district_id, ward_id, degree_year, start_date, specialty, user_id).
    • doctor: Bảng chuyên biệt cho bác sĩ, liên kết khóa ngoại 1-1 tới employee.id.
    • nurse: Bảng chuyên biệt cho y tá/điều dưỡng, liên kết khóa ngoại 1-1 tới employee.id.
    • department: Thông tin khoa phòng (id, code, doctor_id tham chiếu trưởng khoa, title).
    • room: Thông tin phòng bệnh (room_no, capacity, room_name, depart_id).
  3. Nhóm bảng bệnh nhân và quản lý khám chữa bệnh:

    • patient: Lưu trữ hồ sơ định danh bệnh nhân chung (id, first_name, last_name, dob, gender, phone_number, street, city_id, district_id, ward_id).
    • outpatient: Quản lý bệnh nhân ngoại trú với mã định danh bắt đầu bằng tiền tố OP (outpatient_id, code).
    • inpatient: Quản lý bệnh nhân nội trú với mã định danh bắt đầu bằng tiền tố IP (inpatient_id, code).
    • examination: Quản lý các lượt khám ngoại trú (id, doctor_id, outpatient_id, examination_date, next_examination_date, fee, diagnosis, medications).
    • admission: Quản lý hồ sơ nhập viện nội trú (id, inpatient_id, doctor_id, nurse_id, date_admission, date_of_discharge, sickroom, diagnosis, fee).
    • treatment: Quản lý chi tiết các đợt điều trị của bệnh nhân nội trú (id, admission_id, start_date, end_date, medications, description, status_id).
    • treatment_status: Danh mục trạng thái điều trị (id, code, name).
  4. Nhóm bảng quản lý dược phẩm và nhà cung cấp:

    • provider: Thông tin nhà cung cấp dược phẩm (id, name, phone_number, street, city_id, district_id, ward_id).
    • medication: Danh mục thuốc (id, code, name, effect, price, expiration_date).
    • medication_import: Ghi nhận các đợt nhập kho thuốc (id, medication_id, provider_id, import_date, price, quantity).
    • examination_medication: Kê đơn thuốc trong các đợt khám ngoại trú (id, examination_id, medication_id, price, quantity).
    • treatment_medication: Cấp phát thuốc trong quá trình điều trị nội trú (id, treatment_id, medication_id, price, quantity).

Các quy tắc và ràng buộc toàn vẹn dữ liệu

Hệ thống thiết lập các quy tắc nghiệp vụ và ràng buộc cơ sở dữ liệu nghiêm ngặt:

  • Định dạng mã bệnh nhân: Bệnh nhân ngoại trú có mã định danh bắt đầu bằng OP kết hợp 9 chữ số (ví dụ: OP000000001); bệnh nhân nội trú có mã bắt đầu bằng IP kết hợp 9 chữ số (ví dụ: IP000000001).
  • Ràng buộc kiểm tra logic thời gian:
    • Bảng treatment: Cài đặt ràng buộc kiểm tra chk_treatment_dates CHECK (start_date <= end_date) đảm bảo ngày bắt đầu điều trị luôn diễn ra trước hoặc cùng ngày kết thúc.
    • Bảng examination: Cài đặt ràng buộc chk_examination_dates CHECK (examination_date <= next_examination_date) đảm bảo ngày tái khám không nhỏ hơn ngày khám hiện tại.
  • Ràng buộc quản lý trưởng khoa: Trưởng khoa phải là một bác sĩ thuộc khoa, có chuyên môn tương ứng và có thâm niên trên 5 năm kinh nghiệm tính từ năm cấp bằng chuyên môn (degree_year).
  • Quy tắc xuất viện và hạn dùng thuốc: Tự động ghi nhận ngày xuất viện (date_of_discharge) khi lần điều trị cuối cùng được bác sĩ đánh dấu trạng thái "hồi phục"; tự động đánh dấu thuốc hết hạn trong cơ sở dữ liệu dựa trên thuộc tính expiration_date.

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

CHƯƠNG 1 : GIỚI THIỆU VỀ ỨNG DỤNG

Chương này trình bày tổng quan về hệ thống Hospital Management System (HMS), xác định vai trò của ứng dụng trong việc hỗ trợ các hoạt động chuyên môn y tế và quản lý hành chính bệnh viện. Nội dung nêu rõ các phân hệ chính bao gồm: quản lý nhân viên y tế (bác sĩ, y tá, lịch sử làm việc, phân công trách nhiệm), quản lý bệnh nhân theo mã định danh duy nhất (hồ sơ y tế, phân loại nội trú/ngoại trú, tiến trình điều trị), quản lý kho dược phẩm (theo dõi nhà cung cấp, hạn sử dụng thuốc, tự động cảnh báo thuốc hết hạn) và cung cấp hệ thống báo cáo phục vụ việc ra quyết định của ban quản lý.

CHƯƠNG 2 : PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

Chương 2 đi sâu vào đặc tả mô hình nghiệp vụ chi tiết của Bệnh viện X, làm rõ luồng thông tin giữa các thực thể trong bệnh viện. Tác giả trình bày mô hình liên kết thực thể (E-R) thể hiện mối quan hệ giữa 23 thực thể, chuyển đổi sang mô hình quan hệ logic và định nghĩa chi tiết toàn bộ các bảng dữ liệu vật lý bằng ngôn ngữ SQL DDL trên MySQL 8. Chương này cũng giải thích chi tiết các chỉ mục khóa chính, khóa ngoại, chỉ mục đơn trị (UNIQUE) và các ràng buộc kiểm tra toàn vẹn (CHECK constraints).

CHƯƠNG 3 : CƠ SỞ LÝ THUYẾT

Chương 3 tổng hợp các lý thuyết nền tảng phục vụ việc xây dựng đồ án. Nhóm tác giả phân tích khái niệm mô hình E-R của Peter Chen (1976), lý thuyết CSDL quan hệ của E. F. Codd (1970) cùng các cấu trúc khóa chính, khóa ngoại, chỉ mục. Đồng thời, chương này giới thiệu chi tiết các tính năng mới của JDK Java 17 LTS (Sealed Classes, Pattern Matching, Vector API...), kiến trúc và các cơ chế cốt lõi của Spring Boot (Auto-configuration, Starter Dependencies, nhúng máy chủ Tomcat/Jetty/Undertow, Dependency Injection), cơ chế bảo mật của Spring Security và cách thức hoạt động của template engine Thymeleaf.

CHƯƠNG 4 : CÀI ĐẶT CHƯƠNG TRÌNH

Chương 4 mô tả quá trình cài đặt thực tế và triển khai giao diện người dùng ứng dụng web. Nhóm tác giả trình bày việc ứng dụng các công nghệ Front-End bao gồm HTML, CSS (Flexbox, CSS Grid), JavaScript, Thymeleaf và kỹ thuật AJAX nhằm tối ưu hóa tương tác dữ liệu không đồng bộ. Chương này minh chứng kết quả cài đặt thông qua danh mục 31 hình ảnh giao diện chức năng hoàn chỉnh: màn hình đăng nhập, màn hình trang chủ, quản lý bệnh nhân, đăng ký khám bệnh, theo dõi quá trình điều trị, tạo phiếu nhập viện và quản trị danh mục bác sĩ, y tá.


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

Kết quả chính

  • Xây dựng thành công cơ sở dữ liệu quan hệ chuẩn hóa gồm 23 bảng vật lý đáp ứng đầy đủ các yêu cầu nghiệp vụ phức tạp của một cơ sở y tế.
  • Hiện thực hóa hệ thống ràng buộc toàn vẹn dữ liệu từ mức cơ sở dữ liệu MySQL 8 đến tầng xử lý logic Spring Boot, đảm bảo tính nhất quán của dữ liệu khám chữa bệnh, chỉ định thuốc và phân công phòng bệnh.
  • Hoàn thiện hệ thống giao diện người dùng web động với đầy đủ các phân hệ quản trị: tiếp nhận khám ngoại trú, quản lý hồ sơ bệnh án nội trú, phân công điều dưỡng và quản lý thông tin bác sĩ, y tá.

Giải pháp kỹ thuật được đề xuất

  • Chuẩn hóa quy tắc cấp phát mã định danh bệnh nhân phân tách rõ rệt giữa ngoại trú (OP + 9 chữ số) và nội trú (IP + 9 chữ số) nhằm tinh gọn quy trình tra cứu hồ sơ.
  • Ứng dụng kỹ thuật AJAX kết hợp Thymeleaf và Spring Controller giúp tối ưu hóa trải nghiệm người dùng, giảm thiểu độ trễ tải trang trong quá trình xử lý hồ sơ y tế.
  • Tự động hóa kiểm soát logic thời gian thông qua các ràng buộc CHECK trực tiếp tại tầng CSDL (chk_treatment_dates, chk_examination_dates), hạn chế triệt để lỗi nhập liệu sai lệch thời gian.

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

  • Hạn chế: Theo phạm vi trình bày trong báo cáo, hệ thống được thiết kế và kiểm thử trên môi trường thử nghiệm với dữ liệu mô phỏng của Bệnh viện X; các chức năng mở rộng cho nền tảng di động và cơ chế kết nối với trang thiết bị y tế chuyên dụng mới dừng lại ở mức định hướng phân tích kiến trúc.
  • Hướng nghiên cứu tiếp: Phát triển ứng dụng di động cho bệnh nhân và nhân viên y tế; hoàn thiện phân hệ báo cáo thống kê chuyên sâu và tích hợp cổng thanh toán viện phí cũng như hệ thống giám định bảo hiểm y tế.

Giá trị tham khảo

Đồ án là tài liệu tham khảo có giá trị cao đối với:

  • Sinh viên các ngành Công nghệ thông tin, Hệ thống thông tin, Kỹ thuật phần mềm đang thực hiện các đồ án cơ sở dữ liệu hoặc đồ án chuyên ngành lập trình web Java.
  • Người nghiên cứu có nhu cầu tham khảo mô hình dữ liệu quan hệ chuẩn trong lĩnh vực y tế và quản lý bệnh viện.
  • Các nhà phát triển muốn tìm hiểu phương pháp tích hợp hệ sinh thái Java 17, Spring Boot, Spring Security, Thymeleaf và hệ quản trị CSDL MySQL 8.

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

1. Quy tắc định dạng mã bệnh nhân nội trú và ngoại trú trong hệ thống được thiết kế như thế nào?

Hệ thống sử dụng hai ký tự đầu tiên để phân loại loại bệnh nhân: mã bệnh nhân ngoại trú bắt đầu bằng tiền tố OP kèm theo 9 chữ số (ví dụ: OP000000001), trong khi mã bệnh nhân nội trú bắt đầu bằng tiền tố IP kèm theo 9 chữ số (ví dụ: IP000000001).

2. Những ràng buộc kiểm tra toàn vẹn (CHECK constraints) nào được cài đặt trực tiếp trong CSDL?

Hệ thống cài đặt hai ràng buộc CHECK quan trọng trên MySQL 8:

  • Bảng treatment: Ràng buộc chk_treatment_dates CHECK (start_date <= end_date) để kiểm tra ngày bắt đầu điều trị không được sau ngày kết thúc.
  • Bảng examination: Ràng buộc chk_examination_dates CHECK (examination_date <= next_examination_date) để kiểm tra ngày khám bệnh không được sau ngày hẹn tái khám.

3. Điều kiện để một bác sĩ được phân công làm trưởng khoa trong hệ thống là gì?

Theo mô hình nghiệp vụ, trưởng khoa phải là một bác sĩ thuộc khoa đó, có chuyên môn liên quan và có thâm niên trên 5 năm kinh nghiệm tính từ năm được cấp bằng chuyên môn (degree_year).

4. Nhóm tác giả đã sử dụng những công nghệ nào để phát triển tầng giao diện người dùng (Front-End)?

Tầng giao diện người dùng được xây dựng bằng sự kết hợp giữa HTML, CSS (quản lý bố cục qua Flexbox và CSS Grid), JavaScript, kỹ thuật AJAX để gửi nhận dữ liệu không đồng bộ và template engine Thymeleaf để hiển thị dữ liệu từ Spring Model.

5. Cơ chế xử lý đối với thuốc hết hạn và bệnh nhân xuất viện được hệ thống quy định ra sao?

Đối với thuốc có ngày hết hạn (expiration_date) đã qua, hệ thống sẽ tự động đánh dấu trạng thái hết hạn trong cơ sở dữ liệu để ngăn chặn việc kê đơn. Đối với bệnh nhân nội trú, khi đợt điều trị cuối cùng được bác sĩ xác nhận kết quả là "hồi phục", hệ thống sẽ tự động cập nhật và ghi nhận ngày xuất viện (date_of_discharge).


Kết luận

Đồ án "Hospital Database" của nhóm sinh viên Trường Đại học Sài Gòn đã hoàn thành toàn diện mục tiêu phân tích, thiết kế và cài đặt một hệ thống quản lý bệnh viện hoàn chỉnh. Công trình thể hiện sự chặt chẽ trong thiết kế cơ sở dữ liệu với 23 bảng quan hệ và các ràng buộc toàn vẹn logic y tế rõ ràng. Việc ứng dụng hiệu quả nền tảng Java 17, Spring Boot, MySQL 8 và Thymeleaf đã tạo nên một giải pháp phần mềm ổn định, đáp ứng tốt các yêu cầu nghiệp vụ khám chữa bệnh nội - ngoại trú và quản trị hành chính y tế.