Giới thiệu dự án

Theo thống kê từ Bộ Y tế và các tổ chức quản lý bệnh viện tại Việt Nam, tình trạng quá tải cục bộ tại các khoa khám bệnh ngoại trú và trung tâm khám sức khỏe định kỳ diễn ra phổ biến với thời gian chờ đợi trung bình của bệnh nhân chiếm tới 65% - 75% tổng thời gian của toàn bộ quy trình khám. Sự thiếu cân bằng tải giữa các phòng khám cận lâm sàng (như xét nghiệm máu, siêu âm, chụp X-quang, điện tim) tạo ra các điểm nghẽn nghiêm trọng, làm gia tăng nguy cơ lây nhiễm chéo và suy giảm chỉ số hài lòng của người bệnh.

Đề tài "Thiết kế hệ thống quản lý và phân luồng khách hàng khám sức khỏe tại bệnh viện" (Hệ thống CMFS - Customer Manager Flow System) do nhóm sinh viên ngành Kỹ thuật Y sinh (Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh) nghiên cứu và phát triển, dưới sự hướng dẫn của ThS. Ngô Bá Việt. Dự án tập trung giải quyết bài toán điều phối luồng bệnh nhân theo thời gian thực (real-time routing) mà không đòi hỏi chi phí đầu tư hạ tầng phần cứng đắt đỏ.

+-------------------------------------------------------------------------------+
|                               HỆ THỐNG CMFS                                   |
|                                                                               |
|  [Bệnh nhân: App Android] ---> (Mạng Wi-Fi/4G) ---> [Cơ sở dữ liệu đám mây]   |
|         |                                                   |                 |
|         v                                                   v                 |
|  [Quét mã QR Check-in]                             [Google Sheets Engine]     |
|  [Xem tải phòng khám]                                       |                 |
|  [Nút nhấn Check-out]                                       v                 |
|                                                   [Web AppSheet Admin]        |
|                                                   - Giám sát luồng 9 phòng    |
|                                                   - Biểu đồ tải Real-time     |
|                                                   - Quản lý CRUD & Xuất CSV   |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Thiết kế ứng dụng di động CMFS trên hệ điều hành Android bằng nền tảng MIT App Inventor 2, cho phép người khám đăng nhập định danh (Họ tên, mã ID 8 ký tự), theo dõi mật độ người tại 9 phòng khám và thực hiện Check-in / Check-out tự động qua mã QR hai chiều.
  2. Xây dựng hệ thống cơ sở dữ liệu thời gian thực trên nền tảng Google Sheets, tự động tính toán số lượng người hiện diện tại từng phòng bằng các công thức mảng và logic hàm tính toán đa tầng.
  3. Phát triển Web App quản trị đa nền tảng thông qua Google AppSheet, hỗ trợ nhân viên y tế theo dõi biểu đồ phụ tải phòng khám, quản lý danh sách bệnh nhân, lọc lịch sử ra vào và xuất/nhập dữ liệu định dạng CSV.
  4. Tối ưu hóa thời gian chờ: Giảm thiểu thời gian chờ khám trung bình cho mỗi khách hàng thông qua cơ chế phân luồng tự do có định hướng (Dynamic Load Balancing).

Phạm vi và giới hạn kỹ thuật

  • Quy mô thử nghiệm: Giới hạn phân luồng cho 9 phòng khám chức năng độc lập, sức chứa cảnh báo định mức tối đa 10 người/phòng.
  • Hạ tầng kết nối: Truyền nhận dữ liệu qua giao thức không dây Wi-Fi/Internet tới máy chủ Google Cloud.
  • Môi trường hoạt động: Thiết bị đầu cuối của bệnh nhân yêu cầu hệ điều hành Android 8.0 trở lên tích hợp camera hỗ trợ giải mã ma trận QR Code.

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

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

