[Open Source] #188 - MedAssist: Hệ thống quản trị và dự báo tiêu thụ dược phẩm cá nhân với kiến trúc Node.js, SQLite và cơ chế lập lịch thông báo tự động
Việc quản lý lịch trình uống thuốc phức tạp và theo dõi lượng tồn kho dược phẩm thường là một gánh nặng đối với những người mắc bệnh mãn tính hoặc người cao tuổi. MedAssist ra đời như một giải pháp tự lưu trữ (self-hosted) tinh gọn, giúp tự động hóa việc tính toán tồn kho, dự báo ngày hết thuốc và hỗ trợ lập kế hoạch y tế cho những chuyến đi xa. Thay vì dựa vào các ứng dụng đám mây có thể xâm phạm quyền riêng tư dữ liệu y tế, MedAssist cho phép người dùng làm chủ hoàn toàn thông tin sức khỏe của mình trên máy chủ gia đình.
Dưới góc độ kỹ thuật, MedAssist là một minh chứng xuất sắc về việc ứng dụng Node.js/Express, kỹ thuật lưu trữ JSON-in-SQL và thuật toán Dự báo tiêu thụ (Consumption Forecasting) linh hoạt.
Github: https://github.com/v8u7/med-assist
🛠️ 1. Nền tảng công nghệ: Đơn giản hóa để Bền bỉ
Dự án ưu tiên tính gọn nhẹ để có thể vận hành hoàn hảo trên các thiết bị tài nguyên thấp như Raspberry Pi hoặc Synology NAS:
- Runtime Engine (Node.js & Express): Sử dụng mô hình Non-blocking I/O của Node.js để xử lý mượt mà các yêu cầu tính toán logic và phục vụ giao diện người dùng.
- Persistent Storage (SQLite3): Lựa chọn SQLite làm "trái tim" dữ liệu giúp triệt tiêu sự phức tạp của việc quản trị server DB. Toàn bộ thông tin từ lịch sử uống thuốc đến cấu hình SMTP được gói gọn trong một tệp tin
.dbduy nhất, cực kỳ thuận tiện cho việc sao lưu. - Frontend Engineering: Sử dụng công nghệ Web thuần (HTML/JS/CSS) giúp ứng dụng có tốc độ tải trang gần như tức thì. Tích hợp thư viện Flatpickr để mang lại trải nghiệm chọn thời gian mượt mà trên cả máy tính và điện thoại.
- Infrastructure (Dockerized): Cung cấp giải pháp đóng gói toàn diện qua Docker, hỗ trợ người dùng triển khai "One-click" mà không cần quan tâm đến các phụ thuộc môi trường.
🏗️ 2. Trụ cột kiến trúc: Thực dụng và Linh hoạt
Kiến trúc của MedAssist tập trung vào việc giải quyết bài toán nghiệp vụ một cách hiệu quả nhất:
- Hybrid Schema Design: Để xử lý cấu trúc lịch trình uống thuốc phức tạp (ví dụ: một loại thuốc uống vào nhiều khung giờ khác nhau), MedAssist sử dụng kỹ thuật lưu trữ chuỗi JSON trực tiếp vào cột cơ sở dữ liệu. Cách tiếp cận này giúp giữ cho Schema phẳng và đơn giản, đồng thời linh hoạt cho việc mở rộng các thuộc tính lịch trình sau này.
- On-the-fly Calculation Engine: Thay vì cập nhật tồn kho vào database mỗi giây (dễ gây sai số nếu hệ thống bị gián đoạn), MedAssist thực hiện tính toán "động" ngay khi người dùng truy cập Dashboard. Số lượng thuốc hiện tại được tính bằng:
Lượng thuốc ban đầu-Tổng lượng đã tiêu thụ dựa trên lịch trình. - Mobile-First Responsive Design: Giao diện được thiết kế đặc thù cho các thiết bị cầm tay, giúp người dùng dễ dàng kiểm tra tủ thuốc và cập nhật thông tin ngay tại chỗ.
🔄 3. Workflow: Vòng đời từ Nhập thuốc đến Cảnh báo tự động (Sequence Diagram)
Sơ đồ mô tả quy trình hệ thống điều phối dữ liệu và gửi thông báo nhắc nhở mua thêm thuốc:

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Consumption Simulation Algorithm: Trong hàm
fetchAndCalculateMedications, hệ thống thực hiện một vòng lặp mô phỏng thời gian tương lai (tối đa 365 ngày). Thuật toán này tự động trừ dần số lượng thuốc ảo dựa trên chu kỳ uống (mỗi X ngày) để xác định chính xác thời điểm thuốc sẽ cạn kiệt, cho phép cảnh báo người dùng trước khi quá muộn. - Travel Planner Logic: Một tính năng kỹ thuật thông minh cho phép người dùng tính toán lượng thuốc cần mang theo cho một chuyến đi cụ thể. Backend sẽ tính toán tổng nhu cầu trong khoảng
startDateđếnendDatevà đối chiếu với kho hiện tại để đưa ra khuyến nghị "Đủ" hoặc "Thiếu". - Smart Notification Throttling: Để tránh gây phiền toái (Email Spam), MedAssist tích hợp tham số
email_delay_days. Nếu cảnh báo đã được gửi, hệ thống sẽ đợi một khoảng thời gian cấu hình trước khi gửi nhắc nhở tiếp theo. - Universal Timezone Handling: Sử dụng các chuẩn UTC và ISO String để đồng bộ hóa thời gian uống thuốc, đảm bảo ứng dụng hoạt động chính xác bất kể vị trí địa lý của máy chủ và người dùng.
⚖️ 5. So sánh chiến lược
| Tiêu chí | MedAssist | Medisafe (SaaS) | Excel / Manual |
|---|---|---|---|
| Quyền sở hữu dữ liệu | Tuyệt đối (Self-host) | Bị kiểm soát | Tuyệt đối |
| Dự báo tồn kho | Tự động (Thuật toán lặp) | Có | Thủ công |
| Lập kế hoạch du lịch | Có chuyên biệt | Không | Tự tính |
| Quyền riêng tư | Rất cao | Trung bình | Tuyệt đối |
| Chi phí | Miễn phí | Trả phí tính năng | Miễn phí |
✅ Kết luận: Tại sao MedAssist là trợ thủ đắc lực cho gia đình?
MedAssist chứng minh rằng công nghệ có thể mang lại những giá trị thiết thực nhất khi được thiết kế đúng mục đích. Bằng cách tập trung vào khả năng dự báo và lập kế hoạch, kết hợp với sự bền bỉ của SQLite, dự án mang lại sự yên tâm tuyệt đối cho người dùng trong việc quản lý dược phẩm thiết yếu.
Đối với các kỹ sư Backend, nghiên cứu dự án này mang lại giá trị về:
- Kỹ thuật xây dựng Logic tính toán dự báo từ dữ liệu lịch trình.
- Tư duy thiết kế Kiến trúc Monolith tinh gọn cho các ứng dụng cá nhân.
- Cách quản lý Task Scheduling hiệu quả trong Node.js.
All rights reserved