Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp chuyên ngành Công nghệ phần mềm (thuộc ngành Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh) của tác giả Đỗ Thị Bích Ngọc, dưới sự hướng dẫn của PGS. Hoàng Văn Dũng, tập trung vào đề tài "Xây dựng website hỗ trợ chăm sóc sức khỏe".
Lý do chọn đề tài xuất phát từ bối cảnh thực tiễn sau đại dịch COVID-19 (giai đoạn 2020–2021). Đại dịch đã tạo ra 4 làn sóng lây nhiễm diện rộng tại Việt Nam với gần 1,7 triệu ca nhiễm và hơn 31 ngàn ca tử vong, đặt ra yêu cầu cấp thiết về việc hạn chế tiếp xúc trực tiếp, giữ khoảng cách để kiểm soát dịch bệnh. Bên cạnh đó, thực trạng khám chữa bệnh trực tiếp tại các cơ sở y tế hiện nay tồn tại nhiều bất cập: bệnh nhân mất nhiều thời gian bốc số, chờ đợi tới lượt khám, hoặc bỏ lỡ cuộc hẹn mà không thông báo trước. Phía các bệnh viện và phòng khám cũng phải đối mặt với tình trạng lãng phí tài nguyên và thời gian trong công tác quản lý tiếp nhận bệnh nhân. Việc xây dựng một nền tảng y tế trực tuyến cho phép chuyển đổi từ giao tiếp trực tiếp sang giao tiếp từ xa qua video call nhằm giải quyết tình trạng quá tải và tối ưu hóa quy trình khám bệnh.
Mục tiêu nghiên cứu của đề tài được xác định gồm 5 mục tiêu cụ thể:
- Xây dựng website cho phép người dùng xem thông tin chuyên khoa, thông tin bác sĩ, đặt lịch khám trực tuyến và thực hiện cuộc gọi video trực tuyến với bác sĩ theo lịch hẹn.
- Xây dựng hệ thống cho phép bác sĩ tiếp nhận cuộc gọi video call từ bệnh nhân, quản lý hồ sơ bệnh án của các bệnh nhân đã đăng ký khám và trả kết quả khám sau buổi tư vấn.
- Xây dựng hệ thống quản lý dữ liệu người dùng, bác sĩ, lịch hẹn và thống kê doanh số hoạt động của website.
- Đảm bảo website có giao diện trực quan, thân thiện với người dùng và bảo mật thông tin cá nhân cũng như dữ liệu bệnh án.
- Tăng cường sự tương tác trực tiếp giữa bác sĩ và bệnh nhân, cải thiện chất lượng dịch vụ y tế và nâng cao sức khỏe cộng đồng.
Nhiệm vụ nghiên cứu được phân chia theo 5 giai đoạn:
- Tìm hiểu và triển khai các công nghệ nền tảng cần sử dụng.
- Khảo sát thực tế, phân tích dữ liệu khảo sát và thiết kế hệ thống.
- Khởi tạo khung chương trình, xây dựng các chức năng quản lý tài khoản bác sĩ, tài khoản người dùng, lịch khám và hồ sơ bệnh án.
- Xây dựng chức năng đặt lịch khám, khám bệnh trực tuyến qua video call và trả kết quả khám.
- Hoàn thiện báo cáo tổng kết khóa luận.
Đối tượng nghiên cứu của đề tài bao gồm công nghệ MERN Stack (MongoDB, Express.js, React, Node.js), cơ sở dữ liệu đám mây MongoDB Atlas, các thư viện hỗ trợ truyền tải dữ liệu thời gian thực và video call (WebRTC, Socket.IO, PeerJS), cùng các nền tảng đặt lịch khám bệnh trực tuyến đang vận hành trên thị trường. Phạm vi nghiên cứu hướng đến nhóm người dùng gặp khó khăn về thời gian hoặc khoảng cách địa lý khi đến cơ sở y tế, người có nhu cầu khám định kỳ và theo dõi sức khỏe tại nhà; thời gian thực hiện nghiên cứu kéo dài từ ngày 04/03/2024 đến ngày 10/07/2024.
Cơ sở lý thuyết và phương pháp
Khóa luận dựa trên các khung kỹ thuật và công nghệ phát triển ứng dụng web hiện đại:
- Mô hình kiến trúc MERN Stack: Sử dụng JavaScript xuyên suốt cả 3 tầng ứng dụng:
- MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL hướng tài liệu (document-oriented), lưu trữ dữ liệu dưới định dạng JSON/BSON, triển khai trên nền tảng đám mây MongoDB Atlas.
- Express.js: Framework phát triển ứng dụng web cho Node.js, cung cấp các bộ công cụ quản lý định tuyến (routing) và middleware để xây dựng hệ thống xử lý phía máy chủ.
- React: Thư viện JavaScript mã nguồn mở xây dựng giao diện người dùng (UI) dạng Single Page Application (SPA), giúp tải dữ liệu động và tối ưu thời gian phản hồi mà không cần tải lại toàn bộ trang web.
- Node.js: Môi trường thực thi mã nguồn JavaScript phía máy chủ chạy trên nền tảng JavaScript engine V8 của Google.
- Kiến trúc RESTful API: Thiết kế giao diện lập trình ứng dụng tuân thủ chuẩn REST, truyền tải trạng thái tài nguyên hệ thống thông qua các phương thức giao thức HTTP tiêu chuẩn (GET, POST, PUT, DELETE).
- Công nghệ truyền thông thời gian thực và Video Call:
- Socket.IO: Thư viện thiết lập kết nối hai chiều thời gian thực (real-time bi-directional) giữa client và server thông qua giao thức WebSocket.
- WebRTC (Web Real-Time Communication): Chuẩn công nghệ mã nguồn mở cho phép trình duyệt truyền tải trực tiếp âm thanh (audio), hình ảnh (video) và dữ liệu ngang hàng (P2P) mà không cần đi qua máy chủ trung gian.
- PeerJS: Thư viện JavaScript đóng gói các API WebRTC, hỗ trợ thiết lập và duy trì các kết nối mạng ngang hàng giữa các client.
Phương pháp nghiên cứu được triển khai bao gồm:
- Phương pháp thu thập thông tin: Nghiên cứu tài liệu kỹ thuật về MERN Stack, WebRTC, Socket.IO; khảo sát tính năng và giao diện của các hệ thống khám bệnh từ xa hiện hành.
- Phương pháp xử lý thông tin: Phân tích dữ liệu khảo sát, trích xuất yêu cầu chức năng và phi chức năng, mô hình hóa luồng xử lý bằng biểu đồ ca sử dụng (Use Case Diagram) và biểu đồ tuần tự (Sequence Diagram).
- Phương pháp phát triển phần mềm: Áp dụng quy trình kỹ thuật phần mềm chuẩn từ đặc tả yêu cầu, thiết kế kiến trúc/cơ sở dữ liệu, lập trình tích hợp front-end/back-end, đến kiểm thử chức năng và hiệu năng.
Nghiên cứu tiến hành khảo sát và đánh giá 3 nền tảng y tế trực tuyến tại Việt Nam:
| Nền tảng |
Đơn vị chủ quản / Đặc điểm nổi bật |
Điểm mạnh |
Hạn chế ghi nhận |
| HelloBacSi |
Hello Health Group; cung cấp thông tin y khoa chính thống |
Giao diện thân thiện; tích hợp tư vấn với bác sĩ AI; hỗ trợ chia sẻ mạng xã hội |
Chưa tối ưu chuyên sâu cho quy trình khám bệnh trực tiếp qua video đa chuyên khoa |
| Medpro |
Nền tảng liên kết bệnh viện lớn (Chợ Rẫy, ĐH Y Dược, Nhi Đồng 1) |
Kết nối mạng lưới bệnh viện uy tín; đa dạng cổng thanh toán; hỏi đáp chuyên gia |
Quy trình tập trung nhiều vào đặt số khám tại viện hơn là khám trực tuyến tại nhà |
| YouMed |
Công ty TNHH YouMed Việt Nam; đặt khám phòng khám và bệnh viện |
Tích hợp tính năng gọi video call với bác sĩ; đặt khám toàn quốc; giao diện dễ thao tác |
Cần hoàn thiện sâu hơn về trải nghiệm theo dõi hồ sơ bệnh án liên tục |
Thiết kế và triển khai hệ thống
Hệ thống phần mềm được thiết kế theo kiến trúc phân tầng, phân định rõ ràng giữa tầng hiển thị giao diện, tầng điều phối xử lý API và tầng lưu trữ dữ liệu.
1. Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu MongoDB bao gồm 9 collection (bảng) chính để phục vụ các luồng nghiệp vụ:
| STT |
Tên bảng (Collection) |
Mục đích lưu trữ dữ liệu |
| 1 |
Admin |
Thông tin tài khoản và quyền quản trị hệ thống |
| 2 |
Doctor |
Thông tin bác sĩ, chuyên khoa, lịch làm việc, ngày nghỉ |
| 3 |
User |
Thông tin cá nhân của khách hàng / bệnh nhân |
| 4 |
Appointment |
Dữ liệu lịch hẹn khám bệnh, thời gian và trạng thái duyệt |
| 5 |
Department |
Danh mục các chuyên khoa y tế trên hệ thống |
| 6 |
File |
Dữ liệu hồ sơ bệnh án, thông tin tiền sử bệnh của khách hàng |
| 7 |
Room |
Thông tin phòng gọi video call kết nối giữa bác sĩ và bệnh nhân |
| 8 |
TimeSlots |
Danh mục các khung giờ khám bệnh khả dụng trong ngày |
| 9 |
Reviews |
Dữ liệu đánh giá chất lượng cuộc gọi khám bệnh từ người dùng |
Chi tiết cấu trúc thuộc tính của hai thực thể trọng tâm:
- Bảng Admin:
_id (ObjectId, Khóa chính), name (String), phone (String), email (String), password (String - đã mã hóa), gender (String), role (String).
- Bảng Doctor:
_id (ObjectId, Khóa chính), name (String), phone (String), email (String), password (String - đã mã hóa), gender (String), role (String), department (ObjectId[], Khóa ngoại liên kết danh sách chuyên khoa), appointments (ObjectId[], Khóa ngoại liên kết danh sách lịch khám), isActive (Boolean - trạng thái kích hoạt tài khoản), dayOff (Mảng đối tượng {date: Date, reason: String} - danh sách ngày nghỉ), birthDate (Date), isForgot (Boolean - cờ yêu cầu khôi phục mật khẩu).
2. Thiết kế giao tiếp API và xử lý nghiệp vụ
Hệ thống backend xây dựng các module API RESTful chuyên biệt:
- Module Authentication: Xử lý đăng ký, đăng nhập và cấp lại mật khẩu cho các tác nhân.
- Module Admin, Doctor, User: Quản lý thông tin tài khoản cá nhân, cập nhật hồ sơ, khóa hoặc kích hoạt tài khoản.
- Module Appointment & TimeSlots: Điều phối việc kiểm tra khung giờ trống, khởi tạo lịch hẹn, phê duyệt lịch khám và hủy lịch.
- Module Department & File: Quản lý danh mục chuyên khoa và các thao tác thêm, sửa, xóa hồ sơ bệnh án của bệnh nhân.
- Module Video Call & Reviews: Xử lý khởi tạo phòng họp trực tuyến (
Room), trao đổi tín hiệu P2P thông qua PeerJS/Socket.IO và ghi nhận đánh giá phản hồi sau cuộc gọi.
Luồng xử lý nghiệp vụ chính bao gồm:
- Quy trình Đặt lịch khám (User): Khách hàng truy cập trang chủ -> Chọn chuyên khoa -> Chọn bác sĩ phụ trách -> Chọn khung giờ khám -> Chọn hoặc tạo mới hồ sơ bệnh án -> Quét mã thanh toán chi phí -> Xác nhận đặt lịch và chờ quản trị viên phê duyệt.
- Quy trình Đăng ký lịch làm việc (Doctor): Mặc định lịch của bác sĩ là toàn thời gian; bác sĩ chủ động đăng ký các ngày bận/nghỉ (
dayOff) để hệ thống tự động khóa các khung giờ tương ứng, không cho bệnh nhân đặt hẹn vào các ngày này.
- Quy trình Khám bệnh trực tuyến: Đến thời gian hẹn đã được phê duyệt, bệnh nhân chọn "Gọi ngay" trên giao diện lịch khám -> Hệ thống kết nối phòng gọi video với bác sĩ -> Hai bên truyền nhận hình ảnh, âm thanh qua camera/micro -> Kết thúc cuộc gọi, bác sĩ mở hồ sơ bệnh án để nhập kết quả chẩn đoán; bệnh nhân thực hiện đánh giá chất lượng cuộc gọi.
Nội dung chính theo từng chương
Mở đầu
Trình bày tính cấp thiết của đề tài trong bối cảnh hậu COVID-19 và nhu cầu hiện đại hóa dịch vụ y tế. Xác định 5 mục tiêu cốt lõi, đối tượng nghiên cứu (MERN Stack, WebRTC, MongoDB Atlas) và phạm vi phục vụ nhóm bệnh nhân cần khám bệnh từ xa. Nêu rõ ý nghĩa khoa học trong việc tối ưu hóa quy trình y tế và ý nghĩa thực tiễn trong việc giảm tải áp lực cho các bệnh viện truyền thống.
Phương pháp nghiên cứu và Cơ sở công nghệ
Trình bày chi tiết cơ sở lý thuyết về mô hình kiến trúc MERN Stack (MongoDB, Express.js, React, Node.js), nguyên lý thiết kế API RESTful và các giải pháp công nghệ thời gian thực gồm WebRTC, Socket.IO và PeerJS. Phân tích kết quả khảo sát 3 hệ thống thực tế (HelloBacSi, Medpro, YouMed) nhằm rút ra bài học về cách bố trí giao diện xanh - trắng, cấu trúc nội dung, điều hướng người dùng và tối ưu hóa chức năng gọi video tư vấn.
Phân tích và mô hình hóa yêu cầu
Phân loại và đặc tả chi tiết các yêu cầu chức năng cho từng tác nhân trong hệ thống:
- Quản trị viên (Admin): Xem danh sách, tìm kiếm theo số điện thoại/tên, cập nhật thông tin, kích hoạt hoặc vô hiệu hóa tài khoản khách hàng, bác sĩ và chuyên khoa; xem, lọc theo ngày và phê duyệt lịch hẹn khám; xem danh sách phân công bác sĩ làm việc trong ngày; quản lý hồ sơ bệnh án; theo dõi bảng điều khiển thống kê số lượt đăng ký khám.
- Bác sĩ (Doctor): Xem danh sách lịch hẹn đã xác nhận; thực hiện cuộc gọi video call với bệnh nhân; xem hồ sơ bệnh nhân đã đặt hẹn; nhập và trả kết quả khám; quản lý lịch làm việc thông qua việc đăng ký hoặc hủy ngày nghỉ tuần; cập nhật thông tin cá nhân.
- Khách hàng (User / Khách vãng lai): Đăng ký tài khoản, đăng nhập, khôi phục mật khẩu qua số điện thoại; tra cứu danh mục chuyên khoa và bác sĩ; chọn khung giờ và đặt lịch khám kèm hồ sơ bệnh án; quét mã thanh toán; thực hiện cuộc gọi video trực tuyến đúng hẹn; đánh giá cuộc gọi; quản lý thông tin cá nhân và tạo/xóa hồ sơ bệnh án của bản thân.
- Yêu cầu phi chức năng: Đảm bảo kiểm tra tính hợp lệ của số điện thoại khi đăng ký, phân quyền chặt chẽ giữa các vai trò người dùng, bảo mật thông tin hồ sơ bệnh án và duy trì giao diện người dùng trực quan, dễ thao tác.
Chương này cũng thể hiện hệ thống biểu đồ use case tổng quát và bảng mô tả chi tiết cho toàn bộ các ca sử dụng nghiệp vụ.
Thiết kế phần mềm
Hiện thực hóa các yêu cầu thành mô hình kỹ thuật: thiết kế chi tiết lược đồ cơ sở dữ liệu gồm 9 bảng (Admin, Doctor, User, Appointment, Department, File, Room, TimeSlots, Reviews) kèm các thuộc tính, kiểu dữ liệu và ràng buộc khóa; thiết kế các module API RESTful; xây dựng các biểu đồ tuần tự (Sequence Diagram) cho các quy trình Đăng ký, Đăng nhập, Đăng ký lịch làm việc, Đặt lịch hẹn và Gọi video call; mô tả nguyên tắc thiết kế và danh mục các thành phần giao diện người dùng cho cả 3 phân hệ Admin, Doctor và User.
Cài đặt và kiểm thử phần mềm
Trình bày quy trình thiết lập môi trường phát triển front-end (React) và back-end (Node.js, Express), tích hợp cơ sở dữ liệu MongoDB Atlas và các gói thư viện phụ trợ. Triển khai kiểm thử tính năng (Functional Testing) cho từng nhóm người dùng (khách vãng lai, khách hàng, bác sĩ, quản trị viên) và thực hiện kiểm thử hiệu năng hệ thống nhằm đảm bảo tính ổn định của các chức năng xử lý dữ liệu và truyền tải video call.
Kết quả và đóng góp
Khóa luận đã hoàn thành các mục tiêu đề ra theo đúng kế hoạch:
- Xây dựng hoàn chỉnh ứng dụng website hỗ trợ chăm sóc sức khỏe trực tuyến với đầy đủ 3 phân hệ tương tác dành riêng cho Quản trị viên, Bác sĩ và Khách hàng.
- Tích hợp thành công chức năng gọi video trực tiếp giữa bác sĩ và bệnh nhân dựa trên nền tảng WebRTC, PeerJS và Socket.IO, cho phép tư vấn sức khỏe từ xa với độ trễ thấp.
- Thiết lập hoàn chỉnh quy trình đặt lịch khám theo khung giờ định sẵn, tích hợp chọn hồ sơ bệnh án, phương thức quét mã thanh toán và cơ chế phê duyệt lịch khám từ quản trị viên.
- Xây dựng cơ chế đăng ký lịch làm việc linh hoạt cho bác sĩ bằng phương pháp chọn ngày nghỉ (
dayOff) trên nền lịch làm việc toàn thời gian, tự động đồng bộ trạng thái khả dụng cho hệ thống đặt hẹn.
- Hiện thực hóa chức năng trả kết quả khám bệnh trực tiếp sau cuộc gọi, giúp lưu vết và cập nhật bệnh án của người dùng trên môi trường số.
- Hoàn thiện cơ sở dữ liệu MongoDB gồm 9 collection có cấu trúc rõ ràng cùng hệ thống API RESTful phân quyền bảo mật.
Về mặt giải pháp, tác giả đề xuất việc tiếp tục hoàn thiện nền tảng, thử nghiệm mô hình khám bệnh từ xa cho nhóm đối tượng khó khăn trong việc di chuyển, đồng thời mở rộng quy trình chuẩn hóa dữ liệu hồ sơ sức khỏe điện tử. Đóng góp của đề tài là minh chứng cho việc ứng dụng hiệu quả kiến trúc MERN Stack kết hợp các công nghệ mạng ngang hàng (P2P/WebRTC) để giải quyết bài toán tư vấn y tế từ xa, giảm thiểu chi phí vận hành và giảm tải cho các cơ sở y tế.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận ghi nhận các hạn chế và định hướng phát triển sau:
- Hạn chế: Do website chưa được đưa vào ứng dụng thực tế trong môi trường y tế lâm sàng, nghiên cứu chưa có điều kiện khảo sát và đánh giá phản hồi từ tập người dùng lớn một cách chân thực nhất. Ngoài ra, một số thành phần chức năng còn cần tiếp tục được tối ưu hóa do giới hạn về mặt thời gian thực hiện đề tài.
- Hướng nghiên cứu tiếp: Đưa website vào triển khai thử nghiệm thực tế để thu thập dữ liệu người dùng thực; nâng cấp các tính năng quản lý và phân tích dữ liệu chuyên sâu; tối ưu hóa hiệu năng truyền tải âm thanh/hình ảnh của module video call trong các điều kiện đường truyền mạng không ổn định.
Giá trị tham khảo
Báo cáo khóa luận là tài liệu tham khảo phù hợp cho sinh viên, học viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Hệ thống Thông tin đang thực hiện đồ án hoặc nghiên cứu về các ứng dụng y tế trực tuyến (Telemedicine), hệ thống đặt lịch hẹn và các nền tảng truyền thông thời gian thực.
Nội dung đặc biệt có giá trị tham khảo bao gồm:
- Bản đặc tả yêu cầu chi tiết và bộ kịch bản ca sử dụng (Use Case) cho hệ thống y tế có sự tham gia của 3 nhóm tác nhân.
- Thiết kế lược đồ cơ sở dữ liệu NoSQL (MongoDB) cho bài toán quản lý lịch làm việc, hồ sơ bệnh án và phòng họp trực tuyến.
- Giải pháp kết hợp giữa MERN Stack, Socket.IO và thư viện PeerJS để hiện thực hóa tính năng video call trực tiếp trên trình duyệt web.
Câu hỏi thường gặp
1. Đề tài sử dụng giải pháp công nghệ nào để thực hiện tính năng gọi video call giữa bệnh nhân và bác sĩ?
Hệ thống sử dụng công nghệ WebRTC kết hợp với thư viện PeerJS để thiết lập kết nối mạng ngang hàng (P2P) truyền tải âm thanh và hình ảnh trực tiếp giữa trình duyệt của bệnh nhân và bác sĩ mà không qua máy chủ trung gian, đồng thời sử dụng Socket.IO để kết nối thời gian thực qua giao thức WebSocket phục vụ việc tạo phòng và gửi nhận tín hiệu cuộc gọi.
2. Cơ chế quản lý lịch làm việc của bác sĩ trong hệ thống được vận hành như thế nào?
Hệ thống thiết lập mặc định lịch làm việc của bác sĩ là toàn thời gian. Để hoàn thiện lịch làm việc cho tuần tiếp theo, bác sĩ sẽ chủ động vào hệ thống đăng ký các ngày bận/nghỉ (dayOff) kèm lý do; hệ thống sẽ ghi nhận và khóa các khung giờ khám vào ngày đó để khách hàng không thể đặt lịch hẹn.
3. Cơ sở dữ liệu của hệ thống gồm những bảng (collection) nào?
Cơ sở dữ liệu được xây dựng trên MongoDB bao gồm 9 collection: Admin (quản trị viên), Doctor (bác sĩ), User (khách hàng), Appointment (lịch hẹn), Department (chuyên khoa), File (hồ sơ bệnh án), Room (phòng gọi video), TimeSlots (khung giờ khám) và Reviews (đánh giá cuộc gọi).
4. Người dùng trải qua quy trình như thế nào để hoàn tất việc đặt một lịch khám bệnh trực tuyến?
Khách hàng đăng nhập vào website, chọn chuyên khoa -> chọn bác sĩ muốn khám -> chọn khung giờ khám phù hợp -> chọn hồ sơ bệnh án đã có hoặc tạo hồ sơ mới -> thực hiện quét mã thanh toán lệ phí khám -> nhấn xác nhận để gửi yêu cầu đặt lịch cho quản trị viên phê duyệt.
5. Bác sĩ thực hiện trả kết quả khám cho bệnh nhân bằng cách nào sau khi kết thúc tư vấn?
Sau khi nhận cuộc gọi video và trao đổi tình trạng sức khỏe với bệnh nhân, bác sĩ truy cập vào mục "Hồ sơ" của bệnh nhân tương ứng trên hệ thống, nhập nội dung chẩn đoán vào phần "Kết quả" và lưu lại để cập nhật thông tin bệnh án trực tuyến cho bệnh nhân theo dõi.
Kết luận
Khóa luận tốt nghiệp của tác giả Đỗ Thị Bích Ngọc đã hoàn thành việc nghiên cứu, thiết kế và xây dựng thành công website hỗ trợ chăm sóc sức khỏe dựa trên nền tảng công nghệ MERN Stack và WebRTC. Hệ thống đáp ứng các chức năng nghiệp vụ cốt lõi từ quản lý tài khoản, danh mục chuyên khoa, đăng ký lịch làm việc, đặt hẹn khám bệnh đến thực hiện cuộc gọi video tư vấn trực tuyến và trả kết quả bệnh án. Báo cáo thể hiện quy trình phát triển phần mềm chặt chẽ, đóng vai trò là tài liệu tham khảo hữu ích cho việc xây dựng các ứng dụng y tế từ xa trên nền tảng web.