Tiêu chí so sánh Hệ thống lấy số Kiosk truyền thống (2015) Hệ thống Kiosk tự động Raspberry Pi (2021) Hệ thống CMFS QR & No-Code (Đề tài)
Kiến trúc phần cứng Vi điều khiển 8-bit, máy in nhiệt, phím cơ Raspberry Pi 4, Màn hình cảm ứng, Arduino, Camera Smartphone của bệnh nhân, Cloud Server
Chi phí đầu tư hạ tầng Trung bình ($500 - $1,500/kiosk) Cao ($1,000 - $2,500/trạm) Cực thấp ($0 chi phí thiết bị đầu cuối)
Khả năng phân luồng Tĩnh (Tuần tự theo số thứ tự in sẵn) Bán tĩnh (Chọn dịch vụ trên màn hình cảm ứng) Động (Phản hồi tức thời theo tải 9 phòng)
Giám sát phía quản lý Bảng LED đơn sắc cục bộ Màn hình Kiosk cục bộ Web App trực quan, biểu đồ thời gian thực
Nguy cơ lây nhiễm chéo Cao (Tập trung đông đúc tại máy in) Trung bình (Chạm chung màn hình cảm ứng) Rất thấp (Thiết bị cá nhân, quét QR không chạm)

Yêu cầu người dùng (MoSCoW Prioritization)

  • Must-have: Xác thực định danh ID 8 ký tự; Quét và giải mã QR chuẩn ISO/IEC 18004; Tự động cập nhật số lượng Check-in/Check-out; Cảnh báo phòng đầy $\ge 10$ người.
  • Should-have: Kiểm soát logic ngăn chặn Check-in 2 phòng cùng lúc; Khóa phòng đã khám xong; Đồng bộ dữ liệu 2 chiều trong chu kỳ $\le 2.0$ giây.
  • Could-have: Xuất báo cáo lịch sử khám ngoại trú ra file CSV; Tích hợp Bots thông báo thay đổi dữ liệu trên AppSheet.
  • Won't-have (giai đoạn này): Tích hợp cổng thanh toán trực tuyến viện phí; Mã hóa dữ liệu chuẩn bệnh án điện tử quốc tế HL7/FHIR.

Thiết kế hệ thống

+------------------------------------------------------------------------------------+
|                             SƠ ĐỒ LUỒNG DỮ LIỆU HỆ THỐNG                          |
+------------------------------------------------------------------------------------+
|                                                                                    |
|   [Bệnh nhân] ---> Đăng nhập ID/Tên ---> Lưu cục bộ TinyDB                        |
|        |                                                                           |
|        v                                                                           |
|   [Chọn phòng] <--- Đọc số lượng Real-time <---+                                   |
|        |                                       |                                   |
|        v                                       |                                   |
|   [Quét QR Code] ---> Gửi URL Param / Web Post |                                   |
|        |                     |                 |                                   |
|        v                     v                 |                                   |
|   [Check-in Room X] ---> [Google Sheets] ------+ (Cập nhật Occupancy)              |
|        |                     |                                                     |
|        v                     v                                                     |
|   [Check-out Button] -> [Google Sheets] ---> [AppSheet Server] ---> [Dashboard Y tế]
|                                                                                    |
+------------------------------------------------------------------------------------+

Technology Stack và phiên bản kỹ thuật

  • Mobile Client Engine: MIT App Inventor 2 (Blockly Engine v2.68), TinyDB Local Storage.
  • Web App Management Platform: Google AppSheet Enterprise Platform (Engine v23.x).
  • Database & Backend Computation: Google Sheets Cloud Core (Google Workspace API v4).
  • Giao thức nhận dạng: Quick Response Matrix Code (Định dạng Model 2, Version 1 - 40, Error Correction Level M/Q).

Thiết kế cấu trúc cơ sở dữ liệu (Google Sheets Data Schema)

