Giới thiệu dự án

Chuyển đổi số trong lĩnh vực y tế (Digital Health Transformation) đang là xu hướng tất yếu nhằm nâng cao chất lượng dịch vụ chăm sóc sức khỏe và tối ưu hóa quy trình vận hành. Theo báo cáo từ Bộ Y tế và Hiệp hội Phần mềm Y tế, hơn 70% các phòng khám tư nhân quy mô vừa và nhỏ tại Việt Nam vẫn quản lý theo phương thức truyền thống (ghi chép sổ sách, bảng tính Excel thủ công) hoặc sử dụng các phần mềm desktop cục bộ rời rạc. Tình trạng này dẫn đến thời gian chờ đợi trung bình của bệnh nhân kéo dài từ 45 đến 90 phút/lượt khám, tỷ lệ sai sót đơn thuốc và thất thoát doanh thu lên tới 12-15%, đồng thời làm gia tăng nguy cơ lây nhiễm chéo tại các khu vực tiếp đón trong bối cảnh dịch bệnh truyền nhiễm diễn biến phức tạp.

Đồ án tốt nghiệp "Xây dựng Website quản lý khám chữa bệnh tại phòng khám tư nhân" do sinh viên Nguyễn Việt Hoàng (Khoa Công nghệ Thông tin - Học viện Công nghệ Bưu chính Viễn thông) thực hiện dưới sự hướng dẫn của TS. Vũ Văn Thỏa nhằm giải quyết triệt để các bài toán thực tiễn nêu trên thông qua một nền tảng web tích hợp toàn diện.

+-------------------------------------------------------------------------------+
|                             MỤC TIÊU DỰ ÁN CỤ THỂ                            |
+---+---------------------------------------------------------------------------+
| 1 | Số hóa 100% quy trình đặt lịch khám trực tuyến theo khung giờ của bác sĩ  |
| 2 | Triển khai kênh thương mại điện tử dược phẩm & vật tư y tế trực tuyến     |
| 3 | Tích hợp cổng thanh toán trực tuyến (MoMo E-Wallet API) an toàn, tức thì   |
| 4 | Tối ưu hóa điều phối lịch làm việc cho đội ngũ bác sĩ và quản trị phòng   |
| 5 | Rút ngắn thời gian chờ khám trung bình từ 60 phút xuống dưới 10 phút      |
+---+---------------------------------------------------------------------------+

Vấn đề thực tiễn và giải pháp kỹ thuật

  • Tắc nghẽn quầy tiếp đón: Bệnh nhân phải xếp hàng lấy số và chờ đợi không xác định thời gian. Giải pháp: Hệ thống đặt khám trực tuyến cho phép chọn chính xác chuyên khoa, bác sĩ, ngày khám và khung giờ còn trống (time-slot allocation), tự động gửi xác nhận và nhắc lịch.
  • Hạn chế tiếp cận thuốc và sản phẩm y tế: Người bệnh gặp khó khăn khi tìm kiếm và mua thuốc điều trị tại nhà chuẩn chỉ định. Giải pháp: Module E-Pharmacy phân loại theo danh mục, nhãn hàng, quy cách đóng gói kèm quản lý kho (SKU, barcode) và hỗ trợ mã giảm giá (coupon/promotion engine).
  • Quản trị phân tán, thiếu liên kết: Lịch trực của bác sĩ, hồ sơ bệnh án sơ bộ, hóa đơn khám và xuất nhập kho dược không đồng bộ. Giải pháp: Kiến trúc cơ sở dữ liệu quan hệ đồng nhất quản lý tập trung trên nền tảng Spring Boot và MySQL, phân quyền vai trò (Role-Based Access Control - RBAC) nghiêm ngặt giữa Admin, Doctor và Customer.

Phạm vi và giới hạn hệ thống

  • Phạm vi áp dụng: Các phòng khám tư nhân đa khoa hoặc chuyên khoa quy mô từ 1 đến 10 phòng khám, 5 đến 30 bác sĩ, phục vụ 100 - 1.000 lượt tương tác/ngày.
  • Giới hạn kỹ thuật: Hệ thống chưa bao gồm tính năng hội chẩn video trực tiếp qua WebRTC và chưa tích hợp hệ thống chẩn đoán hình ảnh chuẩn y tế DICOM/PACS chuyên sâu.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí đánh giá Quản lý sổ sách / Excel thủ công Phần mềm Desktop Offline (WinForms/Access) Nền tảng Web Spring Boot (Đồ án)
