Bối cảnh và vấn đề nghiên cứu

Trong hoạt động khám chữa bệnh tại các cơ sở y tế, thời gian chờ lấy số thứ tự cũng như chờ đợi đến lượt khám là một trong những trở ngại lớn đối với người bệnh. Tình trạng quá tải tại các bệnh viện cùng với nhịp sống bận rộn làm gia tăng áp lực tâm lý và gây lãng phí thời gian cho bệnh nhân. Trước thực trạng đó, việc ứng dụng các giải pháp công nghệ thông tin nhằm xây dựng dịch vụ khám bệnh trực tuyến là nhu cầu cấp thiết để giảm tải thời gian chờ đợi và hỗ trợ kết nối y tế thuận tiện hơn.

Đồ án tốt nghiệp kỹ sư Công nghệ thông tin (chuyên ngành Công nghệ phần mềm) của tác giả Phan Hoàng Nhật Linh tại Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (khóa 2016 – 2020), do TS. Lê Văn Vinh hướng dẫn, thực hiện đề tài: "Xây dựng App khám bệnh online với React Native và NodeJS".

Kế hoạch và nhiệm vụ nghiên cứu của đề tài được triển khai từ ngày 01/04/2020 đến ngày 01/08/2020, bao gồm các nhiệm vụ cụ thể:

  1. Nghiên cứu cơ sở lý thuyết và công nghệ nền tảng (Node.js, React Native, PostgreSQL, WebRTC, Firebase, JSON Web Token).
  2. Khảo sát hiện trạng các ứng dụng y tế đang hoạt động trên thị trường (UMC, TWG).
  3. Xác định danh sách yêu cầu chức năng nghiệp vụ, yêu cầu hệ thống và yêu cầu phi chức năng.
  4. Mô hình hóa yêu cầu thông qua lược đồ ca sử dụng (Use Case) và đặc tả chi tiết các kịch bản nghiệp vụ.
  5. Thiết kế hệ thống thông qua lược đồ tuần tự (Sequence Diagram), thiết kế cơ sở dữ liệu và thiết kế chi tiết giao diện các màn hình.
  6. Xây dựng và hoàn thiện các giao diện lập trình ứng dụng (API) cho các phân hệ backend; xử lý giao diện mobile frontend.
  7. Kiểm thử các phân hệ chức năng chính (nhắn tin, gọi video, quản trị người dùng) và hoàn thành báo cáo.
  • Đối tượng nghiên cứu: Nhu cầu khám bệnh từ xa của người dùng và các công nghệ xây dựng hệ thống phần mềm bao gồm Node.js, React Native, PostgreSQL, TypeORM, WebRTC, Firebase và JSON Web Token.
  • Phạm vi nghiên cứu: Xây dựng hệ thống phần mềm hỗ trợ các nghiệp vụ khám chữa bệnh từ xa như thực hiện cuộc gọi video, nhắn tin thời gian thực, tìm kiếm thông tin bác sĩ, đăng ký xét nghiệm trực tuyến và quản lý thông tin người dùng; xây dựng các API lõi (Core System) phục vụ ứng dụng di động và trang web quản trị.

Cơ sở lý thuyết và phương pháp

