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

Trong hệ thống y tế tại Việt Nam, phần lớn người dân tiếp cận dịch vụ chăm sóc sức khỏe thông qua hình thức truyền thống là các bệnh viện công lập nhờ vào mức độ phổ biến và cơ sở vật chất kỹ thuật sẵn có. Tuy nhiên, áp lực khám chữa bệnh tại các bệnh viện công là rất lớn, số lượng bệnh nhân mỗi bác sĩ phải tiếp nhận hàng ngày ở mức cao khiến thời lượng dành cho từng ca khám bị giới hạn nghiêm ngặt. Từ thực tế này, nhu cầu thiết lập mối quan hệ chăm sóc sức khỏe lâu dài với bác sĩ riêng (bác sĩ thân thiết - close doctor) ngày càng gia tăng. Mô hình này cho phép bác sĩ nắm bắt sâu sắc tiền sử bệnh lý của người bệnh, hỗ trợ chẩn đoán chính xác và phòng ngừa bệnh tật hiệu quả hơn. Người bệnh có thể thực hiện các xét nghiệm cận lâm sàng (xét nghiệm máu, nước tiểu, siêu âm...) tại bệnh viện rồi mang kết quả đến bác sĩ riêng để được tư vấn phác đồ điều trị và nhận đơn thuốc.

Mặc dù nhu cầu cao, việc tìm kiếm bác sĩ chuyên khoa phù hợp hiện nay chủ yếu dựa vào sự giới thiệu truyền miệng từ người quen hoặc bạn bè đã từng trải nghiệm dịch vụ. Đối với những bệnh nhân không có sẵn các mối quan hệ xã hội này, việc tiếp cận thông tin bác sĩ có trình độ chuyên môn gặp nhiều trở ngại do nguồn dữ liệu tra cứu trực tuyến còn hạn chế, đồng thời thiếu hụt cơ chế kiểm chứng tính xác thực và độ tin cậy của thông tin bác sĩ trên mạng.

Đề tài khóa luận tốt nghiệp "Design and build a website for Medical Doctor Office Management" (Thiết kế và xây dựng website quản lý văn phòng bác sĩ) do sinh viên Nguyễn Quang Trường thực hiện dưới sự hướng dẫn của GS. Nguyễn Đức Thái nhằm giải quyết các bài toán thực tiễn sau:

  1. Mục tiêu đối với bệnh nhân: Cung cấp nguồn thông tin tra cứu đáng tin cậy với nhiều lựa chọn đa dạng, giúp người bệnh chủ động lựa chọn bác sĩ phù hợp nhất với nhu cầu điều trị.
  2. Mục tiêu đối với bác sĩ: Hỗ trợ bác sĩ mở rộng mạng lưới tiếp cận các khách hàng tiềm năng, đồng thời cung cấp công cụ số hóa để quản lý thời gian biểu và lịch hẹn khám của bệnh nhân một cách khoa học.
  3. Nhiệm vụ kỹ thuật: Khảo sát các công trình liên quan; phân tích yêu cầu hệ thống bằng chuẩn UML; thiết kế giao diện, luồng tương tác, cơ sở dữ liệu và cơ chế xác thực; ứng dụng các kỹ thuật tìm kiếm, bản đồ và tối ưu hóa; triển khai xây dựng hệ thống web hoàn chỉnh bằng các công nghệ phù hợp.

Khóa luận được thực hiện tại Bộ môn Hệ thống và Mạng Máy tính, Khoa Khoa học và Kỹ thuật Máy tính, Trường Đại học Bách Khoa – Đại học Quốc gia TP.HCM trong khoảng thời gian từ ngày 01/03/2021 đến ngày 01/08/2021 (bảo vệ vào tháng 10/2021).


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

