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

Đề tài "Xây dựng website đặt lịch khám bệnh cho các phòng khám tại Thành Phố Đà Nẵng" do sinh viên Dương Thị Thuỳ Dung (Lớp 18T2, Khoa Công nghệ số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) thực hiện dưới sự hướng dẫn của ThS. Trần Bửu Dung, hoàn thành vào tháng 6 năm 2022.

Bối cảnh thực tiễn của đề tài xuất phát từ nhu cầu khám chữa bệnh ngày càng tăng của người dân tại khu vực thành phố Đà Nẵng. Việc xếp hàng, chờ đợi làm thủ tục tại các cơ sở y tế gây mất thời gian và công sức cho cả người bệnh lẫn bác sĩ. Đặt lịch khám bệnh trực tuyến đem lại lợi ích rõ rệt, cho phép người bệnh đăng ký 24/7, mọi lúc mọi nơi thông qua các thiết bị có kết nối Internet. Đồng thời, giải pháp này giúp điều phối lượng bệnh nhân linh hoạt, hạn chế tình trạng tụ tập đông người và giảm nguy cơ lây nhiễm trong bối cảnh dịch bệnh COVID-19 diễn biến phức tạp tại thời điểm thực hiện đề tài.

Theo văn bản đồ án, mục tiêu nghiên cứu được xác định cụ thể nhằm:

  1. Người khám bệnh dễ dàng tra cứu thông tin và chọn phòng khám phù hợp.
  2. Tiết kiệm thời gian bằng cách hạn chế thủ tục và thời gian chờ đợi, đặc biệt hạn chế tiếp xúc trong thời điểm COVID hiện nay.
  3. Xây dựng lịch khám linh hoạt và hiệu quả cho các bác sĩ.
  4. Tạo nên các phòng khám uy tín nhờ sự kiểm duyệt của Sở Y Tế Thành Phố Đà Nẵng.

Nhiệm vụ cụ thể của đề tài bao gồm:

  • Cho phép bác sĩ phòng khám đăng ký địa điểm hành nghề lên trang web để công khai thông tin (ngày giờ mở cửa, địa chỉ, chi tiết phòng khám).
  • Cung cấp tính năng để người dùng xem, lựa chọn và lên lịch khám phù hợp với dữ liệu trên website.
  • Cho phép bệnh nhân tìm kiếm địa điểm khám bệnh theo tiêu chí xác định (giá cả, cự ly gần, chuyên khoa danh mục) và tiến hành đặt chỗ.
  • Triển khai sản phẩm hoàn chỉnh là một dịch vụ web (Website Service).

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

  • Đối tượng nghiên cứu: Người bệnh (bệnh nhân) và bác sĩ tại các phòng khám.
  • Phạm vi nghiên cứu: Áp dụng cho các bệnh nhân có nhu cầu đặt lịch khám và các phòng khám tư nhân trên địa bàn Thành phố Đà Nẵng. Thời gian thực hiện từ ngày giao nhiệm vụ (01/03/2022) đến ngày nộp báo cáo (20/06/2022).

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