Đề tài áp dụng phương pháp phân tích, thiết kế hệ thống hướng đối tượng và tiếp cận xây dựng phần mềm thực nghiệm dựa trên các nền tảng công nghệ:

  • Node.js và Express.js: Nền tảng thực thi JavaScript phía máy chủ dựa trên V8 JavaScript Engine của Google, sử dụng mô hình I/O bất đồng bộ, không chặn (non-blocking) và hướng sự kiện (event-driven) trên một luồng đơn (single-thread), tối ưu hóa tài nguyên phần cứng. Framework Express.js được sử dụng để định tuyến và xây dựng hệ thống RESTful API dạng JSON.
  • Socket.io: Thư viện hỗ trợ truyền thông hai chiều thời gian thực giữa máy khách và máy chủ, hoạt động dựa trên Engine.IO và giao thức WebSocket.
  • React Native: Framework do Facebook phát triển cho phép xây dựng ứng dụng di động đa nền tảng (Android và iOS) từ JavaScript và JSX. Kiến trúc ứng dụng sử dụng hai luồng chính (Native Thread và JavaScript Thread) để xử lý logic và dựng giao diện nguyên bản (native).
  • PostgreSQL và TypeORM: Hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS) hỗ trợ kiểm soát truy cập đồng thời đa phiên bản (MVCC), giao dịch an toàn và toàn vẹn dữ liệu. Thư viện TypeORM đóng vai trò cầu nối ánh xạ thực thể cơ sở dữ liệu trong mã nguồn.
  • JSON Web Token (JWT): Chuẩn mã hóa mở (RFC 7519) sử dụng chữ ký số để xác thực người dùng. Mỗi yêu cầu (request) từ ứng dụng khách gửi lên máy chủ đều được kiểm soát qua Interceptor và Token bảo mật.
  • WebRTC (Web Real-Time Communication): Công nghệ hỗ trợ truyền tải âm thanh và hình ảnh trực tuyến theo mô hình ngang hàng (Peer-to-Peer - P2P) với độ trễ thấp giữa các thiết bị mà không bắt buộc trình duyệt phải cài đặt thêm plugin bên ngoài.
  • Firebase: Dịch vụ nền tảng đám mây của Google, cung cấp dịch vụ thông báo đẩy (Firebase Cloud Messaging - FCM) hỗ trợ chạy ngầm để lắng nghe và thông báo các sự kiện liên quan đến cuộc gọi đến.
  • Phương pháp khảo sát hiện trạng: Khảo sát đối chiếu chức năng và giao diện của 2 ứng dụng thực tế trên thị trường:
    • UMC (App Đăng ký khám bệnh online): Cung cấp các chức năng đăng ký khám, thanh toán, nhận phiếu khám, quản lý hồ sơ bệnh nhân, tư vấn sàng lọc; ưu điểm giao diện trang nhã, nhược điểm là chức năng còn giới hạn và thiếu khả năng tương tác thời gian thực.
    • TWG (Giới thiệu tập đoàn - Đặt lịch khám bệnh): Hỗ trợ tìm hiểu thông tin bệnh viện, tra cứu danh sách bác sĩ, đặt lịch khám và gửi câu hỏi; ưu điểm thiết kế trực quan, nhược điểm là hạn chế về mặt tính năng tư vấn trực tiếp.

Thiết kế và triển khai

Hệ thống được thiết kế theo cấu trúc phân tầng với giao tiếp qua API RESTful và kênh thời gian thực:

1. Yêu cầu hệ thống và phi chức năng

  • Phân quyền người dùng: Hệ thống phân định rõ ràng 3 nhóm vai trò: Quản trị viên (Admin), Bác sĩ và Bệnh nhân.
  • Yêu cầu phi chức năng: Tốc độ tìm kiếm dữ liệu đạt tối đa dưới 5 giây; hỗ trợ xử lý nhiều tài khoản hoạt động đồng thời; có cơ chế sao lưu, phục hồi dữ liệu; cấu trúc module có khả năng mở rộng thêm tính năng.

2. Thiết kế cơ sở dữ liệu

Hệ thống sử dụng cơ sở dữ liệu PostgreSQL gồm 5 bảng thực thể chính:

Tên bảng Khóa chính Các thuộc tính chính Ý nghĩa lưu trữ
User id (String) roleId, fullname, email, password, avatar, gender, birthday, phone, address, city, introduction, history, typeOfPlaceWork, status, account, createdAt, updatedAt, deleteAt Lưu thông tin định danh, tài khoản, hồ sơ cá nhân và phân quyền người dùng (Admin, Bác sĩ, Bệnh nhân).
Room id (String) senderId, recieverId, portal, createdAt, updatedAt, deleteAt Quản lý định danh phòng kết nối trò chuyện giữa hai đối tượng.
Transaction id (String) senderId, recieverId, portal, amount, createdAt, updatedAt, deleteAt Lưu trữ nhật ký giao dịch, cổng thanh toán và chi phí cuộc gọi khám bệnh.
Message id (String) senderId, recieverId, room, content, code, createdAt, updatedAt, deleteAt Lưu nội dung tin nhắn, định danh phòng, người gửi, người nhận và thời gian.
CallHistory id (String) senderId, recieverId, code, room, callduration, amount, callType, createdAt, updatedAt, deleteAt Quản lý lịch sử cuộc gọi, thời lượng đàm thoại, chi phí và phân loại cuộc gọi.

3. Thiết kế quy trình và giao diện