Đề tài áp dụng phương pháp nghiên cứu phân tích hệ thống và thiết kế phần mềm hướng đối tượng kết hợp kiến trúc đám mây Serverless, cụ thể gồm các nội dung lý thuyết và kỹ thuật:

  • Khảo sát và đối sánh các giải pháp hiện hữu: Tác giả phân tích các mô hình trang web y tế đang hoạt động, nhận diện ưu điểm và hạn chế của từng mô hình (trang web trực thuộc một bệnh viện cụ thể như FV Hospital và trang web tổng hợp độc lập như khambacsi.com).
  • Mô hình hóa yêu cầu hệ thống (UML): Sử dụng sơ đồ ca sử dụng (Use-case Diagram) để định rõ ranh giới tương tác của 4 nhóm tác tử (Patient, Doctor, Admin, Visitor) cùng các kịch bản luồng sự kiện chính (Normal Flow), luồng ngoại lệ (Exception Flow) và luồng thay thế (Alternative Flow).
  • Cơ sở dữ liệu NoSQL so với SQL truyền thống: Khóa luận so sánh mô hình cơ sở dữ liệu quan hệ (RDBMS sử dụng các lệnh chuẩn SELECT, INSERT, UPDATE, DELETE, CREATE, DROP) với cơ sở dữ liệu phi quan hệ (NoSQL). Tác giả lựa chọn NoSQL (Document Database và Key-Value Database) nhằm tối ưu hóa khả năng mở rộng quy mô linh hoạt theo chiều ngang (horizontal scale-out) và thích ứng nhanh với các thay đổi cấu trúc dữ liệu.
  • Ngôn ngữ truy vấn dữ liệu GraphQL: Thay thế cho kiến trúc REST API truyền thống, GraphQL cho phép máy khách (client) chỉ định chính xác các trường dữ liệu cần truy xuất (Fields, Arguments, Object Types), loại bỏ tình trạng nhận thừa hoặc thiếu dữ liệu (over-fetching/under-fetching), đồng thời hỗ trợ khai báo lược đồ phi rỗng (String!) hoặc mảng đối tượng ([Episode!]!).
  • Nền tảng công nghệ thực thi:
    • Front-end: HTML, CSS, TypeScript (ngôn ngữ nguồn mở định kiểu tĩnh, biên dịch sang JavaScript), Angular (kiến trúc SPA gồm NgModule, Component Hierarchy, cơ chế Data Binding hai chiều, Event Binding và Property Binding) và Bootstrap (hệ thống lưới phản hồi Grid System 12 cột).
    • Back-end & Dịch vụ đám mây (AWS): Amazon Cognito (quản lý định danh qua User Pools và Identity Pools, phát hành mã xác thực JWT Tokens), Amazon DynamoDB (NoSQL database quản trị hoàn toàn theo cấu trúc Tables, Items, Attributes) và AWS Amplify (Amplify Console hỗ trợ CI/CD từ Git, Admin UI, bộ chuyển dịch GraphQL với các directive @model và phân quyền truy cập @auth).

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc ứng dụng web hiện đại, phân tách rõ ràng giữa tầng giao diện người dùng (Front-end SPA) và tầng dịch vụ đám mây (Cloud Serverless Backend).

1. Phân quyền tác tử và cấu trúc ca sử dụng

Hệ thống xác định 4 nhóm tác tử (Actors) với các phạm vi quyền hạn và chức năng cụ thể:

Nhóm tác tử (Actor) Trạng thái đăng nhập Chức năng chính được phân quyền
Visitor (Khách vãng lai) Chưa đăng nhập Tìm kiếm bác sĩ theo địa lý/chuyên khoa; Xem thông tin hồ sơ công khai của bác sĩ; Đăng ký tài khoản (chọn vai trò Patient hoặc Doctor).
Patient (Bệnh nhân) Đã đăng nhập Quản lý thông tin cá nhân; Đặt lịch hẹn khám bệnh theo khung giờ trống của bác sĩ; Hủy lịch hẹn; Nhận thông báo xác nhận lịch khám qua email.
Doctor (Bác sĩ/Phòng khám) Đã đăng nhập & được Admin duyệt Thiết lập và cập nhật thời gian biểu làm việc trong tuần (Create/Update Schedule); Tiếp nhận hoặc từ chối lịch hẹn (Accept/Decline); Hủy lịch hẹn; Quản lý hồ sơ chuyên môn.
Admin (Quản trị viên) Đã đăng nhập Quản lý người dùng; Kiểm duyệt và kích hoạt tài khoản bác sĩ từ danh sách chờ (Verify Doctor/Manage User); Khóa tài khoản vi phạm tính xác thực.