Đồ án tiếp cận bài toán xây dựng phần mềm thông qua việc khảo sát các nền tảng công nghệ web và mô hình kiến trúc ứng dụng:

  • Khung lý thuyết và mô hình kiến trúc: Ứng dụng mô hình kiến trúc MVC (Model - View - Controller). Trong đó:
    • Lớp Model: Đảm nhiệm nghiệp vụ tương tác với cơ sở dữ liệu, bao gồm kết nối, truy vấn, thêm, xóa và cập nhật dữ liệu.
    • Lớp View: Chứa các thành phần giao diện người dùng (nút bấm, ô nhập liệu, menu, hình ảnh), phục vụ hiển thị dữ liệu và tiếp nhận tương tác.
    • Lớp Controller: Đóng vai trò tiếp nhận yêu cầu từ người dùng, thực thi logic điều phối, nhận dữ liệu do Model cung cấp để hiển thị ra View.
  • Nền tảng công nghệ và ngôn ngữ:
    • Ngôn ngữ lập trình: JavaScript được chọn làm ngôn ngữ chủ đạo cho cả phía máy khách và máy chủ; đồng thời tác giả tìm hiểu cơ sở về ngôn ngữ PHP, HTML, CSS.
    • Front-end: Sử dụng thư viện ReactJS (phiên bản mã nguồn mở do Facebook phát hành năm 2013) để xây dựng giao diện người dùng dạng đơn trang, chia cắt giao diện thành các thành phần độc lập; kết hợp Redux, Bootstrap, SCSS.
    • Back-end: Sử dụng môi trường thực thi NodeJS kết hợp Express Framework (ExpressJS) để xây dựng ứng dụng web và các API gọn nhẹ theo kiến trúc MVC.
    • Hệ quản trị cơ sở dữ liệu: MySQL của Tập đoàn Oracle, quản lý dữ liệu quan hệ dựa trên ngôn ngữ truy vấn có cấu trúc SQL.
    • Thư viện bổ trợ: Sequelize (ORM ánh xạ dữ liệu trong NodeJS), Axios (xử lý gọi yêu cầu HTTP API).
  • Phương pháp nghiên cứu:
    • Nghiên cứu lý thuyết: Thu thập, tổng hợp tài liệu qua sách vở, tài liệu trực tuyến để xác lập nền tảng kỹ thuật và cấu trúc phần mềm.
    • Triển khai thực nghiệm: Thiết kế, lập trình và xây dựng website dịch vụ thực tế để chạy thử nghiệm các chức năng.
  • Nguồn dữ liệu: Dữ liệu mô phỏng và thực tế về bác sĩ, phòng khám, chuyên khoa và tài khoản người dùng tại khu vực Đà Nẵng, được quản trị trực tiếp trên cơ sở dữ liệu MySQL thông qua phần mềm XAMPP và kiểm thử kết nối API bằng Postman.

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

Hệ thống được tổ chức phân tầng rõ rệt giữa giao diện người dùng và máy chủ xử lý dữ liệu:

Thành phần hệ thống Công nghệ / Nền tảng Chức năng chi tiết
Giao diện người dùng (Client) ReactJS, Redux, HTML, CSS, Bootstrap Hiển thị giao diện điều hướng, tiếp nhận thao tác đặt lịch, quản trị dữ liệu
Máy chủ ứng dụng (Server) NodeJS, ExpressJS Tiếp nhận các yêu cầu HTTP, xử lý logic kiểm tra, cung cấp API
Kết nối dữ liệu / ORM Axios, Sequelize Axios xử lý gửi nhận dữ liệu API; Sequelize thực thi truy vấn tới MySQL
Quản trị cơ sở dữ liệu MySQL Lưu trữ dữ liệu quan hệ người dùng, bác sĩ, phòng khám, lịch khám
Công cụ phát triển Visual Studio Code, Postman, GitHub, XAMPP Biên soạn mã nguồn, kiểm thử API, quản lý phiên bản, dựng máy chủ cục bộ

Hệ thống thiết lập phân quyền cho 4 nhóm tác nhân tham gia:

Tác nhân Quyền hạn và nhiệm vụ trên hệ thống
Quản trị viên (Admin / Sở Y tế) Kế thừa các quyền của bác sĩ và bệnh nhân; đăng nhập/đăng xuất; phê duyệt hồ sơ bác sĩ và bệnh nhân; quản lý tài khoản người dùng; kiểm duyệt tính pháp lý của phòng khám
Bác sĩ Đăng nhập/đăng xuất; đăng ký thông tin với Sở Y tế; cập nhật thông tin cá nhân; tạo và chỉnh sửa lịch khám; xem lịch làm việc; xem danh sách bệnh nhân đặt lịch; xác nhận bệnh nhân đã khám
Bệnh nhân Đăng nhập/đăng xuất; cập nhật thông tin cá nhân; tìm kiếm bác sĩ; lọc bác sĩ theo quận/chuyên khoa; đặt lịch khám bệnh; nhận email xác thực và nhấn link xác nhận; xem lịch sử khám; đánh giá phòng khám
Người dùng chưa đăng ký Xem danh sách bác sĩ, phòng khám, chuyên khoa; tìm kiếm thông tin; lọc danh sách theo khu vực; xem lịch làm việc công khai; thực hiện đăng ký tài khoản mới

