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

Đại dịch Covid-19 đã thúc đẩy sự chuyển đổi mạnh mẽ của công nghệ và dữ liệu kỹ thuật số trong lĩnh vực chăm sóc sức khỏe. Việc vừa phải bảo đảm an toàn phòng chống dịch, vừa phải duy trì công tác khám chữa bệnh cho người dân đã khẳng định mô hình đặt lịch khám bệnh trực tuyến không chỉ là giải pháp tạm thời ứng phó với dịch bệnh mà còn là một phương thức vận hành lâu dài. Trong thực tế, nhu cầu thăm hỏi bệnh lý, nhắc nhở tái khám định kỳ theo lịch hẹn của bác sĩ và tư vấn sức khỏe từ xa ngày càng gia tăng. Sự phát triển của hạ tầng Internet và thiết bị thông minh cho phép người dân tiếp cận các chuyên gia y tế thuận tiện hơn, đặc biệt đối với những bệnh nhân gặp khó khăn trong việc di chuyển, người có lịch trình bận rộn hoặc bị hạn chế phương tiện đi lại.

Đề tài "Website đặt lịch khám bệnh online" được thực hiện bởi sinh viên Nguyễn Hoàng Vũ (MSSV: 18521671), Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, dưới sự hướng dẫn của ThS. Thái Thụy Hàn Uyển, nhằm giải quyết bài toán tiếp cận dịch vụ y tế và tối ưu hóa quy trình quản lý lịch khám.

Văn bản xác định các mục tiêu nghiên cứu và phát triển cụ thể như sau:

  1. Xây dựng hệ thống hoàn chỉnh bao gồm các chức năng cơ bản của một trang web đặt lịch khám bệnh trực tuyến: đặt lịch hẹn khám, tra cứu thông tin bác sĩ, chuyên khoa, cơ sở y tế; quản lý thông tin bác sĩ, quản lý kế hoạch khám bệnh và quản lý hồ sơ bệnh nhân.
  2. Xây dựng hệ thống tìm kiếm, tra cứu thông tin nhanh chóng, trực quan và tiện dụng cho người dùng.
  3. Xây dựng phân hệ tin tức, cung cấp thông tin chi tiết về cơ sở y tế, đội ngũ bác sĩ và các chuyên khoa.
  4. Xây dựng hệ thống dựa trên nền tảng công nghệ hiện đại bao gồm NodeJS, ExpressJS, ReactJS và hệ quản trị cơ sở dữ liệu MySQL.

Phạm vi và đối tượng nghiên cứu của đồ án:

  • Đối tượng sử dụng: Các cá nhân có nhu cầu tìm hiểu thông tin và khám chữa bệnh trực tuyến hoặc đặt hẹn trước tại Việt Nam.
  • Phạm vi không gian: Ứng dụng triển khai và sử dụng tại thị trường Việt Nam.
  • Phạm vi chức năng: Quản lý thông tin tài khoản người dùng; quản lý dữ liệu bác sĩ, chuyên khoa, phòng khám; quản lý lịch làm việc và kế hoạch khám bệnh của bác sĩ; tìm kiếm và sắp xếp bác sĩ theo chuyên khoa, cơ sở y tế; xử lý đặt lịch hẹn và xác nhận thông tin lịch khám qua hệ thống email.
  • Thời gian thực hiện: Từ ngày 21/02/2022 đến ngày 10/06/2022.

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

Đồ án ứng dụng mô hình kiến trúc ứng dụng web hiện đại chia tách rõ ràng giữa giao diện người dùng (Frontend), máy chủ dịch vụ (Backend) và tầng lưu trữ dữ liệu (Database):

  • Mô hình Single Page Application (SPA) kết hợp với kiến trúc điều hướng phía máy khách.
  • Mô hình kiến trúc phần mềm MVC (Model - View - Controller) được áp dụng tại phía máy chủ thông qua ExpressJS.
  • Giao thức trao đổi dữ liệu chuẩn RESTful API, cho phép giao tiếp phi trạng thái giữa client và server thông qua các yêu cầu HTTP/HTTPS.

Phương pháp nghiên cứu và thực hiện đồ án bao gồm:

  • Phương pháp khảo sát và phân tích hiện trạng: Khảo sát thực tế các nền tảng đặt lịch khám bệnh đang vận hành tại Việt Nam (tiêu biểu như website umc.vn của Bệnh viện Đại học Y Dược TP.HCM và nền tảng aihealth.vn) để rút ra ưu điểm, nhược điểm và xác định bộ chức năng cốt lõi cần hiện thực.
  • Phương pháp thu thập dữ liệu: Sử dụng các HTTP request để trích xuất dữ liệu mẫu từ các nguồn thông tin y tế cụ thể, chuẩn hóa và lưu trữ xuống hệ quản trị cơ sở dữ liệu.
  • Phương pháp thiết kế và phát triển phần mềm: Thiết kế cơ sở dữ liệu quan hệ, xây dựng các dịch vụ RESTful API, thiết kế giao diện người dùng responsive và tích hợp toàn diện hệ thống.