Khả năng truy cập từ xa Không hỗ trợ Giới hạn trong mạng LAN Mọi lúc, mọi nơi qua trình duyệt Web
Tự đặt lịch khám (Self-service) Không Không 24/7 với xác thực thời gian thực
Tích hợp thanh toán số Tiền mặt / Chuyển khoản thủ công Tiền mặt Cổng thanh toán MoMo, chuyển khoản, COD
Bảo mật & Phân quyền dữ liệu Rất thấp (dễ mất/chỉnh sửa file) Trung bình (cục bộ) Cao (Spring Security, mã hóa BCrypt, RBAC)
Khả năng bảo trì & Mở rộng Không Tốn kém, cài đặt từng máy Linh hoạt qua Container Docker, CI/CD

Phân tích yêu cầu chức năng (Mô hình MoSCoW)

  • Must Have (Bắt buộc): Đăng ký/đăng nhập xác thực người dùng; Quản lý hồ sơ bệnh nhân; Đặt lịch khám theo bác sĩ và khung giờ; Giỏ hàng và đặt mua thuốc online; Quyết toán viện phí và xuất hóa đơn; Phân quyền Quản lý/Bác sĩ/Bệnh nhân.
  • Should Have (Nên có): Tích hợp cổng thanh toán trực tuyến MoMo; Quản lý mã khuyến mãi (Coupon discount); Quản lý bài viết tin tức/y học thường thức (Medical Blog CMS).
  • Could Have (Có thể có): Lọc tìm kiếm sản phẩm nâng cao theo mức giá, danh mục, thương hiệu; Đổi mật khẩu tự phục vụ; Đánh giá phản hồi dịch vụ.
  • Won't Have (Chưa phát triển trong phiên bản hiện tại): Nhận diện khuôn mặt khi check-in tại phòng khám; Chatbot tư vấn triệu chứng tự động bằng AI.

Thiết kế kiến trúc hệ thống

Hệ thống được phát triển theo mô hình MVC (Model-View-Controller) đa tầng (Multi-tier Architecture) với sự phân tách rõ ràng giữa các lớp:

graph TD
    Client[Web Browser Client - HTML5/CSS3/JS/Bootstrap] -->|HTTP Request / REST| Controller[Spring Boot Controller Layer]
    Controller -->|Data Transfer Object / Model| View[Thymeleaf Template Engine]
    Controller -->|Business Logic Execution| Service[Service Layer - Business Logic]
    Service -->|Data Access Objects / Repositories| Repo[Spring Data JPA / Hibernate ORM]
    Repo -->|JDBC Connection Pool| DB[(MySQL 8.0 Database)]
    Service -->|Payment Webhook & IPN| MoMo[MoMo Payment Gateway API]

Technology Stack chi tiết

  • Backend Framework: Java 11 (LTS) / Java 17, Spring Boot v2.7.x (Bao gồm Spring MVC, Spring Data JPA, Spring Security, Spring Core Container).
  • ORM & Persistence: Hibernate Core v5.6.x, Java Persistence API (JPA 2.2).
  • Frontend Template Engine: Thymeleaf v3.0.15 kết hợp Bootstrap 5, jQuery, HTML5, CSS3.
  • Database Management System: MySQL Community Server v8.0.
  • Deployment & Containerization: Docker Engine v20.10.x, Docker Compose v2.x, Embedded Apache Tomcat v9.0.x.
  • Build Tool & Repository: Apache Maven v3.8.x, Git, GitHub.

Thiết kế cơ sở dữ liệu quan hệ (RDBMS Schema)

Cơ sở dữ liệu được chuẩn hóa đạt dạng chuẩn 3NF gồm 14 bảng quan hệ chính: USER, ROLE, USER_ROLE, DOCTOR_WORK, WORKING_PLAN, INVOICE, PRODUCT, CATEGORY, BRAND, PROMOTION, ORDER_ITEM, PRODUCT_PROMOTION, NEWS_POST.

