Giới thiệu dự án

Trong bối cảnh đại dịch COVID-19 bùng phát mạnh tại tỉnh Bình Dương từ năm 2021, hệ thống quản lý tiêm chủng thủ công bằng giấy tờ đã bộc lộ hàng loạt điểm yếu nghiêm trọng: người dân phải xếp hàng chờ đợi, điền tay vào phiếu đăng ký và tờ khai y tế tại điểm tiêm, tạo ra nguy cơ lây lan dịch bệnh trong chính môi trường y tế. Nhiều trường hợp nhận được Giấy chứng nhận tiêm chủng sai thông tin hoặc không nhận được sau nhiều tuần. Các cơ sở y tế cơ sở vẫn đang vận hành toàn bộ nghiệp vụ quản lý hồ sơ, thống kê và báo cáo trên Microsoft WordMicrosoft Excel — những công cụ văn phòng hoàn toàn không được thiết kế cho quy trình y tế chuyên sâu.

Đề tài "Xây dựng phần mềm quản lý hồ sơ tiêm vaccine" do nhóm sinh viên Trương Việt Hòa và Vũ Mạnh Quỳnh thực hiện tại Khoa Công nghệ Thông tin, Robot và Trí tuệ Nhân tạo — Đại học Bình Dương (ĐHBD), dưới sự hướng dẫn của giảng viên Huỳnh Anh Tuấn, nhằm giải quyết trực tiếp bài toán này thông qua một hệ thống phần mềm kép: ứng dụng mobile dành cho người dân và ứng dụng web dành cho đơn vị tổ chức tiêm chủng.

Mục tiêu cụ thể của dự án:

  1. Số hóa toàn bộ quy trình đăng ký tiêm chủng từ khai báo thông tin cá nhân, khai báo y tế đến phát hành mã QR cá nhân.
  2. Giảm thiểu thời gian chờ đợi tại điểm tiêm bằng cơ chế check-in qua mã QR.
  3. Quản lý tập trung hồ sơ khám sàng lọc, kết quả tiêm chủng và lịch sử tiêm của từng công dân.
  4. Cung cấp công cụ lập kế hoạch đợt tiêm, kiểm soát số lượng người đăng ký và xuất báo cáo thống kê theo thời gian thực.
  5. Triển khai thử nghiệm trên môi trường cloud Microsoft Azure cho một cơ sở y tế thực tế.

Phạm vi: Hệ thống phục vụ một đơn vị y tế cơ sở, bao phủ toàn bộ vòng đời của một đợt tiêm chủng từ lập kế hoạch đến thống kê báo cáo. Giới hạn: Phiên bản hiện tại chưa tích hợp thanh toán trực tuyến và chưa hỗ trợ liên thông dữ liệu giữa nhiều cơ sở y tế.


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

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

Giải pháp Ưu điểm Nhược điểm
Microsoft Word/Excel (hiện tại) Quen thuộc, không cần đào tạo Không tự động hóa, lỗi nhập liệu cao, khó tìm kiếm
App Sổ sức khỏe điện tử (quốc gia) Phổ biến, có dữ liệu toàn quốc Không quản lý được nghiệp vụ cơ sở y tế địa phương
Website tiemchungcovid19.gov.vn Quy mô quốc gia, phủ rộng Không có chức năng quét QR check-in tại điểm tiêm
Giải pháp đề xuất Toàn diện, tích hợp QR, phù hợp cơ sở Phạm vi một đơn vị y tế

Phân tích yêu cầu theo MoSCoW:

  • Must have: Đăng ký tiêm, khai báo y tế, mã QR cá nhân, khám sàng lọc, cập nhật kết quả tiêm, lịch sử tiêm.
  • Should have: Thông báo đẩy (push notification), quản lý tài khoản nhân viên y tế, xuất phiếu chứng nhận PDF.
  • Could have: Thống kê biểu đồ trực quan, quản lý bác sĩ theo ca.
  • Won't have (v1): Tích hợp thanh toán, liên thông đa cơ sở.

Gap analysis: Khoảng trống lớn nhất là thiếu cơ chế check-in tự động bằng QR và quản lý trạng thái theo từng bước quy trình (đăng ký → sàng lọc → tiêm → xác nhận).

Thiết kế hệ thống

Hệ thống được xây dựng trên kiến trúc Client-Server theo mô hình MVC (Model-View-Controller), triển khai trên nền tảng đám mây Microsoft Azure.

Technology Stack:

Tầng Công nghệ Phiên bản
Backend API Laravel (PHP Framework) Laravel 8.x / PHP 8.0
Web Frontend JavaScript, Blade Template ECMAScript 2016+
Mobile App Flutter + Dart Flutter 2.x / Dart 2.13
Cơ sở dữ liệu Microsoft SQL Server SQL Server 2019
Thiết kế hệ thống IBM Rational Rose, MS Visio 2019
IDE Visual Studio Code, Android Studio
Cloud Microsoft Azure

Bảo mật:

  • Laravel tích hợp PDO chống SQL Injection.
  • Cơ chế CSRF (Cross-site Request Forgery) token ẩn trong mọi form request.
  • Xác thực tài khoản bằng session-based authentication phân quyền theo vai trò: Admin, Nhân viên y tế, Bác sĩ, Công dân.

Thiết kế CSDL — 13 bảng chính:

-- Các bảng entity chính trong SQL Server 2019
NhanSu        -- Nhân sự đơn vị y tế
CongDan       -- Thông tin công dân đăng ký
BacSi         -- Thông tin bác sĩ sàng lọc
NhanVienYTe   -- Nhân viên thực hiện tiêm
DotTiemChung  -- Quản lý đợt tiêm (ngày, số lượng tối đa)
DanhSachDangKyTiem -- Hồ sơ đăng ký từng lượt
PhieuKhamSangLoc   -- Kết quả khám sàng lọc
PhieuTiemChung     -- Phiếu chứng nhận sau tiêm
ToKhaiYTe          -- Bệnh nền, dị ứng, tình trạng sức khỏe
LichSuTiem         -- Lịch sử toàn bộ lượt tiêm
XaPhuong / QuanHuyen / TinhThanh -- Địa danh phân cấp 3 tầng

Mã QR được tạo duy nhất theo công thức: 1 mã QR = 1 loại vaccine = 1 lần sử dụng, đảm bảo tính toàn vẹn và tránh lạm dụng.

Methodology

Dự án áp dụng phương pháp hướng đối tượng (OOP) với thiết kế bottom-up kết hợp mô hình Agile linh hoạt, phù hợp với nhóm nhỏ 2 sinh viên có thời gian triển khai giới hạn 15 tuần (30/3/2022 – 11/7/2022).

Timeline dự án:

Giai đoạn Thời gian Deliverable
Phân tích yêu cầu 30/3 – 24/4/2022 Tài liệu yêu cầu, khảo sát hiện trạng
Thiết kế hệ thống 24/4 – 16/5/2022 Use-case diagram, Class diagram
Thiết kế chi tiết 17/5 – 28/5/2022 Sequence diagram, ERD
Phát triển 29/5 – 25/6/2022 Database, Stored Procedures, Code
Kiểm thử & hoàn thiện 26/6 – 10/7/2022 Test report, báo cáo hoàn chỉnh

Implementation và kết quả

Development process

Phân chia module phát triển:

  • Trương Việt Hòa: Use-case modeling, Class diagram, nhập dữ liệu database, viết báo cáo, kiểm thử phần mềm.
  • Vũ Mạnh Quỳnh: Thiết kế giao diện, thiết kế database, viết Stored Procedures, cài đặt phần mềm, hoàn thiện báo cáo.

Stored Procedures — giải pháp tối ưu hiệu năng CSDL:

Toàn bộ logic nghiệp vụ tương tác với SQL Server được đóng gói trong Stored Procedures, giúp giảm network overhead, tăng tốc truy vấn nhờ query plan được biên dịch sẵn, và bảo vệ cấu trúc bảng khỏi ứng dụng client. Các SP chính bao gồm: SP đăng ký đợt tiêm, SP cập nhật kết quả khám sàng lọc, SP xuất lịch sử tiêm, SP thống kê theo đợt.

Kiến trúc Flutter — Widget-based UI:

// Ví dụ cấu trúc widget quản lý trạng thái đăng ký tiêm
class DangKyTiemScreen extends StatefulWidget {
  @override
  _DangKyTiemScreenState createState() => _DangKyTiemScreenState();
}
// StatefulWidget quản lý các bước: khai báo thông tin → khai báo y tế → xác nhận → nhận QR

Laravel Routes & API Design (RESTful):

// Nhóm route cho đơn vị y tế (web)
Route::middleware(['auth', 'role:admin'])->group(function () {
    Route::get('/ke-hoach', [KeHoachController::class, 'index']);
    Route::post('/quet-qr', [QRController::class, 'scan']);
    Route::put('/sang-loc/{id}', [SangLocController::class, 'update']);
    Route::get('/bao-cao', [BaoCaoController::class, 'thongKe']);
});

Testing và validation

