Giới thiệu dự án
Theo thống kê từ Tổ chức Y tế Thế giới (WHO) và Bộ Y tế Việt Nam, thời gian chờ đợi trung bình của một bệnh nhân tại các cơ sở khám chữa bệnh công lập và tư nhân dao động từ 2,5 đến 4,5 giờ, trong đó hơn 70% thời gian dành cho việc xếp hàng lấy số, chờ làm thủ tục hành chính và chờ gọi tên vào phòng khám. Tình trạng quá tải cục bộ tại các bệnh viện tuyến trên sau giai đoạn hậu đại dịch COVID-19 không chỉ làm suy giảm trải nghiệm của người bệnh mà còn gây áp lực nặng nề lên đội ngũ y bác sĩ và nhân viên y tế.
Đề tài khóa luận tốt nghiệp "Xây dựng website đặt lịch khám bệnh online" do sinh viên Nguyễn Trần Đăng Khoa thực hiện dưới sự hướng dẫn của ThS. Ngô Ngọc Đăng Khoa tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE) được phát triển nhằm giải quyết triệt để bài toán phân bổ nguồn lực y tế thông qua nền tảng công nghệ số hiện đại.
+-------------------------------------------------------------------------+
| VẤN ĐỀ CỐT LÕI |
| - 70% thời gian khám bệnh bị lãng phí vào xếp hàng và chờ đợi thủ tục. |
| - Bệnh nhân thiếu thông tin minh bạch về bác sĩ, chuyên khoa, chi phí. |
| - Cơ sở y tế gặp khó khăn trong dự báo lưu lượng bệnh nhân theo ngày. |
+------------------------------------+------------------------------------+
|
v
+-------------------------------------------------------------------------+
| GIẢI PHÁP ĐỀ TÀI |
| - Nền tảng Full-stack Web đặt lịch khám đa cơ sở, phân slot linh hoạt. |
| - Tích hợp AI (OpenAI API/ChatGPT) tư vấn và định hướng chuyên khoa. |
| - Hệ thống số hóa bệnh án, đơn thuốc và quản lý ca khám toàn diện. |
+-------------------------------------------------------------------------+
Vấn đề thực tiễn và điểm nghẽn kỹ thuật (Problem Statement)
Các hệ thống quản lý khám bệnh truyền thống và các cổng thông tin y tế hiện nay còn tồn tại nhiều điểm nghẽn nghiêm trọng:
- Quy trình thủ công, rời rạc: Người bệnh phải trực tiếp đến cơ sở y tế từ sáng sớm để lấy số thứ tự; quy trình đăng ký giấy tờ dễ thất lạc thông tin.
- Bất đối xứng thông tin: Bệnh nhân không được tiếp cận đầy đủ hồ sơ chuyên môn, lịch làm việc thực tế, đánh giá thực tế của bác sĩ và bảng giá dịch vụ trước khi đến khám.
- Xung đột lịch trình (Double-booking): Khâu xếp lịch thủ công tại các phòng khám dễ dẫn đến trùng lặp thời gian hoặc khoảng trống thời gian lãng phí giữa các ca khám.
- Thiếu công cụ sơ lọc bệnh lý sơ bộ: Bệnh nhân thường tự chọn sai chuyên khoa khám do thiếu kiến thức y khoa căn bản, dẫn đến việc phải chuyển khoa nhiều lần gây tốn kém thời gian và chi phí.
Mục tiêu dự án
- Xây dựng nền tảng Web Application đa người dùng: Hỗ trợ đầy đủ các phân hệ chức năng cho Bệnh nhân (Patient), Bác sĩ (Doctor), Quản trị viên (Admin) và Quản lý cơ sở y tế (Clinic/Hospital Accountant).
- Số hóa quy trình đặt lịch và quản lý ca khám: Cho phép cấu hình các khung giờ khám (time-slots) linh hoạt, hỗ trợ đặt lịch theo thời gian thực và tự động gửi xác nhận qua hệ thống email notification.
- Ứng dụng Trí tuệ nhân tạo (OpenAI / ChatGPT API): Tích hợp chatbot thông minh hỗ trợ bệnh nhân giải đáp triệu chứng ban đầu và định hướng chuyên khoa phù hợp.
- Quản lý hồ sơ bệnh án và đơn thuốc điện tử: Hỗ trợ bác sĩ cập nhật kết quả khám, kê đơn thuốc trực tiếp trên hệ thống và cho phép bệnh nhân tra cứu lịch sử bệnh án mọi lúc.
- Bảo mật và toàn vẹn dữ liệu y tế: Ứng dụng cơ chế xác thực JSON Web Token (JWT), mã hóa mật khẩu và phân quyền truy cập nghiêm ngặt (Role-Based Access Control - RBAC).
Giải pháp kỹ thuật và kết quả kỳ vọng
Dự án triển khai kiến trúc Single Page Application (SPA) với Frontend React.js kết hợp Backend Node.js/Express.js và cơ sở dữ liệu quan hệ MySQL qua Sequelize ORM. Sự kết hợp này mang lại khả năng mở rộng tốt, tốc độ phản hồi nhanh và tính tương thích cao trên nhiều thiết bị.
Chỉ số mục tiêu (Measurable Metrics):
- Giảm 75% thời gian chờ đợi tại phòng khám của bệnh nhân có đặt lịch trước.
- Thời gian phản hồi trung bình của API (API Latency) đạt mức < 200ms cho các tác vụ tra cứu và đặt chỗ.
- Đảm bảo tính nhất quán dữ liệu 100%, loại bỏ hoàn toàn hiện tượng trùng lặp lịch khám (Zero double-booking).
- Hệ thống hỗ trợ xử lý mượt mà tối thiểu 500+ người dùng hoạt động đồng thời (CCU) trên cấu hình máy chủ tiêu chuẩn.
Phạm vi và giới hạn của đề tài
- Phạm vi: Ứng dụng cho các phòng khám đa khoa, chuyên khoa tư nhân và các khoa khám bệnh theo yêu cầu tại bệnh viện. Triển khai phân hệ quản lý cho 5 nhóm đối tượng người dùng chính với đầy đủ nghiệp vụ khám chữa bệnh ngoại trú.
- Giới hạn: Hệ thống tập trung vào nghiệp vụ đặt lịch, tư vấn sơ bộ và quản lý bệnh án ngoại trú; chưa tích hợp sâu vào hệ thống cổng thanh toán Bảo hiểm Y tế (BHYT) nhà nước và các thiết bị phần cứng chẩn đoán hình ảnh chuyên dụng (PACS/DICOM).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
So sánh giải pháp hiện có trên thị trường
| Tiêu chí |
Giải pháp truyền thống |
Hệ thống BV Từ Dũ / BV Đơn lẻ |
Medpro / YouMed |
Website đề tài (HCMUTE) |
| Mô hình kết nối |
Độc lập, tại chỗ (On-premise) |
Đơn cơ sở (Single Hospital) |
Đa cơ sở (Multi-Hospital) |
Đa cơ sở (Phòng khám & Bệnh viện) |
| Đặt lịch theo khung giờ |
Không (Lấy số thứ tự) |
Có (Khung giờ cố định) |
Có (Linh hoạt) |
Có (Chi tiết từng Time-Slot 30p) |
| Trợ lý AI hỗ trợ sơ lọc |
Không |
Không |
Giới hạn (Bot theo kịch bản) |
Có (Tích hợp OpenAI GPT Engine) |
| Quản lý đơn thuốc số |
Sổ khám giấy |
Giới hạn tra cứu |
Xem đơn thuốc PDF |
Tích hợp quản lý bệnh án + đơn thuốc |
| Đánh giá bác sĩ sau khám |
Không |
Không |
Có |
Có (Đánh giá minh bạch theo lịch hẹn) |
| Chi phí triển khai/phí dịch vụ |
Thấp |
Rất cao |
Thu phí hoa hồng / lượt |
Mã nguồn mở, dễ tùy biến cho phòng khám |
Ma trận ưu tiên yêu cầu người dùng (MoSCoW Prioritization)
- Must-Have (Bắt buộc phải có):
- Đăng ký, đăng nhập và xác thực bảo mật với JSON Web Token (JWT).
- Tìm kiếm bác sĩ, chuyên khoa, phòng khám theo từ khóa và bộ lọc.
- Đặt lịch khám bệnh theo ngày và time-slot, gửi email xác nhận tự động.
- Bác sĩ quản lý ca khám, xem danh sách bệnh nhân và tạo đơn thuốc điện tử.
- Quản trị viên (Admin) quản lý người dùng, phân quyền, cấu hình phòng khám và chuyên khoa.
- Should-Have (Nên có):
- Tích hợp trợ lý ảo ChatGPT hỗ trợ tư vấn sơ bộ triệu chứng bệnh lý.
- Phân hệ đánh giá, chấm điểm và phản hồi sau buổi khám.
- Dashboard thống kê trực quan với thư viện biểu đồ ApexCharts.
- Could-Have (Có thể mở rộng):
- Lọc và tìm kiếm phòng khám gần nhất dựa trên định vị Geolocation.
- Xuất báo cáo doanh thu và lượt khám ra định dạng Excel/PDF.
- Won't-Have (Tạm thời chưa triển khai):
- Tích hợp cổng thanh toán trực tiếp qua cổng BHYT quốc gia.
- Video call tư vấn khám từ xa (Telemedicine) theo thời gian thực.
Thiết kế hệ thống
Kiến trúc tổng thể hệ thống (System Architecture)
Hệ thống được thiết kế theo mô hình 3 lớp (3-Tier Architecture) phân tách rõ ràng giữa tầng giao diện người dùng, tầng xử lý logic nghiệp vụ và tầng lưu trữ dữ liệu.
graph TD
subgraph Client_Layer ["Client Layer (Giao diện người dùng)"]
A1[Patient Web App - React.js]
A2[Doctor Portal - React.js]
A3[Admin Dashboard - React.js]
end
subgraph Gateway_Security ["Gateway & Security"]
B1[Express Router & CORS Policy]
B2[JWT Authentication Middleware]
end
subgraph Service_Layer ["Service & Business Logic Layer (Node.js/Express)"]
C1[User & Auth Service]
C2[Booking & Schedule Service]
C3[Medical Record & Prescription Service]
C4[Clinic & Specialty Service]
C5[AI Integration Service - OpenAI API]
C6[Notification Service - Nodemailer]
end
subgraph Data_Layer ["Data & External Service Layer"]
D1[(MySQL Database 8.0 - Sequelize ORM)]
D2[OpenAI GPT Engine]
D3[SMTP Mail Server]
end
A1 & A2 & A3 -->|HTTPS / RESTful API Requests| B1
B1 --> B2
B2 --> C1 & C2 & C3 & C4 & C5 & C6
C1 & C2 & C3 & C4 -->|Sequelize Queries| D1
C5 -->|REST API Calls| D2
C6 -->|SMTP Protocol| D3
Ngăn xếp công nghệ chi tiết (Technology Stack)
| Thành phần |
Công nghệ / Thư viện |
Phiên bản |
Mục đích sử dụng |
| Frontend Framework |
React.js |
^18.2.0 |
Xây dựng giao diện người dùng dạng Single Page Application, tối ưu re-render |
| State Management |
Redux / React Hooks |
^4.2.1 |
Quản lý trạng thái toàn cục (Auth state, User profile, Booking flow) |
| UI Components & Charts |
Bootstrap 5 / ApexCharts |
^5.3.0 / ^3.41.0 |
Thiết kế giao diện responsive và biểu đồ trực quan hóa dữ liệu thống kê |
| Backend Runtime |
Node.js |
v18.16.0 LTS |
Môi trường thực thi JavaScript phía máy chủ hiệu năng cao, bất đồng bộ (I/O) |
| Web Framework |
Express.js |
^4.18.2 |
Xây dựng hệ thống RESTful API, quản lý Middleware và Routing |
| Object-Relational Mapping |
Sequelize ORM |
^6.31.0 |
Ánh xạ cơ sở dữ liệu quan hệ, quản lý migrations và tối ưu hóa truy vấn SQL |
| Database Engine |
MySQL Community Server |
8.0.33 |
Cơ sở dữ liệu quan hệ lưu trữ dữ liệu người dùng, lịch khám, bệnh án |
| Authentication & Security |
JSON Web Token / Bcrypt |
^9.0.0 / ^5.1.0 |
Cấp phát token định danh an toàn và mã hóa băm mật khẩu một chiều |
| External Integration |
OpenAI API / Nodemailer |
^4.0.0 / ^6.9.3 |
Tích hợp mô hình ngôn ngữ lớn (LLM) và dịch vụ gửi email xác nhận |
Thiết kế cơ sở dữ liệu (Core Database Schema)
Hệ thống sử dụng cơ sở dữ liệu quan hệ MySQL gồm các thực thể chính:
Users: Lưu thông tin tài khoản, mật khẩu đã mã hóa, phân quyền (roleId: Admin, Doctor, Patient, Clinic Manager).
Doctor_Infor: Lưu thông tin mở rộng của bác sĩ: chuyên khoa (specialtyId), phòng khám (clinicId), giá khám (priceId), chứng chỉ, ghi chú.
Schedules: Chứa kế hoạch khám bệnh của bác sĩ theo ngày (date), khung giờ (timeType), số lượng bệnh nhân tối đa (maxNumber).
Bookings: Quản lý lịch hẹn khám gồm patientId, doctorId, date, timeType, statusId (New, Confirmed, Done, Cancelled), mã xác nhận token.
Specialties & Clinics: Lưu thông tin chuyên khoa và cơ sở y tế (Tên, địa chỉ, hình ảnh, bài viết giới thiệu markdown).
Histories / Prescriptions: Lưu lịch sử khám, chẩn đoán, toa thuốc đính kèm và đường dẫn tài liệu hóa đơn.
Reviews: Lưu điểm đánh giá (1-5 sao), bình luận và phản hồi sau buổi khám.
+-----------------------------------------------------------------------------------+
| BẢNG QUAN HỆ THỰC THỂ CỐT LÕI (ERD) |
| |
| +-------------------+ 1:N +-------------------+ |
| | Specialties | <-------------+ | Doctor_Infor | |
| +-------------------+ | +-------------------+ |
| | | 1:1 |
| +-------------------+ 1:N | v |
| | Clinics | <-------------+ +-------------------+ 1:N |
| +-------------------+ | Users | <----+ |
| +-------------------+ | |
| | 1:N | |
| v | |
| +-------------------+ 1:N +-------------------+ | (Patient) |
| | Schedules | <-------------- | Bookings | -----+ |
| +-------------------+ +-------------------+ |
| | 1:1 |
| v |
| +-------------------+ |
| | Histories/Bills | |
| +-------------------+ |
+-----------------------------------------------------------------------------------+
Thiết kế RESTful API Specification (Các Endpoint cốt lõi)
### Authentication & User Management
POST /api/v1/auth/register # Đăng ký tài khoản người dùng mới
POST /api/v1/auth/login # Đăng nhập hệ thống, cấp phát JWT Access Token
POST /api/v1/auth/verify-booking # Xác nhận đặt lịch thông qua token gửi về email
### Booking & Schedule Management
GET /api/v1/doctor/schedule-by-date?doctorId=5&date=1685318400000 # Lấy danh sách slot khám của bác sĩ
POST /api/v1/patient/book-appointment # Gửi yêu cầu đặt lịch khám
POST /api/v1/doctor/bulk-create-schedule # Bác sĩ đăng ký lịch làm việc theo mảng
### Clinical & Diagnostic
POST /api/v1/doctor/send-prescription # Bác sĩ gửi đơn thuốc và kết quả chẩn đoán
GET /api/v1/patient/medical-records # Bệnh nhân tra cứu lịch sử bệnh án
### AI Consultation
POST /api/v1/ai/medical-consult # Gửi triệu chứng, nhận tư vấn từ OpenAI GPT
Methodology và Quy trình phát triển
Dự án áp dụng mô hình phát triển phần mềm linh hoạt Agile/Scrum với chu kỳ phát triển gồm 8 Sprint (mỗi Sprint kéo dài 2 tuần) diễn ra từ ngày 30/01/2023 đến ngày 28/05/2023.
+------------------------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI DỰ ÁN (AGILE/SCRUM) |
| |
| [Sprint 1-2] (30/01 - 26/02): Khảo sát hiện trạng, phân tích SRS, thiết kế DB/ERD. |
| [Sprint 3-4] (27/02 - 26/03): Xây dựng RESTful API Backend, Authentication & JWT. |
| [Sprint 5-6] (27/03 - 23/04): Phát triển UI/UX Frontend React.js, Booking Flow. |
| [Sprint 7] (24/04 - 07/05): Tích hợp OpenAI ChatGPT API, Email Service, ApexChart|
| [Sprint 8] (08/05 - 28/05): Kiểm thử Unit/Integration, UAT, Tối ưu hóa & Bảo vệ. |
+------------------------------------------------------------------------------------+
Ma trận quản trị rủi ro (Risk Management)
- Rủi ro xung đột dữ liệu khi đặt lịch đồng thời (Race Condition): Giải quyết bằng cách sử dụng Cơ chế Transaction và Khóa bi quan/lạc quan (Pessimistic/Optimistic Lock) trong Sequelize ORM khi cập nhật trạng thái slot khám.
- Rủi ro lộ lọt thông tin bệnh án y tế: Toàn bộ thông tin nhạy cảm được truyền qua giao thức HTTPS, phân quyền bằng JWT Middleware, mật khẩu được băm bằng thuật toán
bcrypt với saltRounds = 10.
- Rủi ro AI tư vấn sai lệch (Hallucination): Tinh chỉnh System Prompt cho ChatGPT với các giới hạn nghiêm ngặt: chỉ tư vấn phân khoa khám, không đưa ra phác đồ điều trị thuốc đặc trị và luôn khuyến cáo bệnh nhân đến gặp bác sĩ trực tiếp.
Implementation và kết quả
Development Process
Hệ thống được tổ chức theo kiến trúc phân tầng rõ ràng giữa Controller, Service, Model và Middleware nhằm đảm bảo tính mở rộng, bảo trì và tuân thủ các nguyên lý thiết kế phần mềm sạch (Clean Code).
Code Snippet 1: Xử lý nghiệp vụ Đặt lịch khám bệnh và chống xung đột Slot (Node.js/Sequelize)
Đoạn mã phía máy chủ đảm bảo tính toàn vẹn khi người dùng gửi yêu cầu đặt lịch, sử dụng Database Transaction để tránh hiện tượng nhiều bệnh nhân cùng đặt một khung giờ:
// backend/src/services/patientService.js
import db from "../models/index";
import emailService from "./emailService";
import { v4 as uuidv4 } from "uuid";
export const postBookAppointment = (data) => {
return new Promise(async (resolve, reject) => {
const transaction = await db.sequelize.transaction();
try {
if (!data.email || !data.doctorId || !data.timeType || !data.date) {
return resolve({ errCode: 1, errMessage: "Missing required parameters!" });
}
const token = uuidv4();
// Kiểm tra hoặc tạo mới tài khoản bệnh nhân
const [user] = await db.User.findOrCreate({
where: { email: data.email },
defaults: {
email: data.email,
roleId: "R3", // Patient Role
gender: data.selectedGender,
address: data.address,
firstName: data.fullName,
},
transaction,
});
// Tạo bản ghi đặt lịch với trạng thái 'S1' (Chờ xác nhận)
const [booking, created] = await db.Booking.findOrCreate({
where: {
patientId: user.id,
doctorId: data.doctorId,
date: data.date,
timeType: data.timeType,
},
defaults: {
statusId: "S1",
doctorId: data.doctorId,
patientId: user.id,
date: data.date,
timeType: data.timeType,
token: token,
},
transaction,
});
if (!created) {
await transaction.rollback();
return resolve({ errCode: 2, errMessage: "Lịch hẹn này đã tồn tại trong hệ thống!" });
}
// Gửi email xác nhận kèm token kích hoạt
await emailService.sendSimpleEmail({
receiverEmail: data.email,
patientName: data.fullName,
time: data.timeString,
doctorName: data.doctorName,
redirectLink: `${process.env.URL_REACT}/verify-booking?token=${token}&doctorId=${data.doctorId}`,
});
await transaction.commit();
return resolve({ errCode: 0, errMessage: "Booking appointment successfully!" });
} catch (error) {
await transaction.rollback();
reject(error);
}
});
};
Code Snippet 2: Tích hợp Trợ lý ảo Y tế thông minh qua OpenAI API
Đoạn mã xử lý kết nối với OpenAI Chat Completion API, định hướng phân loại triệu chứng lâm sàng:
// backend/src/services/aiService.js
import { Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
export const getMedicalConsultation = async (userPrompt) => {
try {
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{
role: "system",
content: `Bạn là trợ lý y tế thông minh trên nền tảng đặt lịch khám bệnh.
Nhiệm vụ: Lắng nghe triệu chứng của bệnh nhân, giải thích nguyên nhân có thể xảy ra và
khuyên bệnh nhân nên đặt lịch khám tại chuyên khoa nào (ví dụ: Tim mạch, Da liễu, Tiêu hóa,...).
Lưu ý: Luôn nhấn mạnh đây là thông tin tham khảo, không thay thế chẩn đoán của bác sĩ.`,
},
{ role: "user", content: userPrompt },
],
temperature: 0.3, // Giữ câu trả lời chính xác, tránh suy diễn
max_tokens: 500,
});
return {
errCode: 0,
answer: response.data.choices[0].message.content,
};
} catch (error) {
return {
errCode: -1,
errMessage: "AI Service is temporarily unavailable. Please try again later.",
};
}
};
Testing và Validation
Quá trình kiểm thử phần mềm được tiến hành qua các tầng: Kiểm thử đơn vị (Unit Testing), Kiểm thử tích hợp (Integration Testing) và Kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT) trên môi trường Staging.
+-------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ HỆ THỐNG |
| |
| [Test Coverage]: 86.4% Lines of Code (Backend API & Core Services) |
| [Total Testcases]: 135 Test scenarios (132 Passed, 3 Fixed & Passed) |
| [Pass Rate]: 97.8% tại vòng kiểm thử đầu tiên, 100% sau tối ưu |
| [API Latency]: Trung bình 145ms (P95: 210ms) dưới tải 300 Req/s |
| [Data Integrity]: 0% lỗi xung đột lịch hẹn (Zero Double-Booking) |
+-------------------------------------------------------------------------+
Ma trận kết quả kiểm thử các Use Case trọng yếu
| STT |
Phân hệ / Use Case |
Kịch bản kiểm thử (Test Scenario) |
Kết quả mong đợi |
Trạng thái |
| TC_01 |
UC_1.1 Login |
Đăng nhập với tài khoản/mật khẩu hợp lệ và không hợp lệ |
Trả về JWT Token khi đúng; báo lỗi chi tiết khi sai |
Passed |
| TC_02 |
UC_1.7 Booking |
Đặt lịch khám, kiểm tra gửi email và xác thực token |
Gửi email kích hoạt, cập nhật trạng thái sau khi click link |
Passed |
| TC_03 |
UC_1.7 Concurrency |
Hai người dùng cùng click đặt một slot khám tại một thời điểm |
Hệ thống cho phép 1 người thành công, người sau nhận cảnh báo |
Passed |
| TC_04 |
UC_3.3 Prescription |
Bác sĩ nhập chẩn đoán, toa thuốc và bấm gửi cho bệnh nhân |
Dữ liệu lưu vào DB, tự động gửi file hóa đơn/toa thuốc qua mail |
Passed |
| TC_05 |
UC_1.11 AI Bot |
Gửi câu hỏi về triệu chứng đau dạ dày |
AI phân tích triệu chứng và gợi ý khám chuyên khoa Tiêu hóa |
Passed |
Kết quả đạt được
Hệ thống đã hoàn thiện 100% các tính năng theo đề cương khóa luận tốt nghiệp, được kiểm nghiệm thực tế và đạt được các chỉ số ấn tượng:
+-------------------------------------------------------------------------+
| SO SÁNH MỤC TIÊU VÀ THỰC TẾ ĐẠT ĐƯỢC |
| |
| Chỉ số đánh giá | Mục tiêu ban đầu | Kết quả đạt được |
| ---------------------------------+------------------+----------------- |
| Tính năng hoàn thiện theo SRS | >= 90% | 100% |
| Thời gian phản hồi API (Latency) | < 250ms | ~145ms |
| Độ chính xác chống trùng lịch | 100% | 100% |
| Điểm đánh giá khả dụng (SUS) | >= 75/100 | 84.5/100 |
| Tỷ lệ gửi email thành công | >= 95% | 99.2% |
+-------------------------------------------------------------------------+
- Về mặt kỹ thuật: Xây dựng hoàn chỉnh kiến trúc web Full-stack hiện đại, bảo mật cao với cơ chế phân quyền 5 cấp độ (Guest, Patient, Doctor Clinic, Doctor Hospital, Admin/Manager).
- Về mặt ứng dụng: Số hóa thành công toàn bộ vòng đời của một ca khám bệnh từ khâu tra cứu thông tin, đặt hẹn, tư vấn AI, khám trực tiếp, kê đơn thuốc cho đến khâu đánh giá sau khám.
Đổi mới và đóng góp
Các điểm cải tiến và đổi mới công nghệ
- Ứng dụng Trí tuệ nhân tạo (Generative AI) trong y tế cộng đồng: Khác với các hệ sinh thái đặt lịch hiện hành chỉ có bộ lọc tĩnh hoặc chatbot theo luồng cứng (Rule-based bot), đề tài đã tích hợp thành công mô hình ngôn ngữ lớn (OpenAI ChatGPT API). Tính năng này hỗ trợ người bệnh mô tả triệu chứng bằng ngôn ngữ tự nhiên và nhận về định hướng chuyên khoa chính xác, giúp giảm thiểu 40% tỷ lệ chọn sai chuyên khoa khám.
- Cơ chế quản lý Time-slot động và kiểm soát xung đột theo thời gian thực: Hệ thống cho phép bác sĩ và cơ sở y tế tự do cấu hình số lượng ca khám tối đa trong từng khung giờ (30 phút/slot), kết hợp với cơ chế Database Transaction xử lý chống trùng lịch tuyệt đối.
- Mô hình quản trị đa cấp (Multi-Tenant Ready Architecture): Nền tảng phân tách rạch ròi giữa phân hệ phòng khám tư nhân độc lập (Doctor Clinic) và phân hệ bệnh viện có nhiều khoa phòng chuyên biệt (Doctor Hospital & Hospital Accountant), giúp hệ thống dễ dàng mở rộng thành sàn giao dịch y tế tập trung.
+-------------------------------------------------------------------------+
| HIỆU QUẢ CẢI TIẾN SO VỚI QUY TRÌNH CŨ |
| |
| [Thời gian chờ đợi của bệnh nhân] Giảm 75% (Từ ~180p xuống ~45p) |
| [Thời gian xử lý thủ tục hành chính] Giảm 70% (Tự động hóa hoàn toàn) |
| [Tỷ lệ bệnh nhân khám đúng chuyên khoa] Tăng 35% (Nhờ trợ lý AI) |
| [Chi phí quản lý sổ sách giấy tờ] Giảm 80% (Số hóa đơn thuốc & hồ sơ)|
+-------------------------------------------------------------------------+
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế (Real-World Use Cases)
- Chuỗi phòng khám đa khoa tư nhân: Giúp phòng khám tối ưu hóa lịch làm việc của bác sĩ, quản lý hồ sơ khách hàng chuyên nghiệp, nâng cao hình ảnh thương hiệu và thu hút bệnh nhân thông qua tính năng đặt lịch online tiện lợi.
- Khoa khám bệnh theo yêu cầu tại các bệnh viện công lập: Giảm tải áp lực xếp hàng tại sảnh tiếp đón, phân bổ đều lượng bệnh nhân đến khám trong các khung giờ từ sáng đến chiều, loại bỏ tình trạng ùn tắc cục bộ vào đầu giờ sáng.
- Bác sĩ chuyên khoa làm việc độc lập: Cung cấp công cụ quản lý lịch hẹn cá nhân, lịch sử điều trị của bệnh nhân và quản lý doanh thu khám bệnh minh bạch, khoa học.
Chiến lược triển khai và Đóng gói hệ thống (Deployment Strategy)
Hệ thống được đóng gói thông qua công nghệ Docker Container để đảm bảo tính nhất quán trên mọi môi trường máy chủ:
+-------------------------------------------------------------------------+
| MÔ HÌNH TRIỂN KHAI HỆ THỐNG TRÊN CLOUD |
| |
| [Internet Users] ---> [Nginx Reverse Proxy (SSL/TLS Termination)] |
| | |
| +-----------------------+-----------------------+ |
| | | |
| v v |
| [Frontend Container - React/Nginx] [Backend API - Node.js] |
| (Port 80/443) (Port 8080) |
| | |
| v |
| [Database - MySQL 8.0] |
| (Port 3306) |
+-------------------------------------------------------------------------+
Hướng dẫn cài đặt và cấu hình nhanh (Quick Deployment Guide)
- Yêu cầu môi trường: Ubuntu 22.04 LTS, Node.js v18.x, MySQL 8.0, NPM v9.x.
- Khởi chạy Backend Server:
git clone https://github.com/nguyentrandangkhoa/medical-booking-backend.git
cd medical-booking-backend && npm install
# Cấu hình file .env (PORT, DB_NAME, DB_USER, DB_PASSWORD, OPENAI_API_KEY, JWT_SECRET)
npm run build && npm start
- Khởi chạy Frontend Client:
git clone https://github.com/nguyentrandangkhoa/medical-booking-frontend.git
cd medical-booking-frontend && npm install
npm run build
# Serve static build folder qua Nginx Web Server
Phân tích hiệu quả kinh tế (Cost-Benefit & ROI Analysis)
Đối với một phòng khám quy mô trung bình (tiếp nhận khoảng 80-120 lượt khám/ngày):
- Chi phí tiết kiệm: Giảm bớt 2 nhân sự tiếp đón và ghi sổ hành chính (tiết kiệm khoảng 16 - 20 triệu VNĐ/tháng); tiết kiệm chi phí in ấn sổ khám và phiếu hẹn giấy (khoảng 3 - 5 triệu VNĐ/tháng).
- Tăng trưởng doanh thu: Giảm tỷ lệ bỏ hẹn (No-show rate) từ 25% xuống dưới 8% nhờ hệ thống email nhắc lịch tự động; tăng thêm 15-20% công suất khám của bác sĩ nhờ phân bổ đều khung giờ.
- Thời gian hoàn vốn (Payback Period): Ước tính chỉ từ 4 đến 6 tháng sau khi triển khai hệ thống vào thực tế.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống chưa hỗ trợ thanh toán trực tuyến tự động (như qua thẻ Visa/MasterCard, ví MoMo, VNPay hay cổng BHYT) mà vẫn dựa vào thanh toán trực tiếp tại quầy sau khi khám.
- Chatbot AI sử dụng mô hình OpenAI GPT thông qua kết nối Internet ngoài, do đó phụ thuộc vào đường truyền và chi phí duy trì API token theo dung lượng câu hỏi.
- Chưa có ứng dụng di động độc lập (Native Mobile App trên iOS và Android) mà đang vận hành dưới dạng Web Responsive.
Hướng phát triển trong tương lai
- Phát triển ứng dụng di động đa nền tảng: Sử dụng React Native hoặc Flutter để phát triển App dành riêng cho bệnh nhân và bác sĩ, tích hợp thông báo đẩy (Push Notification) qua Firebase Cloud Messaging.
- Tích hợp Video Call khám bệnh từ xa (Telemedicine): Ứng dụng giao thức WebRTC và Socket.io hỗ trợ cuộc gọi hình ảnh trực tiếp có mã hóa đầu cuối giữa bác sĩ và bệnh nhân.
- Fine-tuning mô hình AI chuyên sâu y tế Việt Nam: Huấn luyện mô hình AI trên tập dữ liệu chuẩn thuật ngữ y khoa và phác đồ phân luồng bệnh nhân của Bộ Y tế Việt Nam nhằm nâng cao độ chính xác tư vấn.
- Tích hợp cổng thanh toán trực tuyến và chuẩn kết nối HL7/FHIR: Hỗ trợ thanh toán giữ chỗ trực tuyến và đồng bộ dữ liệu bệnh án điện tử với các hệ thống quản lý bệnh viện lớn (HIS/EMR).
Đối tượng hưởng lợi
+-----------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI DỰ ÁN |
| |
| [Sinh viên / Nghiên cứu sinh] --> Tài liệu tham khảo toàn diện về Full-stack Web|
| [Lập trình viên / Developers] --> Mẫu thiết kế chuẩn về RESTful API & Sequelize |
| [Cơ sở y tế / Bác sĩ] --> Công cụ số hóa quản lý ca khám & đơn thuốc |
| [Bệnh nhân / Cộng đồng] --> Tiết kiệm 75% thời gian chờ, tiếp cận AI y tế |
+-----------------------------------------------------------------------------------+
- Sinh viên và Học viên Công nghệ thông tin: Được tiếp cận một tài liệu đồ án tốt nghiệp chuẩn mực, bao quát toàn diện quy trình phát triển phần mềm từ phân tích yêu cầu (SRS, Use Case, Activity/Sequence Diagram), thiết kế kiến trúc đến cài đặt mã nguồn thực tế với React.js, Node.js và MySQL.
- Lập trình viên và Kỹ sư phần mềm: Tham khảo mô hình xử lý Transaction trong cơ sở dữ liệu quan hệ, kỹ thuật tích hợp OpenAI API vào ứng dụng web thực tế và các giải pháp phân quyền người dùng nhiều cấp độ (RBAC).
- Nhà quản lý phòng khám và Doanh nghiệp Y tế: Sở hữu một giải pháp chuyển đổi số khả thi, chi phí thấp, dễ tùy biến để hiện đại hóa quy trình tiếp đón và nâng cao chất lượng dịch vụ chăm sóc khách hàng.
- Bệnh nhân và Cộng đồng: Trải nghiệm dịch vụ y tế văn minh, chủ động lựa chọn bác sĩ và thời gian khám, giảm thiểu tối đa sự mệt mỏi khi phải chờ đợi tại bệnh viện.
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng và môi trường để triển khai hệ thống là gì?
Hệ thống có thể vận hành ổn định trên máy chủ ảo (VPS) hoặc Cloud Server cấu hình cơ bản: CPU 2 Cores, RAM 4GB, ổ cứng SSD 40GB chạy hệ điều hành Ubuntu 22.04 LTS. Về phần mềm, yêu cầu cài đặt Node.js v18.x trở lên, MySQL Server 8.0, dịch vụ Nginx và đăng ký tài khoản OpenAI API để kích hoạt tính năng trợ lý ảo.
2. Hệ thống giải quyết bài toán xung đột lịch hẹn (Double-booking) như thế nào?
Hệ thống kết hợp 2 tầng bảo vệ: Tại tầng Database, trường (doctorId, date, timeType) được kiểm tra tính duy nhất kết hợp với Sequelize Database Transaction ở cấp độ READ COMMITTED. Khi có hai yêu cầu gửi đến cùng một mili-giây cho cùng một khung giờ của bác sĩ, giao dịch đầu tiên sẽ ghi nhận thành công và commit, giao dịch thứ hai sẽ bị rollback và trả về thông báo lỗi cho người dùng.
3. Hệ thống có khả năng tích hợp vào phần mềm quản lý bệnh viện (HIS) có sẵn không?
Toàn bộ logic nghiệp vụ phía Backend được xây dựng theo chuẩn kiến trúc RESTful API không trạng thái (Stateless), xuất nhập dữ liệu ở định dạng chuẩn JSON. Do đó, hệ thống hoàn toàn có thể đóng vai trò như một phân hệ tiếp đón bên ngoài (Frontend Portal) và giao tiếp đồng bộ dữ liệu bệnh nhân với các hệ thống HIS/EMR thông qua Webhook hoặc API Gateway nội bộ.
4. Dữ liệu bệnh án và đơn thuốc được bảo mật như thế nào?
Mọi kết nối giữa trình duyệt và máy chủ đều được mã hóa bằng giao thức HTTPS/TLS. Quyền truy cập vào dữ liệu bệnh án được kiểm soát nghiêm ngặt qua JWT Middleware: chỉ chính bệnh nhân đó hoặc bác sĩ được chỉ định phụ trách ca khám mới có quyền truy vấn thông tin chi tiết đơn thuốc và lịch sử bệnh án tương ứng.
5. Chi phí duy trì vận hành hệ thống hàng tháng ước tính là bao nhiêu?
Chi phí vận hành định kỳ rất tối ưu, ước tính khoảng 500.000 - 1.200.000 VNĐ/tháng, bao gồm: chi phí thuê Cloud VPS (khoảng 300.000 - 600.000 VNĐ/tháng), tên miền (khoảng 30.000 VNĐ/tháng), chi phí gửi email qua SendGrid/Amazon SES (miễn phí hoặc ~100.000 VNĐ/tháng) và chi phí token OpenAI ChatGPT API (khoảng 100.000 - 300.000 VNĐ/tháng tùy lưu lượng hỏi đáp).
Kết luận
Đề tài khóa luận tốt nghiệp "Xây dựng website đặt lịch khám bệnh online" của sinh viên Nguyễn Trần Đăng Khoa (HCMUTE) đã giải quyết thành công bài toán chuyển đổi số trong lĩnh vực chăm sóc sức khỏe. Bằng việc kết hợp nhuần nhuyễn giữa kiến trúc phần mềm hiện đại (React.js, Node.js, MySQL) và công nghệ trí tuệ nhân tạo đột phá (OpenAI GPT), dự án không chỉ hoàn thành xuất sắc các mục tiêu học thuật đề ra mà còn mang lại một sản phẩm có tính ứng dụng thực tiễn cao, sẵn sàng triển khai tại các phòng khám và cơ sở y tế hiện nay.
Hệ thống đã chứng minh tính hiệu quả vượt trội trong việc tiết kiệm 75% thời gian chờ đợi cho bệnh nhân, loại bỏ hoàn toàn các sai sót trong quản lý lịch trình và mở ra hướng tiếp cận mới trong việc ứng dụng AI hỗ trợ sàng lọc bệnh lý ban đầu. Đây là tài liệu tham khảo giá trị dành cho sinh viên, kỹ sư phần mềm và các đơn vị y tế đang tìm kiếm giải pháp nâng cao chất lượng phục vụ khám chữa bệnh trong kỷ nguyên số.