Quy trình triển khai đồ án được chia thành 3 giai đoạn (Phase) với 5 phân kỳ (Sprint):

  • Giai đoạn 1 (4 tuần): Tìm hiểu công nghệ nền tảng (NodeJS, ExpressJS, ReactJS, MySQL) và xây dựng ứng dụng cơ bản để hiểu luồng vận hành tích hợp giữa server và client.
  • Giai đoạn 2 (6 tuần): Xây dựng RESTful API, kết nối cơ sở dữ liệu MySQL, tạo các API lấy thông tin, thêm/sửa/xóa danh mục và hoàn thiện giao diện người dùng bằng ReactJS.
  • Giai đoạn 3 (2 tuần): Kiểm thử chức năng, đánh giá hệ thống bằng công cụ Postman và tinh chỉnh giao diện.

Thiết kế và triển khai

Hệ thống được xây dựng dựa trên ngăn xếp công nghệ JavaScript toàn diện (Full-stack JavaScript) kết hợp với hệ quản trị cơ sở dữ liệu quan hệ MySQL:

Thành phần Công nghệ / Công cụ Lý do lựa chọn và vai trò kỹ thuật
Backend Runtime NodeJS Nền tảng xây dựng trên V8 JavaScript Engine, cơ chế xử lý bất đồng bộ non-blocking I/O và mô hình hướng sự kiện (event-driven) đơn luồng, hỗ trợ xử lý nhiều kết nối đồng thời với tốc độ cao.
Backend Framework ExpressJS Framework nhỏ gọn, linh hoạt cho NodeJS, hỗ trợ phát triển theo mô hình MVC, cung cấp cơ chế Middleware giúp tổ chức và tái sử dụng mã nguồn, dễ dàng định nghĩa route và xây dựng RESTful API.
Cơ sở dữ liệu MySQL Hệ quản trị cơ sở dữ liệu quan hệ nguồn mở, tốc độ cao, hoạt động ổn định trên nhiều hệ điều hành, cung cấp hệ thống hàm tiện ích phong phú và có độ an toàn dữ liệu cao.
Frontend Library ReactJS Thư viện giao diện người dùng dựa trên cơ chế Virtual DOM giúp tối ưu tốc độ cập nhật cây DOM, hỗ trợ cú pháp JSX trực quan hóa mã HTML trong JavaScript, dễ dàng phân chia và tái sử dụng component, thân thiện với SEO.
Công cụ kiểm thử API Postman Kiểm tra và gửi yêu cầu đến các endpoint RESTful API một cách độc lập trước khi tích hợp vào giao diện.
Môi trường lập trình Visual Studio Code Môi trường soạn thảo mã nguồn, quản lý tệp và thực thi các lệnh phát triển phần mềm.

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

Cơ sở dữ liệu của hệ thống được tổ chức thành 7 bảng quan hệ chính, lưu trữ toàn bộ thực thể phục vụ việc vận hành quy trình đặt lịch:

  1. Bảng users: Lưu trữ thông tin tài khoản và người dùng trong hệ thống. Bao gồm các trường: id (Khóa chính, int), email (varchar), password (varchar), firstName (varchar), lastName (varchar), address (varchar), gender (varchar - khóa ngoại liên kết tới bảng allcodes), roleId (varchar - khóa ngoại liên kết tới bảng allcodes), phoneNumber (varchar), positionId (varchar - khóa ngoại liên kết tới bảng allcodes), image (longblob).
  2. Bảng specialites: Lưu trữ thông tin chuyên khoa khám bệnh. Bao gồm: id (Khóa chính, int), name (varchar), image (longblob), descriptionHTML (longtext - mô tả định dạng HTML), descriptionMarkdown (longtext - mô tả định dạng Markdown).
  3. Bảng clinics: Lưu trữ thông tin phòng khám và cơ sở y tế. Bao gồm: id (Khóa chính, int), name (varchar), address (varchar), descriptionHTML (longtext), descriptionMarkdown (longtext), image (longblob).
  4. Bảng doctor_infor: Lưu trữ thông tin mở rộng của bác sĩ. Bao gồm: id (Khóa chính, int), doctorId (Khóa ngoại trỏ đến bảng users), specialtyId (Khóa ngoại trỏ đến bảng specialites), clinicId (Khóa ngoại trỏ đến bảng clinics), priceId (varchar), provinceId (varchar), paymentId (varchar), note (varchar).
  5. Bảng bookings: Quản lý các giao dịch đặt lịch khám bệnh. Bao gồm: id (Khóa chính, int), statusId (varchar), doctorId (Khóa ngoại trỏ đến bảng users), patientId (int), date (varchar), token (varchar - mã xác nhận gửi qua email).
  6. Bảng markdown: Lưu trữ nội dung chi tiết dạng văn bản phong phú cho bác sĩ, chuyên khoa hoặc phòng khám. Bao gồm: id (Khóa chính, int), contentHTML (longtext), contentMarkdown (longtext), description (longtext), doctorId (Khóa ngoại), specialtyId (Khóa ngoại), clinicId (Khóa ngoại).
  7. Bảng allcodes: Bảng từ điển mã dùng chung cho toàn bộ hệ thống (giới tính, vai trò, trạng thái, chức vụ, bảng giá). Bao gồm: id (Khóa chính, int), keymap (varchar), type (varchar), valueEn (varchar - giá trị tiếng Anh), valueVi (varchar - giá trị tiếng Việt).