Kiểm thử được thực hiện trên môi trường local trước khi deploy lên Azure:

  • Functional testing: Toàn bộ use case (tạo tài khoản mobile, đăng nhập, đăng ký tiêm, lập kế hoạch, quét QR, cập nhật sàng lọc) được kiểm thử theo kịch bản đặc tả.
  • Database validation: Sau mỗi tác vụ (đăng ký tài khoản, đăng ký đợt tiêm) dữ liệu được xác nhận trực tiếp trong SQL Server Management Studio — kết quả phản ánh đúng trong database.
  • QR Code validation: Mã QR được xác nhận chỉ sử dụng được một lần; lần quét thứ hai trả về thông báo lỗi hợp lệ.

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

Ứng dụng mobile (Flutter) — Chức năng hoàn chỉnh:

  • Đăng ký tài khoản và xác thực danh tính bằng CMND/CCCD.
  • Khai báo y tế (bệnh nền, dị ứng, tình trạng sức khỏe).
  • Ký Giấy đồng thuận điện tử và nhận mã QR cá nhân.
  • Xem lịch sử tiêm, trạng thái tiêm theo đợt.
  • Nhận thông báo về lịch tiêm, địa điểm tiêm.

Ứng dụng web (Laravel) — Chức năng hoàn chỉnh:

  • Lập kế hoạch đợt tiêm: chọn loại vaccine, ngày tiêm, giới hạn số lượng đăng ký.
  • Quét mã QR check-in và lấy đầy đủ hồ sơ công dân.
  • Cập nhật và in Phiếu khám sàng lọc; cập nhật và in Phiếu chứng nhận tiêm vaccine.
  • Quản lý danh sách công dân, bác sĩ, nhân viên y tế.
  • Thống kê, báo cáo tình hình tiêm chủng theo đợt, theo ngày.

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

1. Cơ chế QR Code một lần dùng (Single-use QR): Khác với các hệ thống QR thông thường, mã QR trong hệ thống này được liên kết chặt chẽ với id_dang_ky, loai_vaccine và trạng thái sử dụng. Sau khi quét thành công, trạng thái tự động chuyển sang đã check-in, ngăn chặn hoàn toàn việc sử dụng lại.

2. Quy trình số hóa liền mạch 5 bước: Hệ thống là giải pháp đầu tiên tại tỉnh Bình Dương tích hợp toàn bộ vòng đời tiêm chủng (Đăng ký → Khai báo y tế → Check-in QR → Sàng lọc → Chứng nhận) trong một nền tảng duy nhất.

So sánh với giải pháp hiện có:

Tiêu chí Word/Excel Sổ sức khỏe điện tử Hệ thống đề xuất
Check-in QR tại điểm
Quản lý sàng lọc
In phiếu chứng nhận Thủ công ✓ Tự động
Lập kế hoạch đợt tiêm
Thống kê thời gian thực Hạn chế
Cross-platform mobile Android/iOS riêng ✓ Flutter đa nền tảng

3. Đa nền tảng với codebase duy nhất: Sử dụng Flutter cho phép triển khai cùng lúc trên iOS và Android từ một codebase Dart duy nhất, giảm ước tính ~40% chi phí phát triển so với xây dựng hai ứng dụng native riêng biệt.


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

Kịch bản sử dụng thực tế:

  • Kịch bản 1 — Công dân đăng ký online: Người dân tải app, nhập CMND, điền tờ khai y tế, nhận QR trên điện thoại → đến điểm tiêm, nhân viên quét QR, thông tin hiển thị ngay trên màn hình web → bác sĩ sàng lọc cập nhật kết quả → sau tiêm hệ thống phát Phiếu chứng nhận in sẵn thông tin.

  • Kịch bản 2 — Quản lý đợt tiêm: Admin đặt giới hạn 200 người/đợt, sau khi đủ số lượng hệ thống tự đóng đăng ký; ngày tiêm, nhân viên tra cứu danh sách đã đăng ký và xuất báo cáo ngay sau buổi tiêm.

Yêu cầu triển khai:

  • Server: Microsoft Azure (Web App Service + SQL Database).
  • Client mobile: Flutter App (Android 5.0+ / iOS 12+).
  • Trình duyệt web: Chrome 90+, Firefox 88+.

Phân tích khả năng mở rộng: Kiến trúc client-server với Laravel backend cho phép scale horizontal (thêm server) khi số lượng cơ sở y tế tăng. SQL Server hỗ trợ phân vùng bảng (table partitioning) khi hồ sơ vượt triệu bản ghi.


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

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

  • Hệ thống chưa liên thông dữ liệu giữa nhiều đơn vị y tế — mỗi đơn vị là một instance độc lập.
  • Laravel Blade Template phía web chưa áp dụng SPA (Single Page Application), gây reload trang trong một số thao tác.
  • Chưa có cơ chế backup tự động dữ liệu SQL Server trên Azure.
  • Giao diện web chưa tối ưu hoàn toàn cho thiết bị di động (responsive).