Cơ chế xác nhận lịch khám của hệ thống được tiến hành tự động qua email theo quy trình khép kín:

  1. Bệnh nhân chọn bác sĩ, ngày khám và khung giờ còn trống trên giao diện.
  2. Bệnh nhân nhập thông tin cá nhân, lý do khám và nhấn nút "Đặt khám".
  3. Hệ thống ghi nhận trạng thái chờ và gửi một thư điện tử xác nhận đến email của bệnh nhân.
  4. Bệnh nhân truy cập hòm thư, nhấn vào đường dẫn xác thực do hệ thống tạo ra.
  5. Website tiếp nhận xác thực từ liên kết, cập nhật trạng thái đặt lịch thành công và hiển thị giao diện hoàn tất. Lịch khám đồng thời được cập nhật vào danh sách chờ khám của bác sĩ.

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

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

Chương 1 khái quát các kiến thức công nghệ nền tảng phục vụ xây dựng ứng dụng web:

  • Tổng quan về khái niệm framework trong phát triển phần mềm, vai trò của framework trong việc cung cấp tài nguyên viết sẵn giúp lập trình viên tối ưu hóa cấu trúc chương trình.
  • Trình bày kiến trúc MVC với sự phân tách rành mạch thành ba tầng: Model (tương tác cơ sở dữ liệu), View (giao diện hiển thị), Controller (tiếp nhận yêu cầu và điều phối logic).
  • Giới thiệu các công nghệ Front-end: HTML định dạng cấu trúc trang web, CSS thiết kế cách hiển thị, JavaScript xử lý tương tác logic người dùng. Đi sâu vào thư viện ReactJS với khả năng chia cắt giao diện UI phức tạp thành các component đơn giản, tối ưu hóa tốc độ tải trang.
  • Giới thiệu các công nghệ Back-end: Môi trường NodeJS, ExpressJS hỗ trợ xây dựng máy chủ web và các điểm cuối API theo mô hình MVC, cơ sở dữ liệu quan hệ MySQL dựa trên SQL của Oracle, các thư viện Sequelize, Axios và ngôn ngữ lập trình PHP.

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

Chương 2 trình bày chi tiết các đặc tả yêu cầu, mô hình hóa luồng xử lý và cấu trúc cơ sở dữ liệu:

  • Đặc tả yêu cầu phần mềm và kịch bản ca sử dụng (Use Case) cụ thể:
    • Use case Đăng kí tài khoản: Tiếp nhận tên đăng nhập, mật khẩu; xử lý ngoại lệ nếu tên đăng nhập đã tồn tại trên hệ thống.
    • Use case Đăng nhập: Kiểm tra tính hợp lệ của tài khoản và mật khẩu; trả về cảnh báo nếu nhập sai.
    • Use case Cập nhật thông tin cá nhân: Cho phép người dùng chỉnh sửa dữ liệu tài khoản; xử lý ngoại lệ nếu sai định dạng hoặc email đã bị trùng lặp.
    • Use case Tìm kiếm bác sĩ: Lọc danh sách bác sĩ theo từ khóa nhập vào; xử lý ngoại lệ nếu không có kết quả phù hợp.
    • Use case Đặt lịch khám bệnh: Tiếp nhận thông tin bệnh nhân, khung giờ khám; kích hoạt gửi email xác nhận; xử lý kết thúc nếu email không tồn tại hoặc bệnh nhân không nhấn vào link xác nhận.
    • Use case Đăng kí thông tin bác sĩ: Tiếp nhận hồ sơ phòng khám của bác sĩ để gửi phê duyệt tới Sở Y tế.
    • Use case Tạo lịch khám bệnh: Bác sĩ chọn ngày làm việc và khung giờ; xử lý ngoại lệ nếu ngày đó đã được tạo lịch trước đó.
    • Use case Xem danh sách đặt khám và Lọc bác sĩ theo quận: Hiển thị danh sách bác sĩ theo chuyên khoa, chức vụ hoặc vị trí địa lý quận huyện.
  • Xây dựng sơ đồ mô hình thực thể liên kết (ERD) và chuẩn hóa dữ liệu thành 9 bảng quan hệ trong MySQL:
Tên bảng Khóa chính (PK) Khóa ngoại (FK) Các trường dữ liệu chính và ràng buộc
Account accountId (int) Không Name (varchar, Not null), password (varchar, Not null), Status (bit, Not null), typeId (int, Not null)
Type_account typeid (varchar) Không name (varchar(50), Not null)
Patient PatientId (varchar) typeId firstname, lastname, phoneNumber, Email, statusId (Not null); address, date, gender, iamge (Null)
Doctor doctorId (varchar) specialistId, positionId, typeId firstname, lastname, Phonenumber, Email, gender, date, address, image, nameClinic, StatusId (Not null)
Booking bookngId (varchar) patientId, doctorId, timeType date (Date, Not null), reason (varchar(255), Not null), statusid (ENUM, Not null)
Schedule scheduleId (varchar) doctorId date (Date, Not null), maxNumber (int, Not null), CurrentNumber (bit, Not null), createrAt, createAt, priceId (Not null)
Time timeType (varchar) ScheduleId status (bit, Not null), maxNumber (int, Not null)
Specialist specialistId (varchar) Không name (varchar(50), Not null)
Position positionid (varchar) Không namePosition (varchar(50), Not null)

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

Chương 3 trình bày các kết quả xây dựng giao diện thực tế và cấu hình các công cụ phát triển:

  • Thiết lập môi trường và công cụ: MySQL (quản trị dữ liệu), HTML/CSS/JS/Bootstrap/ReactJS (Front-end), NodeJS/ExpressJS (Back-end).
  • Hệ thống giao diện người dùng phía bệnh nhân và khách vãng lai:
    • Giao diện trang chủ phân chia các khu vực: banner giới thiệu, danh sách chuyên khoa, danh sách bác sĩ nổi bật, danh sách phòng khám.
    • Giao diện thông tin chi tiết: hiển thị hồ sơ chi tiết của chuyên khoa, chi tiết bác sĩ, chi tiết phòng khám.
    • Giao diện đặt lịch và xác nhận: giao diện đăng ký lịch khám, giao diện hiển thị xác nhận thông tin bệnh nhân, giao diện thông báo xác nhận thành công sau khi nhấn link email, giao diện cảnh báo khi lịch khám đã quá thời gian quy định trên hệ thống.
  • Hệ thống giao diện dành cho bác sĩ và quản trị viên:
    • Giao diện đăng nhập hệ thống và phân quyền truy cập.
    • Giao diện quản lý tài khoản: danh sách tài khoản, chức năng tạo mới và sửa thông tin tài khoản.
    • Giao diện nghiệp vụ bác sĩ: tạo thông tin bác sĩ, thiết lập kế hoạch lịch khám bệnh theo ngày, quản lý danh sách lịch khám của bệnh nhân, giao diện xác nhận trạng thái khám thành công.
    • Giao diện quản lý danh mục: quản lý thông tin phòng khám, quản lý danh mục chuyên khoa, quản lý khung giờ và thời gian khám.

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

  • Kết quả kỹ thuật và chức năng đạt được:
    • Xây dựng thành công website dịch vụ đặt lịch khám bệnh trực tuyến cho các phòng khám tại thành phố Đà Nẵng, áp dụng bộ công nghệ JavaScript full-stack (ReactJS, NodeJS, ExpressJS, MySQL).
    • Hoàn thiện 4 nhóm chức năng tương ứng với 4 nhóm tác nhân (Admin, Bác sĩ, Bệnh nhân, Người dùng chưa đăng ký).
    • Thiết lập thành công cơ sở dữ liệu quan hệ gồm 9 bảng chuẩn hóa, bảo đảm tính toàn vẹn dữ liệu thông qua các khóa chính và khóa ngoại liên kết chặt chẽ.
    • Hiện thực hóa cơ chế đặt lịch 24/7 và quy trình gửi email xác nhận tự động kèm liên kết xác thực hai chiều cho bệnh nhân.
  • Giải pháp và kiến nghị của tác giả:
    • Khuyến nghị ứng dụng hệ thống vào các phòng khám tư nhân trên địa bàn Thành phố Đà Nẵng để loại bỏ các thủ tục đăng ký rườm rà, giảm thiểu thời gian chờ đợi lấy số trực tiếp.
    • Ứng dụng giải pháp nhằm phân luồng bệnh nhân, giảm mật độ tiếp xúc tại phòng khám, phù hợp với yêu cầu phòng chống dịch bệnh (đặc biệt trong giai đoạn COVID-19).
    • Tối ưu hóa hiệu suất làm việc của bác sĩ thông qua việc chủ động thiết lập khung giờ và giới hạn số lượng khám tối đa (maxNumber) trên từng khung giờ.
  • Đóng góp so với nghiên cứu trước do tác giả tự nêu:
    • Đồ án tích hợp vai trò kiểm duyệt của Sở Y tế Thành phố Đà Nẵng vào hệ thống phần mềm, tạo lập cơ chế xác thực uy tín phòng khám và chứng chỉ hành nghề của bác sĩ trước khi công khai lịch hẹn.
    • Cung cấp giải pháp tìm kiếm và phân loại đa tiêu chí (theo chuyên khoa, theo chức vụ bác sĩ, lọc theo địa bàn quận huyện tại Đà Nẵng).

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

  • Hạn chế:
    • Phạm vi triển khai của đồ án mới dừng lại ở mức độ áp dụng cho các phòng khám tư nhân và người bệnh trong địa bàn Thành phố Đà Nẵng.
    • Hệ thống phụ thuộc vào việc xác thực qua email, chưa tích hợp thêm các kênh thông báo tức thời khác (như tin nhắn SMS) hoặc cổng thanh toán viện phí trực tuyến trong luồng đặt lịch.
  • Hướng phát triển:
    • Văn bản xác định mục tiêu tiếp tục mở rộng quy mô hệ thống, áp dụng cho mạng lưới nhiều phòng khám và bệnh viện lớn hơn ngoài khu vực Đà Nẵng.
    • Nâng cấp, hoàn thiện thêm các tính năng chuyên sâu về quản lý danh sách lịch khám và hồ sơ bệnh án của bệnh nhân.
    • Bổ sung các công cụ tương tác, hỗ trợ sau khám giữa bác sĩ và người bệnh.