Tác nhân và mô hình trường hợp sử dụng (Use Case)

Hệ thống xác định 3 nhóm tác nhân (Actors) chính tham gia vào các tiến trình nghiệp vụ:

  • Người dùng (Bệnh nhân): Truy cập hệ thống (có thể ẩn danh không cần tạo tài khoản), tra cứu thông tin bác sĩ, chuyên khoa, phòng khám; tìm kiếm theo từ khóa; thực hiện đặt lịch khám bệnh và xác nhận lịch hẹn qua đường dẫn token gửi về email.
  • Bác sĩ: Đăng nhập vào hệ thống quản lý, thiết lập kế hoạch và thời gian khám bệnh theo ngày, theo dõi danh sách bệnh nhân đã đặt hẹn và phản hồi kết quả khám.
  • Quản trị viên (Admin): Nắm toàn quyền quản trị hệ thống, quản lý tài khoản người dùng, thêm mới/chỉnh sửa/xóa thông tin bác sĩ, cơ sở y tế và chuyên khoa khám bệnh.

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

Chương 1 và 2: Phát biểu bài toán và khảo sát các hệ thống liên quan

Chương này tập trung trình bày tổng quan về thực trạng nhu cầu khám chữa bệnh từ xa, sự cần thiết của hệ thống đặt lịch khám trực tuyến và tiến hành khảo sát các giải pháp hiện hữu trên thị trường Việt Nam:

Tiêu chí so sánh Website umc.vn (BV ĐHYD TP.HCM) Website / Nền tảng aihealth.vn Hệ thống của đồ án
Ưu điểm Thông tin phong phú, hỗ trợ đa nền tảng, nhiều phương thức đăng nhập, có hỗ trợ kỹ thuật và tư vấn trực tiếp. Giao diện đẹp mắt, hỗ trợ song ngữ Anh - Việt, cho phép đặt tư vấn nhanh bằng họ tên và số điện thoại. Giao diện tinh gọn, người dùng có thể đặt lịch mà không bắt buộc phải đăng ký/đăng nhập tài khoản phức tạp; xác nhận an toàn qua email.
Khuyết điểm Bắt buộc phải đăng nhập mới thực hiện được thao tác; giao diện chứa nhiều nội dung gây rối mắt. Giao diện tải nhiều nội dung, hệ thống chưa tối ưu trên nền tảng web (tập trung chủ yếu trên ứng dụng di động). Dữ liệu bác sĩ và cơ sở y tế còn ở mức thử nghiệm; chưa triển khai đầy đủ các tính năng thanh toán trực tuyến nâng cao.

Chương 3: Yêu cầu hệ thống

Chương 3 xác định cụ thể các ràng buộc kỹ thuật của đồ án:

  • Yêu cầu chức năng: Đặt lịch hẹn khám bệnh; lưu trữ thông tin có cấu trúc về bác sĩ, cơ sở y tế, chuyên khoa và thông tin cá nhân của người khám (họ tên, email, số điện thoại, ngày sinh, lý do khám); hỗ trợ công cụ tìm kiếm và bộ lọc sắp xếp bác sĩ theo chuyên khoa/cơ sở y tế; trực quan hóa dữ liệu hiển thị.
  • Yêu cầu phi chức năng: Đảm bảo giao diện thân thiện, không rối mắt; tính responsive tương thích trên các kích thước màn hình máy tính bảng và điện thoại di động; tính tiến hóa và khả năng mở rộng hệ thống dựa trên cấu trúc mô-đun của NodeJS và ReactJS; hoạt động tương thích trên các trình duyệt web phổ biến.