Hướng phát triển tiếp theo:

  • Tích hợp API kết nối với hệ thống Sổ sức khỏe điện tử quốc gia.
  • Nâng cấp backend sang microservice architecture để phục vụ đa đơn vị y tế đồng thời.
  • Bổ sung module AI/ML phân tích xu hướng tiêm chủng và dự báo nhu cầu vaccine.
  • Tích hợp eID (Căn cước công dân gắn chip) thay thế nhập liệu thủ công.
  • Triển khai CI/CD pipeline trên Azure DevOps để tự động hóa build và deploy.

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

  • Người dân: Giảm thời gian chờ đợi tại điểm tiêm; không cần điền giấy tờ; theo dõi lịch sử và chứng nhận tiêm chủng mọi lúc, mọi nơi qua smartphone.
  • Nhân viên y tế & bác sĩ: Tra cứu hồ sơ tức thì qua QR thay vì lật giấy; cập nhật kết quả sàng lọc trực tiếp trên màn hình; xuất báo cáo đợt tiêm chỉ vài cú click.
  • Quản lý đơn vị y tế: Kiểm soát số lượng đăng ký realtime; thống kê đầy đủ theo ngày/đợt để báo cáo lên cấp trên.
  • Sinh viên CNTT: Codebase thực tiễn với Laravel MVC + Flutter cross-platform + SQL Server Stored Procedures — bộ ba công nghệ phổ biến trong thị trường tuyển dụng Việt Nam.
  • Nhà nghiên cứu: Mô hình số hóa quy trình y tế cấp cơ sở có thể nhân rộng cho các lĩnh vực y tế khác (khám bệnh định kỳ, quản lý bệnh mãn tính).

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

1. Yêu cầu kỹ thuật để triển khai hệ thống? Server chạy PHP 8.0+, SQL Server 2019, kết nối internet ổn định. Có thể deploy trên Azure App Service (B1 tier) cho quy mô một cơ sở y tế ~500 người dùng.

2. Giới hạn số lượng người dùng đồng thời? Phiên bản hiện tại được kiểm thử ở quy mô một cơ sở. Để scale lên nhiều cơ sở, cần nâng cấp Azure tier và refactor sang kiến trúc microservice với load balancer.

3. Tích hợp với hệ thống hiện có của bệnh viện như thế nào? Laravel cung cấp RESTful API có thể kết nối với HIS (Hospital Information System) hoặc hệ thống quốc gia thông qua chuẩn HL7/FHIR trong phiên bản nâng cấp.

4. Chi phí bảo trì và hỗ trợ? Chi phí chủ yếu là Azure hosting (~20–50 USD/tháng cho quy mô nhỏ) và bảo trì code định kỳ. Không phát sinh chi phí bản quyền do toàn bộ stack (Laravel, Flutter, VS Code) là mã nguồn mở.

5. Thời gian ROI (hoàn vốn)? Lợi ích định lượng: tiết kiệm ước tính 2–3 giờ nhân công/ngày tại mỗi cơ sở cho công tác thống kê, báo cáo và tìm kiếm hồ sơ. ROI dương dự kiến trong vòng 3–6 tháng vận hành.


Kết luận

Đề tài "Xây dựng phần mềm quản lý hồ sơ tiêm vaccine" đã hoàn thành mục tiêu đề ra trong thời hạn 15 tuần với hai sản phẩm phần mềm hoạt động thực tế: ứng dụng mobile Flutter đa nền tảng và ứng dụng web Laravel, kết nối qua SQL Server 2019 và triển khai trên Azure.

Đóng góp kỹ thuật nổi bật bao gồm cơ chế QR Code đơn dùng đảm bảo toàn vẹn dữ liệu, quy trình số hóa end-to-end từ đăng ký đến chứng nhận tiêm, và kiến trúc MVC phân tầng rõ ràng với Stored Procedures tối ưu hiệu năng. Hệ thống thực sự thay thế được toàn bộ quy trình giấy tờ thủ công, góp phần giảm nguy cơ tập trung đông người trong bối cảnh dịch bệnh và nâng cao chất lượng quản lý y tế cấp cơ sở.

Với nền tảng kỹ thuật vững chắc và thiết kế có khả năng mở rộng, dự án hoàn toàn có tiềm năng được nhân rộng ra nhiều đơn vị y tế tại Bình Dương và các tỉnh thành lân cận, đồng thời là nền tảng cho các nghiên cứu tiếp theo về số hóa hệ thống y tế cộng đồng tại Việt Nam.