Hệ thống tổ chức dữ liệu thành 3 bảng chính:

  1. Bảng Customer_Data (Thông tin bệnh nhân):

    • Customer_ID (Text, Khóa chính, Định dạng 8 ký tự số).
    • Full_Name (Text, Họ và tên khách hàng).
    • Login_Timestamp (DateTime, Thời điểm đăng nhập).
    • Current_Status (Enum: Waiting / In_Room / Completed).
  2. Bảng Room_Tracking (Lịch sử giao dịch phòng):

    • Transaction_ID (Auto-increment Key).
    • Customer_ID (Text, Foreign Key liên kết Customer_Data).
    • Room_Number (Enum: Room_1 đến Room_9).
    • CheckIn_Time (DateTime, Thời gian quét QR điểm danh vào).
    • CheckOut_Time (DateTime, Thời gian nhấn xác nhận ra).
    • Duration_Minutes (Computed Number, Thời gian lưu tại phòng).
  3. Bảng Room_Status (Thống kê trạng thái tải tức thời):

    • Room_ID (Text, Mã phòng từ 1 đến 9).
    • Room_Name (Text, Tên chuyên khoa khám).
    • Total_In (Number, Tổng số lượt Check-in).
    • Total_Out (Number, Tổng số lượt Check-out).
    • Current_Occupancy (Number, Tính toán: Total_In - Total_Out).
    • Warning_Level (Text: "Bình thường" nếu $<10$, "CẢNH BÁO ĐẦY" nếu $\ge 10$).

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

Quy trình phát triển được thực hiện trong 14 tuần qua 4 giai đoạn: Khảo sát - Thiết kế giao diện di động - Lập trình luồng dữ liệu & Web App - Tinh chỉnh và kiểm thử tích hợp.

1. Logic xử lý phía Client di động (MIT App Inventor)

Trên Screen1, khi người dùng nhập dữ liệu định danh:

// Khối xử lý đăng nhập và lưu trữ cục bộ
WHEN Button_Login.Click DO:
    IF (TextBox_ID.Text == "" OR TextBox_Name.Text == "") THEN
        CALL Notifier.ShowAlert("Lỗi đăng nhập: Vui lòng nhập đầy đủ thông tin!");
    ELSE IF (LENGTH(TextBox_ID.Text) != 8) THEN
        CALL Notifier.ShowAlert("Lỗi: Mã ID bệnh nhân phải chứa đúng 8 chữ số!");
    ELSE
        CALL TinyDB1.StoreValue(tag="USER_NAME", valueToStore=TextBox_Name.Text);
        CALL TinyDB1.StoreValue(tag="USER_ID", valueToStore=TextBox_ID.Text);
        OPEN ANOTHER SCREEN (screenName="Screen2");
    END IF

Trên Screen2, thuật toán kiểm tra trạng thái phòng trước khi Check-in:

// Thuật toán kiểm soát trạng thái phòng và quét QR Code
WHEN BarcodeScanner1.AfterScan(result) DO:
    SET TargetRoom = result; // Chuỗi định danh phòng từ mã QR
    IF (IsCurrentlyInAnyRoom == TRUE) THEN
        CALL Notifier.ShowMessageDialog(
            message="Bạn chưa Check-out phòng trước đó. Vui lòng Check-out trước khi chuyển phòng!",
            title="Cảnh báo luồng", buttonText="Đồng ý");
    ELSE IF (RoomOccupancy[TargetRoom] >= 10) THEN
        CALL Notifier.ShowAlert("Phòng khám đã đủ tải (>= 10 người). Vui lòng chọn phòng khác!");
    ELSE
        CALL Web1.PostText(Url="https://script.google.com/macros/s/...", 
                           postData=CONCAT("action=checkin&id=", USER_ID, "&room=", TargetRoom));
        SET RoomButton[TargetRoom].BackgroundColor = COLOR_GREEN;
        SET IsCurrentlyInAnyRoom = TRUE;
        SET CurrentActiveRoom = TargetRoom;
    END IF

2. Động cơ tính toán tải thời gian thực trên Google Sheets Backend

Để tính toán lượng người hiện diện tại từng phòng khám theo thời gian thực và tự động phân luồng dữ liệu, các công thức mảng sau được triển khai trực tiếp vào bảng tính:

  • Tính số lượng người hiện diện tại Phòng 1:
=COUNTIF(Room_Tracking!$C:$C; "Phòng 1") - COUNTIF(Room_Tracking!$D:$D; "Phòng 1_OUT")
  • Công thức mảng tự động kiểm tra cảnh báo cho toàn bộ 9 phòng:
=ARRAYFORMULA(IFS(
    ISBLANK(B2:B10); "";
    (C2:C10 - D2:D10) >= 10; "QUÁ TẢI - NGỪNG NHẬN";
    (C2:C10 - D2:D10) >= 7; "ĐÔNG KHÁCH";
    TRUE; "THÔNG THOÁNG"
))
  • Truy xuất thông tin bệnh nhân nhanh bằng tổ hợp hàm INDEXMATCH:
=INDEX(Customer_Data!$B:$B; MATCH(Room_Tracking!$B2; Customer_Data!$A:$A; 0))
+------------------------------------------------------------------------------------+
|                         TRẠNG THÁI KIỂM SOÁT PHÒNG KHÁM                           |
+--------------+------------------+-------------------+-----------------+------------+
| Phòng khám   | Tổng Check-in    | Tổng Check-out    | Đang trong phòng| Cảnh báo   |
+--------------+------------------+-------------------+-----------------+------------+
| Phòng 1      | 24               | 18                | 6               | THÔNG THOÁNG|
| Phòng 2      | 31               | 21                | 10              | QUÁ TẢI    |
| Phòng 3      | 15               | 13                | 2               | THÔNG THOÁNG|
| Phòng 4      | 19               | 12                | 7               | ĐÔNG KHÁCH |
| ...          | ...              | ...               | ...             | ...        |
| Phòng 9      | 28               | 25                | 3               | THÔNG THOÁNG|
+--------------+------------------+-------------------+-----------------+------------+

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống được đưa vào thử nghiệm thực tế qua 50 kịch bản truy cập đồng thời trên các thiết bị chạy Android (Samsung Galaxy A-series, Xiaomi Redmi Note, Google Pixel Emulator).

Thống kê thử nghiệm thực tế về tốc độ phản hồi

STT Kịch bản kiểm thử Thiết bị thử nghiệm Mạng kết nối Độ trễ phản hồi trung bình (ms) Tỷ lệ thành công (%)
1 Đăng nhập & Xác thực ID Xiaomi Redmi Note 11 Wi-Fi 2.4GHz $210 \pm 15$ 100%
2 Quét & Giải mã mã QR Samsung Galaxy A52 4G LTE Viettel $430 \pm 35$ 98.5%
3 Đồng bộ Check-in lên Sheet Android Emulator 12.0 Wi-Fi 5.0GHz $850 \pm 60$ 99.0%
4 Cập nhật số liệu trên AppSheet Desktop Chrome Web LAN Bệnh viện $1,240 \pm 110$ 100%
5 Phát cảnh báo phòng đầy $\ge 10$ Đồng thời 5 thiết bị 4G/Wi-Fi hỗn hợp $920 \pm 80$ 97.8%

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

  1. Mô hình kiến trúc phân tán phi tập trung hóa Kiosk (Decentralized Flow Management): Khác với các mô hình trước đây (Nguyễn Xuân Cơ 2015, Đinh Thị Thu Hiền 2021) dựa vào máy Kiosk cố định gây tắc nghẽn cục bộ tại sảnh, CMFS biến chính điện thoại của người khám thành công cụ tự điều phối luồng, loại bỏ 100% chi phí đầu tư thiết bị chuyên dụng tại điểm chờ.
  2. Cơ chế khóa logic liên phòng (Inter-room Logic Interlock): Xây dựng thuật toán kiểm soát trạng thái trên ứng dụng di động: Người bệnh không thể Check-in phòng mới nếu chưa Check-out phòng cũ, và không thể Check-in lại phòng đã khám xong. Điều này đảm bảo tính toàn vẹn của dữ liệu luồng y tế và loại bỏ tình trạng "giữ chỗ ảo".
  3. Hiệu quả kinh tế và vận hành đo lường được:
    • Giảm thời gian chờ đợi tổng thể: Cắt giảm 42.5% tổng thời gian hoàn thành 9 hạng mục khám định kỳ (từ trung bình 180 phút xuống còn 103.5 phút).
    • Tối ưu chi phí triển khai: Giảm hơn 85% chi phí đầu tư ban đầu so với việc mua sắm hệ thống bốc số Kiosk màn hình cảm ứng kết nối Raspberry Pi.

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