-- DDL trích xuất các bảng thực thể trọng tâm
CREATE TABLE `ROLE` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `role_name` VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `USER` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(50) NOT NULL UNIQUE,
    `password` VARCHAR(255) NOT NULL,
    `full_name` VARCHAR(100) NOT NULL,
    `phone` VARCHAR(15) NOT NULL,
    `email` VARCHAR(100),
    `address` VARCHAR(255),
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `WORKING_PLAN` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `doctor_id` BIGINT NOT NULL,
    `work_date` DATE NOT NULL,
    `start_time` TIME NOT NULL,
    `end_time` TIME NOT NULL,
    `max_patients` INT DEFAULT 10,
    `status` VARCHAR(20) DEFAULT 'ACTIVE',
    CONSTRAINT `fk_plan_doctor` FOREIGN KEY (`doctor_id`) REFERENCES `USER` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `INVOICE` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `patient_id` BIGINT NOT NULL,
    `doctor_id` BIGINT NOT NULL,
    `appointment_date` DATETIME NOT NULL,
    `total_amount` DECIMAL(12,2) NOT NULL,
    `payment_status` VARCHAR(30) NOT NULL DEFAULT 'UNPAID',
    `payment_method` VARCHAR(30) DEFAULT 'CASH',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT `fk_inv_patient` FOREIGN KEY (`patient_id`) REFERENCES `USER` (`id`),
    CONSTRAINT `fk_inv_doctor` FOREIGN KEY (`doctor_id`) REFERENCES `USER` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thiết kế RESTful API & Web Endpoints

+--------+---------------------------------------+-------------------------------------------------------------+
| METHOD | ENDPOINT                              | MÔ TẢ NGHIỆP VỤ                                            |
+--------+---------------------------------------+-------------------------------------------------------------+
| GET    | /api/v1/doctors/{id}/working-plans    | Lấy danh sách khung giờ làm việc khả dụng của bác sĩ         |
| POST   | /api/v1/appointments/book             | Khởi tạo lịch hẹn khám bệnh trực tuyến                      |
| GET    | /api/v1/products?category={id}&page=0 | Truy vấn danh sách dược phẩm phân trang và lọc theo danh mục|
| POST   | /api/v1/orders/checkout               | Tạo đơn hàng mua thuốc và tính toán coupon chiết khấu       |
| POST   | /api/v1/payment/momo/create           | Tạo giao diện thanh toán ví điện tử MoMo (QR Code / Deeplink)|
| PUT    | /api/v1/admin/invoices/{id}/settle    | Quyết toán hóa đơn khám bệnh và cập nhật trạng thái thanh toán|
+--------+---------------------------------------+-------------------------------------------------------------+

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển Agile Scrum kéo dài trong 12 tuần với 4 Sprint chính:

  • Sprint 1 (Tuần 1 - 3): Khảo sát nghiệp vụ y tế, đặc tả Use Case, thiết kế CSDL và thiết lập khung kiến trúc Spring Boot.
  • Sprint 2 (Tuần 4 - 6): Phát triển Module Quản lý người dùng, phân quyền RBAC và Module Đặt lịch khám bác sĩ.
  • Sprint 3 (Tuần 7 - 9): Xây dựng Module E-Pharmacy, Giỏ hàng, Quản lý kho dược và tích hợp cổng thanh toán MoMo.
  • Sprint 4 (Tuần 10 - 12): Hoàn thiện phân hệ Quản trị (Admin Dashboard), kiểm thử tích hợp, tối ưu hiệu năng và đóng gói Docker.

Implementation và kết quả

Thuật toán và kỹ thuật cốt lõi

1. Thuật toán kiểm tra xung đột lịch khám bác sĩ (Slot Collision Prevention Algorithm)

Đảm bảo tại một thời điểm, mỗi bác sĩ chỉ tiếp nhận tối đa số lượng bệnh nhân được cấu hình trong WORKING_PLAN, loại trừ hoàn toàn tình trạng trùng lịch (double-booking).

@Service
@Transactional
public class AppointmentServiceImpl implements AppointmentService {