Giá trị tham khảo

Đồ án là tài liệu tham khảo thực tiễn hữu ích cho các nhóm đối tượng:

  • Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Tham khảo mô hình phân tích thiết kế hệ thống thông tin, quy trình xây dựng kịch bản ca sử dụng (Use case specification), sơ đồ hoạt động và phương pháp chuẩn hóa cơ sở dữ liệu quan hệ.
  • Lập trình viên phát triển web full-stack: Tham khảo kiến trúc kết nối giữa Front-end sử dụng ReactJS và Back-end sử dụng NodeJS/ExpressJS, cách cấu hình Sequelize ORM để thao tác với MySQL và tích hợp Axios gọi API.
  • Người làm đề tài về hệ thống đặt lịch hẹn y tế hoặc dịch vụ công: Tham khảo cách thiết kế quy trình xác thực lịch hẹn qua email 2 bước và cấu trúc quản lý khung giờ khám bệnh linh hoạt theo từng bác sĩ.

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

1. Những công nghệ chính nào được sử dụng để xây dựng hệ thống website này?
Website được phát triển bằng ngôn ngữ JavaScript, sử dụng ReactJS kết hợp Redux và Bootstrap cho phần Front-end; môi trường NodeJS cùng ExpressJS framework cho phần Back-end; hệ quản trị cơ sở dữ liệu MySQL tương tác qua thư viện Sequelize; kiểm thử API bằng công cụ Postman và quản lý mã nguồn bằng GitHub.