Trường hợp ứng dụng điển hình (Use Cases)

  • Khám sức khỏe định kỳ doanh nghiệp/cơ quan: Hàng trăm nhân viên đến viện cùng lúc nhưng có thể tự do chọn các phòng còn vắng (như Phòng Điện tim, Phòng Đo thị lực) trong khi chờ Phòng Xét nghiệm máu hoặc Siêu âm giảm tải.
  • Phòng khám đa khoa quy mô vừa và nhỏ: Triển khai giải pháp phân luồng mà không cần thay đổi phần mềm quản lý tổng thể bệnh viện (HIS) đắt tiền.
+-----------------------------------------------------------------------------------+
|                        LỘ TRÌNH TRIỂN KHAI HỆ THỐNG CMFS                         |
+-----------------------------------------------------------------------------------+
| Giai đoạn 1: Chuẩn bị (Tuần 1 - 2)                                                |
| - In và dán mã QR tĩnh chuẩn hóa trước cửa 9 phòng khám.                          |
| - Cấu hình bảng dữ liệu Google Sheets Master & phân quyền tài khoản AppSheet.    |
|                                                                                   |
| Giai đoạn 2: Thử nghiệm (Tuần 3 - 4)                                              |
| - Triển khai file APK cho nhân viên y tế và khách hàng tình nguyện.               |
| - Đo lường độ trễ mạng và hiệu chỉnh thuật toán đồng bộ.                          |
|                                                                                   |
| Giai đoạn 3: Vận hành toàn diện (Tuần 5 trở đi)                                   |
| - Đặt mã QR tải app CMFS tại quầy tiếp đón ban đầu.                               |
| - Giám sát Dashboard tải phòng khám trực tiếp tại phòng điều phối trung tâm.      |
+-----------------------------------------------------------------------------------+

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)

+-------------------------------------------------------------------------------+
|                      BẢNG DỰ TOÁN CHI PHÍ HỆ THỐNG CMFS                      |
+------------------------------------+---------------+--------------------------+
| Hạng mục                           | Số lượng      | Tổng chi phí (VNĐ)       |
+------------------------------------+---------------+--------------------------+
| Thiết kế bảng mã QR Acrylic dán cửa| 9 phòng       | 450.000                  |
| Bản quyền Google Workspace         | Miễn phí cơ bản| 0                        |
| Nền tảng Google AppSheet Core      | Tích hợp sẵn  | 0                        |
| Thiết bị di động thử nghiệm        | Tận dụng sẵn có| 0                        |
| Dự phòng vận hành                  | 1 năm         | 500.000                  |
+------------------------------------+---------------+--------------------------+
| TỔNG CHI PHÍ ĐẦU TƯ BAN ĐẦU       |               | 950.000 VNĐ              |
+------------------------------------+---------------+--------------------------+

So với hệ thống Kiosk phần cứng truyền thống (từ 25.000.000 - 60.000.000 VNĐ cho cụm 9 phòng), thời gian hoàn vốn đầu tư (ROI) của hệ thống CMFS đạt được ngay trong tuần đầu tiên đưa vào ứng dụng.


Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc kết nối mạng liên tục: Hệ thống đòi hỏi smartphone phải duy trì kết nối Wi-Fi/4G để thực hiện các lệnh Web API đến Google Sheets.
  • Giới hạn tốc độ của bảng tính: Khi lượng người truy cập đồng thời vượt quá 100 yêu cầu/giây, Google Sheets API có thể gặp hiện tượng nghẽn hàng đợi (quota limits).
  • Tính năng bảo mật: Chưa triển khai cơ chế xác thực hai lớp (2FA) hoặc mã hóa dữ liệu theo tiêu chuẩn HIPAA cho thông tin y tế nhạy cảm.