2. Thiết kế luồng dữ liệu và cơ chế xác thực (Authentication & Authorization)

Hệ thống ứng dụng AWS Amplify kết hợp GraphQL Schema Directives và Amazon Cognito để kiểm soát dữ liệu:

  • Directive @model: Tự động tạo các bảng tương ứng trên Amazon DynamoDB và sinh sẵn các bộ truy vấn (queries), đột biến (mutations), đăng ký nhận tin (subscriptions).
  • Directive @auth: Thiết lập quy tắc phân quyền mức đối tượng và trường dữ liệu. Ví dụ với quy tắc @auth(rules: [{ allow: owner }]), chỉ người tạo bản ghi mới có quyền đọc, sửa đổi và xóa dữ liệu cá nhân; hoặc quy tắc kết hợp @auth(rules: [{ allow: owner, operations: [create, delete, update] }]) cho phép chủ sở hữu cập nhật bản ghi trong khi người dùng khác chỉ có quyền đọc.
  • Mã thông báo JWT: Khi người dùng đăng nhập qua Cognito User Pool (bằng tài khoản nội bộ hoặc tài khoản liên kết Facebook), hệ thống trả về JWT Token chứa các thuộc tính định danh để ủy quyền tương tác với DynamoDB thông qua Cognito Identity Pool.

3. Thiết kế thành phần giao diện và kịch bản chức năng

Cấu trúc mã nguồn Angular được tổ chức theo module hóa bên trong thư mục src/app:

  • Thành phần định hướng và xác thực: Navigation bar component, Login form component (hỗ trợ kiểm tra lỗi nhập liệu, sai mật khẩu, tích hợp đăng nhập Facebook), Sign up form component (cho phép chọn vai trò, kiểm tra trùng lặp email).
  • Thành phần đặt lịch và quản lý: Doctor-card Component (hiển thị tóm tắt thông tin bác sĩ trên danh sách tìm kiếm), Booking Component with pop up (cho phép chọn ngày khám, tải lịch rảnh của bác sĩ và chọn ca khám), User Dashboard Component và Patient Appointment Component (theo dõi trạng thái và hủy lịch hẹn).
  • Thành phần quản trị: Manage User Page (hỗ trợ Admin duyệt bác sĩ thông qua nút xác nhận để chuyển trạng thái tài khoản từ danh sách chờ sang hoạt động).

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

Bản thuyết minh đồ án gồm 7 chương với các nội dung chi tiết:

Chương 1: Introduction

Tác giả trình bày thực trạng quá tải của các cơ sở y tế công lập tại Việt Nam, sự cần thiết của mô hình bác sĩ gia đình/bác sĩ thân thiết và những rào cản khi người bệnh tìm kiếm bác sĩ uy tín qua mạng. Chương này xác định rõ mục tiêu kép: hỗ trợ bệnh nhân tiếp cận nguồn thông tin bác sĩ đáng tin cậy và giúp bác sĩ mở rộng mạng lưới khách hàng; đồng thời giới thiệu cấu trúc tổng thể 7 chương của khóa luận.

Chương 2: Related Works

Chương này đánh giá các giải pháp công nghệ hiện hữu:

  • Trang web fvhospital.com (Bệnh viện FV): Cung cấp lượng thông tin bác sĩ phong phú nhưng giới hạn hoàn toàn trong phạm vi nhân sự trực thuộc bệnh viện, quy trình đặt lịch phụ thuộc vào bộ máy của bệnh viện mà không cho phép kết nối trực tiếp với từng bác sĩ độc lập.
  • Trang web khambacsi.com: Tập hợp danh sách bác sĩ độc lập từ nhiều tỉnh thành trên cả nước, tuy nhiên còn thiếu cơ chế đánh giá, phản hồi (review system) từ những bệnh nhân đã trải nghiệm dịch vụ.

Chương 3: Theoretical Knowledge

