📚 Tài Liệu Hệ Thống
Kiến trúc, hiệu năng, công nghệ và phân tích chi phí
Live Database Stats (query: 4139.32ms)
54,720
Tổng lượt khám
5,000
Bệnh nhân
306,187
Tổng records
123 MB
Database size
Database size = 113 MB (tables + indexes) + 10 MB (system overhead) = 123 MB — truy vấn trực tiếp bằng pg_database_size()
⚡ Báo Cáo Hiệu Năng
6.8ms
Nhanh nhất
317ms
Chậm nhất
57.9ms
Trung bình
317.4ms
P90
< 50ms
8/10 queries
| RPC Function | Execution Time | Grade | Visual |
|---|---|---|---|
| fn_hourly_distribution | 6.8 ms | A+ | 6.8 ms |
| fn_top_diagnoses | 11.7 ms | A+ | 11.7 ms |
| fn_revenue_by_period | 19.6 ms | A | 19.6 ms |
| fn_revenue_by_department | 21.5 ms | A | 21.5 ms |
| fn_top_medicines | 25.7 ms | A | 25.7 ms |
| fn_doctor_performance | 28.3 ms | A | 28.3 ms |
| fn_top_services | 32.3 ms | A | 32.3 ms |
| fn_insurance_report | 42.3 ms | A | 42.3 ms |
| fn_dashboard_summary | 73.3 ms | B+ | 73.3 ms |
| fn_patient_statistics | 317.4 ms | B | 317.4 ms |
📝 Ghi chú: Benchmark thực hiện ngày 28/02/2026 bằng
EXPLAIN ANALYZE trên PostgreSQL với 54,720 lượt khám. Thời gian là Execution Time thuần (không bao gồm network latency ~100ms).🗄️ Database Schema
10
Bảng dữ liệu
42
Indexes
123 MB
Tổng dung lượng
| Bảng | Số dòng | Kích thước | Vai trò |
|---|---|---|---|
| visits | 54,720 | 55 MB | Lượt khám |
| visit_services | 104,156 | 20 MB | Chi tiết dịch vụ |
| prescriptions | 89,896 | 20 MB | Đơn thuốc |
| invoices | 52,291 | 17 MB | Hóa đơn |
| patients | 5,000 | 1.5 MB | Bệnh nhân |
| services | 54 | 72 KB | Danh mục dịch vụ |
| icd_codes | 40 | 48 KB | Mã bệnh ICD-10 |
| medicines | 40 | 48 KB | Danh mục thuốc |
| doctors | 20 | 56 KB | Bác sĩ |
| departments | 10 | 48 KB | Khoa/Phòng |
| TỔNG | ~306,000 | 113 MB | + 10 MB system = 123 MB |
Entity Relationship
departments ─┬── doctors
│ │
│ ▼
└── visits ◄── patients
│
┌─────────┼─────────┐
▼ ▼ ▼
visit_services prescriptions invoices
│ │
▼ ▼
services medicines
icd_codes ◄── visits
🏗️ Kiến Trúc Hệ Thống
🌐
Browser
HTML + minimal JS (Recharts)
⬇️ Server-rendered HTML
⚛️
Next.js 16 Server
Server Components → Promise.all(4 queries) → HTML render
⬇️ HTTPS REST API
🔌
Supabase
PostgREST → PgBouncer → Connection Pool
⬇️ SQL RPC call
🐘
PostgreSQL
10 RPC Functions → Aggregated JSON → Single response
⚛️
Server Components
Data fetching chạy trên server, client nhận HTML hoàn chỉnh. Zero client-side data loading.
⚡
Parallel Queries
Promise.all() gọi 4 RPC đồng thời. Dashboard load = max(query) + 1 RTT.
🔧
RPC Functions
Logic aggregate tại PostgreSQL. 1 API call = 1 kết quả JSON đầy đủ, giảm bandwidth >99%.
🔗
Connection Pooling
PgBouncer transaction mode qua port 6543. Tối ưu connection reuse.
🛠️ Công Nghệ Sử Dụng
| Công nghệ | Vai trò | Lý do chọn |
|---|---|---|
| Next.js 16 | Frontend Framework | Server Components, Streaming SSR, #1 React Framework |
| Supabase | Backend-as-a-Service | PostgreSQL + Auth + API + Realtime, 100% Open Source |
| PostgreSQL | Database | #1 Open Source DB, ACID, RLS, Stored Procedures |
| TypeScript | Language | Type-safe end-to-end, compiler bắt lỗi trước deploy |
| Recharts | Charts | React-native charting, responsive, composable |
| Tailwind CSS | Styling | Utility-first, dark mode, responsive |
| shadcn/ui | UI Components | Accessible, customizable, Radix-based |
🏆
PostgreSQL
#1 Open Source DB — DB-Engines 2026
⚛️
Next.js
#1 React Framework — npm downloads
🟢
Supabase
100% Open Source — No vendor lock-in
🔒 Bảo Mật
| Layer | Tính năng | Trạng thái |
|---|---|---|
| Network | SSL/TLS encryption mặc định | ✅ |
| Authentication | JWT + MFA (Supabase Auth) | ✅ |
| Authorization | Row Level Security (RLS) | ✅ |
| Data | AES-256 encryption at rest | ✅ |
| API | Rate limiting + API key rotation | ✅ |
| Backup | Daily auto backup + PITR | ✅ |
| Compliance | SOC 2 Type II certified | ✅ |
🏥 Tuân thủ Y tế: Hỗ trợ Thông tư 46/2018/TT-BYT (bảo mật dữ liệu y tế), Thông tư 54/2017/TT-BYT (CNTT trong y tế). Có thể self-host trên server nội bộ (Supabase = 100% open source).
💰 Phân Tích Chi Phí (TCO 3 năm)
| Giải pháp | Năm 1 (tr VNĐ) | 3 Năm (tr VNĐ) | Dashboard Load |
|---|---|---|---|
| Truyền thống (Java/.NET + Oracle) | 1,257 | 2,371 | 2-5s |
| ★Supabase + Next.js (hệ thống này) | 358 | 634 | ~0.5s |
Truyền thống
2,371 tr
Supabase+Next
634 tr
Tiết kiệm 73% — 1,737 triệu VNĐ trong 3 năm
Chi phí Supabase hàng tháng
Free
$0
500MB DB
PoC/Demo
Pro
$25
8GB DB
Phòng khám nhỏ-vừa
Team
$599
30GB DB
Bệnh viện
Enterprise
Custom
Custom DB
Chuỗi BV
📈 Lộ Trình Mở Rộng
| Giai đoạn | Visits/năm | Database | Chi phí | Giải pháp |
|---|---|---|---|---|
| ●Phòng khám nhỏ | < 50K/năm | < 1 GB | $0-25/tháng | Supabase Free/Pro |
| Phòng khám vừa | 50-200K/năm | 1-5 GB | $45-75/tháng | Supabase Pro + Vercel Pro |
| Bệnh viện | 200K-1M/năm | 5-30 GB | $600-1000/tháng | Supabase Team |
| Chuỗi phòng khám | 1M+/năm | 30+ GB | Custom | Enterprise / Self-hosted |
⚙️ 10 RPC Functions
| # | Function | Mô tả | Trang |
|---|---|---|---|
| 1 | fn_dashboard_summary | Tổng DT, lượt khám, BN, BHYT | Tổng quan |
| 2 | fn_revenue_by_period | DT theo ngày/tuần/tháng | Doanh thu |
| 3 | fn_revenue_by_department | DT theo khoa | Tổng quan |
| 4 | fn_patient_statistics | Phân bổ BN đa chiều | Bệnh nhân |
| 5 | fn_doctor_performance | Hiệu suất bác sĩ | Bác sĩ |
| 6 | fn_top_services | Top dịch vụ sử dụng | Dịch vụ |
| 7 | fn_insurance_report | Báo cáo BHYT chi tiết | BHYT |
| 8 | fn_top_diagnoses | Top chẩn đoán ICD-10 | Dịch vụ |
| 9 | fn_hourly_distribution | Phân bổ theo giờ | Tổng quan |
| 10 | fn_top_medicines | Top thuốc kê đơn | Dịch vụ |
Benchmark thực hiện ngày 28/02/2026 | Database: Supabase PostgreSQL (ap-south-1) | Dữ liệu xác minh bằng
pg_database_size(), EXPLAIN ANALYZE, pg_stat_user_tables