Chương 4: Đặc tả các chức năng

Chương này mô tả chi tiết 7 chức năng nghiệp vụ trọng tâm:

  1. Quản lý kế hoạch khám bệnh: Hỗ trợ bác sĩ lập và phân bổ khung giờ làm việc theo ngày.
  2. Tìm kiếm bác sĩ, cơ sở y tế: Hỗ trợ người dùng định vị nhanh thông tin theo tên và chuyên môn.
  3. Đặt lịch hẹn khám bệnh: Thu thập thông tin bệnh nhân, khung giờ chọn và gửi yêu cầu xác nhận.
  4. Quản lý bệnh nhân khám bệnh: Lưu vết trạng thái lịch hẹn, danh sách khám và kết quả phản hồi.
  5. Quản lý thông tin bác sĩ: Cho phép quản trị viên cấu hình chuyên khoa, giá khám, chức vụ và phòng khám liên kết.
  6. Quản lý chuyên khoa: Quản lý danh mục chuyên khoa kèm bài viết giới thiệu định dạng Markdown/HTML.
  7. Quản lý cơ sở y tế: Quản lý danh sách phòng khám, địa chỉ và hình ảnh minh họa.

Chương 5: Thiết kế dữ liệu

Chương 5 chi tiết hóa toàn bộ lược đồ cơ sở dữ liệu quan hệ, định nghĩa kiểu dữ liệu và ràng buộc khóa cho 7 bảng (users, specialites, clinics, doctor_infor, bookings, markdown, allcodes). Điểm đặc thù trong thiết kế là việc phân tách cấu trúc lưu trữ nội dung mô tả dạng Markdown và HTML (descriptionHTML, descriptionMarkdown) nhằm tối ưu khả năng hiển thị trên giao diện web.

Chương 6: Hiện thực hệ thống – Sơ đồ Use Case và Thiết kế giao diện

Chương 6 trình bày danh mục 12 use case tổng quát của hệ thống (Đăng nhập, Đăng xuất, Trang chủ, Tra cứu chi tiết chuyên khoa, Tra cứu chi tiết cơ sở y tế, Tra cứu chi tiết bác sĩ, Quản lý tài khoản, Quản lý bác sĩ, Quản lý kế hoạch khám bệnh, Quản lý cơ sở y tế, Quản lý chuyên khoa, Quản lý bệnh nhân khám bệnh). Tác giả cung cấp các bảng đặc tả chi tiết về dòng sự kiện chính, dòng sự kiện ngoại lệ, điều kiện tiên quyết và trạng thái sau khi thực hiện cho từng use case quan trọng.


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

Đồ án đã đạt được các kết quả cụ thể sau quá trình nghiên cứu và thực nghiệm:

  • Xây dựng hoàn chỉnh ứng dụng web đặt lịch khám bệnh online với đầy đủ hai phân hệ Frontend (ReactJS) và Backend (NodeJS, ExpressJS), kết nối dữ liệu MySQL.
  • Hiện thực thành công quy trình đặt lịch khám trực tuyến đơn giản hóa: cho phép người dùng vãng lai/ẩn danh dễ dàng tìm kiếm thông tin chuyên khoa, cơ sở y tế, bác sĩ và hoàn tất đặt lịch mà không gặp rào cản về thủ tục đăng ký tài khoản ban đầu.
  • Tích hợp cơ chế xác thực và phản hồi lịch hẹn qua thư điện tử (email token), đảm bảo tính xác thực của thông tin liên lạc giữa bệnh nhân và cơ sở y tế.
  • Xây dựng phân hệ quản trị tập trung, hỗ trợ quản lý danh mục đa cấp thông qua bảng mã allcodes (quản lý đa ngôn ngữ Việt - Anh cho các danh mục chức vụ, vai trò, trạng thái).
  • Thiết kế hệ thống lưu trữ bài viết giới thiệu y khoa kết hợp song song giữa định dạng HTML và Markdown, hỗ trợ quản trị viên biên tập nội dung phong phú.

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