Trình bày cơ sở lý thuyết nền tảng cho phát triển web:

  • Phía máy khách (Front-end): Khái niệm cấu trúc trang bằng HTML, tạo kiểu giao diện với CSS, phát triển mã nguồn hướng kiểu dữ liệu tĩnh với TypeScript.
  • Phía máy chủ và cơ sở dữ liệu (Back-end): Khái niệm ngôn ngữ truy vấn SQL trên cơ sở dữ liệu quan hệ và các dạng cơ sở dữ liệu NoSQL (Document Database, Key-value Database).
  • Nguyên lý GraphQL: Cách thức hoạt động của truy vấn GraphQL, định dạng trường dữ liệu (Fields), đối số truyền vào (Arguments) và cách định nghĩa lược đồ (Schema Definition Language) với các kiểu vô hướng và kiểu đối tượng.

Chương 4: Technology

Phân tích các công nghệ và dịch vụ được lựa chọn trong quá trình hiện thực hóa hệ thống:

  • Angular: Kiến trúc NgModule, cây phân cấp Component, hệ thống Data Binding (Event Binding, Property Binding, Two-way Binding) và cấu trúc cây thư mục dự án (e2e/, node_modules/, src/app/, src/assets/, src/environments/).
  • Bootstrap: Tận dụng hệ thống Grid System 12 cột và các thành phần giao diện mẫu để tối ưu hóa khả năng tương thích trên máy tính, máy tính bảng và điện thoại di động.
  • Amazon Cognito & DynamoDB: Kiến trúc xác thực tài khoản qua User Pools, Identity Pools và mô hình lưu trữ bảng không quan hệ (Tables, Items, Attributes).
  • AWS Amplify: Quy trình lưu trữ tự động (Amplify Hosting) kết hợp Admin UI và cơ chế quản lý mô hình dữ liệu thông qua các directive @model, @auth.

Chương 5: Design

Tập trung mô hình hóa hệ thống thông qua sơ đồ ca sử dụng (Use-case Diagram) và đặc tả chi tiết 10 kịch bản ca sử dụng cốt lõi: Đăng ký (Register), Đăng nhập (Login), Kiểm duyệt bác sĩ (Verify Doctor), Tạo lịch làm việc (Create Schedule), Cập nhật lịch làm việc (Update Schedule), Tìm kiếm bác sĩ (Search Doctor - hỗ trợ lọc theo Tỉnh/Quận/Phường và chuyên khoa hoặc mặc định lấy 10 bác sĩ phổ biến nhất), Xem hồ sơ bác sĩ (View Doctor Profile), Đặt lịch khám (Booking Appointment), Hủy lịch khám (Cancel Appointment), và Quản lý lịch khám phía bác sĩ (Manage Appointment).

Chương 6: Implementation