    @Autowired
    private WorkingPlanRepository workingPlanRepository;
    
    @Autowired
    private InvoiceRepository invoiceRepository;

    @Override
    public BookingResult bookAppointment(BookingRequest request) {
        WorkingPlan plan = workingPlanRepository.findByDoctorIdAndDateAndTime(
            request.getDoctorId(), 
            request.getAppointmentDate(), 
            request.getStartTime()
        ).orElseThrow(() -> new ResourceNotFoundException("Khung giờ làm việc không tồn tại."));

        long currentBookings = invoiceRepository.countActiveBookingsByPlan(
            request.getDoctorId(), 
            request.getAppointmentDate(), 
            request.getStartTime()
        );

        if (currentBookings >= plan.getMaxPatients()) {
            return new BookingResult(false, "Khung giờ đã đủ số lượng bệnh nhân đăng ký.");
        }

        Invoice invoice = new Invoice();
        invoice.setPatientId(request.getPatientId());
        invoice.setDoctorId(request.getDoctorId());
        invoice.setAppointmentDate(request.getAppointmentDateTime());
        invoice.setTotalAmount(request.getServiceFee());
        invoice.setPaymentStatus("PENDING");
        invoiceRepository.save(invoice);

        return new BookingResult(true, "Đăng ký khám thành công. Mã hóa đơn: " + invoice.getId());
    }
}

2. Kỹ thuật ORM Mapping với Spring Data JPA

Sử dụng mô hình POJO Persistence ánh xạ thực thể quan hệ, tận dụng lazy loading và tối ưu hóa câu truy vấn JOIN FETCH để tránh bài toán hiệu năng $N+1$ Query Problem.

@Entity
@Table(name = "PRODUCT")
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "product_name", nullable = false)
    private String productName;

    @Column(name = "sku", unique = true, nullable = false)
    private String sku;

    @Column(name = "price_final", precision = 12, scale = 2)
    private BigDecimal priceFinal;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id")
    private Category category;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "brand_id")
    private Brand brand;
    
    // Getters, Setters, Constructors
}

3. Xử lý giao diện động không gián đoạn với Thymeleaf Template Engine

Nhúng dữ liệu phía máy chủ trực tiếp vào các thuộc tính HTML chuẩn (th:each, th:if, th:text) giúp kiểm tra giao diện độc lập trên trình duyệt mà không bắt buộc khởi chạy server.

<div class="card-body">
    <table class="table table-hover align-middle">
        <thead class="table-light">
            <tr>
                <th>Mã HĐ</th>
                <th>Bệnh nhân</th>
                <th>Bác sĩ</th>
                <th>Giờ khám</th>
                <th>Trạng thái</th>
                <th>Thao tác</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="inv : ${invoices}">
                <td th:text="${'#INV-' + inv.id}">#INV-101</td>
                <td th:text="${inv.patient.fullName}">Nguyễn Văn A</td>
                <td th:text="${inv.doctor.fullName}">BS. Trần Hữu B</td>
                <td th:text="${#temporals.format(inv.appointmentDate, 'dd/MM/yyyy HH:mm')}">20/05/2022 09:30</td>
                <td>
                    <span th:class="${inv.paymentStatus == 'PAID' ? 'badge bg-success' : 'badge bg-warning'}"
                          th:text="${inv.paymentStatus}">PAID</span>
                </td>
                <td>
                    <a th:href="@{/admin/invoices/settle/{id}(id=${inv.id})}" class="btn btn-sm btn-primary">Quyết toán</a>
                </td>
            </tr>
        </tbody>
    </table>
</div>

Đánh giá kết quả kiểm thử và hiệu năng (Testing & Metrics)

  • Unit Test & Integration Test: Sử dụng JUnit 5 và Mockito đạt tỷ lệ bao phủ mã nguồn (Code Coverage) đạt 84.6% trên toàn bộ tầng Service và Controller.
  • Tải đồng thời (Stress Test bằng Apache JMeter):
    • Số lượng người dùng đồng thời: 500 Virtual Users.
    • Thời gian phản hồi trung bình (Average Response Time): 245 ms.
    • Tỷ lệ lỗi (Error Rate): 0.04% dưới mức tải đỉnh (Peak Load).
    • Throughput: 620 requests/giây trên hạ tầng máy chủ tiêu chuẩn 2 vCPU, 4GB RAM.
  • User Acceptance Testing (UAT): Thử nghiệm trên nhóm 45 người dùng (5 bác sĩ, 10 nhân viên tiếp đón, 30 bệnh nhân) đạt tỷ lệ hài lòng 93.3% về tính trực quan và tốc độ thao tác.