Căn cứ vào phạm vi và nội dung trình bày trong báo cáo, đồ án còn tồn tại một số hạn chế:

  • Lượng dữ liệu thực tế về danh sách bác sĩ, cơ sở y tế và phòng khám còn giới hạn trong phạm vi thử nghiệm.
  • Hệ thống chưa có nhiều người dùng thực tế tham gia vận hành để đánh giá tải trong môi trường sản xuất lớn.
  • Một số tính năng mở rộng dự kiến (như cổng thanh toán viện phí trực tuyến tích hợp và phòng khám bệnh ảo tương tác thời gian thực) chưa được hiện thực hóa trọn vẹn trong phiên bản báo cáo.

Hướng phát triển tiếp theo của đề tài:

  • Mở rộng liên kết dữ liệu với nhiều bệnh viện, phòng khám và cơ sở y tế trên toàn quốc.
  • Bổ sung và hoàn thiện tính năng thanh toán trực tuyến và tích hợp các tiện ích tương tác trực tiếp nâng cao giữa bác sĩ và người bệnh.

Giá trị tham khảo

Đồ án là tài liệu tham khảo hữu ích cho:

  • Sinh viên chuyên ngành Kỹ thuật Phần mềm, Công nghệ Thông tin, Hệ thống Thông tin đang thực hiện đồ án chuyên ngành hoặc khóa luận tốt nghiệp về phát triển ứng dụng web full-stack.
  • Lập trình viên muốn tham khảo mô hình tích hợp giữa ReactJS và NodeJS/ExpressJS theo kiến trúc Single Page Application và RESTful API.
  • Các nhà phát triển hệ thống cần nghiên cứu giải pháp thiết kế cơ sở dữ liệu quan hệ cho bài toán đặt lịch dịch vụ y tế, đặc biệt là kỹ thuật thiết kế bảng từ điển dùng chung (allcodes) và lưu trữ bài viết dạng song song Markdown/HTML.

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

1. Đồ án sử dụng những công nghệ cốt lõi nào để phát triển hệ thống?
Hệ thống sử dụng NodeJS và ExpressJS cho tầng Backend, ReactJS cho tầng Frontend, hệ quản trị cơ sở dữ liệu quan hệ MySQL cho tầng lưu trữ, cùng công cụ Postman để kiểm thử RESTful API và Visual Studio Code làm môi trường phát triển mã nguồn.

2. Điểm khác biệt trong trải nghiệm người dùng của hệ thống so với các website như umc.vn là gì?
Khác với umc.vn yêu cầu người dùng phải đăng nhập tài khoản trước khi thực hiện các thao tác, hệ thống của đồ án cho phép người dùng tra cứu thông tin và đăng ký lịch khám bệnh trực tiếp mà không bắt buộc phải đăng nhập, giúp đơn giản hóa quy trình và giảm thiểu thao tác phức tạp cho người bệnh.

3. Bảng allcodes trong cơ sở dữ liệu của đồ án đóng vai trò gì?
Bảng allcodes hoạt động như một bảng từ điển danh mục dùng chung để chuẩn hóa các giá trị mã phân loại trong hệ thống (như giới tính, vai trò người dùng, chức vụ bác sĩ, trạng thái đặt lịch). Bảng lưu trữ cặp giá trị song ngữ tiếng Anh (valueEn) và tiếng Việt (valueVi) tương ứng với từng khóa mã (keymap) và loại mã (type).

4. Quy trình xác nhận lịch hẹn của người dùng được xử lý như thế nào?
Sau khi người dùng chọn bác sĩ, khung giờ và điền các thông tin cá nhân cần thiết, hệ thống sẽ lưu thông tin đặt lịch vào bảng bookings kèm một mã token bảo mật, đồng thời gửi email thông báo kèm đường dẫn xác nhận về hộp thư của người dùng để hoàn tất quy trình đặt lịch.


Kết luận

Báo cáo đồ án "Website đặt lịch khám bệnh online" của sinh viên Nguyễn Hoàng Vũ đã trình bày toàn diện quá trình khảo sát, phân tích yêu cầu, thiết kế dữ liệu và hiện thực một hệ thống hỗ trợ đặt lịch khám y tế trực tuyến. Bằng việc ứng dụng hiệu quả ngăn xếp công nghệ NodeJS, ExpressJS, ReactJS và MySQL, đề tài đã giải quyết được các yêu cầu cơ bản trong việc kết nối bệnh nhân với bác sĩ và cơ sở y tế, giảm thiểu thời gian chờ đợi tại bệnh viện. Mặc dù dữ liệu thực nghiệm còn ở quy mô vừa phải, đồ án đã cung cấp một thiết kế kiến trúc phần mềm và cơ sở dữ liệu rõ ràng, tạo nền tảng thuận lợi cho việc mở rộng các tiện ích y tế số trong tương lai.