Hệ thống mô hình hóa 9 lược đồ tuần tự (Sequence Diagram) để chuẩn hóa các luồng xử lý:

  • Đăng nhập, Đăng xuất, Đăng ký tài khoản.
  • Thêm đối tượng, Sửa/Cập nhật đối tượng, Xóa đối tượng.
  • Gọi video call (kết nối tín hiệu qua máy chủ, thiết lập luồng WebRTC giữa hai máy khách và ghi nhận chi phí sau khi kết thúc cuộc gọi).
  • Trò chuyện trực tuyến (truyền nhận tin nhắn qua Socket.io).
  • Đặt lịch khám và xét nghiệm online.

Giao diện ứng dụng di động và trang web quản trị được thiết kế chi tiết bao gồm 11 màn hình chính: Màn hình đăng nhập (người dùng/Admin), Màn hình đăng xuất, Màn hình chính Bác sĩ, Màn hình chính Bệnh nhân, Màn hình tin nhắn, Màn hình tìm kiếm bác sĩ, Màn hình đặt xét nghiệm online, Màn hình cuộc gọi đến, Màn hình trang chủ quản trị và Màn hình quản lý người dùng.


Nội dung chính theo từng chương

Lời mở đầu

Trình bày tính cấp thiết của việc áp dụng công nghệ số vào y tế nhằm giải quyết bài toán xếp hàng, chờ đợi của bệnh nhân tại bệnh viện. Xác định rõ đối tượng nghiên cứu là quy trình khám bệnh trực tuyến kết hợp bộ công nghệ React Native, Node.js, WebRTC; giới hạn phạm vi đề tài vào các tính năng gọi video, nhắn tin, tra cứu bác sĩ và quản trị hệ thống.

Chương 1. Cơ sở lý thuyết

Trình bày tổng quan và nguyên lý hoạt động của các công nghệ cấu thành hệ thống:

  • Giới thiệu kiến trúc bất đồng bộ, V8 Engine, mô hình hướng sự kiện của Node.js; cơ chế định tuyến của Express.js và khả năng truyền thông hai chiều của Socket.io.
  • Cơ chế hoạt động của React Native với kiến trúc đa luồng, hỗ trợ biên dịch giao diện native trên Android và iOS.
  • Các đặc tính kỹ thuật của hệ quản trị cơ sở dữ liệu PostgreSQL (MVCC, giao dịch dữ liệu, bảo toàn dữ liệu).
  • Cấu trúc chuẩn của JSON Web Token (JWT) trong xác thực và phân quyền; nguyên lý truyền thông đa phương tiện P2P của WebRTC; các dịch vụ lưu trữ và truyền tin thông báo nền của Google Firebase.

Chương 2. Khảo sát hiện trạng và xác định yêu cầu

  • Phân tích ưu nhược điểm của 2 ứng dụng UMC và TWG.
  • Xác định chi tiết các chức năng nghiệp vụ theo từng nhóm đối tượng:
    • Quản trị viên: Thêm, sửa, xóa, tra cứu thông tin người dùng; xem danh sách người dùng đang online; quản lý lịch sử cuộc gọi.
    • Bác sĩ: Cập nhật thông tin cá nhân; gửi tin nhắn; tạo cuộc gọi video.
    • Bệnh nhân: Cập nhật thông tin cá nhân; tìm kiếm bác sĩ theo chuyên khoa và khu vực; nhắn tin; gọi video; đăng ký xét nghiệm trực tuyến.
  • Xây dựng lược đồ Use Case tổng thể và lược đồ phân rã theo module (Core System, Module quản lý người dùng, Module quản lý hệ thống).
  • Đặc tả chi tiết 9 kịch bản Use Case: Đăng nhập, Đăng xuất, Gửi tin nhắn, Tạo cuộc gọi video, Tìm kiếm bác sĩ, Đăng ký xét nghiệm online, Quản lý thông tin người dùng, Quản lý lịch sử cuộc gọi, Quản lý danh sách online.

Chương 3. Thiết kế phần mềm

  • Thiết kế hệ thống: Chi tiết hóa các luồng tương tác giữa Actor, Giao diện (UI), Điều khiển (Controller), Dịch vụ (Service) và Cơ sở dữ liệu thông qua 9 lược đồ tuần tự.
  • Thiết kế dữ liệu: Mô hình quan hệ thực thể (ERD) và đặc tả chi tiết 5 bảng dữ liệu (User, Room, Transaction, Message, CallHistory) với các kiểu dữ liệu, ràng buộc khóa chính và ý nghĩa từng trường.
  • Thiết kế giao diện: Mô tả cấu trúc và các thành phần điều khiển (textEdit, simpleButton, touchAbleopacity) cho 11 màn hình ứng dụng trên mobile và web admin.