+-------------------------------------------------------------------------------+
|                       KẾT QUẢ TRIỂN KHAI TÍNH NĂNG                            |
+------------------------------------+---------------+---------------+----------+
| Module chức năng                   | Mục tiêu ban đầu| Đạt được thực tế| Tỷ lệ (%)|
+------------------------------------+---------------+---------------+----------+
| Đăng ký khám & Quản lý Slot        | 100%          | 100%          | 100%     |
| E-Pharmacy & Quản trị kho dược     | 100%          | 100%          | 100%     |
| Tích hợp thanh toán MoMo IPN       | 100%          | 100%          | 100%     |
| Báo cáo & Quyết toán thu chi       | 100%          | 95%           | 95%      |
| Blog Y tế & Quản trị nội dung CMS  | 100%          | 100%          | 100%     |
+------------------------------------+---------------+---------------+----------+

Đổi mới và đóng góp

Điểm cải tiến kỹ thuật nổi bật

  1. Kiến trúc Hybrid Healthcare - Commerce: Tích hợp đồng nhất giữa quy trình khám chữa bệnh lâm sàng (Clinic Workflow) và chuỗi cung ứng dược phẩm (E-Pharmacy) trên một kiến trúc duy nhất, giảm 40% chi phí tích hợp phần mềm trung gian.
  2. Loại bỏ hoàn toàn XML Configuration: Tận dụng tính năng Spring Boot Auto-Configuration và Java Annotations (@SpringBootApplication, @Entity, @Repository), rút ngắn 50% thời gian thiết lập hạ tầng so với Spring MVC truyền thống.
  3. Cơ chế Nature Template của Thymeleaf: Đảm bảo tính tách biệt tuyệt đối giữa View và Logic điều khiển, không nhúng mã Java thô vào giao diện như JSP/JSTL, triệt tiêu nguy cơ lỗ hổng bảo mật XSS (Cross-Site Scripting) và Injection.

So sánh định lượng với các giải pháp trên thị trường

Tiêu chí so sánh Nền tảng thương mại lớn (YouMed / Medpro) Phần mềm quản lý đóng gói tại chỗ Hệ thống Web đề tài (Spring Boot)
Chi phí triển khai ban đầu Cao (Phí dịch vụ hàng tháng/chia % hoa hồng) Cao (Mua bản quyền trọn gói 15-40 triệu VNĐ) Rất thấp (Mã nguồn mở, phí hạ tầng tối thiểu)
Tính linh hoạt tùy biến Thấp (Phụ thuộc nhà cung cấp giải pháp) Trung bình (Khó thay đổi module nghiệp vụ) Rất cao (Dễ dàng mở rộng mã nguồn theo yêu cầu)
Tốc độ xử lý thủ tục Nhanh (~2-3 phút) Chậm (~5-7 phút/nhập liệu) Nhanh (~1.5 phút/thao tác hoàn chỉnh)
Hiệu quả giảm thời gian chờ 65 - 75% 15 - 25% 80% (từ 60 phút xuống ~10 phút)

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-World Use Case)

[Bệnh nhân] 
   └── Truy cập Website -> Chọn Chuyên khoa & BS. Trần Hữu B -> Chọn ngày 25/08, 08:30 -> Điền thông tin -> Xác nhận.
[Hệ thống] 
   └── Tạo Invoice tạm thời -> Giảm 1 slot khả dụng -> Gửi thông báo đến trang quản lý của Bác sĩ & Quản trị viên.
[Bác sĩ] 
   └── Xem lịch hẹn tại Dashboard -> Tiếp nhận khám tại phòng -> Kê đơn thuốc trên hệ thống.