Hướng phát triển nâng cao

  1. Chuyển đổi Backend sang Firebase Realtime Database / Cloud SQL: Nâng cao khả năng phục vụ đồng thời lên hơn 10.000 bệnh nhân mà không phát sinh độ trễ.
  2. Nâng cấp ứng dụng đa nền tảng: Phát triển ứng dụng bằng Flutter hoặc React Native hỗ trợ cả iOS và Android.
  3. Tích hợp thuật toán định tuyến thông minh (AI Routing Optimizer): Áp dụng thuật toán Dijkstra hoặc Heuristic tự động đề xuất lộ trình khám tối ưu nhất cho từng bệnh nhân dựa trên danh mục chỉ định khám của bác sĩ.

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

  • Bệnh nhân và khách hàng khám sức khỏe: Nắm bắt trực quan tình trạng mật độ từng phòng, chủ động lộ trình khám, giảm thiểu 40% - 50% thời gian chờ đợi mệt mỏi.
  • Nhân viên y tế và bác sĩ: Giảm áp lực tập trung đông đúc trước cửa phòng khám, kiểm soát chặt chẽ lưu lượng bệnh nhân vào/ra qua giao diện Dashboard.
  • Ban quản lý bệnh viện: Sở hữu giải pháp chuyển đổi số y tế chi phí cực thấp, nâng cao năng suất phục vụ và chất lượng dịch vụ y tế.
  • Sinh viên và nhà phát triển ứng dụng: Cung cấp tài liệu tham khảo chi tiết về cách kết hợp nền tảng No-Code/Low-Code (AppSheet, App Inventor) với Google Cloud Backend trong các bài toán thực tiễn.

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

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

Phía bệnh viện chỉ cần đường truyền Internet ổn định và trình duyệt web (Chrome/Edge) để mở AppSheet Dashboard. Phía phòng khám cần dán 01 bảng mã QR định danh trước cửa. Phía khách hàng cần điện thoại chạy Android 8.0 trở lên có camera hoạt động tốt.

2. Hệ thống xử lý thế nào khi một phòng khám vượt quá công suất phục vụ?

Khi số lượng người hiện diện tại phòng chạm ngưỡng định mức ($\ge 10$ người), hệ thống Backend trên Google Sheets kích hoạt cờ cảnh báo. Ứng dụng của người dùng sẽ hiển thị thông báo "Phòng đã đầy" và tự động khóa nút Check-in đối với phòng đó cho đến khi có người Check-out.

3. Người bệnh có thể Check-in cùng lúc 2 phòng khác nhau được không?

Không. Ứng dụng tích hợp biến cờ trạng thái logic (IsCurrentlyInAnyRoom). Người bệnh bắt buộc phải nhấn nút Check-out tại phòng hiện tại thì hệ thống mới cho phép quét mã QR Check-in ở phòng tiếp theo.

4. Hệ thống có thể mở rộng lên 50 hoặc 100 phòng khám được không?

Với kiến trúc Google Sheets hiện tại, hệ thống vận hành tối ưu nhất ở quy mô từ 10 - 20 phòng khám. Để mở rộng lên 50 - 100 phòng tại các bệnh viện tuyến trung ương, cơ sở dữ liệu cần được chuyển đổi sang PostgreSQL hoặc Google Firebase Firestore.

5. Dữ liệu bệnh nhân có thể xuất ra để tích hợp vào phần mềm HIS của bệnh viện không?

Có. Nền tảng Google AppSheet hỗ trợ tính năng xuất toàn bộ lịch sử khám, thời gian check-in/out ra định dạng file CSV chuẩn, dễ dàng nạp vào các hệ thống quản lý bệnh viện (HIS/LIS) sẵn có.


Kết luận

Đề tài "Thiết kế hệ thống quản lý và phân luồng khách hàng khám sức khỏe tại bệnh viện" đã giải quyết xuất sắc bài toán phân luồng bệnh nhân thời gian thực thông qua sự kết hợp thông minh giữa ứng dụng di động MIT App Inventor, mã QR hai chiều và nền tảng quản trị Google AppSheet. Giải pháp không chỉ mang lại hiệu quả vượt trội trong việc cắt giảm hơn 42% thời gian chờ đợi của người bệnh, mà còn mở ra hướng tiếp cận chuyển đổi số y tế linh hoạt, tiết kiệm chi phí tối đa cho các cơ sở y tế tại Việt Nam.