Cài đặt và kiểm thử phần mềm

  • Hướng dẫn thiết lập môi trường triển khai: Cài đặt Node.js, công cụ React Native CLI, thiết lập môi trường phát triển Android (Android SDK) và cài đặt hệ quản trị cơ sở dữ liệu PostgreSQL.
  • Xây dựng các ca kiểm thử (Test Case) đánh giá hoạt động thực tế trên hai phân hệ trọng tâm: Phân hệ nhắn tin/gọi video call của người dùng và Phân hệ quản lý người dùng của quản trị viên.

Kết quả và đóng góp

1. Kết quả đạt được

Đồ án đã hoàn thành các mục tiêu kỹ thuật đề ra trong đề cương:

  • Xây dựng hoàn chỉnh hệ thống API backend bằng Node.js và Express.js, kết nối cơ sở dữ liệu PostgreSQL thông qua TypeORM.
  • Triển khai thành công ứng dụng di động bằng React Native, cung cấp giao diện tương tác cho Bệnh nhân và Bác sĩ.
  • Tích hợp giao tiếp thời gian thực: Nhắn tin qua Socket.io và đàm thoại hình ảnh/âm thanh trực tiếp thông qua WebRTC.
  • Tích hợp Firebase Cloud Messaging để xử lý thông báo cuộc gọi khi ứng dụng ở chế độ nền.
  • Ứng dụng chuẩn JSON Web Token vào toàn bộ luồng giao tiếp API nhằm đảm bảo an toàn truy cập.
  • Xây dựng giao diện web quản trị hỗ trợ theo dõi người dùng online, tra cứu thông tin và quản lý lịch sử cuộc gọi.

2. Tổng hợp chức năng hệ thống theo nhóm người dùng

Nhóm người dùng Các chức năng chính đã triển khai
Bệnh nhân Đăng ký/Đăng nhập, cập nhật hồ sơ cá nhân, tìm kiếm bác sĩ, nhắn tin, thực hiện cuộc gọi video tư vấn, đăng ký xét nghiệm online.
Bác sĩ Đăng nhập, cập nhật thông tin chuyên môn, nhận và gửi tin nhắn cho bệnh nhân, tiếp nhận và thực hiện cuộc gọi video tư vấn.
Quản trị viên (Admin) Đăng nhập hệ thống quản trị, quản lý thông tin người dùng (thêm, sửa, xóa, tìm kiếm), theo dõi danh sách tài khoản đang hoạt động (online), kiểm tra lịch sử cuộc gọi và giao dịch.

3. Đóng góp của đề tài

So với các ứng dụng khảo sát hiện hành (chủ yếu dừng lại ở mức đặt lịch hẹn khám tại chỗ hoặc giới thiệu thông tin), đề tài đã xây dựng một giải pháp tích hợp cho phép kết nối trực tiếp giữa bệnh nhân và bác sĩ thông qua video call và tin nhắn thời gian thực, đáp ứng mô hình khám tư vấn từ xa ngay trên thiết bị di động.


Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế:
    • Phạm vi đề tài tập trung vào việc hoàn thiện các luồng tính năng cốt lõi (Core APIs, video call, chat, quản trị), phần liên kết các cổng thanh toán tài chính tự động cần được phát triển hoàn thiện hơn.
    • Cần tối ưu hóa hiệu năng truyền tải hình ảnh WebRTC trong điều kiện chất lượng kết nối mạng băng thông thấp hoặc biến động.
  • Hướng phát triển:
    • Tích hợp bổ sung các cổng thanh toán trực tuyến chuyên sâu cho tính năng tính phí cuộc gọi và dịch vụ xét nghiệm.
    • Mở rộng thêm các phân hệ chuyên môn y tế như quản lý bệnh án điện tử chi tiết, kê đơn thuốc trực tuyến và theo dõi lịch sử điều trị dài hạn.
    • Tối ưu hóa và đóng gói sản phẩm để triển khai thử nghiệm trên môi trường vận hành thực tế của các cơ sở y tế.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo chuyên môn đối với sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm và các lập trình viên đang nghiên cứu các giải pháp ứng dụng di động y tế (Telemedicine):

  • Cung cấp tài liệu tham khảo chi tiết về quy trình phân tích yêu cầu, thiết kế Use Case và thiết kế dữ liệu cho một hệ thống khám bệnh trực tuyến.
  • Cung cấp mô hình tham khảo kỹ thuật trong việc kết hợp Node.js, React Native, PostgreSQL với các giao thức truyền thông thời gian thực như Socket.io và WebRTC.
  • Hệ thống bảng thiết kế giao diện, sơ đồ tuần tự và kịch bản kiểm thử có thể sử dụng làm cơ sở đối sánh cho các đồ án phát triển ứng dụng di động hướng dịch vụ.

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