2. Bệnh nhân hoàn tất quy trình xác nhận đặt lịch khám bệnh trên website như thế nào?
Sau khi chọn bác sĩ, ngày khám và khung giờ trên giao diện, bệnh nhân nhập thông tin cá nhân và nhấn "Đặt khám". Hệ thống sẽ tự động gửi một email chứa đường dẫn xác nhận đến hộp thư của bệnh nhân. Bệnh nhân bắt buộc phải mở email và nhấn vào đường dẫn đó thì hệ thống mới xác nhận đặt lịch thành công và chuyển dữ liệu sang danh sách của bác sĩ.

3. Cơ sở dữ liệu của đồ án gồm bao nhiêu bảng và các bảng cốt lõi liên kết với nhau qua các khóa nào?
Cơ sở dữ liệu gồm 9 bảng: Account, Type_account, Patient, Doctor, Booking, Schedule, Time, Specialist, Position. Trong đó, bảng Booking đóng vai trò trung tâm liên kết với bảng Patient qua khóa ngoại patientId, bảng Doctor qua khóa ngoại doctorId, và bảng Time qua khóa ngoại timeType. Bảng Doctor liên kết với Specialist qua specialistId, với Position qua positionId và với Account qua typeId.

4. Khi bác sĩ tạo lịch khám bệnh, hệ thống xử lý trường hợp trùng lặp ngày như thế nào?
Theo kịch bản ca sử dụng "Tạo lịch khám bệnh" (Bảng 2.1 trong văn bản), nếu ngày mà bác sĩ chọn để tạo lịch đã tồn tại lịch khám trước đó trên hệ thống, hệ thống sẽ kích hoạt luồng ngoại lệ (Exception flow), thông báo lỗi và yêu cầu bác sĩ quay lại bước chọn ngày khác.

5. Vai trò kiểm duyệt của Sở Y tế Đà Nẵng được thể hiện như thế nào trong hệ thống?
Sở Y tế nắm vai trò Quản trị viên (Admin), có quyền kiểm duyệt, phê duyệt hồ sơ đăng ký của bác sĩ và phòng khám trước khi thông tin được hiển thị công khai trên website, đồng thời quản lý các danh mục chuyên khoa và tài khoản người dùng trên toàn hệ thống.

Kết luận

Đồ án tốt nghiệp "Xây dựng website đặt lịch khám bệnh cho các phòng khám tại Thành Phố Đà Nẵng" của tác giả Dương Thị Thuỳ Dung đã hoàn thành việc xây dựng một hệ thống phần mềm hoàn chỉnh giải quyết nhu cầu đặt lịch y tế trực tuyến tại địa phương. Bằng việc kết hợp kiến trúc MVC với các công nghệ ReactJS, NodeJS, ExpressJS và hệ quản trị cơ sở dữ liệu MySQL, đề tài đã số hóa thành công quy trình tìm kiếm bác sĩ, đặt hẹn 24/7 và kiểm duyệt y tế từ xa. Các nội dung phân tích thiết kế chi tiết từ ca sử dụng đến 9 bảng dữ liệu quan hệ trong đồ án đóng vai trò là tài liệu tham khảo thực tế cho các dự án phát triển ứng dụng dịch vụ y tế điện tử.