Mô tả chi tiết quá trình hiện thực hóa các chức năng:

  • Thiết lập cơ chế xác thực với Amazon Cognito và xử lý chuỗi phân quyền JWT Token khi người dùng đăng nhập thành công.
  • Xây dựng bản đồ định tuyến (Routing map) của toàn bộ website.
  • Triển khai chi tiết các giao diện thành phần: Trang chủ (Homepage), Trang thông tin bác sĩ (Doctor's profile Page), Trang thông tin người dùng (User Information page), Trang quản trị người dùng dành cho Admin (Manage User Page) và thành phần xử lý tương tác đặt lịch dạng cửa sổ bật lên (Booking pop-up).

Chương 7: Result and Future Improvements

Tổng kết quá trình xây dựng sản phẩm, đánh giá mức độ đáp ứng các mục tiêu đã đề ra ban đầu của website đã được triển khai thực tế trên môi trường mạng và đề xuất các định hướng nâng cấp hệ thống trong tương lai.


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

1. Kết quả kỹ thuật đạt được

  • Xây dựng hoàn chỉnh một ứng dụng web hoạt động ổn định (operational website) trên nền tảng điện toán đám mây serverless, cho phép truy cập đa thiết bị thông qua trình duyệt web.
  • Hiện thực hóa chuỗi quy trình khép kín: Tìm kiếm bác sĩ đa tiêu chí (địa lý, chuyên khoa) -> Xem hồ sơ chuyên môn -> Đặt lịch khám theo thời gian thực -> Phê duyệt/Hủy lịch hẹn từ cả hai phía -> Gửi email thông báo tự động.
  • Thiết lập quy trình kiểm duyệt tài khoản bác sĩ hai bước: Bác sĩ đăng ký cần được Quản trị viên (Admin) kiểm tra thông tin và kích hoạt thủ công trên trang quản trị trước khi có thể công khai lịch làm việc và nhận lịch hẹn từ bệnh nhân.

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

  • Đề xuất mô hình kết nối trực tiếp giữa bệnh nhân và các bác sĩ độc lập/văn phòng bác sĩ tư nhân, khắc phục điểm nghẽn phụ thuộc tổ chức của các trang web bệnh viện truyền thống.
  • Cung cấp giải pháp quản lý lịch trình linh hoạt cho bác sĩ với 3 trạng thái phân bổ trong tuần (nghỉ làm, làm việc cả ngày, làm việc theo khung giờ mở/đóng cửa).
  • Ứng dụng hiệu quả mô hình GraphQL trên nền tảng AWS Amplify kết hợp DynamoDB và Cognito trong việc phân quyền truy xuất dữ liệu an toàn.

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

Dựa trên bản thuyết minh và các nhận xét từ Giảng viên hướng dẫn (GS. Nguyễn Đức Thái) cùng Giảng viên phản biện (GS. Nguyễn Lê Duy Lai), đề tài còn tồn tại một số hạn chế cần khắc phục:

1. Hạn chế kỹ thuật và tài liệu

  • Công tác kiểm thử phần mềm: Chưa thực hiện kiểm thử phần mềm một cách bài bản (hoàn toàn thiếu vắng các kiểm thử chức năng tự động hoặc kiểm thử E2E trong báo cáo).
  • Tính năng SEO và tích hợp bản đồ: Chưa hoàn thiện và trình bày giải pháp tối ưu hóa công cụ tìm kiếm (SEO) cũng như chưa tích hợp sâu Google Maps như yêu cầu ban đầu của nhiệm vụ tốt nghiệp.
  • Thuật toán tìm kiếm: Công cụ tìm kiếm và đối sánh dữ liệu (search and match tool) được xây dựng ở mức độ cơ bản, chủ yếu dựa trên bộ lọc phân cấp hành chính và chuyên khoa, chưa có thuật toán gợi ý thông minh.
  • Bảo mật dữ liệu nhạy cảm: Hệ thống lưu trữ thông tin sức khỏe và y tế của người dùng cần được áp dụng các phương thức xác thực và mã hóa dữ liệu đa lớp mạnh mẽ hơn.
  • Trình bày báo cáo: Cấu trúc luồng dữ liệu (data flow) trong thiết kế hệ thống chưa được mô tả chi tiết; văn bản báo cáo còn mắc nhiều lỗi trình bày và sinh viên chưa gửi báo cáo hoàn thiện cho cán bộ hướng dẫn rà soát trước khi bảo vệ trước hội đồng.

2. Hướng nghiên cứu tiếp

  • Bổ sung quy trình kiểm thử phần mềm tự động (Unit Test, Integration Test, E2E Test) trên môi trường Angular.
  • Nâng cấp cơ chế bảo mật cho hồ sơ bệnh án và dữ liệu cá nhân theo các tiêu chuẩn bảo mật y tế chuyên dụng.
  • Tích hợp bản đồ số Google Maps API và hoàn thiện các thẻ meta phục vụ tối ưu hóa công cụ tìm kiếm (SEO).
  • Phát triển thuật toán tìm kiếm nâng cao, tích hợp hệ thống đánh giá/xếp hạng bác sĩ có kiểm duyệt để tăng cường tính khách quan cho bệnh nhân khi lựa chọn.

Giá trị tham khảo

Bản khóa luận có giá trị tham khảo thiết thực cho sinh viên ngành Khoa học Máy tính, Kỹ thuật Phần mềm và các nhà phát triển hệ thống web trong các khía cạnh:

  1. Thiết kế ca sử dụng (UML Specification): Cung cấp tài liệu mẫu về cách đặc tả chi tiết 10 ca sử dụng của hệ thống quản lý đặt lịch khám bệnh, bao gồm đầy đủ luồng sự kiện chuẩn, luồng ngoại lệ và luồng thay thế.
  2. Kiến trúc Serverless với AWS Amplify: Tài liệu tham khảo hữu ích cho việc triển khai ứng dụng Single Page Application (Angular) kết hợp cơ sở dữ liệu phi quan hệ (Amazon DynamoDB), ngôn ngữ truy vấn GraphQL và dịch vụ định danh người dùng (Amazon Cognito).
  3. Kinh nghiệm triển khai thực tế: Minh họa cụ thể quy trình tích hợp các component giao diện Bootstrap vào Angular Framework để xây dựng hệ thống quản lý bảng điều khiển (Dashboard) cho nhiều nhóm đối tượng người dùng.

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

1. Khóa luận này được Hội đồng đánh giá ở mức điểm nào và có những góp ý chính gì?

Đề tài được Giảng viên hướng dẫn (GS. Nguyễn Đức Thái) và Giảng viên phản biện (GS. Nguyễn Lê Duy Lai) đánh giá mức điểm 7.0/10 (Được bảo vệ). Ưu điểm chính là website vận hành đúng với hầu hết các tính năng thiết kế và đã triển khai thực tế thành công. Thiếu sót chính nằm ở việc chưa thực hiện kiểm thử phần mềm, chưa tích hợp SEO, công cụ tìm kiếm còn đơn giản và báo cáo còn nhiều lỗi trình bày.

2. Ba câu hỏi phản biện mà sinh viên phải trả lời trước Hội đồng là gì?

Theo Phiếu chấm bảo vệ luận văn tốt nghiệp, 3 câu hỏi bắt buộc gồm:

  1. Sinh viên suy nghĩ thế nào về một phương pháp xác thực mạnh mẽ hơn? Đã thực hiện khảo sát các cơ chế xác thực khác nhau hay chưa?
  2. Xét về khía cạnh triển khai và vận hành website, sinh viên đánh giá thế nào về yêu cầu phần cứng và tài nguyên máy chủ?
  3. Kế hoạch thu hồi lợi ích / khai thác doanh thu từ việc vận hành website được dự kiến như thế nào?

3. Hệ thống phân chia các quyền truy cập dữ liệu thông qua GraphQL như thế nào?

Hệ thống sử dụng các directive của AWS Amplify, tiêu biểu là @model để gắn kiểu thực thể với bảng DynamoDB và @auth để thiết lập quy tắc bảo mật. Ví dụ, cú pháp @auth(rules: [{ allow: owner }]) chỉ cho phép chính chủ sở hữu bản ghi thực hiện các thao tác CRUD, hoặc @auth(rules: [{ allow: owner, operations: [create, delete, update] }]) cho phép chủ sở hữu cập nhật dữ liệu trong khi cấp quyền đọc công khai cho các người dùng đã xác thực khác.

4. Quy trình xử lý ca sử dụng Đặt lịch khám (Booking Appointment) diễn ra qua các bước nào?

Bệnh nhân truy cập trang hồ sơ của bác sĩ -> Chọn ngày dự định khám -> Hệ thống gửi ngày khám lên máy chủ và truy xuất lịch rảnh của bác sĩ để hiển thị cho người bệnh -> Bệnh nhân chọn ca khám (session) phù hợp -> Hệ thống gửi yêu cầu lên máy chủ, lưu thông tin vào cơ sở dữ liệu DynamoDB và phát thông báo lịch hẹn mới cho bác sĩ. Trường hợp ngày đó bác sĩ không làm việc hoặc đã kín lịch, hệ thống sẽ trả về thông báo không thể đặt lịch.


Kết luận

Khóa luận tốt nghiệp "Design and build a website for Medical Doctor Office Management" của sinh viên Nguyễn Quang Trường đã giải quyết bài toán kết nối trực tuyến giữa bệnh nhân và các bác sĩ độc lập, hỗ trợ quy trình đặt lịch và quản lý văn phòng khám bệnh hiệu quả. Đề tài đã xây dựng và triển khai thành công một website hoạt động hoàn chỉnh trên nền tảng điện toán đám mây hiện đại sử dụng Angular, AWS Amplify, GraphQL, Amazon Cognito và DynamoDB. Mặc dù sản phẩm cần được bổ sung kiểm thử phần mềm, tăng cường tối ưu hóa SEO và nâng cấp thuật toán tìm kiếm, công trình vẫn mang lại giá trị tham khảo rõ ràng về mặt phân tích thiết kế ca sử dụng và kiến trúc ứng dụng web serverless trong lĩnh vực y tế.