1. Hệ thống sử dụng những giải pháp công nghệ nào để xử lý tác vụ tương tác thời gian thực?
Hệ thống sử dụng thư viện Socket.io trên nền Node.js để truyền nhận tin nhắn trò chuyện trực tiếp và công nghệ WebRTC để thiết lập luồng truyền thông đa phương tiện (âm thanh, video) ngang hàng giữa bác sĩ và bệnh nhân. Bên cạnh đó, Firebase Cloud Messaging được sử dụng để phát thông báo cuộc gọi đến khi ứng dụng di động chạy ở chế độ nền.

2. Cơ chế bảo mật truy cập của hệ thống được thiết kế như thế nào?
Hệ thống áp dụng chuẩn JSON Web Token (JWT - RFC 7519). Khi người dùng đăng nhập thành công, hệ thống cấp một mã Token riêng biệt. Mọi yêu cầu truy xuất dữ liệu từ client lên server đều phải đi qua bộ lọc Interceptor để kiểm tra và xác thực tính hợp lệ của Token trước khi xử lý.

3. Cơ sở dữ liệu của đồ án gồm những thực thể nào và được quản lý bằng công cụ gì?
Cơ sở dữ liệu được xây dựng trên hệ quản trị PostgreSQL và quản lý ánh xạ thực thể qua TypeORM. Cấu trúc dữ liệu gồm 5 bảng chính: User (thông tin người dùng và phân quyền), Room (phòng chat), Transaction (giao dịch chi phí cuộc gọi), Message (nội dung tin nhắn) và CallHistory (nhật ký và thời lượng cuộc gọi).

4. Ứng dụng di động được xây dựng hướng tới những đối tượng nào và phục vụ những nghiệp vụ chính gì?
Ứng dụng di động hướng tới 2 đối tượng sử dụng chính là Bệnh nhân và Bác sĩ. Bệnh nhân có thể tra cứu bác sĩ, đăng ký xét nghiệm, nhắn tin và gọi video tư vấn sức khỏe. Bác sĩ có thể quản lý thông tin chuyên môn, trao đổi tin nhắn và thực hiện các cuộc gọi tư vấn cho bệnh nhân.

5. Điểm khác biệt của hệ thống so với các ứng dụng được khảo sát trong đồ án (UMC, TWG) là gì?
Theo khảo sát của tác giả, ứng dụng UMC và TWG tập trung vào đặt lịch khám trực tiếp tại bệnh viện hoặc giới thiệu thông tin, còn hạn chế về tính năng tương tác trực tuyến. Đề tài khắc phục nhược điểm này bằng cách cung cấp chức năng khám tư vấn từ xa thời gian thực thông qua đàm thoại video call (WebRTC) và nhắn tin trực tiếp.


Kết luận

Khóa luận tốt nghiệp của tác giả Phan Hoàng Nhật Linh đã hoàn thành việc nghiên cứu, thiết kế và xây dựng ứng dụng khám bệnh trực tuyến đa nền tảng sử dụng React Native và Node.js. Đề tài đã giải quyết trọn vẹn các yêu cầu kỹ thuật từ phân tích nghiệp vụ, mô hình hóa Use Case, thiết kế cơ sở dữ liệu PostgreSQL đến việc tích hợp thành công WebRTC và Socket.io cho đàm thoại và nhắn tin thời gian thực. Kết quả của đồ án cung cấp một tài liệu kỹ thuật có cấu trúc hoàn chỉnh, đóng vai trò là tài liệu tham khảo thiết thực cho các nghiên cứu và ứng dụng phần mềm trong lĩnh vực y tế từ xa.