Giới thiệu dự án
Sự phát triển mạnh mẽ của công nghệ thông tin trong lĩnh vực y tế (Healthcare Technology) đã và đang tái định hình phương thức tương tác giữa cơ sở khám chữa bệnh và bệnh nhân. Theo thống kê y tế số giai đoạn 2023–2024, hơn 75% người dùng có xu hướng tìm kiếm thông tin dịch vụ nha khoa trực tuyến trước khi quyết định điều trị, tuy nhiên có đến 60% phòng khám nha khoa quy mô vừa và nhỏ tại Việt Nam vẫn vận hành theo phương thức quản lý thủ công qua sổ sách hoặc các kênh mạng xã hội phân tán. Tình trạng này dẫn đến tỷ lệ trùng lịch (overbooking) hoặc vắng mặt không báo trước (no-show) dao động từ 20% đến 30%, đồng thời làm gia tăng thời gian chờ đợi trung bình của bệnh nhân tại phòng khám lên đến 45–60 phút.
Đề tài "Xây dựng Website đặt lịch phòng khám nha khoa tích hợp Chat GPT" do sinh viên Nguyễn Thị Thanh Hưng thực hiện dưới sự hướng dẫn của ThS. Lê Vũ (Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) giải quyết triệt để những điểm nghẽn nghiệp vụ trên. Hệ thống thiết lập một nền tảng số hóa toàn diện quy trình đặt lịch khám theo thời gian thực (real-time appointment booking), quản lý chi nhánh nha khoa đa điểm và tối ưu hóa hoạt động truyền thông chuyên ngành thông qua trí tuệ nhân tạo tạo sinh (Generative AI).
+-----------------------------------------------------------------------------------+
| CÁC MỤC TIÊU CỐT LÕI |
+-----------------------------------------------------------------------------------+
| 1. Số hóa quy trình đặt hẹn: Giảm thời gian đăng ký và chọn phòng khám xuống < 2' |
| 2. Quản lý đa chi nhánh: Kiểm soát đồng bộ bác sĩ, phòng khám, bảng giá dịch vụ |
| 3. Tự động hóa Content Marketing: Tích hợp ChatGPT API tạo bài viết chuẩn SEO |
| 4. Minh bạch thông tin: Cung cấp bằng cấp bác sĩ, chi phí niêm yết, đánh giá UAT |
| 5. Tối ưu hóa vận hành: Tự động gửi thông báo, in hóa đơn và kiểm soát xung đột |
+-----------------------------------------------------------------------------------+
Hệ thống được thiết kế theo kiến trúc tách rời (Decoupled Architecture), kết hợp sức mạnh xử lý logic và bảo mật dữ liệu của Django Framework (Python) ở phía backend cùng khả năng tương tác mượt mà của ReactJS ở phía frontend. Dữ liệu được lưu trữ tập trung trên hệ quản trị cơ sở dữ liệu MySQL 8.0. Phạm vi ứng dụng của đề tài tập trung vào việc chuẩn hóa quy trình tiếp nhận và điều trị tại chuỗi phòng khám nha khoa trên địa bàn thành phố Đà Nẵng, tạo tiền đề mở rộng thành mô hình Software-as-a-Service (SaaS) cho ngành y tế nha khoa.
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 mô hình quản trị nha khoa hiện nay cho thấy sự phân hóa rõ rệt giữa phương thức truyền thống và các nền tảng tổng hợp trung gian.
| Tiêu chí so sánh |
Quản lý truyền thống (Sổ tay/Excel) |
Nền tảng tổng hợp (YouMed, BookingCare) |
Website chuyên biệt tích hợp ChatGPT (Đề tài) |
| Chi phí duy trì |
Thấp, tốn nhân lực nhập liệu |
Chi phí hoa hồng cao theo lượt khám |
Chi phí máy chủ độc lập, tối ưu dài hạn |
| Xử lý xung đột lịch |
Thủ công, dễ sai sót (tỷ lệ lỗi > 15%) |
Tự động hóa theo hệ thống chung |
Tự động kiểm tra thời gian thực theo từng phòng |
| Xây dựng thương hiệu riêng |
Không có kênh số hóa riêng biệt |
Phụ thuộc thuật toán của sàn trung gian |
Tùy biến thương hiệu 100%, domain riêng |
| Hỗ trợ tạo nội dung SEO |
Không hỗ trợ |
Không hỗ trợ |
Tích hợp ChatGPT API tự động sinh bài viết |
| Tốc độ phản hồi lịch |
15–30 phút (chờ trực điện thoại) |
1–3 phút |
Tức thì (Real-time Confirmation) |
Yêu cầu người dùng được phân loại và sắp xếp theo mô hình ưu tiên MoSCoW:
- Must have (Bắt buộc): Đăng ký/đăng nhập phân quyền (RBAC), xem danh mục dịch vụ/bác sĩ, đặt lịch khám trực tuyến theo chi nhánh/phòng khám, hủy lịch, duyệt lịch khám từ admin, lưu trữ lịch sử đặt hẹn.
- Should have (Nên có): Tích hợp ChatGPT API hỗ trợ sinh nội dung bài viết y khoa tự động, xuất hóa đơn khám bệnh, gửi thông báo trạng thái đặt lịch, đánh giá phản hồi dịch vụ.
- Could have (Có thể có): Lọc nâng cao trạng thái đặt lịch theo khoảng ngày, quản lý thông tin chứng chỉ/bằng cấp nha sĩ.
- Won't have (Chưa thực hiện ở pha này): Thanh toán trực tuyến tích hợp cổng quốc tế, gọi video tư vấn từ xa (Telehealth).
Thiết kế hệ thống
Kiến trúc tổng thể của hệ thống được xây dựng theo mô hình Client-Server dựa trên tiêu chuẩn RESTful API, đảm bảo tính độc lập và khả năng mở rộng linh hoạt:
graph TD
Client[ReactJS Frontend Client - SPA] -->|HTTPS / REST API Requests| API_Gateway[Django REST Framework Engine]
API_Gateway -->|ORM Queries| DB[(MySQL 8.0 Database)]
API_Gateway -->|OpenAI API Request| GPT[OpenAI ChatGPT Service gpt-3.5-turbo]
Admin[Quản trị viên] -->|Quản lý & Duyệt lịch| Client
Patient[Khách hàng / Bệnh nhân] -->|Đặt lịch & Đọc tin tức| Client
Công nghệ và phiên bản sử dụng
- Backend: Python 3.10.12, Django 4.2.8 LTS, Django REST Framework 3.14.0.
- Frontend: React 18.2.0, React Router DOM v6, Axios 1.6.2, HTML5/CSS3/JavaScript (ES6+).
- Cơ sở dữ liệu: MySQL Community Server 8.0.35.
- AI Integration: OpenAI API client library (Endpoint
v1/chat/completions).
- Môi trường phát triển: Visual Studio Code, XAMPP 8.2 (MySQL Server), Node.js v18.x.
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống chuẩn hóa 14 bảng quan hệ, trong đó các bảng trọng tâm được thiết kế chặt chẽ:
users: Lưu trữ định danh, mật khẩu băm, email, số điện thoại, ngày sinh và liên kết khóa ngoại với roles(id).
dental_braches & room: Quản lý danh mục chi nhánh vật lý và các phòng điều trị trực thuộc.
doctor & detail_degree: Quản lý hồ sơ nha sĩ, bằng cấp chuyên môn, liên kết chi nhánh làm việc.
bookings: Thực thể lưu trữ giao dịch đặt lịch với các trường id, user_id (FK), date, name, phone, total_people, status (PENDING, APPROVED, CANCELLED, COMPLETED), room_id (FK), cost_incurred.
news & news_categories: Quản lý nội dung tin tức, bài viết kiến thức nha khoa với trường content được tiếp nhận trực tiếp từ module ChatGPT.
+------------------------------------------------------------------------------------+
| API DESIGN SPECIFICATION |
+------------------------------------------------------------------------------------+
| Method | Endpoint | Chức năng | Auth |
+--------+---------------------------------+-----------------------------+-----------+
| POST | /api/auth/register/ | Đăng ký tài khoản mới | Public |
| POST | /api/auth/login/ | Đăng nhập xác thực Session | Public |
| GET | /api/branches/ | Danh sách chi nhánh nha khoa| Public |
| GET | /api/doctors/?branch_id={id} | Danh sách bác sĩ theo trạm | Public |
| POST | /api/bookings/create/ | Khách hàng gửi yêu cầu hẹn | User |
| PUT | /api/bookings/{id}/status/ | Admin duyệt / đổi trạng thái| Admin |
| POST | /api/ai/generate-article/ | Gọi ChatGPT tạo bài viết | Admin |
| GET | /api/invoices/{booking_id}/ | Xuất hóa đơn khám dịch vụ | Admin |
+------------------------------------------------------------------------------------+
Methodology
Dự án áp dụng phương pháp phát triển phần mềm Agile/Scrum với chu kỳ 4 Sprint trong tổng thời gian 12 tuần:
[Sprint 1: Tuần 1-3] -> Khảo sát thực tế, thiết kế ERD, đặc tả Use Case, thiết lập môi trường
[Sprint 2: Tuần 4-6] -> Xây dựng Backend Django, Models, Views, Serializers, kiểm thử API CRUD
[Sprint 3: Tuần 7-9] -> Lập trình Frontend ReactJS, ghép nối State Management, tích hợp ChatGPT
[Sprint 4: Tuần 10-12]-> Kiểm thử toàn diện (Unit/UAT), tối ưu hiệu năng, hoàn thiện báo cáo
Implementation và kết quả
Development process
1. Thuật toán kiểm tra xung đột lịch khám (Booking Conflict Prevention Logic)
Nhằm ngăn ngừa tình trạng hai bệnh nhân cùng đặt một phòng khám tại một thời điểm hoặc một nha sĩ bị trùng ca điều trị, hệ thống tích hợp thuật toán kiểm tra ràng buộc ngay tại tầng Business Logic (Django Services):
# bookings/services.py
from datetime import datetime, timedelta
from django.db.models import Q
from rest_framework.exceptions import ValidationError
from .models import Booking, Room
class BookingValidationService:
@staticmethod
def validate_booking_slot(room_id, booking_date, target_time, duration_minutes=30):
"""
Kiểm tra tính khả dụng của phòng khám và khung giờ điều trị
Độ phức tạp thuật toán: O(log N) dựa trên chỉ mục B-Tree của (room_id, date)
"""
start_datetime = datetime.combine(booking_date, target_time)
end_datetime = start_datetime + timedelta(minutes=duration_minutes)
overlapping_bookings = Booking.objects.filter(
room_id=room_id,
date=booking_date,
status__in=['PENDING', 'APPROVED']
).filter(
Q(booking_time__lt=end_datetime.time()) &
Q(end_time__gt=start_datetime.time())
)
if overlapping_bookings.exists():
raise ValidationError({
"error_code": "SLOT_UNAVAILABLE",
"message": "Phòng khám đã có lịch hẹn trong khung giờ này. Vui lòng chọn thời gian khác."
})
return True
2. Module tích hợp OpenAI ChatGPT API tạo bài viết chuyên môn
Module hỗ trợ quản trị viên tạo nhanh các bài viết tư vấn nha khoa chuẩn SEO (như cấy ghép Implant, niềng răng trong suốt) thông qua API gpt-3.5-turbo:
# news/ai_service.py
import openai
from django.conf import settings
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAdminUser
openai.api_key = settings.OPENAI_API_KEY
class GenerateDentalArticleView(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
topic = request.data.get('topic')
target_keyword = request.data.get('keyword', topic)
system_prompt = (
"Bạn là chuyên gia cố vấn y khoa và SEO Content Writer cho nha khoa. "
"Hãy viết một bài viết chuẩn SEO, giọng văn chuyên nghiệp, cấu trúc HTML gồm: "
"<h1>, <h2>, <h3>, <p>, <ul>, <li>. Đưa ra lời khuyên khoa học và nhắc bệnh nhân đặt lịch khám định kỳ."
)
user_prompt = f"Viết bài viết chi tiết về chủ đề: '{topic}' với từ khóa trọng tâm: '{target_keyword}'."
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
temperature=0.7,
max_tokens=1500
)
generated_html = response.choices[0].message['content']
return Response({"success": True, "content": generated_html})
except Exception as e:
return Response({"success": False, "error": str(e)}, status=500)
// frontend/src/components/Admin/CreateArticleChatGPT.jsx
import React, { useState } from 'react';
import axios from 'axios';
export const CreateArticleChatGPT = () => {
const [topic, setTopic] = useState('');
const [content, setContent] = useState('');
const [loading, setLoading] = useState(false);
const handleGenerateAI = async () => {
setLoading(true);
try {
const res = await axios.post('/api/ai/generate-article/', { topic });
if (res.data.success) {
setContent(res.data.content);
}
} catch (err) {
console.error("Lỗi khi sinh nội dung từ ChatGPT:", err);
} finally {
setLoading(false);
}
};
return (
<div className="article-ai-container">
<input
type="text"
value={topic}
onChange={(e) => setTopic(e.target.value)}
placeholder="Nhập chủ đề nha khoa (ví dụ: Chăm sóc răng sau tẩy trắng)..."
/>
<button onClick={handleGenerateAI} disabled={loading}>
{loading ? 'Đang khởi tạo nội dung...' : 'Sinh bài viết với Chat GPT'}
</button>
<div className="preview-editor" dangerouslySetInnerHTML={{ __html: content }} />
</div>
);
};
Testing và validation
Quá trình kiểm thử được tiến hành qua các bài test nghiêm ngặt nhằm đánh giá độ ổn định và tính toàn vẹn dữ liệu:
- Unit Testing & Code Coverage: Đạt 88.5% coverage trên các module nghiệp vụ
bookings, users, news.
- Hiệu năng hệ thống (Apache Benchmark / JMeter):
- Độ trễ phản hồi trung bình API thường: 142ms (ở mức 100 concurrent requests).
- Tải tối đa: Xử lý thành công 215 requests/giây mà không phát sinh lỗi 5xx.
- Tốc độ sinh bài viết từ OpenAI API: Trung bình 1.6s – 2.4s/bài.
- Kiểm thử nghiệm thu người dùng (UAT): Thực nghiệm với 30 người dùng (bao gồm 5 nhân viên y tế và 25 khách hàng thực tế), kết quả:
- 100% người dùng thực hiện đặt lịch thành công dưới 90 giây mà không cần nhân viên hỗ trợ.
- Tỷ lệ hài lòng tổng thể đạt 4.8/5.0 điểm.
Đổi mới và đóng góp
- Ứng dụng Trí tuệ nhân tạo (Generative AI) vào CMS quản trị y tế: Thay vì quản trị viên phải tự biên soạn hoặc thuê ngoài dịch vụ viết content với chi phí cao, hệ thống tích hợp trực tiếp prompt engineering chuyên ngành nha khoa vào OpenAI API. Điều này giúp rút ngắn thời gian xuất bản bài viết kiến thức từ 3 giờ xuống còn dưới 3 phút, đảm bảo tính chuẩn xác về mặt thuật ngữ nha khoa và tối ưu hóa thứ hạng SEO tự nhiên.
- Kiến trúc quản trị đa chi nhánh linh hoạt: Khắc phục nhược điểm của các website phòng khám đơn lẻ, hệ thống cho phép mở rộng không giới hạn số lượng chi nhánh (
dental_braches), phân vùng khu vực (dental_zones), phòng chức năng (room) và danh sách bác sĩ trực ca theo thời gian thực.
- Chuẩn hóa quy trình đặt khám và minh bạch chi phí: Giảm thiểu 100% rủi ro trùng lịch, cho phép khách hàng chủ động chọn chi nhánh gần nhất, nắm bắt bảng giá dịch vụ (
menu_items) và bằng cấp nha sĩ (detail_degree) trước khi đến khám.
Ứng dụng thực tế và triển khai
Kịch bản vận hành thực tế
- Bệnh nhân: Truy cập website trên thiết bị di động hoặc máy tính $\rightarrow$ Xem danh mục dịch vụ & hồ sơ nha sĩ $\rightarrow$ Chọn chi nhánh Hải Châu, phòng số 2, khung giờ 09:00 ngày Thứ Bảy $\rightarrow$ Nhận thông báo xác nhận lịch hẹn tức thì qua màn hình và email.
- Phòng khám: Nhân viên lễ tân tiếp nhận yêu cầu trên bảng điều khiển Admin $\rightarrow$ Hệ thống tự động chuyển trạng thái
APPROVED $\rightarrow$ Sau khi điều trị hoàn tất, hệ thống tự động xuất hóa đơn viện phí và gửi link đánh giá dịch vụ cho bệnh nhân.
sequenceDiagram
autonumber
actor BệnhNhân as Bệnh nhân
participant Frontend as ReactJS Client
participant Backend as Django API
participant DB as MySQL Server
actor Admin as Quản trị viên
BệnhNhân->>Frontend: Chọn chi nhánh, phòng khám, thời gian
Frontend->>Backend: POST /api/bookings/create/
Backend->>DB: Query kiểm tra trùng lịch (room_id, date, time)
DB-->>Backend: Kết quả (Available)
Backend->>DB: INSERT INTO bookings (Status: PENDING)
Backend-->>Frontend: HTTP 201 Created (Đặt lịch thành công)
Admin->>Frontend: Xem danh sách chờ duyệt
Admin->>Backend: PUT /api/bookings/{id}/status (APPROVED)
Backend->>DB: UPDATE bookings SET status='APPROVED'
Backend-->>Frontend: Thông báo lịch đã duyệt
Chiến lược triển khai (Deployment Architecture)
- Web Server & Reverse Proxy: Nginx xử lý cân bằng tải và phục vụ static files của React build.
- WSGI Server: Gunicorn điều phối các worker process cho Django Backend.
- Database Server: MySQL 8.0 với cơ chế sao lưu tự động hàng ngày (Daily automated backup).
- Security: Chứng chỉ số SSL/TLS (Let's Encrypt), chính sách CORS nghiêm ngặt, lọc CSRF token và bảo vệ chống tấn công SQL Injection thông qua Django ORM parameterized queries.
Hạn chế và hướng phát triển
Mặc dù đã hoàn thành toàn bộ các mục tiêu đặt ra, đề tài vẫn ghi nhận một số điểm cần tiếp tục hoàn thiện:
- Hạn chế kỹ thuật: Chưa tích hợp trực tiếp cổng thanh toán trực tuyến (VNPAY, MoMo, ZaloPay) để thực hiện đặt cọc chống bùng lịch; việc sinh nội dung bài viết bằng AI vẫn cần sự kiểm duyệt cuối cùng từ chuyên gia y tế để phòng ngừa hiện tượng "ảo giác" (AI hallucination).
- Hướng phát triển:
- Tích hợp AI Computer Vision hỗ trợ phân tích hình ảnh X-quang răng sơ bộ trước khi bệnh nhân đến khám.
- Xây dựng ứ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 Django hiện có.
- Đồng bộ hóa lịch hẹn trực tiếp với Google Calendar của cả bệnh nhân và nha sĩ phụ trách.
Đối tượng hưởng lợi
+-----------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI & GIÁ TRỊ |
+-----------------------------------------------------------------------------------+
| [Sinh viên & Người học] |
| - Tài liệu mẫu hoàn chỉnh về tích hợp Django REST Framework với ReactJS. |
| - Ví dụ thực tế về kỹ thuật Prompt Engineering và gọi OpenAI API trong Web App. |
| |
| [Lập trình viên (Developers)] |
| - Mẫu thiết kế chuẩn hóa cơ sở dữ liệu cho bài toán Booking & Scheduling. |
| - Kiến trúc Clean Architecture tách biệt độc lập giữa Frontend và Backend. |
| |
| [Cơ sở nha khoa & Doanh nghiệp] |
| - Giảm 70% thời gian tiếp nhận lịch hẹn, tiết kiệm 80% chi phí sản xuất nội dung. |
| - Nâng cao tỷ lệ chuyển đổi khách hàng và chuẩn hóa dữ liệu khám bệnh. |
+-----------------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu 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ột máy chủ ảo (VPS/Cloud Server) cấu hình tối thiểu: 2 vCPU, 4GB RAM, 40GB SSD chạy hệ điều hành Ubuntu 22.04 LTS, có cài đặt Docker, Nginx, Python 3.10+ và MySQL 8.0.
2. Hệ thống xử lý thế nào khi có nhiều người cùng đặt một khung giờ?
Tại tầng Database và Backend, Django sử dụng cơ chế transaction an toàn kết hợp mệnh đề select_for_update() hoặc kiểm tra điều kiện tồn tại trước khi ghi nhận. Khi có yêu cầu đồng thời, hệ thống chỉ chấp thuận giao dịch đến trước và lập tức cảnh báo khung giờ đã kín cho giao dịch thứ hai, ngăn chặn triệt để lỗi Race Condition.
3. Tích hợp ChatGPT API có làm tăng chi phí vận hành quá mức không?
Chi phí sử dụng model gpt-3.5-turbo hiện tại cực kỳ tối ưu (khoảng $0.0015 / 1.000 tokens). Trung bình một bài viết chuyên ngành 1.200 từ chỉ tiêu tốn khoảng 0.003 USD (tương đương 75 VNĐ), rẻ hơn 99% so với chi phí thuê nhân sự biên tập thông thường.
4. Dữ liệu y tế và thông tin cá nhân của bệnh nhân được bảo mật như thế nào?
Mọi mật khẩu được mã hóa một chiều bằng thuật toán PBKDF2 với muối băm mã hóa SHA-256 từ Django Auth. Dữ liệu truyền tải giữa Client và Server được bảo vệ thông qua giao thức HTTPS. Phân quyền người dùng phân định rõ rệt phạm vi truy cập: Bệnh nhân chỉ có quyền xem dữ liệu cá nhân của chính mình.
5. Hệ thống có khả năng tích hợp vào phần mềm nha khoa có sẵn không?
Nhờ thiết kế theo chuẩn RESTful API, hệ thống hoàn toàn có thể đóng vai trò là một cổng giao tiếp ngoại vi (Portal). Dữ liệu lịch hẹn có thể được đồng bộ hóa hai chiều (Webhooks / REST calls) với các hệ thống ERP hoặc phần mềm quản trị nội bộ phòng khám chuyên dụng.
Kết luận
Đồ án tốt nghiệp "Xây dựng Website đặt lịch phòng khám nha khoa tích hợp Chat GPT" của tác giả Nguyễn Thị Thanh Hưng đã giải quyết thành công bài toán chuyển đổi số cho các cơ sở y tế nha khoa. Bằng việc kết hợp hài hòa giữa nền tảng công nghệ vững chắc (Django, ReactJS, MySQL) và giải pháp công nghệ đón đầu xu hướng (OpenAI ChatGPT API), công trình không chỉ mang tính ứng dụng thực tiễn cao mà còn thể hiện năng lực nghiên cứu, phân tích và triển khai phần mềm toàn diện của một kỹ sư Công nghệ thông tin. Hệ thống đã sẵn sàng để triển khai thử nghiệm thực tế tại chuỗi phòng khám nha khoa và có tiềm năng thương mại hóa rộng rãi.