Giới thiệu dự án
Sự bùng phát của đại dịch COVID-19 với hơn 1,7 triệu ca nhiễm và 31.000 ca tử vong tại Việt Nam (giai đoạn 2020–2021) đã trở thành chất xúc tác mạnh mẽ thúc đẩy chuyển đổi số y tế (Digital Health). Theo báo cáo thị trường Telehealth toàn cầu, quy mô chăm sóc sức khỏe từ xa dự kiến đạt tốc độ tăng trưởng kép hàng năm (CAGR) trên 24%, phản ánh nhu cầu cấp thiết trong việc hạn chế tiếp xúc trực tiếp, giảm tải áp lực cho các cơ sở y tế tuyến trên và tối ưu hóa chi phí điều trị.
Hệ thống y tế truyền thống hiện bộc lộ nhiều điểm nghẽn nghiêm trọng:
- Bệnh nhân mất trung bình từ 2 đến 4 giờ cho mỗi lượt khám trực tiếp chỉ để bốc số, chờ đợi tại phòng khám ngoại trú.
- Tỷ lệ bỏ lỡ lịch hẹn hoặc đến muộn không báo trước lên tới 15–20%, gây lãng phí khung giờ chuyên gia của đội ngũ y bác sĩ.
- Bệnh nhân ở khu vực vùng sâu, vùng xa hoặc người mắc bệnh mãn tính gặp nhiều rào cản chi phí và thời gian khi di chuyển đến các bệnh viện trung tâm.
- Hồ sơ bệnh án giấy dễ thất lạc, thiếu tính liên tục trong việc theo dõi tiền sử bệnh lý.
Đề tài "Xây dựng website hỗ trợ chăm sóc sức khỏe" được nghiên cứu và phát triển bởi sinh viên Đỗ Thị Bích Ngọc (Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh), dưới sự hướng dẫn của PGS. Hoàng Văn Dũng, nhằm giải quyết triệt để các vấn đề trên thông qua hệ thống tư vấn y tế trực tuyến toàn diện.
Mục tiêu cụ thể của dự án bao gồm:
- Xây dựng cổng thông tin cho phép bệnh nhân tra cứu chuyên khoa, tìm kiếm bác sĩ, đặt lịch khám theo khung giờ linh hoạt (
TimeSlots) và thực hiện cuộc gọi tư vấn video trực tuyến thời gian thực.
- Thiết lập phân hệ cho bác sĩ quản lý lịch làm việc linh hoạt, đăng ký ngày nghỉ (
dayOff), tiếp nhận cuộc gọi khám bệnh qua giao thức ngang hàng (Peer-to-Peer) và cập nhật kết luận chẩn đoán vào hồ sơ bệnh án điện tử (File).
- Xây dựng bảng điều khiển quản trị (Admin Dashboard) hỗ trợ kiểm duyệt lịch hẹn, quản lý danh mục chuyên khoa, giám sát tài khoản và thống kê dữ liệu hệ thống.
- Đảm bảo an toàn thông tin người dùng với cơ chế mã hóa mật khẩu, kiểm soát truy cập dựa trên vai trò (RBAC) và xác thực phiên làm việc.
Dự án kỳ vọng mang lại các chỉ số định lượng: rút ngắn 85% thời gian chờ đợi khám ban đầu, giảm 100% chi phí đi lại cho các ca tư vấn không xâm lấn, duy trì độ trễ truyền tải video dưới 200ms qua WebRTC và đạt mức độ hài lòng của người dùng trên 90%. Phạm vi đề tài tập trung vào mô hình khám tư vấn tiền lâm sàng, quản lý lịch biểu và hồ sơ cá nhân trên nền tảng web (Web Application), chưa tích hợp cổng thanh toán ngân hàng trực tiếp phức tạp và thiết bị đo IoT y tế chuyên sâu.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế các nền tảng y tế hàng đầu tại Việt Nam cho thấy bức tranh cạnh tranh rõ nét về tính năng và trải nghiệm người dùng:
| Tiêu chí |
HelloBacSi |
Medpro |
YouMed |
Hệ thống đề xuất |
| Mô hình chính |
Tin tức y khoa, hỏi đáp AI, đặt hẹn |
Đặt khám bệnh viện công/tư, thanh toán viện phí |
Đặt lịch khám phòng khám, tư vấn Video Call |
Đặt lịch theo khung giờ, Video Call WebRTC P2P trực tiếp, quản lý EHR |
| Công nghệ Video Call |
Tích hợp bên thứ ba (SDK ngoài) |
Chưa chú trọng video call trực tiếp |
SDK chuyên dụng trên App di động |
Tích hợp trực tiếp trên Web Browser bằng WebRTC & PeerJS |
| Quản lý lịch làm việc |
Đồng bộ hệ thống bệnh viện |
Quản lý ca khám bệnh viện liên kết |
Bác sĩ tự cấu hình trên mobile app |
Bác sĩ chủ động đăng ký ngày nghỉ, hệ thống tự động khóa Timeslot |
| Trải nghiệm nền tảng |
Đa dạng nội dung nhưng phân tán |
Tập trung đặt số khám trực tiếp tại viện |
Tối ưu ứng dụng di động (Mobile First) |
Tối ưu hóa Single Page Application (SPA) trên mọi trình duyệt web |
Dựa trên kỹ thuật phân tích yêu cầu MoSCoW, hệ thống xác định các module ưu tiên:
- Must-have (Bắt buộc): Đăng ký/đăng nhập phân quyền (Admin, Doctor, User); Đặt lịch theo TimeSlots; Phòng gọi Video Call P2P qua WebRTC; Tạo và cập nhật hồ sơ bệnh án điện tử; Quản lý bác sĩ và chuyên khoa.
- Should-have (Nên có): Bác sĩ đăng ký lịch nghỉ tuần; Khách hàng đánh giá chất lượng cuộc gọi (
Reviews); Bộ lọc tìm kiếm nhanh theo số điện thoại và chuyên khoa; Khôi phục mật khẩu.
- Could-have (Có thể có): Thống kê biểu đồ doanh thu và lượt khám; Gợi ý bác sĩ theo triệu chứng cơ bản.
- Won't-have (Tạm hoãn): Tích hợp máy học chẩn đoán qua hình ảnh y khoa DICOM; Kê đơn thuốc điện tử liên thông nhà thuốc quốc gia.
Ràng buộc kỹ thuật chính đặt ra là việc thiết lập kết nối truyền thông thời gian thực trên nền tảng web phải vượt qua các bức tường lửa (Firewall) và NAT của mạng nội bộ, đồng thời giữ tải của máy chủ backend ở mức tối thiểu khi có nhiều phiên tư vấn diễn ra đồng thời.
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình hướng dịch vụ dựa trên cấu trúc 3 tầng (3-Tier Architecture) hoàn toàn bằng hệ sinh thái JavaScript (MERN Stack):
graph TD
Client[Client Tier: React.js SPA / Axios / PeerJS Client]
Server[Application Tier: Node.js / Express.js RESTful API & Socket.IO Server]
Signaling[Signaling & P2P: Socket.IO Server & WebRTC PeerJS Mesh]
Database[(Data Tier: MongoDB Atlas Cloud Engine)]
Client -->|HTTP/HTTPS REST Requests| Server
Client <-->|WebSocket Events: Join, Signal, Call| Signaling
Server -->|Mongoose ODM Queries| Database
Client <-->|WebRTC Direct Media Stream P2P| Client
Hệ thống công nghệ chi tiết gồm:
- Frontend: React.js (v18.2.0), React Router DOM (v6.x), Axios (v1.6.x) hỗ trợ kiến trúc SPA tải trang không gián đoạn.
- Backend: Node.js (v18 LTS), Express.js framework (v4.18.x) cung cấp RESTful API endpoint chuẩn mực.
- Real-time & Media: Socket.IO (v4.7.x) phục vụ Signaling server; PeerJS (v1.5.x) đóng gói WebRTC API cho phép truyền tải Video/Audio P2P.
- Database: MongoDB Atlas (NoSQL Document Store), tương tác thông qua Mongoose ODM (v7.x).
Lược đồ cơ sở dữ liệu bao gồm 9 collections chính: Admins, Doctors, Users, Appointments, Departments, Files, Rooms, TimeSlots, Reviews.
================================================================================
DATABASE SCHEMA OVERVIEW
================================================================================
[Users] [Appointments] [Doctors]
+-----------------+ +-------------------------+ +-------------------------+
| _id (ObjectId) |<---| userId (ObjectId) |--->| _id (ObjectId) |
| name (String) | | doctorId (ObjectId) | | name (String) |
| phone (String) | | departmentId (ObjectId) | | department (ObjectId[]) |
| password (Hash) | | date (Date) | | dayOff (Array[{date}]) |
| gender (String) | | timeSlotId (ObjectId) | | appointments (Array) |
| role: 'user' | | status (String) | | isActive (Boolean) |
+-----------------+ | recordId (ObjectId) | +-------------------------+
+-------------------------+
|
v
[Files]
+-------------------------+
| _id (ObjectId) |
| patientName (String) |
| symptoms (String) |
| diagnosisResult (String)|
| prescription (String) |
+-------------------------+
Đặc tả một số API RESTful tiêu biểu trong hệ thống:
POST /api/v1/auth/login: Xác thực người dùng, trả về access token và quyền hạn (RBAC).
GET /api/v1/doctors?department={deptId}: Lấy danh sách bác sĩ đang hoạt động theo chuyên khoa.
POST /api/v1/appointments/book: Khởi tạo lịch khám, kiểm tra tính khả dụng của TimeSlot theo cơ chế Atomic lock.
POST /api/v1/video/room/join: Tạo hoặc gia nhập phòng khám tư vấn trực tuyến (Room).
PUT /api/v1/medical-records/:id: Bác sĩ cập nhật chẩn đoán và đơn thuốc sau phiên gọi.
Bảo mật được thiết lập nhiều lớp: mã hóa một chiều mật khẩu bằng thuật toán Bcrypt với Salt Rounds = 10, xác thực request thông qua Middleware kiểm tra định dạng dữ liệu đầu vào, ngăn chặn NoSQL Injection bằng Mongoose Schema Validation, và cô lập đường truyền media qua chuẩn bảo mật DTLS/SRTP mặc định của WebRTC.
Methodology
Dự án áp dụng mô hình phát triển phần mềm lặp rút gọn (Iterative Development) tương thích với khung làm việc Agile. Kế hoạch triển khai kéo dài 20 tuần:
Tuần 01 - 02: Khảo sát hiện trạng (HelloBacSi, Medpro, YouMed), xác định yêu cầu nghiệp vụ.
Tuần 02 - 04: Mô hình hóa hệ thống (Use Case, Class Diagram, Sequence Diagram, Database Schema).
Tuần 04 - 05: Thu thập dữ liệu danh mục chuyên khoa, chuẩn bị môi trường MongoDB Atlas.
Tuần 05 - 10: Xây dựng Core Backend (RESTful APIs, Authentication, Mongoose Models).
Tuần 10 - 14: Phát triển giao diện Frontend (React SPA) và tích hợp WebRTC/PeerJS/Socket.IO.
Tuần 14 - 15: Kiểm thử chức năng (Functional Testing), kiểm thử tải và tương thích trình duyệt.
Tuần 15 - 17: Đóng gói triển khai sản phẩm lên môi trường Cloud, cấu hình biến môi trường.
Tuần 17 - 20: Đánh giá hiệu năng hệ thống, nghiệm thu kết quả và hoàn thiện báo cáo khóa luận.
Chiến lược quản trị rủi ro tập trung xử lý: rủi ro ngắt kết nối P2P do mạng NAT đối xứng (giải pháp: fallback cấu hình STUN/TURN public server); rủi ro xung đột lịch hẹn (giải pháp: transaction validation trong MongoDB khi ghi nhận trạng thái TimeSlot).
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào việc hiện thực hóa luồng tương tác giữa bệnh nhân và bác sĩ. Hệ thống sử dụng kiến trúc phân tầng rõ ràng ở Backend: Controller - Service - Model - Route.
Ví dụ đoạn mã định nghĩa Schema Lịch khám (Appointment) thể hiện liên kết dữ liệu giữa bệnh nhân, bác sĩ và hồ sơ bệnh án:
// models/Appointment.js
const mongoose = require('mongoose');
const appointmentSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
doctorId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Doctor',
required: true
},
departmentId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Department',
required: true
},
appointmentDate: {
type: Date,
required: true
},
timeSlot: {
type: String,
required: true // Ví dụ: "08:30 - 09:00"
},
status: {
type: String,
enum: ['Pending', 'Confirmed', 'Completed', 'Cancelled'],
default: 'Pending'
},
medicalRecord: {
type: mongoose.Schema.Types.ObjectId,
ref: 'File'
}
}, { timestamps: true });
module.exports = mongoose.model('Appointment', appointmentSchema);
Về giải pháp Video Call thời gian thực, hệ thống kết hợp Socket.IO để trao đổi Peer ID (Signaling phase) và PeerJS để thiết lập MediaStream trực tiếp giữa hai trình duyệt:
// client/src/components/VideoCall.jsx
import React, { useEffect, useRef, useState } from 'react';
import Peer from 'peerjs';
import io from 'socket.io-client';
const socket = io(process.env.REACT_APP_SERVER_URL);
const VideoCall = ({ roomId, userId, isDoctor }) => {
const [peerId, setPeerId] = useState('');
const userVideoRef = useRef(null);
const partnerVideoRef = useRef(null);
const peerInstance = useRef(null);
useEffect(() => {
const peer = new Peer();
peer.on('open', (id) => {
setPeerId(id);
socket.emit('join-room', { roomId, peerId: id, userId });
});
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then((mediaStream) => {
if (userVideoRef.current) {
userVideoRef.current.srcObject = mediaStream;
}
// Lắng nghe cuộc gọi đến
peer.on('call', (call) => {
call.answer(mediaStream);
call.on('stream', (remoteStream) => {
if (partnerVideoRef.current) {
partnerVideoRef.current.srcObject = remoteStream;
}
});
});
// Kết nối khi có người dùng khác tham gia phòng
socket.on('user-connected', ({ partnerPeerId }) => {
const call = peer.call(partnerPeerId, mediaStream);
call.on('stream', (remoteStream) => {
if (partnerVideoRef.current) {
partnerVideoRef.current.srcObject = remoteStream;
}
});
});
})
.catch((err) => console.error("Không thể truy cập camera/micro:", err));
peerInstance.current = peer;
return () => {
socket.disconnect();
peer.destroy();
};
}, [roomId, userId]);
return (
<div className="video-container flex gap-4 p-4">
<video ref={userVideoRef} autoPlay muted className="w-1/2 rounded-lg border" />
<video ref={partnerVideoRef} autoPlay className="w-1/2 rounded-lg border" />
</div>
);
};
export default VideoCall;
Testing và validation
Hệ thống trải qua các bài kiểm thử nghiêm ngặt bao gồm kiểm thử tính năng (Functional Testing), kiểm thử bảo mật phân quyền và kiểm thử hiệu năng:
- Kiểm thử tính năng (100% Test Cases Passed): Xác thực 45/45 ca kiểm thử bao gồm luồng đăng ký tài khoản, xác thực số điện thoại, chọn chuyên khoa/bác sĩ, đặt khung giờ khám, thực hiện cuộc gọi video 2 chiều, ghi nhận và xem lại hồ sơ bệnh án, bác sĩ cập nhật lịch nghỉ.
- Kiểm thử hiệu năng mạng (Network & Streaming Benchmark):
- Thời gian phản hồi trung bình của REST API: 142ms đối với các truy vấn đọc dữ liệu (Read queries) và 210ms đối với thao tác ghi/đặt lịch.
- Độ trễ thiết lập luồng WebRTC P2P (Handshake Time): ~180ms - 320ms trong điều kiện mạng nội địa thông thường.
- Chất lượng truyền video đạt chuẩn HD 720p ở mức 30fps với băng thông chiếm dụng trung bình từ 1.2 Mbps đến 1.8 Mbps, tỷ lệ mất gói (Packet Loss) dưới 0.8%.
- User Acceptance Testing (UAT): Thử nghiệm với nhóm 20 người dùng (bao gồm sinh viên và người đóng vai trò bác sĩ) cho thấy tỷ lệ thao tác thành công trong lần đầu tiên đạt 95%, thời gian hoàn thành đặt một lịch khám chỉ mất 45 giây.
Kết quả đạt được
Hệ thống đã hoàn thiện đầy đủ 100% các chức năng cốt lõi theo đề cương được duyệt:
- Xây dựng thành công 3 giao diện riêng biệt: Quản trị viên (Admin), Bác sĩ (Doctor), Bệnh nhân (User).
- Module Video Call trên trình duyệt hoạt động ổn định, không yêu cầu cài đặt thêm extension hay phần mềm phụ trợ.
- Hồ sơ bệnh án điện tử được liên kết trực tiếp với lịch sử khám, giúp bác sĩ nắm bắt bệnh sử tức thì ngay trong phiên tư vấn.
Đổi mới và đóng góp
Cải tiến kỹ thuật nổi bật
Dự án mang lại những cải tiến thực tiễn đáng kể so với các giải pháp truyền thông khám bệnh thông thường:
- Kiến trúc Video WebRTC P2P tích hợp sâu: Khác với việc chuyển hướng sang Zoom/Google Meet hoặc xây dựng Server trung chuyển luồng tốn kém (SFU/MCU), hệ thống sử dụng kết nối ngang hàng trực tiếp giữa hai trình duyệt thông qua PeerJS. Cơ chế này giảm tải tới 90% băng thông máy chủ trung tâm, giảm thiểu chi phí vận hành máy chủ và loại bỏ rủi ro rò rỉ hình ảnh khám bệnh tại máy chủ trung gian.
- Cơ chế quản lý TimeSlots động chống trùng lịch (Conflict-Free Scheduling): Khung giờ khám được chia nhỏ theo bước 30 phút và liên kết trạng thái thời gian thực với bảng đăng ký nghỉ của bác sĩ (
dayOff). Thuật toán tự động lọc bỏ các khung giờ trùng lặp, đảm bảo không xảy ra hiện tượng "double-booking" với độ chính xác đạt 100%.
- Mô hình hóa hồ sơ bệnh án tập trung theo phiên khám: Kết quả tư vấn được bác sĩ nhập trực tiếp vào hệ thống ngay khi kết thúc cuộc gọi và chuyển ngay thành dữ liệu số trong tài khoản người dùng, tiết kiệm 100% giấy tờ in ấn và loại bỏ hoàn toàn độ trễ trong trả kết quả chẩn đoán.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế
- Tư vấn bệnh lý da liễu, tâm lý và nội khoa mãn tính: Bệnh nhân chỉ cần sử dụng điện thoại thông minh hoặc máy tính có webcam để kết nối trực tiếp với chuyên gia y tế, truyền hình ảnh tổn thương hoặc trao đổi triệu chứng rõ ràng.
- Tái khám định kỳ từ xa: Phù hợp tối đa với người cao tuổi, người hạn chế khả năng di chuyển hoặc bệnh nhân ở các tỉnh xa cần nhận tư vấn theo dõi liều lượng thuốc mà không cần lên bệnh viện tuyến trên.
[Bệnh nhân: Chọn Bác sĩ & Giờ] ---> [Thanh toán/Xác nhận] ---> [Hệ thống tạo Room]
|
[Kết quả lưu vào Hồ sơ] <--- [Khám Video Call WebRTC] <--------------+
Chiến lược triển khai hạ tầng
- Môi trường Web Server: Nền tảng Node.js chạy trên máy chủ đám mây (AWS EC2 hoặc DigitalOcean Droplet) cấu hình tối thiểu 2 vCPU, 4GB RAM, điều phối qua Nginx Reverse Proxy và SSL/TLS certificate từ Let's Encrypt.
- Cơ sở dữ liệu: MongoDB Atlas Cloud với cơ chế sao lưu định kỳ (Automated Backup) và khả năng mở rộng cụm (Replica Set).
- Signaling/TURN Server: Cài đặt Coturn Server độc lập hỗ trợ định tuyến media khi bệnh nhân hoặc bác sĩ nằm trong mạng NAT doanh nghiệp nghiêm ngặt.
Phân tích hiệu quả kinh tế (ROI)
- Chi phí triển khai ban đầu: Dự toán dưới $50/tháng cho hạ tầng máy chủ và database đám mây trong giai đoạn phục vụ 1.000 - 5.000 người dùng hoạt động thường xuyên.
- Hiệu quả xã hội: Tiết kiệm hàng nghìn giờ di chuyển và chờ đợi của người bệnh, giảm thiểu lây nhiễm chéo tại bệnh viện trong các đợt dịch, đồng thời tăng công suất làm việc ngoài giờ cho các bác sĩ lên đến 25%.
Hạn chế và hướng phát triển
Dù đạt được toàn bộ mục tiêu kỹ thuật đề ra, đồ án vẫn còn một số điểm giới hạn:
- Hạn chế kỹ thuật: Kết nối P2P phụ thuộc lớn vào chất lượng đường truyền internet cục bộ của cả hai đầu client; chưa có cơ chế tự động hạ độ phân giải thích ứng (Adaptive Bitrate) khi mạng yếu; hệ thống chưa tích hợp cổng thanh toán trực tuyến tự động (như VNPay, MoMo) mà đang dừng ở mức xác nhận đơn đặt.
- Hướng phát triển:
- Tích hợp máy chủ TURN riêng biệt và thuật toán SFU (Selective Forwarding Unit) để hỗ trợ hội chẩn y khoa nhóm nhiều bác sĩ đồng thời.
- Phát triển ứng dụng di động đa nền tảng bằng React Native, tái sử dụng toàn bộ hệ thống API backend hiện có.
- Tích hợp trí tuệ nhân tạo (AI Chatbot) hỗ trợ sàng lọc bệnh ban đầu và phân luồng chuyên khoa tự động cho bệnh nhân trước khi đặt lịch.
Đối tượng hưởng lợi
Hệ thống mang lại giá trị thiết thực cho nhiều nhóm đối tượng:
- Sinh viên & Người học CNTT: Cung cấp tài liệu tham khảo hoàn chỉnh về cách áp dụng kiến trúc MERN Stack kết hợp WebRTC/Socket.IO để giải quyết một bài toán nghiệp vụ y tế thực tế từ thiết kế CSDL đến mã nguồn.
- Kỹ sư phần mềm (Developers): Cung cấp mô hình triển khai Video Call P2P trên nền web mà không phụ thuộc vào các dịch vụ bên thứ ba tốn phí, cùng kỹ thuật thiết kế Schema linh hoạt cho bài toán đặt lịch theo khung thời gian.
- Cơ sở y tế & Phòng khám: Tiếp cận một giải pháp phần mềm chuyển đổi số y tế chi phí thấp, triển khai nhanh chóng để mở rộng kênh phục vụ bệnh nhân trực tuyến.
- Cộng đồng bệnh nhân: Được tiếp cận dịch vụ y tế chất lượng cao, minh bạch thông tin bác sĩ, tiết kiệm tối đa thời gian và chi phí khám chữa bệnh.
Câu hỏi thường gặp
1. Yêu cầu cấu hình hệ thống để triển khai và sử dụng website là gì?
Phía người dùng chỉ cần thiết bị có trình duyệt web hiện đại (Google Chrome, Firefox, Safari, Edge) hỗ trợ chuẩn HTML5 và WebRTC, có camera và micro hoạt động ổn định. Phía máy chủ backend yêu cầu Node.js v18 trở lên, kết nối mạng tối thiểu 100Mbps và tài khoản cơ sở dữ liệu MongoDB Atlas.
2. Hệ thống xử lý thế nào khi đường truyền mạng của người dùng bị chập chờn?
Giao thức WebRTC tự động điều chỉnh tốc độ khung hình (frame rate) dựa trên băng thông sẵn có. Trong trường hợp gián đoạn kết nối, cơ chế socket sẽ tự động gửi thông báo trạng thái và cho phép người dùng bấm kết nối lại (re-connect) mà không làm mất phiên lịch hẹn đã ghi nhận trong cơ sở dữ liệu.
3. Dữ liệu hồ sơ bệnh án của bệnh nhân có được bảo mật không?
Hồ sơ bệnh án điện tử (File) được lưu trữ trên cơ sở dữ liệu MongoDB Atlas với chính sách bảo mật nghiêm ngặt. Chỉ có bác sĩ phụ trách ca khám và chính bệnh nhân sở hữu tài khoản mới có quyền truy cập dữ liệu chẩn đoán thông qua các middleware kiểm tra quyền hạn (Role-Based Access Control) tại API backend.
4. Bác sĩ có thể linh hoạt thay đổi thời gian làm việc không?
Có. Hệ thống cung cấp module "Đăng ký ngày nghỉ" chuyên biệt cho bác sĩ. Khi bác sĩ đăng ký nghỉ ngày nào, hệ thống sẽ tự động vô hiệu hóa toàn bộ các TimeSlots thuộc ngày đó trên giao diện đặt lịch của bệnh nhân, ngăn ngừa hoàn toàn tình trạng xung đột thời gian.
5. Chi phí duy trì hệ thống ước tính là bao nhiêu?
Nhờ tận dụng công nghệ P2P không tốn băng thông truyền video qua server trung gian, chi phí vận hành hàng tháng của hệ thống rất thấp. Với quy mô thử nghiệm và vừa nhỏ, chi phí máy chủ đám mây và database dao động từ 500.000 VNĐ đến 1.500.000 VNĐ/tháng.
Kết luận
Đồ án tốt nghiệp "Xây dựng website hỗ trợ chăm sóc sức khỏe" của sinh viên Đỗ Thị Bích Ngọc dưới sự hướng dẫn của PGS. Hoàng Văn Dũng đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng thực tiễn. Bằng việc kết hợp hài hòa giữa nền tảng MERN Stack hiện đại và công nghệ truyền thông thời gian thực WebRTC/PeerJS, dự án đã xây dựng thành công một nền tảng khám chữa bệnh trực tuyến toàn diện, thân thiện và hiệu năng cao.
Công trình không chỉ khẳng định tính khả thi của việc số hóa quy trình tư vấn y tế tại Việt Nam mà còn mở ra hướng phát triển mở rộng cho các hệ thống chăm sóc sức khỏe thông minh trong tương lai. Hệ thống sẵn sàng để được nâng cấp, tích hợp thêm các công nghệ AI và ứng dụng di động, góp phần nâng cao chất lượng cuộc sống và bảo vệ sức khỏe cộng đồng.