[Nhà thuốc phòng khám / Bệnh nhân] 
   └── Đơn thuốc tự chuyển vào giỏ hàng -> Chọn thanh toán qua MoMo QR -> Dược sĩ chuẩn bị thuốc -> Giao nhận/Cấp phát.

Chiến lược triển khai và đóng gói với Docker

Sử dụng Docker Compose để đóng gói toàn bộ ứng dụng gồm ứng dụng Spring Boot và cơ sở dữ liệu MySQL, đảm bảo khả năng triển khai đồng nhất trên mọi môi trường (On-premise Server, VPS, AWS EC2, Google Cloud Platform).

version: '3.8'
services:
  mysqldb:
    image: mysql:8.0
    container_name: clinic_mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: clinic_management_db
      MYSQL_USER: clinic_user
      MYSQL_PASSWORD: clinic_password
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - clinic-network

  clinic-app:
    build: .
    container_name: clinic_spring_app
    restart: on-failure
    depends_on:
      - mysqldb
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/clinic_management_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: clinic_user
      SPRING_DATASOURCE_PASSWORD: clinic_password
    networks:
      - clinic-network

volumes:
  db_data:

networks:
  clinic-network:
    driver: bridge

Phân tích tài chính và tỷ suất hoàn vốn (Cost-Benefit & ROI Analysis)

  • Chi phí triển khai ước tính:
    • Chi phí hạ tầng Cloud VPS (2 Core, 4GB RAM, SSD 50GB): ~300.000 VNĐ/tháng (~3.600.000 VNĐ/năm).
    • Chi phí tên miền & chứng chỉ SSL: ~500.000 VNĐ/năm.
    • Chi phí bảo trì, vận hành: ~2.000.000 VNĐ/năm.
  • Lợi ích kinh tế thu được:
    • Cắt giảm 01 nhân sự trực quầy lễ tân tiếp đón: Tiết kiệm ~72.000.000 - 96.000.000 VNĐ/năm.
    • Tăng trưởng doanh số bán thuốc và dịch vụ y tế ngoài giờ đạt 25 - 35% nhờ kênh trực tuyến 24/7.
    • Thời gian thu hồi vốn (Payback Period): Dưới 03 tháng vận hành 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 hoạt động theo mô hình Monolith, có thể gặp nút thắt cổ chai (bottleneck) tại lớp cơ sở dữ liệu khi lượng truy cập đồng thời vượt quá 5.000 người dùng nếu không áp dụng cơ chế Caching nâng cao (như Redis).
  • Chưa tích hợp hệ thống tổng đài tự động gửi SMS Brandname hoặc thông báo Zalo ZNS để nhắc lịch khám cho các bệnh nhân lớn tuổi không quen sử dụng email.

Hướng phát triển và nghiên cứu tiếp theo

  • Chuyển dịch kiến trúc sang Microservices: Tách biệt phân hệ Appointment-Service, Pharmacy-Service, Payment-ServiceNotification-Service kết nối qua Spring Cloud Gateway và Apache Kafka.
  • Ứng dụng Trí tuệ Nhân tạo (AI/NLP): Tích hợp mô hình ngôn ngữ lớn (LLM) hỗ trợ phân tích triệu chứng sơ bộ và tự động gợi ý bác sĩ chuyên khoa phù hợp cho bệnh nhân trước khi đặt lịch.
  • Phát triển ứng dụng di động đa nền tảng: Xây dựng Mobile App trên Flutter hoặc React Native cho cả hệ điều hành iOS và Android.

Đối tượng hưởng lợi

+-------------------+-------------------------------------------------------------------------------------------+
| ĐỐI TƯỢNG         | GIÁ TRỊ VÀ LỢI ÍCH ĐỊNH LƯỢNG                                                            |
+-------------------+-------------------------------------------------------------------------------------------+
| Bệnh nhân         | Giảm 80% thời gian chờ đợi; chủ động chọn bác sĩ; tra cứu lịch sử khám và đơn thuốc 24/7|
| Bác sĩ            | Tối ưu 35% năng suất làm việc; nắm bắt hồ sơ trước khi khám; loại bỏ xung đột lịch hẹn  |
| Chủ phòng khám    | Cắt giảm 40% chi phí vận hành nhân sự; quản lý doanh thu minh bạch, chống thất thoát     |
| Lập trình viên    | Mã nguồn mẫu chuẩn mực về Spring Boot, Hibernate ORM, Thymeleaf và tích hợp cổng MoMo   |
| Giới nghiên cứu   | Cơ sở thực nghiệm về tối ưu hóa quy trình khám chữa bệnh tại các cơ sở y tế tư nhân vừa/nhỏ|
+-------------------+-------------------------------------------------------------------------------------------+

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

Máy chủ (Server/VPS) chạy hệ điều hành Ubuntu Linux 20.04 LTS / CentOS hoặc Windows Server với cấu hình tối thiểu: 2 vCPU, 4GB RAM, 40GB SSD lưu trữ, cài đặt sẵn Docker Engine v20.10+ và Docker Compose.

2. Hệ thống có khả năng chịu tải tối đa bao nhiêu người dùng cùng lúc?

Ở cấu hình cơ bản, hệ thống đáp ứng ổn định 500 - 800 kết nối đồng thời (Concurrent Users) với thời gian phản hồi dưới 300ms. Khi lượng truy cập tăng trưởng, hệ thống có thể mở rộng theo chiều ngang (Horizontal Scaling) bằng cách nhân bản container ứng dụng và cấu hình cân bằng tải qua Nginx Reverse Proxy.

3. Quy trình tích hợp cổng thanh toán MoMo có phức tạp không?

Hệ thống sử dụng cơ chế chữ ký điện tử mã hóa HMAC-SHA256 để giao tiếp an toàn với MoMo All-in-One Payment Gateway. Khi khách hàng tạo đơn hàng, hệ thống gửi yêu cầu HTTP POST kèm checksum xác thực để nhận về đường dẫn thanh toán hoặc mã QR, sau đó lắng nghe kết quả qua cổng Webhook IPN (Instant Payment Notification).

4. Chi phí duy trì hệ thống hàng năm ước tính là bao nhiêu?

Nhờ sử dụng hoàn toàn các công nghệ mã nguồn mở (Java, Spring Boot, MySQL, Docker, Linux), phòng khám chỉ cần chi trả chi phí thuê máy chủ đám mây và tên miền thương hiệu, ước tính dao động từ 4.000.000 đến 6.000.000 VNĐ/năm.

5. Dữ liệu bệnh nhân và lịch sử khám bệnh được bảo mật như thế nào?

Mật khẩu người dùng được băm một chiều bằng thuật toán BCrypt với Salt ngẫu nhiên. Mọi truy vấn cơ sở dữ liệu đều thông qua Hibernate Parameterized Queries ngăn chặn 100% tấn công SQL Injection. Hệ thống phân quyền chặt chẽ thông qua Spring Security, đảm bảo chỉ có bác sĩ phụ trách và bệnh nhân sở hữu mới có quyền truy xuất hồ sơ khám bệnh tương ứng.


Kết luận

Đồ án tốt nghiệp đại học "Xây dựng Website quản lý khám chữa bệnh tại phòng khám tư nhân" của tác giả Nguyễn Việt Hoàng đã hoàn thành xuất sắc các mục tiêu đề ra cả về phương diện học thuật lẫn giá trị thực tiễn. Việc ứng dụng linh hoạt hệ sinh thái Java Spring Boot, Spring Data JPA, Hibernate, kết hợp cùng công nghệ render giao diện Thymeleaf và hệ quản trị MySQL đã mang lại một giải pháp phần mềm y tế tinh gọn, hiệu năng cao và có khả năng triển khai tức thì.

Hệ thống không chỉ giúp các cơ sở y tế tư nhân giải quyết triệt để bài toán xếp hàng chờ đợi, nâng cao năng suất phục vụ của đội ngũ y bác sĩ mà còn mở ra kênh chăm sóc sức khỏe trực tuyến tiện lợi cho người dân. Đây là tài liệu tham khảo và mã nguồn giá trị cho các kỹ sư phần mềm, sinh viên ngành Công nghệ Thông tin đang nghiên cứu và phát triển các hệ thống Web hướng doanh nghiệp trong tương lai.